Порядка года или двух назад столкнулся с проблемой.
ПЛК использовал таймер в блоке, вызываемом при конкретном условии (каком именно не помню, ну да это и не важно).
Язык LD, но насколько я понял в остальных МЭК языках та же картина.
Примерно так:
В случае, если таймер начинал работать, и после этого отключался по If_CALL (вызов блока) — начинались странности.
Таймер продолжал считать в отключенном блоке.
Причем на него не влиял даже вход разрешения таймера If_TMR, вызывая этим резонный WTF.
Тогда проверили на Proficy (General Electric), Step7 (Siemens) и ISaGRAF — везде картина была одинаковой.
После чего наложили у себя в фирме вето на использование подобных конструкций.
Но вообще ситуация отнюдь не самая приятная.
И другие варианты решения (отключается блок и таймер останавливается, отключается блок и таймер сбрасывается) тоже не особо хороши.
Пример ошибки из-за данного решения
Вызывается блок какого-либо устройства, например основного, при выборе из двух — основного и резервного.
На устройство подается сигнал с какого-то таймера, допустим отсекающего дребезг с кнопки команды.
Если после подачи команды переключишься на резерв, отключив блок основного устройства, то снять с него команду будет невозможно.
У нас было что-то в этом духе, хорошо еще, что на стенде.
В связи с чем вопрос / просьба:
Можно ли проверить эту же конструкцию сейчас на этих и прочих ПЛК?
Хотя бы примерно представлять как обстоят дела — вдруг стало лучше?
А то порой приходится работать с разными производителями и другое решение могло-бы порой неплохо облегчить жизнь.
Post Scriptum
Ни в коем случае не реклама и не антиреклама.
И для того и для другого это слишком мелкий нюанс :)
Но достаточно важный для программистов.
Если с вопросом что-то не так — прошу извинить, я тут недавно и пока не всё понимаю…
Post Post Scriptum
Или куда мне с этим…
Может просто в пост перенести?