Petrix
Junior Member / Новичок
Участник № / Member № 3662
отправлено / posted
2 программы запивывают в INPUT одного канала. Одна программа-счетчик работает с циклом пересчета CALC, а вторая (устанавливает начальное значение) запускается нажатием кнопки. При нажатии кнопки реальное значение не всегда правильно устанавливается, обычно надо нажать кнопку 2-3 раза. Подумал про переписывание значения другой программой. На время установки отключаю программу-счетчик, но этот финт не помогает. При включении канала его значение опять переписывается программой счетчиком. Подскажите как правильно реализовать установку значения.
Сообщения / Posts 26 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Нельзя от двух независимых источников передавать значение в один канал. Конфликты неминуемы. Это не особенности Trace Mode 6, это алгоритмический нонсенс для любой прикладной программы. Должен быть программный арбитр, который отдает приоритет, например, экранной посылке перед программным счетчиком. Алгоритм функционирования арбитра определяется постановкой прикладной задачи.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Petrix
Junior Member / Новичок
Участник № / Member № 3662
отправлено / posted
1. Источники не независимы. Программа-счетчик берет реальное значение канала, увеличивает его допустим на 1 и записывает во входное значение. Другая программа должна установить начальное значение.
2. Мной полагалось, что отключение пересчета канала избавит от конфликта. Но этого не произошло. Канал программы-счетчика отключается, потом устанавливаем новое значение. То, что значение установилось видно на ГЭ привязанном к реальному значению канала. Но после пуска счетчик не получает нового значения, а продолжает увеличивать значение до установки. Я понимаю, что вы можете кэшировать значения, но при отключении канала кэш должен сбрасываться.
Сообщения / Posts 26 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Согласно стандарта IEC 61131-3 в языке FBD есть следующие соглашения: - выход любого функционального блока является статической переменной и сохраняет свое значение между вызовами программы, - вход RUN функционального блока управляет только собственной функцией блока. Если RUN<>0, то блок не пересчитывается и значение его выхода остается тем же, которое было по завершении предыдущего вызова программы, - значение выхода функционального блока, привязанного к аргументу программы, всегда передается в аргумент по завершении программы.
Этим объясняется полученный Вами эффект.
Посылаю Вам пример с двумя программами - на языках FBD и ST, каждая из которых позволяет решить Вашу задачу.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Petrix
Junior Member / Новичок
Участник № / Member № 3662