ну не совсем, речь шла конкретно о %QX2.3 (см.пост 3), а в 63-м используетеся %QD0.1.0, об одинаковости выходов речи быть не может
Вид для печати
Ну раз на булевскуя нельзя, то можно указатель на байт/слово + № бита
Код: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Р). При срабатывании условия модули и ПЛК уходят в ошибку, далее перезагрузка и перестают отвечать. Помогает сброс по питанию.
Никак не могу понять, что не так.
Вложение 80745 Вложение 80746 Вложение 80747
Проверяйте значения индексов массивов в циклах.
Если выложите проект - может кто-нибудь даже найдёт конкретную проблему
Mikhail_NNT Идея правильная!
1exan говорит верно. Скорее всего где-то есть выход за границы массивов.
Если искать лень - можно добавить специальную функцию CheckBounds, а в ней сделать вызов исключения, чтобы потом понять, где именно что случилось.
Как это сделать, было описано у меня статье со скриншотами: https://cs-cs.net/codesys-kultura-ko...icy-massivov#7 (заголовок 7)
PS. CheckBounds тормозит готовый проект. Поэтому потом её оттуда надо удалить. Или исключить из компиляции.
Скорее всего у ТС где то неправильно с копированием. Я делаю так: 1. Копирую структуру механизма во временную структуру, 2. Временная структура обрабатывается подпрограммой, 3. Копирую временную структуру в структуру механизма, и следующим элементом цикла проделываю это уже со структурой второго механизма. А как сделано у ТС надо смотреть код.
PS Глянул 2 скрин... А где у ТС входы? У меня выше описан другой способ, но суть та же..