Перед Новым годом (с неделю назад) столкнулся с багом Owen Logic.
Весь проект, к сожалению, на форуме выложить не могу, но при дублировании претензии в техподдержку обязательно прикреплю.
Проект автоматизации содержит несколько насосов, нагревателей, задвижек. Управление всем оборудованием возможно как в автоматическом режиме, так и в ручном режиме с панели оператора Weintek.
Задвижки не имеют концевиков, поэтому управляются "на доверии" - т.е. в программе используется модель задвижки, которая по длительности сигналов "открыть" и "закрыть" вычисляет позицию и срабатывание концевиков (вопросы по решениям и подбору оборудования - к проектировщику, я лишь получаю ТЗ и реализую его).
Эти задвижки открываются только перед пуском насосов для заполнения их водой. Поэтому повторяющийся код с моделью и условиями открытия-закрытия одной задвижки оформлен в макрос. По количеству задвижек программа содержит два макроса.
Каюсь - до этой поры игнорировал предупреждения о циклических связях, поэтому программа содержала 11 таких сообщений. Но при этом, внутри использованных макросов циклических связей не было.
Ошибка проявлялась следующим образом:
Поведение наблюдал как по состояниям на панели, так и на ПР по значениям переменных в режиме онлайн-отладки.
Во время ПНР и проверки исполнительных механизмов с панели оператора перевожу в ручной режим обе задвижки.
Подаю сигнал открыть или закрыть на первую задвижку - через время полного хода (45 секунд) срабатывает "концевик" модели и соответствующее реле выключается и управляющее напряжение с привода снимается.
А вот для второй задвижки срабатывание "концевика" выполняется почти сразу без выдержки времени полного хода в обоих направлениях (и открыть и закрыть).
Ситуация странная, т.к. для каждой задвижки использовал экземпляры одного и того же макроса.
Проблему решил устранением циклических связей - заменой соединительных линий на линии обратной связи.
Ошибка воспроизводилась на ПР205-230.1211.22 и двух разных OwenLogic 2.10.367 и 2.11.370 (с заменой прошивки в ПР).
Думаю, что это всё же ошибка OwenLogic, т.к. несмотря на мою небрежность к циклическим связям, макросы для двух задвижек должны были отрабатывать одинаково - т.е. при формировании состояний "задвижка открыта" или "задвижка закрыта" должно было выдерживаться время полного хода. Тем более, что для одной задвижки это работало, а для другой - нет.
После устранения всех циклических связей - ошибка ушла, т.е. макрос корректный.
Приведу внешний вид макросов в программе, чтобы показать, что все переменные подключены, не перепутаны. Назначение макросов - при поступлении запроса включения насоса перекачки воды - проверить его заполненность водой и при необходимости выполнить заполнение (открыть задвижку и включить погружной насос заполнения). Задвижки индивидуальные, а насос заполнения общий, поэтому сигнал его включения объединяется по OR.
Повторюсь, проекты для ПР и Weintek отправлю в техподдержку, т.к. не могу их опубликовать.
Но для себя сделал вывод, что предупреждения о циклических связях не столь безобидны.




Ответить с цитированием