Программирование с помощью CODESYS

Контроллер Мега12-NW.МЭК работает на операционной системе Linux и программе управления CoDeSys. Программы и конфигурации пишутся в среде программирования CoDeSys v.3.5 на языка стандарта МЭК 61131-3 и функциональных блоках. С помощью драйверов написанных для CoDeSys настраивается функционал для работы с модулями расширения и различными протоколами, такими как OPCUA, МЭК-101/104.

Для того чтобы начать работать с контроллером по программированию на языках МЭК 61131-3 необходимо скачать бесплатную среду программирования CoDeSys v.3.5 SP 16 или новее.

После установки и запуска среды программирования контроллеров CoDeSys в репозиторий устройств необходимо добавить ПЛК из файла Stingray-Cortex-Linux.devdesc.xml. Для этого в окне репозитория устройств (Рисунок 3.7.1) нажмите клавишу «Установить» и установите фильтр типа файлов «Файлы описания устройств (*.devdesc.xml)» и выберите файл 4096_16fc 0001_3.5.12.46.devdesc.xml и нажмите клавишу «Открыть», после чего ПЛК Stingray-Cortex-Linux отобразится в репозитории устройств. Далее создайте новый пустой проект, в который добавьте устройство ПЛК Stingray-Cortex-Linux.

Для разработки алгоритмов управления ПЛК требуется установить следующие библиотеки:

Библиотека Мега уже содержит в себе стандартные библиотеки, поэтому их отдельно добавлять не требуется, но для объявления стандартных функций нужно указывать дополнительное имя библиотеки, например, MEGA.Standart.TON.

Рисунок 3.7.1 - Окно репозитория устройств

Рисунок 3.7.2 – Менеджер библиотек

Для загрузки программы пользователя в ПЛК необходимо подключить компьтер кабелем Ethernet к разъёму X7 на плате контроллера Мега12-МЭК.Pro. Контроллер имеет предустановленный статический IP адрес 192.168.2.10 маска 255.255.255.0, поэтому на компьютере обязательно должен быть задан статический IP адрес из той же подсети.

Прежде чем создавать собственный программный проект в CoDeSys рекомендуется запустить в контроллере демо проект Mega.project и ознакомится с его основными функциями. Структура проекта представдена на рисунке 3.7.3. Данный проект содержит следующие программы:

Проект содержим в своём составе структуру данных MegaVars, которая входит в объединение MegaVarsArr. Данные этой структуры доступны для чтения по протоколам Modbus RTU/TCP и РТМ64Var. С Modbus адреса 500 структура содержит данные читаемые из контроллера Мега12. С Modbus адреса 8000 структура содержит данные заполняемые пользователем. Первые 1000 байт данных пользователя и адреса контроллера РТМ и Modbus (uSIQ_MyAdr, uSIQ_MyAdrMB) сохраняются в виде переменной Retain и восстанавливаются после перезагрузки контроллера. Поэтому, в данную область можно писать уставки программных алгоритмов. Сохранение данных производится раз в 10 минут и может быть измененно в программе ReadSP в таймере RetainTON(IN:=TRUE, PT:=T#600S). Функция сохранения переменных реализуется с помощью ФБ RetainManager, которая выполняет сохранение Retain переменных в файл. Всего доступно для сохранения 4096 байт данных.

Смена адресов контроллера uSIQ_MyAdr, uSIQ_MyAdrMB производится по интерфейсам RS485 или Ethernet по протоколам Modbus или RTM. После смены адреса необходимо подождать до 10 минут, прежде чем выключить питание. По умолчанию в проекте заданы адреса uSIQ_MyAdr = 10 и uSIQ_MyAdrMB = 10. Эти адреса также можно сменить в структуре данных MegaVars.

Рисунок 3.7.3 – Структура проекта

Смена IP адреса контроллера производится в файле autorun.sh, который вызывается при загрузке системы. Файл можно открыть через бесплатный FTP-клиент в папке /opt/scripts. Файл содержит следующую информацию:

Смену IP адреса необходимо прописать в строке ifconfig eth0 192.168.2.10 netmask 255.255.255.0 и указать соответствующий GATE в строке ip route add default via 192.168.5.1. После изменения файла нужно произвести перезагрузку контроллера.

Программа контроллера ReadSP для чтения и записи данных в опрашиваемые модули использует два глобальных массива MyDataReadArr и MyDataWriteArr типа MegaVarsArr. При опросе считанные данные записываются в MyDataReadArr, а MyDataWriteArr инициализируется данными MyDataReadArr после первого цикла чтения. Если запись происходит в переменную внешнего модуля, которая может быть записана, то после изменения в массиве MyDataWriteArr происходит вызов программы WriteSP, которая запиываем в модуль соответствующую переменную. Для переменных пользователя (с Modbus адреса 8000) записанные данные автоматически копируются в два массива MyDataReadArr и MyDataWriteArr. Для опроса и чтения данных внешних модулей используются ФБ MODBUS_RTU_READ и MODBUS_RTU_WRITE, настройки порта для которых прописаны в глобальной переменной aParamsB115200.

Рисунок 3.7.4 – Структура данных с архивом

В системе CoDeSys доступны 4 последовательных порта, которые имеют разъёмы на плате Мега12-Pro: 1й порт соответствует COM1, 2й порт соответствует COM4, 3й порт соответствует внутренней шине. 1й и 2й порты позволяют контроллер опрашивать как подчинённое (SLAVE) устройство по протоколам Modbus RTU и РТМ-64Var. 3й порт работает в режиме Master для опроса данных по внутренней шине. Скорости портов устанавливаются из Retain переменных uSIQ_BaudCOM1Retain, uSIQ_BaudCOM2Retain, uSIQ_BaudCOM3Retain, которые доступны для изменения по протоколам Modbus и РТМ-64Var.

Основная программа контроллера MainProg для формирования замеров счётчиков импульсов по дискретным входам контроллера исполняет 16 функциональных блоков CNT_2H_ARH, которые формируют архивную запись R7 тип 17 с результатом замера. Архивные записи сохраняются на отдельном раздле /mnt флэш памяти контроллера в виде файлов archive.*, где * - номерархивной записи. Чтение архивных записей возможно из структуры данных контроллера по протоколам Modbus или РТМ64Var. После перезагрузки контроллер инициализирует имеющиеся архивные записи и сохраняет номер последней записи в переменной структуры данных uSIQ_regR7_Index. Для чтения архива по протоколу Modbus необходимо в переменную uSIQ_AdrArch записать номер архивной записи. После этого в массиве uSIQ_DataArch отобразятся данные из файла, с сответствующей записью. Для правильной инициализации архивных записей обязательно нужно выполнить ФБ InitArch, который после перезагрузки определит номер последнего записанного архива в контроллере.