Создание энергонезависимых переменных с привязкой к адресам памяти.
В проектах где используется панель ЧМИ в паре с одним или несколькими контроллерами возникает необходимость передачи данных в энергонезависимую память контроллера. Например, уставки или ручные настройки должны обрабатываться таким образом, чтобы данные, которые ввёл оператор сохранялись при отключении питания системы. А при следующем включении питания они должны автоматически применяться и отображаться на панели HMI.
В оборудовании HCFA общение между панелью оператора и контроллерами обычно организуется с использованием протокола Modbus TCP. Использование этого и подобных протоколов предполагает привязку данных к конкретным ячейкам в памяти, так как данные должны располагаться последовательно друг за другом для ускорения обмена. При этом, в Codesys 3.5 получается, что переменные, не привязанные к адресам можно сохранять в энергонезависимой памяти, но нельзя использовать для протокола Modbus TCP. А переменные привязанные к адресам можно использовать для обмена с панелью оператора, но они не сохраняются в Retain.
Решить данную проблему можно несколькими способами, самый простой из которых – прописать заранее привязанные в локальных таблицах переменные в таблицу PersistentVars.
Разберём этот способ на примере:
В качестве контроллера в примере будем использовать HCQ0-1100-D
Для записи данных из ячейки по адресу %MW100 в энергонезависимую память сначала надо добавить таблицу PersistentVars в наше приложение. Для этого щёлкнем правой кнопкой мыши по Application в дереве проекта и выберем Add Object -> Persistent Variables.
Далее создадим переменную в одном из POU и привяжем её к требуемой ячейке, указав атрибуты Retain и Persistent. Это можно сделать, кликнув правой кнопкой мыши на поле ввода переменных и открыть менеджер создания переменных Refactoring -> Add Variable. В открывшемся окне укажем имя, тип, адрес и отметим необходимые атрибуты. Для примера назовём переменную “save_1”, зададим 16-разрядный тип INT чтобы соответствовать размерности ячейки с адресом %MW100:
Также можно просто вручную написать Retain таблицу и прописать в ней необходимую переменную с привязкой к адресу с помощью команды прямого указания адреса AT:
VAR RETAIN PERSISTENT
Save_1 AT %MW100 : INT;
END_VAR
После создания переменной необходимо скомпилировать проект. При этом POU, в которой мы разместим нашу переменную, обязательно должна находиться в выполняемой задаче, чтобы компилятор учитывал эту переменную:
После компиляции зайдём в таблицу PersistentVars и, кликнув правой кнопкой мыши, выберем Add All Instance Paths в выпадающем меню. При этом Codesys 3.5 проанализирует скомпилированную часть проекта, найдёт все переменные, указанные как Persistent и автоматически добавит ссылки на них в энергонезависимую таблицу. В данном случае у нас отобразится ссылка на переменную “PLC_PRG.save_1”:
Теперь значение этой переменной будет сохраняться при отключении или пропадании питания. При этом, к нему можно обращаться через сетевые протоколы напрямую по адресу %MW100.
Таким образом Codesys 3.5 предоставляет широкий и гибкий инструментарий для оптимальной интеграции ПЛК HCFA в проекты с самыми разнообразными применениями.