Добрый день, уважаемые форумчане.
Я так понимаю, что никто из прочитавших вопрос не сталкивался с подобной задачей.
Поясню еще раз на примере.
Прикрепляю следующие файлы:
1. TestReadWrite.projectarchive - архив проекта панели СПК207.
2. TestReadWrite.pro - проект CoDeSys для контроллера ПЛК110-30 М02.
3. 2 рисунка.
Проекты для СПК 207 и ПЛК110 соответсвуют друг другу. В проекте контроллера настроена область Modbus(slave) с одним 0-м регистром.
В проекте СПК207 создан ФБ fbValue, код которого очень прост:
Код:
FUNCTION_BLOCK PUBLIC fbValue
VAR_INPUT
InValue : INT;
END_VAR
VAR_OUTPUT
OutValue : INT;
END_VAR
VAR
Value : INT;
InValueOld : INT;
ValueOld : INT;
END_VAR
IF InValue <> InValueOld THEN
Value := InValue;
END_IF
IF Value <> ValueOld THEN
OutValue := Value;
END_IF
InValueOld := InValue;
ValueOld := Value;
Данный код позволяет отследить изменение входной переменной и записать ее в поле Value, если же измениться поле Value, то мы его передаем на выход для записи в ПЛК.
Использовать данный механизм необходимо следующим образом (см. проект СПК):
1. Создаем в области Modbus(Master) переменную чтения. Например, rdValue.
2. Создаем в области Modbus(Master) переменную записи. Например, wrValue.
3. Создаем экземпляр ФБ fbValue. Например, если у нас имеется настройка максимальной температуры, то мы можем дать имя dbMaxTemperature.
4. Вызываем в PLC_PRG блок dbMaxTemperature, передавая на вход и выход переменные rdValue и wrValue.
5. Теперь поле dbMaxTemperature.Value содержит актуальное значение температуры. К данному полу привязываем текстовое поле на экране СПК207.
Теперь при изменении значения в контроллере с АРМа оператора (в нашем случае мы моделируем такое изменение с помощью CoDeSys), на экране СПК207 мы увидим изменение нашей переменной (см. прикрепленные рисунки). Если мы введем новое значение с СПК207, оно также будет передано в ПЛК, а затем и в АРМ.
Данный механизм работает. Вопрос в том, что для описания всего одной переменной нужно проделать много действий. Нет ли какого-либо стандартного механизма?