Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Ну раз на булевскуя нельзя, то можно указатель на байт/слово + № бита
Код:TYPE SR_ZONE : STRUCT xStart_WORD: POINTER TO WORD; xStart_Nbit: WORD; ... END_STRUCT END_TYPE glbZones[1].xStart_WORD := ADR( INPUT_WORD1); glbZones[1].xStart_Nbit := 5; #Set bit glbZones[1].xStart_WORD^ := glbZones[1].xStart_WORD^ OR SHL( 1, glbZones[1].xStart_Nbit); #Clear bit glbZones[1].xStart_WORD^ := glbZones[1].xStart_WORD^ AND ( NOT SHL( 1, glbZones[1].xStart_Nbit));
Здравствуйте, у меня вопрос, похожий с Serhioromano, с которым также не могу разобраться, что не так.
Дано: Сборочная линия автомобилей с 20-ю станциями. На каждой станции стоят световая колонна(Красный, желтый, зеленый, зуммер) и кнопочные посты (Аварийная кнопка, подтверждение).
Задача: Данные элементы выполняют однотипные действия: в зависимости от времени включаются лампы на световой колонне, и в зависимости от ситуации на станции используются кнопки.
Чтобы не писать 20 блоков и не вызывать их 20 раз в главной программе, решил это реализовать через массивы и цикл.
Написал универсальный блок управления световыми колоннами и кнопками. Далее в главной программе объявил массивы ламп световых колонн и кнопок, и вызываю данный блок в цикле 20 раз (20 сборочных станций). В соотнесении входов/выходов модулей привязываю элементы массивов.
Заливаю программу в ПЛК 210 (по ModBus TCP подключены 5 МВ210-202, 5 МУ210-403 и панель СП310Р). При срабатывании условия модули и ПЛК уходят в ошибку, далее перезагрузка и перестают отвечать. Помогает сброс по питанию.
Никак не могу понять, что не так.
ФБ световых колонн и кнопок.png Вызов ФБ в главной программе.png Пример соотнесения переменных с выходами.png
Проверяйте значения индексов массивов в циклах.
Если выложите проект - может кто-нибудь даже найдёт конкретную проблему
Mikhail_NNT Идея правильная!
1exan говорит верно. Скорее всего где-то есть выход за границы массивов.
Если искать лень - можно добавить специальную функцию CheckBounds, а в ней сделать вызов исключения, чтобы потом понять, где именно что случилось.
Как это сделать, было описано у меня статье со скриншотами: https://cs-cs.net/codesys-kultura-ko...icy-massivov#7 (заголовок 7)
PS. CheckBounds тормозит готовый проект. Поэтому потом её оттуда надо удалить. Или исключить из компиляции.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Скорее всего у ТС где то неправильно с копированием. Я делаю так: 1. Копирую структуру механизма во временную структуру, 2. Временная структура обрабатывается подпрограммой, 3. Копирую временную структуру в структуру механизма, и следующим элементом цикла проделываю это уже со структурой второго механизма. А как сделано у ТС надо смотреть код.
PS Глянул 2 скрин... А где у ТС входы? У меня выше описан другой способ, но суть та же..
Последний раз редактировалось МихаилГл; 12.12.2024 в 16:15.