Если делать бесконечный цикл, то встроенный в контроллер сторожевой таймер воспринимает это как зависание программы и просто сбрасывает контроллер по истечении заданного в конфигурации максимального времени цикла ПЛК, а сама программа по сути не работает (даже неправильно).
Если бы можно было как-то вручную задать фиксированное время цикла ПЛК, например 10 с, то тогда этот принцип, указанный Петровым, можно было бы легко продемонстрировать.
непонимаю сути Ваших претензий к ИгорюВы же сами его процитировали и именно по этому такой код работать не будет, потому что плк перезагрузится, а если убрать цикл, то выход останется всегда в ФАЛЬШ по тому что в реальные выхода, будет подаваться последнее записаное значение переменной, причем не важно что во время цикла она была постоянно ИСТИНА, а в последней строчке кода программы присвоили ей ФАЛЬШ, вот это значение и уйдет в физический выход или в модбас переменнуюона содержит бесконечный цикл
По поводу вручную задать фиксированный цикл, кто мешает, перейдите в менеджер задач и сконфигурируйте свою задачу
В приведённом тексте выбраны не самые удачные формулировки, и оттого разница между моделями программирования ускользает от читателя-новичка. На самом деле, если правильно написать подобную программу-мигалку, скажем, на SFC, то она будет полностью соответствовать тому описанию:
На месте автора я бы взял другой пример. Например, запись текущего времени в переменную и актуализация этого значения:Или с миганием:Код:// ПК: while (true) { cur_time := TIME(); Sleep(20); } (* ПЛК *) cur_time := TIME();И отсюда можно плясать о том, почему для ПЛК программа получается такой короткой. Это должно заставить думать иначе.Код:out := TIME() MOD 1000 > 500; (* опа фанкшен стайл 8-] *)
Потому что описание правильное, говорю же. Из него вообще никак не следует, что реализованная по этому алгоритму программа для ПЛК работать не будет. Она будет. С таким описанием алгоритма получается, что автор книги сделал ложный вывод и на этот ложный вывод вы хотите за уши притянуть пример неправильной программы с паузами в потоке исполнения. Такую неправильную для ПЛК программу написать очень легко, но не по этому описанию, а по его частному случаю.увы он правильный
[QUOTE=nb1979;100348]Конфигурировал, сброс произойдет в любом случае. Смысл в том, что в рамках этого одного цикла значения переменных даже один раз не успевают установится т.к. сторожевой таймер делает сброс раньше.
Вы что ребенок индиго, Вы в состоянии отследить изменения в единицы микросекунд., что так говорите
Уберите цикл и поставте счетчик после каждого изменения состояния и увидите что за цикл переменные меняются
ЗЫ в плк нет многозадачности в плане выполнения параллельно инструкций процессора, поэтому когда выполняется бесконечный цикл, контроллер не отправит в КДС свои значения, поэтому Вы в режиме онлайн не увидите ни каких изменений до сброса плк
ЗЫЫ если хотите все же увидеть эффект переключения, тогда программу надо поменять от прямых присваиваний в следующее flag:= NOT flag; и так нечетное количество раз, тогда возможно по окончанию цикла можно будет увидеть измененное состояние
Здравствуйте!
Столкнулся с проблемой. Периодически, при внесении изменений в конфигурацию, перестают работать соединения по MODBUS TCP SLAVE и MODBUS RS485 MASTER. При этом если всё вернуть как было - соединение не восстанавливается. MODBUS TCP SLAVE лечится удалением/добавлением TCP[VAR]. MODBUS RS485 MASTER не лечится даже при полном удалении ветки. Сброс и холодный сброс не помогают. Соединение с CoDeSys проходит нормально.
ПЛК-110-30-220 + МВА8 (по RS-485)
Подскажите пожалуйста в чём может быть дело и можно ли как-то ещё дистанционно решить проблему?
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru