Тел.: (495) 26-66-700, info@reallab.ru, www.reallab.ru Среда разработки CODESYS 3.5.16.40 Программирование ПЛК RealLab в среде разработки CODESYS 3.5 Программирование ПЛК RealLab в среде разработки CODESYS 3.5 Руководство по эксплуатации © НИЛ АП, 2025 Версия от 22 сентября 2025 г. Одной проблемой стало меньше! Уважаемый покупатель! Научно-исследовательская лаборатория автоматизации проектирования (НИЛ АП) благодарит Вас за покупку и просит сообщать нам свои пожелания по улучшению этого руководства или описанной в нем продукции. Ваши пожелания можно направлять по почтовому или электронному адресу, а также сообщать по телефону: НИЛ АП, пер. Биржевой спуск, 8, Таганрог, 347900, Тел.: (495) 26-66-700, e-mail: info@reallab.ru, www.reallab.ru Вы можете также получить консультации по применению нашей продукции, воспользовавшись указанными выше координатами. Пожалуйста, внимательно изучите настоящее руководство. Это позволит вам в кратчайший срок и наилучшим образом использовать приобретенное изделие. Авторские права на программное обеспечение, модуль и настоящее руководство принадлежат НИЛ АП. Разработка в среде CODESYS 3.5 2 Оглавление 1. Вводная часть ...................................................................... 9 1.1. Введение ..................................................................................................9 1.2. Общие сведения о CODESYS V3.5 .......................................................9 1.3. Программируемые контроллеры ReaLab в CODESYS 3.5 ....................10 2. Начало работы ................................................................... 11 2.1. Установка среды разработки CODESYS 3.5 ......................................11 2.1.1. Системные требования ..................................................................11 2.2. Установка таргет-файла RealLab .........................................................12 2.3. Первый запуск CODESYS ....................................................................16 2.3.1. Создание проекта ...........................................................................16 2.3.2. Менеджер библиотек .....................................................................17 2.3.3. Добавление устройств ...................................................................18 2.3.4. Редактор кода .................................................................................18 2.3.5. Создание визуализации в CODESYS ...........................................19 2.4. Подключение к ПЛК в среде CODESYS ............................................21 2.4.1. Настройка связи между контроллером и ПК...............................21 2.5. Разработка компонентов CODESYS на ПЛК RealLab .......................23 2.5.1. Связь компонентов с физической составляющей ПЛК RealLab23 3. Основные функции программирования ............................. 25 3.1. Настройка ПЛК в режиме CANOpen Slave.........................................25 3.1.1. Настройка самостоятельной работы ПЛК в роли CANopen Slave ...................................................................................................................27 3.2. Настройка ПЛК в режиме Modbus RTU Master .................................30 3.3. Настройка ПЛК в режиме Modbus RTU Slave ....................................32 3.4. Настройка ПЛК в режиме Modbus TCP Master ..................................33 3.5. Настройка ПЛК в режиме Modbus TCP Slave ....................................35 3.6. Работа с OPCUA-сервером...................................................................38 3.6.1. Настройка OPC-сервера ................................................................40 Разработка в среде CODESYS 3.5 3 3.6.2. Создание сертификата для сервера CODESYS OPC UA ........... 40 3.6.3. Настройка зашифрованного соединения с клиентом UaExpert . 41 3.6.4. Использование клиента OPC UA Server для изменения переменной ................................................................................................................... 43 3.7. Терминальные команды ....................................................................... 44 3.8. Сетевые переменные ............................................................................ 45 3.9. Менеджер задач (CmpIecTask) ............................................................ 49 3.10. Пример использования библиотеки CAA SerialCOM ..................... 52 3.11. Пример использования библиотеки SysSocket ................................ 57 3.11.1. Реализация TCP-сокета сервера .................................................. 59 3.11.2. Реализация TCP-сокета клиента ................................................. 63 3.12. Пример использования библиотеки SysCom ................................... 65 3.13. Пример работы ПЛК в качестве MQTT клиента ............................. 68 3.14. Энергонезависимые переменные ...................................................... 75 3.15. Работа с GPIO на NLScon-RSB ......................................................... 77 3.15.1. Работа с GPIO в проекте CODESYS .......................................... 77 3.15.2. Настройка конфигурационного файла CODESYS RT ............. 81 3.16. Рекомендации по настройке визуализации ...................................... 82 3.17. Обмен по сети Modbus RTU с помощью библиотеки ModbusFB .. 84 3.17.1. ПЛК – Ведущий ........................................................................... 84 3.17.2. ПЛК – Слейв ................................................................................ 86 3.18. Обмен по сети Modbus TCP с помощью библиотеки ModbusFB ... 93 3.18.1. ПЛК – Слейв ................................................................................ 93 3.19. Обнаружение ошибок с помощью POU для неявных проверок... 102 3.20. Логирование данных в среде CODESYS ........................................ 104 3.20.1. Общие принципы логирования в CODESYS .......................... 104 3.20.2. Функции библиотеки CmpLog ................................................. 105 3.20.3. Настройки конфиг-файла .......................................................... 106 3.21. Взаимодействие с внешними устройствами (SD/USB) ................. 109 4 Разработка в среде CODESYS 3.5 3.21.1. Реализация автоматического монтирования внешних устройств в ОС RealLab! Raspbian Linux ...............................................................109 3.21.2. Сохранение данных проекта CODESYS на внешние накопители .................................................................................................................111 4. Работа с модулями ввода и вывода RealLab .............. 113 4.1. Протокол Modbus RTU .......................................................................113 4.1.1. Рекомендации для работы с модулями серии NL, NLS............113 4.1.2. Основная работа в CODESYS .....................................................114 4.1.2.1. Подключение устройства ....................................................114 4.1.2.2. Каналы Modbus Slave ..........................................................115 4.1.2.3. Триггеры...............................................................................116 4.1.2.4. Добавление визуализации в проект ...................................116 4.1.2.5. Функции, используемые в программах .............................119 4.1.3. Пример использования NLS-16DI ..............................................120 4.1.3.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................120 4.1.3.2. Визуализация .......................................................................121 4.1.4. Пример использования NLS-16DO ............................................121 4.1.4.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................121 4.1.4.2. Визуализация .......................................................................122 4.1.5. Пример использования NLS-8R .................................................123 4.1.5.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................123 4.1.5.2. Визуализация .......................................................................125 4.1.6. Пример использования NLS-4AO ..............................................125 4.1.6.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................125 4.1.6.2. Создание программы ...........................................................127 Разработка в среде CODESYS 3.5 5 4.1.6.3. Визуализация ....................................................................... 128 4.1.7. Пример использования NLS-8AI ............................................... 129 4.1.7.1. Настройка каналов и соотнесения входов/выходов устройства .............................................................................................. 129 4.1.7.2. Создание программы .......................................................... 133 4.1.7.3. Визуализация ....................................................................... 135 4.1.8. Пример использования NLS-8TI ................................................ 135 4.1.8.1. Настройка каналов и соотнесения входов/выходов устройства .............................................................................................. 135 4.1.8.2. Создание программы .......................................................... 137 4.1.8.3. Визуализация ....................................................................... 138 4.1.9. Пример использования NLS-4RTD-Ex ...................................... 138 4.1.9.1. Настройка каналов и соотнесения входов/выходов устройства .............................................................................................. 138 4.1.9.2. Создание программы .......................................................... 140 4.1.9.3. Визуализация ....................................................................... 141 4.1.10. Пример использования NLS-4C ............................................... 141 4.1.10.1. устройства Настройка каналов и соотнесения входов/выходов 141 4.1.10.2. Создание программы ...................................................... 146 4.1.10.3. Визуализация .................................................................. 147 4.2. Протокол Modbus TCP ....................................................................... 147 4.2.1. Основная работа в CODESYS .................................................... 148 4.2.1.1. Подключение устройства ................................................... 148 4.2.1.2. Каналы Modbus Slave .......................................................... 149 4.2.1.3. Использование функций в программах ............................. 150 4.2.2. Пример использования NLS-16DI-Ethernet ............................... 150 4.2.2.1. Настройка каналов и соотнесения входов/выходов устройства .............................................................................................. 150 6 Разработка в среде CODESYS 3.5 4.2.2.2. Визуализация .......................................................................151 4.2.3. Пример использования NLS-16DO-Ethernet..............................152 4.2.3.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................152 4.2.3.2. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................153 4.2.4. Пример использования NLS-8R-Ethernet ...................................153 4.2.4.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................153 4.2.4.2. Визуализация .......................................................................154 4.2.5. Пример использования NLS-4AO-Ethernet................................155 4.2.5.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................155 4.2.5.2. Создание программы ...........................................................157 4.2.5.3. Визуализация .......................................................................160 4.2.6. Пример использования NLS-8AI-Ethernet .................................160 4.2.6.1. Настройка каналов и соотнесение входов/выходов устройства ..............................................................................................160 4.2.6.2. Создание программы ...........................................................162 4.2.6.3. Визуализация .......................................................................163 4.2.7. Пример использования NLS-16AI-I (Ethernet) ..........................164 4.2.7.1. Настройка каналов и соотнесение входов/выходов устройства ..............................................................................................164 4.2.7.2. Создание программы ...........................................................165 4.2.7.3. Визуализация .......................................................................166 4.2.8. Пример использования NLS-4RTD (Ethernet-2P)......................167 4.2.8.1. Настройка каналов и соотнесения входов/выходов устройства ..............................................................................................167 4.2.8.2. Создание программы ...........................................................168 4.2.8.3. Визуализация .......................................................................169 Разработка в среде CODESYS 3.5 7 4.2.9. Пример использования NLS-8TI (Ethernet) ............................... 169 4.2.9.1. Настройка каналов и соотнесения входов/выходов устройства .............................................................................................. 169 4.2.9.2. Создание программы .......................................................... 171 4.2.9.3. Визуализация ....................................................................... 171 4.3. Протокол CANOpen ........................................................................... 172 4.3.1. Подключение устройства CAN .................................................. 172 4.3.2. Настройка параметров PDO / SDO ............................................ 173 4.3.2.1. PDO ...................................................................................... 173 4.3.2.2. SDO ...................................................................................... 175 4.3.3. Использование функций в программах ..................................... 176 4.3.3.1. Функция WORD2_TO_REAL ............................................ 176 4.3.3.2. Функция BYTE4_TO_REAL .............................................. 176 4.3.3.3. Пример использования функции в программе ................. 177 4.3.4. Управление состоянием устройства в CODESYS .................... 177 4.3.5. Протоколы, используемые в работе CAN модулей .................. 180 4.3.5.1. Протокол Heartbeat (Сердцебиение) .................................. 180 4.3.5.2. Протокол Guard (Защита узла) ........................................... 182 4.3.5.3. Протокол SYNC .................................................................. 183 Лист регистрации изменений ............................................ 185 8 Разработка в среде CODESYS 3.5 1. Вводная часть 1. Вводная часть 1.1. Введение Настоящее руководство по настройке и программированию содержит необходимую информацию для начала работы и программирования в среде CODESYS V3.5. Процесс ознакомления со средой CODESYS V3.5 описан применительно к контроллерам и модулям ввода и вывода RealLab, но часть информации в данном документе является универсальной и может быть использована для обучения работе с любыми контроллерами, программируемыми в этой среде. Документ соответствует версии среды разработки CODESYS V3.5 SP16 Patch 4. 1.2. Общие сведения о CODESYS V3.5 CODESYS представляет собой комплекс программ для проектирования прикладного ПО, отладки в режиме эмуляции и загрузки программы в ПЛК. Основными частями системы являются среда разработки программы и среда ее исполнения (CODESYS SP), которая находится в ПЛК. В CODESYS входят графические и текстовые редакторы для всех пяти языков МЭК 61131–3. Этот комплекс полностью реализует требования стандарта и дополнительно вводит ряд оригинальных расширений, самым удобным из которых является объектно-ориентированные программирование. В одном проекте может быть использовано несколько контроллеров разных производителей. Каждый из них может программироваться как независимое устройство или с учетом их взаимодействия в промышленной сети. Проект состоит из нескольких приложений, распределенных по нескольким контроллерам. В одном ПЛК может существовать несколько независимых приложений. Программа, написанная на языках МЭК, компилируется системой CODESYS в машинный код, оптимизированный для заданной аппаратной платформы. Компилятор выдает диагностические сообщения как на этапе компиляции, так и на этапе ввода операторов языка. При отсутствии реального контроллера отладку программы можно выполнять с помощью встроенного программного эмулятора. Система имеет также встроенный многоканальный программный трассировщик (графический самописец) значений переменных. Он позволяет наглядно Разработка в среде CODESYS 3.5 9 1. Вводная часть представить динамически изменяющиеся данные проекта. Данные аккумулируются в памяти ПЛК и могут синхронизироваться с определенными событиями. Трассировщик полезен не только при отладке, но и при анализе нештатных ситуаций в процессе эксплуатации оборудования. Для того, чтобы ПЛК можно было программировать с помощью CODESYS, в контроллере должна быть установлена система исполнения. Установку системы выполняет изготовитель контроллера. Изготовитель обеспечивает также поддержку всех модулей ПЛК, поэтому конечный пользователь может сосредоточиться на разработке только прикладной программы. Помимо средств программирования, CODESYS имеет встроенную систему визуализации, которая применяется для операторского управления, а также моделирования на этапе разработки. Визуализацию можно запустить на компьютере, графической панели ПЛК или встроенном в контроллер web-сервере. Пользователь может самостоятельно расширять возможность CODESYS путем создания библиотек программных модулей. Например, он может реализовать поддержку нестандартных интерфейсов. Для систем, связанных с безопасностью, CODESYS имеет библиотеку функциональных блоков PLCopen Safety, систему исполнения для оборудования с дублированием и специализированное расширение среды программирования. При внезапном отключении питания CODESYS автоматически сохраняет значения переменных во флеш-памяти или в ОЗУ с батарейным питанием. 1.3. Программируемые контроллеры ReaLab в CODESYS 3.5 Ниже приведен список контроллеров RealLab, программируемых в среде CODESYS V3.5.16.40: NLScon-RSB-L-RS; NLScon-RSB-L-CAN; NLScon-RSB-S; NLScon-A40-L-RS; NLScon-A40-L-CAN; NLScon-A40-S; Панельные ПЛК NLcon-CED; Модульные ПЛК серии серии NLSB. 10 Разработка в среде CODESYS 3.5 2. Начало работы 2. Начало работы Чтобы начать работу со средой разработки CODESYS, необходимо скачать и установить среду разработки CODESYS V3.5 SP16 Patch 4, а также установить таргет-файл RealLab с шаблонами модулей ввода и вывода и библиотеками для взаимодействия с ними. Последнюю версию таргет-файла можно загрузить с нашего сайта. Установите загруженный пакет, создайте проект и подключитесь к ПЛК. На данном этапе все подготовлено для начала разработки в CODESYS 3.5. Все инструкции по установке и настройке CODESYS находятся в разделе 3 данного документа. 2.1. Установка среды разработки CODESYS 3.5 2.1.1. Системные требования Для корректной работы среды разработки CODESYS 3.5 требуется: операционная система Windows 7 или выше; 4 Гб оперативной памяти; 3 Гб свободного места на HDD; процессор: Pentium V, Centrino > 3,0 GHz, Pentium M > 1,5GHz. Рис. 2.1. Установка CODESYS 3.5 Разработка в среде CODESYS 3.5 11 2. Начало работы Для установки среды разработки CODESYS V3.5 SP16 Patch 4, скачайте установщик с нашего сайта и запустите его. В процессе установки CODESYS V3.5 предоставляется возможность выбора основных компонентов для установки (рис. 2.1). Рекомендуется установить все доступные компоненты. 2.2. Установка таргет-файла RealLab Для упрощенной работы с ПЛК и модулями ввода и вывода RealLab! имеются таргет-файл с шаблонами, облегчающие процесс их добавления и настройки в среде CODESYS 3.5. Все дополнительные компоненты устанавливаются отдельно. Скачайте с нашего сайта или с сайта CODESYS необходимые пакеты установки и запустите CODESYS. Если вы используете версию CODESYS 3.5.16.40 – из верхнего меню выберите “Инструменты – Менеджер пакетов”. Откроется окно менеджера пакетов (рис. 2.2). Нажмите “Установить”, выберите нужный package-файл и следуйте инструкциям установщика (рис. 2.3). Рис. 2.2. Пример выбора пакета в CODESYS 3.5.16.40 12 Разработка в среде CODESYS 3.5 2. Начало работы Рис. 2.3. Начало установки пакета шаблонов модулей Если вы используете версию CODESYS 3.5.17.0 и выше, в верхнем меню выберите “Инструменты – CODESYS Installer”. Откроется окно со списком компонентов, установленных в CODESYS этой версии (рис. 2.4). Рис. 2.4. CODESYS Installer Нажмите Install и выберите ваш пакет в формате “.package” для установки. Закройте все окна среды разработки CODESYS, кроме CODESYS Installer. Следуйте инструкциям установщика. По окончании процесса откройте CODESYS и проверьте работоспособность установленных пакетов. После установки пакета с шаблонами, таргет-файлами и библиотеками, при создании проекта можно выбрать ПЛК из списка (см.рис. 2.5): Разработка в среде CODESYS 3.5 13 2. Начало работы Рис. 2.5. Выбор ПЛК из списка Выбрать наш модуль и добавить его в проект можно из меню выбора ведомого устройства (сначала добавьте в проект Master-устройство, а к нему можно добавить Slave) см. рис. 2.6. Рис. 2.6. Добавление модулей в проект Для установки библиотек из верхнего меню CODESYS выберите “Инструменты – Репозиторий библиотек”. Откроется окно репозитория библиотек (рис. 2.7). Чтобы установить необходимую библиотеку в формате “.library” или “.compiled-library” нажмите “Установить”, выберите библиотеку, которую необходимо установить и следуйте инструкциям установщика. Для 14 Разработка в среде CODESYS 3.5 2. Начало работы удаления/экспортирования кнопки. библиотек используйте соответствующие Рис. 2.7. Репозиторий библиотек. Для установки таргет-файла какого-либо устройства, из верхнего меню выберите “Инструменты – Репозиторий устройств”. Откроется окно репозитория устройств (рис. 2.8). Нажмите “Установить”, выберите таргет-файл для установки и следуйте инструкциям установщика. Рис. 2.8. Репозиторий устройств Разработка в среде CODESYS 3.5 15 2. Начало работы 2.3. Первый запуск CODESYS 2.3.1. Создание проекта Запустите среду разработки CODESYS. Для создания нового проекта, кликните на “Новый проект…”. Укажите расположение проекта и его имя, нажмите “ОК” (см. рис. 2.9). Рис. 2.9. Создание проекта В следующем окне (рис. 2.10) выберите устройство и язык, на котором будет разрабатываться программа. Рис. 2.10. Выбор устройства и языка программирования 16 Разработка в среде CODESYS 3.5 2. Начало работы 2.3.2. Менеджер библиотек Если в проекте сразу появились ошибки библиотек – перейдите в “Менеджер библиотек” (в дереве устройств кликните по нему дважды) и нажмите “Download Missing Libraries” (рис. 2.11). Рис. 2.11. Загрузка недостающих библиотек Если Вы используете ПЛК NLScon-RSB с доступом к GPIO, в “Менеджер библиотек – Placeholders” установите версию библиотеки Raspberry Pi Peripherals 4.0.0.0. (рис. 2.12) Рис. 2.12. Изменение версии библиотеки в Placeholders Разработка в среде CODESYS 3.5 17 2. Начало работы 2.3.3. Добавление устройств Чтобы добавить устройство (например, модуль Modbus RTU), щелкните правой кнопкой мыши по названию устройства в дереве устройств – “Добавить устройство”. Выберите из перечня необходимое устройство и добавьте его в проект (рис. 2.13). Рис. 2.13. Дважды кликните по устройству, чтобы добавить Чтобы открыть параметры добавленного устройства, дважды кликните по нему в дереве устройств. Кроме устройств можно добавлять различные объекты (например, менеджер визуализации, POU и т.д.). Для этого кликните правой кнопкой мыши по “Application” в дереве устройств и выберите “Добавление объекта”. 2.3.4. Редактор кода Код пишется в созданном по умолчанию файле “PLC_PRG”. Кликните по нему дважды в дереве устройств, чтобы изменить его (рис. 2.14). Редактор кода состоит из двух частей. В верхней части переменные объявляются, а в нижней – пишется код, который циклически выполняется на ПЛК. 18 Разработка в среде CODESYS 3.5 2. Начало работы Рис. 2.14. Редактор кода Чтобы создать новый файл для написания кода, кликните правой кнопкой по “Application – Добавление объекта” в дереве устройств и выберите POU. 2.3.5. Создание визуализации в CODESYS Запустите среду разработки CODESYS. Создайте стандартный проект или откройте существующий и кликните правой кнопкой мыши по “Application” в дереве устройств. Выберите “Добавление объекта – Визуализация” (рис. 2.15). Рис. 2.15. Добавление визуализации в проект Разработка в среде CODESYS 3.5 19 2. Начало работы Появится окно с просьбой ввести имя визуализации – по умолчанию в строку имени записывается “Visualization”. В дереве устройств появится сама визуализация и менеджер визуализаций, где можно настроить параметры визуализации: стиль визуализации, использование переменных Unicode, параметры шрифта, объем памяти для визуализации и т. д. (рис. 2.16). В дереве устройств у элемента “Менеджер визуализации” есть подпункт “Web-визуализация” и “таргет-визуализация”. Там можно выбрать стартовую визуализацию, если их несколько, а также настроить масштабирование визуализации, частоту обновления и ее размер. Веб-визуализация транслируется по IPадресу, ее можно открыть в браузере. Таргет-визуализация отображается на весь экран в отдельном окне ПЛК. Рис. 2.16. Параметры Web-визуализации Элементы добавляются на экран визуализации перетаскиванием из панели инструментов визуализации, где можно выбрать категорию элементов (рис. 2.17). Свойства элементов можно настраивать – нажмите левой кнопкой мыши на элемент, который нужно настроить. Пример: на экране визуализации нажимаю на один из переключателей левой кнопкой мыши – с правой части экрана панель инструментов визуализации заменяется на вкладку свойств выбранного объекта. В зависимости от выбранного элемента настраиваются разные свойства. Для переключателя это размеры, переменная, которая меняет значение при его переключении и цвет (рис. 2.18). 20 Разработка в среде CODESYS 3.5 2. Начало работы Рис. 2.17. Пример визуализации Рис. 2.18. Элемент-переключатель 2.4. Подключение к ПЛК в среде CODESYS 2.4.1. Настройка связи между контроллером и ПК По умолчанию сетевые настройки интерфейсов Ethernet-контроллеров RealLab – динамические. Разработка в среде CODESYS 3.5 21 2. Начало работы Варианты взаимного сетевого расположения контроллера и компьютера: Контроллер и компьютер находятся в одной локальной сети. Контроллер и компьютер находятся в разных локальных сетях, связанных с помощью соответствующих сетевых устройств (маршрутизаторов). Контроллер и компьютер соединены напрямую с помощью кабеля RJ45-RJ45. В локальных сетях не должно возникать конфликта IP-адресов, т. е. разные устройства не должны обладать совпадающими адресами. После настройки сетевых параметров контроллера и компьютера следует установить связь между ними в среде CODESYS. Компонент Device (который определяется соответствующим таргет-файлом) должен соответствовать модели контроллера. В случае необходимости тип устройства можно изменить, выбрав в дереве проекта компонент Device (всегда находится в верхней части дерева), и, нажав на него ПКМ, открыть окно “Обновить устройство”: Дважды кликните на ПЛК в дереве устройств – откроются “Установки соединения”. Нажмите “Сканировать сеть” и дважды кликните по названию устройства, к которому нужно подключиться рис. 2.19. Рис. 2.19. Подключение к ПЛК В случае успешной установки связи индикаторы шлюза и контроллера загорятся зеленым. Для загрузки проекта в ПЛК нажмите значок: 22 . Разработка в среде CODESYS 3.5 2. Начало работы 2.5. Разработка компонентов CODESYS на ПЛК RealLab Компонент CmpPowerFail контролирует состояние GPIO и по его изменению останавливает МЭК-программу и сохраняет retain-переменные в файл. Компонент CmpRunStopCtl контролирует состояние переключателя RunStop (GPIO) и по его изменению останавливает/запускает МЭК-программу. 2.5.1. Связь компонентов с физической составляющей ПЛК RealLab Переключатель Run-Stop, останавливает/запускает МЭК программу. При запуске МЭК программы светодиод горит зленым цветом и при остановке светодиод горит красным цветом. При запуске ПЛК МЭК-программа проверяет состояние переключателя. Если переключатель в положении Stop, то МЭК-программа останавливается, а если в переключатель в положении Run, то запускается. При отключения основного питания ПЛК, ПЛК продолжает работать с аккумулятором X секунд, если в Х секунд возвращается основного питания, то ПЛК продолжается работать в штатном режиме, иначе сохраняет retain-переменные и отправляет команду выключения ПЛК. При заводском сбросе устройства через среду разработку, среда исполнения переходит в состояние остановки и на ПЛК загорается красный светодиод, пока не загрузим проект в ПЛК через среду разработки. Разработка в среде CODESYS 3.5 23 2. Начало работы Рис. 2.20. Вид на лицевую панель ПЛК NLScon-RSB-L-RS Рис. 2.21. Вид на лицевую панель ПЛК NLScon-A40-L-RS 24 Разработка в среде CODESYS 3.5 3. Основные функции программирования 3. Основные функции программирования 3.1. Настройка ПЛК в режиме CANOpen Slave Запустите CODESYS, создайте стандартный проект. В дереве устройств кликните правой кнопкой мыши на ПЛК и добавьте устройство CANbus. К CANbus добавьте устройство CANopen_Device (рис. 3.1). Рис. 3.1. Добавление устройства в проект Во вкладке CANbus – “Общее” – укажите номер используемой CAN-сети и скорость передачи (Кбит/с). Рис. 3.2. Параметры CANbus Разработка в среде CODESYS 3.5 25 3. Основные функции программирования Откройте общие параметры CANopen_Device (рис. 3.3) и настройте область I/O, а также область SDO, если это необходимо. Если планируется использовать несколько ведомых CAN-устройств, ID их узлов не должны совпадать. Значение профиля устройства – 401. Настройка I/O заключается в создании объектов для обмена данными. Возможно создать области, которые отвечают за передачу или принятие данных. Рис. 3.3. Настройка параметров CANOpen Device По окончании настройки нажмите “установить в репозиторий устройств”, чтобы была возможность быстро добавить устройство с такими параметрами в проект. Во вкладке соотнесения входов/выходов при необходимости настройте соотнесение переменных. Подключитесь к ПЛК и загрузите проект в память устройства. Результат: ПЛК выполняет роль ведомого устройства по протоколу CANOpen. Рис. 3.4. Схема подключения ПЛК 26 Разработка в среде CODESYS 3.5 3. Основные функции программирования Чтобы организовать обмен данными с ведомым ПЛК, создайте новый проект CODESYS, подключитесь к ПЛК, который является ведущим по отношению к ведомому. Добавьте в дерево устройств CANbus, CANOpen Manager. К CANOpen Manager добавьте ведомое устройство, которое вы добавляли в репозиторий в прошлом проекте. Установите параметры скорости и номера сети, а также ID узла ведомого устройства, как в проекте, который относится к ведомому устройству. Загрузите проект в память ПЛК и запустите его. На рис. 3.5 представлена работа созданного проекта: Рис. 3.5. Работа проекта 3.1.1. Настройка самостоятельной работы ПЛК в роли CANopen Slave Для того, чтобы настроить ПЛК как CANopen Slave с автоматическим переходом в режим работы (Operational), необходимо: Создать новый проект или открыть существующий и добавить “CANbus” в дерево устройств (см. Рис. 3.1). Настроить параметры подключения по протоколу CANopen – установить номер сети (порта) и скорость передачи данных (см. Рис. 3.2). К CANbus добавить CANopen_Device и сконфигурировать его. (см. Рис. 3.6 и Рис. 3.7) Разработка в среде CODESYS 3.5 27 3. Основные функции программирования Рис. 3.6. Добавление CANopen_Device в проект Укажите ID узла, профиль устройства “401” и остальные параметры. Рис. 3.7. Конфигурирование устройства CANopen_Device Чтобы считать текущее состояние слейва (CANopen_Device) необходимо: В программе (PLC_PRG) объявить переменную типа DED.DEVICE_STATE. Например: dev: DED.DEVICE_STATE; Вставить следующий код в исполняемую часть программы: dev := CANopen_Device.GetDeviceState(); 28 Разработка в среде CODESYS 3.5 3. Основные функции программирования При загрузке такого проекта на ПЛК – слейв будет запущен в режиме конфигурации (CONFIGURED) (см. Рис. 3.8). Рис. 3.8. Отображение текущего состояния слейва Чтобы слейв автоматически переходил в рабочее состояние добавьте в исполняемую часть программы следующий код: IF dev <> DED.DEVICE_STATE.RUNNING THEN CANopen_Device.SwitchToOp(); END_IF Загрузите проект на ПЛК. Результат работы программы представлен на Рис. 3.9. Рис. 3.9. Результат работы программы Разработка в среде CODESYS 3.5 29 3. Основные функции программирования 3.2. Настройка ПЛК в режиме Modbus RTU Master В дереве устройств выбрать Device (CODESYS Control NIL AP) и добавить устройство Modbus COM. Во вкладке “Общее” Modbus COM необходимо указать номер COM-порта, используемого ПЛК, скорость передачи (по умолчанию 9600 бод), а также четность – NONE. Все остальные настройки без изменений. После Modbus COM следует добавить Modbus Master. Во вкладке “Общее” Modbus Master COM Port – установить галочку “Автоперезапуск соединения”. После Modbus Master следует добавить Modbus Slave COM Port (рис. 3.10). Во вкладке Общее Modbus Slave COM Port установить адрес Slave-устройства. Также можно указать индивидуальный Таймаут-ответа и ID устройства. Рис. 3.10. Добавление Modbus Slave COM Port Во вкладке Канал Modbus Slave COM Port (рис. 3.11) необходимо установить параметры опрашиваемого Slave-устройства (Тип доступа, Сдвиг регистра, Длина регистра). 30 Разработка в среде CODESYS 3.5 3. Основные функции программирования В настройках каждого Modbus Slave на вкладке ModbusGenericSerialSlave “Соотнесение входов/выходов” (рис. 3.13) для необходимых каналов задать с помощью Ассистента ввода переменные, которые должны использоваться в коде прикладной программы (рис. 3.12), а также установить параметр “всегда обновлять переменные (установить Вкл.2)”. Рис. 3.11. Параметры канала Modbus Slave COM Port Рис. 3.12. Создание переменной для Slave-устройства Разработка в среде CODESYS 3.5 31 3. Основные функции программирования Рис. 3.13. Соотнесение каналов и переменных Slave-устройства. В результате запуска ПЛК в режиме Modbus RTU Master созданные компоненты в дереве устройств будут отображаться зеленой пиктограммой. 3.3. Настройка ПЛК в режиме Modbus RTU Slave В дереве устройств выбрать Device (CODESYS Control NIL AP) и добавить устройство Modbus COM. Укажите номер COM-порта и установите необходимые Вам параметры. После Modbus COM следует добавить Modbus Serial Device. Во вкладке Modbus Serial Device (рис. 3.14) установить ID-адрес, который будет назначен данному COM-порту ПЛК, а также количество Регистров хранения (Holding registers 2–500) и Входных регистров. Регистры хранения (Holding registers) – Тип доступа: чтение/запись. Входные регистры (Inputs registers) – Тип доступа: только чтение. 32 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.14. Настройки Modbus Serial Device В настройках на вкладке Modbus Serial Device Соотнесение входов /выходов для необходимых каналов задать с помощью Ассистента ввода переменные, которые должны использоваться в коде прикладной программы (рис. 3.15), а также установить параметр “Всегда обновлять переменные” (установить Вкл.2). Рис. 3.15. Создание переменных для Slave-устройства В результате запуска ПЛК в режиме Modbus RTU Slave созданные компоненты в дереве устройств будут отображаться зеленой пиктограммой. 3.4. Настройка ПЛК в режиме Modbus TCP Master В дереве устройств выбрать Device (CODESYS Control NIL AP) и добавить устройство Ethernet (рис. 3.16). Установить соединение с ПЛК в устройстве Device чтобы узнать IP-адрес. Во вкладке “Конфигурация ethernet-устройства” – Ethernet выбрать интерфейс текущего ПЛК. Разработка в среде CODESYS 3.5 33 3. Основные функции программирования Рис. 3.16. Настройки Ethernet После Ethernet следует добавить Modbus TCP Master. Во вкладке “Общее” Modbus TCP Master установить галочку “Автоподключение”. После Modbus TCP Master добавьте Modbus TCP Slave. Во вкладке Общее Modbus TCP Slave установите адрес TCP Slave-устройства. Во вкладке Канал Modbus TCP Slave необходимо установить параметры опрашиваемого Slave-устройства (Тип доступа, Сдвиг регистра, Длина регистра). В настройках каждого Modbus TCP Slave на вкладке “ModbusGenericSerialSlave Соотнесение входов/выходов” (рис. 3.18) для необходимых каналов задать с помощью Ассистента ввода переменные, которые должны использоваться в коде прикладной программы (рис. 3.17), а также установить параметр “Всегда обновлять переменные” (установить Вкл.2). Рис. 3.17. Созданная переменной 34 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.18. Соотнесение входов/выходов В результате запуска ПЛК в режиме Modbus TCP Master созданные компоненты в дереве устройств будут отображаться зеленой пиктограммой. 3.5. Настройка ПЛК в режиме Modbus TCP Slave В дереве устройств выбрать Device (CODESYS Control NIL AP) и добавить устройство Ethernet. Установить соединение с ПЛК в устройстве Device чтобы узнать IP-адрес. Во вкладке “Конфигурация ethernet” устройства Ethernet выбрать интерфейс текущего ПЛК (рис. 3.19). Разработка в среде CODESYS 3.5 35 3. Основные функции программирования Рис. 3.19. Выбор интерфейса Ethernet После Ethernet следует добавить Modbus TCP Slave Device. Во вкладке Modbus TCP Slave Device (рис. 3.20) ID-адрес по умолчанию 255, который будет назначен данному Slave-устройству, а также количество регистров хранения (Holding registers 2-500) и Входных регистров (Inputs registers 2-500). Регистры хранения (Holding registers) – Тип доступа: чтение/запись. Входные регистры (Inputs registers) – Тип доступа: только чтение. 36 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.20. Настройка регистров TCP Slave В настройках на вкладке “Modbus TCP Slave Device Соотнесение входов/выходов” (рис. 3.22) для необходимых каналов задать с помощью Ассистента ввода переменные, которые должны использоваться в коде прикладной программы (рис. 3.21), а также установить параметр “Всегда обновлять переменные” (установить Вкл.2). Рис. 3.21. Создание переменных Разработка в среде CODESYS 3.5 37 3. Основные функции программирования Рис. 3.22. Соотнесение переменных В результате запуска ПЛК в режиме Modbus TCP Slave созданные компоненты в дереве устройств будут отображаться зеленой пиктограммой. 3.6. Работа с OPCUA-сервером CODESYS OPC Server V3 – самый простой с точки зрения настройки OPCсервер для организации обмена с контроллером, так как он интегрирован в среду разработки и позволяет автоматически импортировать переменные проекта. Создайте стандартный проект CODESYS. Добавьте в проект Символьную конфигурацию – Нажмите правой кнопкой мыши на “Application” в дереве устройств – “Добавить” – “Символьная конфигурация” (рис. 3.23). При добавлении компонента пользователь может выбрать следующие настройки: Включить комментарии в XML – если установлена галочка, то в файл символьной конфигурации будут включены комментарии к переменным; Поддержка функций OPC UA – если установлена галочка, то в файл символьной конфигурации добавляется дополнительная информация, необходимая для поддержки функций OPC UA сервера. Размещение данных клиента – пользователь может выбрать структуру файла символьной конфигурации – совместимую со старыми версиями или оптимизированную. После добавления компонента Символьная конфигурация следует выполнить компиляцию проекта. 38 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.23. Добавление символьной конфигурации в проект Объявите в программе переменные. Рис. 3.24. Переменные Отметьте галочками переменные, которые будут считываться/изменяться OPC-сервером и указать для каждой из них права доступа (со стороны OPCсервера). После этого настройка контроллера считается завершенной. Рис. 3.25. Символьная конфигурация Разработка в среде CODESYS 3.5 39 3. Основные функции программирования 3.6.1. Настройка OPC-сервера Запустите приложение OPC Configurator из меню Пуск или папки CODESYS OPC Server V3, расположенной в директории установки CODESYS. Рис. 3.26. OPC Configurator в меню Пуск Нажмите на узел “Server” и в контекстном меню выберите “Append PLC”. Нажмите на узел “Connection” – “Edit” для настройки IP ПЛК и его порта (рис. 3.27). Рис. 3.27. Настройка IP-адреса и порта ПЛК Далее сохраните настройки – нажмите “File – Save” в верхнем меню OPC Configurator. 3.6.2. Создание сертификата для сервера CODESYS OPC UA Для шифрования данных и безопасного обмена ими с клиентом серверу необходим сертификат, который клиент должен классифицировать как доверенный при первом установлении соединения. Требование: Задан активный путь к контроллеру. 1. Установите дополнение CODESYS Security Agent. 40 Разработка в среде CODESYS 3.5 3. Основные функции программирования 2. Щелкните Вид – Безопасность (Security Screen). 3. Выберите вкладку «Устройства (Devices)». 4. Выберите контроллер в левом представлении. ⇒ В правом представлении отображаются все службы контроллера, для которых требуется сертификат. 5. Выберите службу сервера OPC UA. 6. Создайте новый сертификат для устройства. Для этого щелкните значок. ⇒ Откроется диалоговое окно «Настройки сертификата». 7. Определите параметры сертификата и нажмите OK, чтобы закрыть диалоговое окно. ⇒ Сертификат создан на контроллере (рис. 3.28). 8. Перезапустите систему исполнения. Рис. 3.28. Сертификат создан 3.6.3. Настройка зашифрованного соединения с клиентом UaExpert Клиент OPC UA «UaExpert» представляет собой свободное доступное ПО, которое можно загрузить из Интернета. Этот клиент можно использовать для подключения к серверу CODESYS OPC UA. Следующее описание относится к этой программе. Другие клиенты OPC UA работают аналогичным образом. 1. Запустите программу UaExpert. 2. Щелкните Сервер «Добавить» и откроется диалоговое окно «Добавить сервер». 3. Выберите “Custom Discovery”. Дважды кликните по опции “Double Click to Add Server”. Введите параметры подключения (ip-адрес и порт) и нажмите “OK”. Разработка в среде CODESYS 3.5 41 3. Основные функции программирования Рис. 3.29 – Добавление сервера для подключения 4. Выберите тип подключения Basic256Sha256 — Sign & Encrypt (uatcp-uascuabinary) и нажмите «OK», чтобы закрыть диалоговое окно (рис. 3.30). Рис. 3.30. Выбор типа подключения 5. Щелкните Сервер «Подключить» и откроется диалоговое окно проверки сертификата с сообщением об ошибке. 6. Выберите параметр «Временно принять сертификат сервера для этого сеанса» и нажмите «Продолжить». 42 Разработка в среде CODESYS 3.5 3. Основные функции программирования 7. В среде разработки CODESYS щелкните символ новится. и изображение об- 8. Выберите папку «Сертификаты на карантине» (рис. 3.31). Сертификат клиента UaExpert@… отображается справа. Рис. 3.31. Сертификаты на карантине 9. Перетащите сертификат в папку «Доверенные сертификаты». Теперь сертификат клиента классифицируется сервером как доверенный. Рис. 3.32 – Доверенные сертификаты 10. Щелкните Сервер «Подключить в клиенте UaExpert». Откроется диалоговое окно проверки сертификата с сообщением об ошибке. 11. Выберите параметр «Временно принять сертификат сервера для этого сеанса» и нажмите «Продолжить». Соединение установлено, и объекты отображаются в представлении «Адресное пространство». 3.6.4. Использование клиента OPC UA Server для изменения переменной 1. Разверните объект Objects ‣ DeviceSet ‣ CODESYS OPC UA ‣ Application ‣ Global Vars ‣ GVL в клиенте UaExpert представления Address Space. Переменные списка глобальных переменных видны (рис. 3.33). 2. Выберите переменные и перетащите их в представление доступа к данным. Отображаются переменные и их текущие значения. Разработка в среде CODESYS 3.5 43 3. Основные функции программирования Рис. 3.33. Переменные в UaExpert 3. Измените значения переменных, дважды щелкнув поле «Значение». 3.7. Терминальные команды Чтобы разрешить выполнение терминальных команд из среды исполнения CODESYS, требуется внести изменения в файл /usr/bin/CODESYS/CODESYSControl.cfg, а именно добавить в конец файла перечень необходимых команд в следующем формате: [SysProcess] Command.0=ls Command.1=blkid … Command.Х=… Здесь X – это номер последней указанной команды. Количество X команд не ограничено. Если требуется разрешить выполнение любых команд, отсылаемых из исполнительной системы CODESYS, то в файл CODESYSControl.cfg нужно внести следующий текст: [SysProcess] Command=AllowAll Однако стоит помнить, что в этом случае в терминал ПЛК будут направлены любые команды, формируемые в проекте CODESYS. Внести изменения в конфигурационном файле CODESYSControl.cfg можно через командую строку и удаленно подключение по SSH с использованием программы Bitvise Client / PuTTY или RealVNC. 44 Разработка в среде CODESYS 3.5 3. Основные функции программирования После внесения изменений в файл CODESYSControl.cfg из среды исполнения CODESYS станет возможно отправлять терминальные команды. В проекте для этого используется функция SysProcessExecuteCommand2 библиотеки SysProcess Implementation2, позволяющая выполнить указанную в ее параметрах команду и записать текстовый вывод (результат) этой команды. В данном примере в функции Run_Command() выполняется терминальная команда blkid , используемая для получения информации об идентификаторах блочных устройств. После выполнения текстовый вывод данной команды возвращается функцией Run_Command (рис. 3.34). В качестве примера в функции Run_Command() по результату выполнения blkid определяется UUID блочного устройства: test_string:= MID (Command_Output, 16, FIND (Command_Output, 'UUID')); Рис. 3.34. Результат выполнения терминальной команды blkid для ПЛК NLScon-RSB 3.8. Сетевые переменные Сетевые переменные позволяют достаточно просто организовать обмен данными между несколькими ПЛК, поддерживающими программирование в CODESYS, по протоколу UDP с использованием сети Ethernet. Все ПЛК в этом случае должны находиться в одной локальной сети. Разработка в среде CODESYS 3.5 45 3. Основные функции программирования Для организации обмена сетевыми переменными требуется в одном проекте CODESYS разработать программы для всех ПЛК, участвующих в обмене (рис. 3.35). Загружать разработанные программы в нужные ПЛК можно также из одного проекта. Рис. 3.35. Конфигурация дерева устройств Далее для каждого ПЛК потребуется добавить Списки сетевых переменных (Network Variable List), сначала список отправителя (Sender), затем список получателя (Receiver) (см.рис. 3.36). Рис. 3.36. Добавление списков сетевых переменных При добавлении списка отправителя (Sender) появятся окна для настройки параметров списка (рис. 3.37). Настраиваемыми являются следующие параметры: имя списка (Name), тип сети (Network Type), идентификатор списка (List identifier), а также по нажатию кнопки Settings – порт ПЛК (Port) и адрес широковещательной рассылки (Broadcast adr). Подробную информацию о настройках списка отправителя можно найти на сайте CODESYS Online Help. 46 Разработка в среде CODESYS 3.5 3. Основные функции программирования В данном примере спискам присвоены имена Sender1 (для Device1) и Sender2 (для Device2), тип сети — UDP, порт ПЛК — 1202 (по умолчанию). Маска для широковещательной рассылки — 192.168.0.255; данный адрес позволит контроллерам рассылать UDP-пакеты данных любым устройствам в сети с IP-адресом 192.168.0.х. Идентификатор списка не должен повторяться внутри одного проекта, поэтому для Sender1 задан List identifier=1, для Sender2 задан List identifier=2. Рис. 3.37. Настройка списка Sender1 сетевых переменных для отправителя Далее оба списка отправителей можно наполнить переменными. Как видно, в проекте сетевые переменные являются глобальными переменными. Теперь устройство Device1 может отправлять переменные из списка Sender1, а устройство Device2 – из списка Sender2 (рис. 3.38). Рис. 3.38. Переменные списков Sender 1 и Sender 2 Разработка в среде CODESYS 3.5 47 3. Основные функции программирования Для того чтобы устройства в сети могли обмениваться переменными из списков-отправителей, требуется добавить также списки-получатели. Далее приведен пример настройки имени и выбора списка отправителя при создании Network Variable List (Receiver) для одного из устройств (рис. 3.39). Рис. 3.39. Настройка списка-получателя сетевых переменных После добавления в проект двух списков получателей NVL_getFrom_Sender2 (для Device1) и NVL_getFrom_Sender1 (для Device2) в них автоматически подтягиваются списки переменных из «своих» отправителей (рис. 3.40). Рис. 3.40. Списки-получатели сетевых переменных Для проверки обмена требуется загрузить приложения в оба контроллера и в режиме онлайн наблюдать передачу переменных (рис. 3.41). 48 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.41. Обмен сетевыми переменными Нужно отметить, что одно устройство (Device) может содержать несколько списков-получателей и списков-отправителей. При этом идентификаторы списков-отправителей переменных должны быть уникальными во избежание нарушений работоспособности. Максимальный размер сетевой переменной 255 байт. Можно использовать неограниченное число сетевых переменных. 3.9. Менеджер задач (CmpIecTask) Функции библиотеки CmpIecTask позволяют получить доступ к описанию МЭК-задач, выполняемых в ПЛК. Для демонстрации возможностей библиотеки CmpIecTask в проекте на ПЛК выполняются две задачи MainTask и Task2 с приоритетом 1 и 5 соответственно (рис. 3.42). Рис. 3.42. Конфигурация дерева устройств Разработка в среде CODESYS 3.5 49 3. Основные функции программирования Для получения описания МЭК-задачи с помощью функций CmpIecTask требуется сначала получить обработчик этой задачи. Это можно сделать с помощью одной из следующих функций (см. табл. 1 – табл. 3): IecTaskGetFirst IecTaskGetNext IecTaskGetCurrent IecTaskGetFirst – функция, возвращающая обработчик МЭК-задачи с приоритетом 1. Табл. 1. Функция IecTaskGetFirst Входы/выходы Имя Тип pszAppName POINTER TO STRING pResult POINTER TO RTS_IEC_RESULT IecTaskGetFirst RTS_IEC_HANDLE Input Output Описание Указатель на строку, содержащую название приложения ПЛК Указатель на тип RTS_IEC_RESULT, содержащий код ошибки как результат выполнения операции Обработчик МЭК-задачи с приоритетом 1 IecTaskGetNext – функция, возвращающая обработчик МЭК-задачи с приоритетом более низким, чем приоритет задачи hPrevIecTask. Табл. 2. Функция IecTaskGetNext Входы/выходы Input Output 50 Имя Тип pszAppName POINTER TO STRING hPrevIecTask RTS_IEC_HANDLE pResult POINTER TO RTS_IEC_RESULT IecTaskGetNext RTS_IEC_HANDLE Описание Указатель на строку, содержащую название приложения ПЛК Обработчик предыдущей МЭК-задачи (с более высоким приоритетом) Указатель на тип RTS_IEC_RESULT, содержащий код ошибки как результат выполнения операции Обработчик следующей по приоритету МЭК-задачи Разработка в среде CODESYS 3.5 3. Основные функции программирования IecTaskGetCurrent – функция, возвращающая обработчик текущей МЭКзадачи (из которой вызывается эта функция). Табл. 3. Функция IecTaskGetCurrent Входы/выходы Имя Тип Input pResult POINTER TO RTS_IEC_RESULT Output IecTaskGetCurrent RTS_IEC_HANDLE Описание Указатель на тип RTS_IEC_RESULT, содержащий код ошибки как результат выполнения операции Обработчик текущей МЭКзадачи Использование любой из перечисленных функций предполагает создание объекта типа RTS_IEC_HANDLE и запись в него возвращаемого функцией значения. Для получения описания МЭК-задачи можно теперь использовать следующие функции (см. табл. 4 – табл. 5): IecTaskGetDesc IecTaskGetInfo3 IecTaskGetDesc – функция позволяет получить информацию о выбранной задаче в формате структуры Task_Desc2 (библиотека CmpIecTask). Табл. 4. Функция IecTaskGetDesc Входы/выходы Имя Тип Input hIecTask RTS_IEC_HANDLE Output IecTaskGetDesc POINTER TO Task_Desc2 Описание Обработчик МЭК-задачи, описание которой нужно получить Указатель на структуру с описанием задачи IecTaskGetInfo3 – функция позволяет получить информацию о выбранной задаче в формате структуры Task_Info2 (библиотека CmpIecTask). Табл. 5. IecTaskGetInfo3 Входы/выходы Имя Тип hIecTask RTS_IEC_HANDLE pResult POINTER TO RTS_IEC_RESULT Input Разработка в среде CODESYS 3.5 Описание Обработчик МЭК-задачи, описание которой нужно получить Указатель на тип RTS_IEC_RESULT, содер- 51 3. Основные функции программирования Output IecTaskGetInfo3 POINTER TO Task_Info2 жащий код ошибки как результат выполнения операции Указатель на структуру с описанием задачи Структура Task_Info2 содержит поля, часть которых отображается на вкладке Monitor элемента Task Configuration дерева устройств. Структура Task_Desc2 содержит в своем составе структуру Task_Info2, а также указатель на приложение, в котором вызывается данная задача, и некоторые другие поля с информацией. 3.10. Пример использования библиотеки CAA SerialCOM Данный пример демонстрирует использование библиотеки CAA SerialCOM для реализации обмена данными с внешним устройством через последовательный порт ПЛК NLScon-RSB. В примере рассматривается возможность отправки запроса и приема ответа от устройства. В качестве подключенного к ПЛК устройства рассматривался модуль RealLab! NLS-16DI, настроенный для работы по протоколу DCON (9600, 8N1, адрес 09h). Для работы в проект CODESYS понадобится добавить библиотеку CAA SerialCOM (рис. 3.43). Эта библиотека реализует 4 функциональных блока (см. табл. 6 – табл. 9), выполняющих основные функции с СОМ портом: открытие, запись, чтение и закрытие. Рис. 3.43. Библиотека CAA SerialCOM 52 Разработка в среде CODESYS 3.5 3. Основные функции программирования Табл. 6. Функциональный блок COM.Open Входы/выходы Input Имя Тип xExecute BOOL xDone xBusy BOOL BOOL xError BOOL Output Input Output usiListLength pParameterList eError hCom USINT CAA.PVOID ERROR CAA.HANDLE Описание Нарастающий фронт (перевод из FALSE в TRUE): ФБ начинает выполняться. Падающий фронт (из TRUE в FALSE): сброс выходов в 0. TRUE: ФБ успешно завершил работу TRUE: ФБ в состоянии выполнения TRUE: Произошла ошибка, ФБ прекращает выполняться FALSE: Ошибок не произошло Количество вхо ных параметров в массиве pParameterList Указатель на массив с параметрами СОМ порта Ошибка выполнения ФБ Возвращаемый ФБ обработчик открытого СОМ порта Табл. 7. Функциональный блок COM.Write Входы/выходы Input Output Имя Тип Описание xExecute BOOL Нарастающий фронт (перевод из FALSE в TRUE): ФБ начинает выполняться Падающий фронт (из TRUE в FALSE): сброс выходов в 0. xAbort BOOL TRUE: ФБ сразу прерывает работу, все его выходы устанавливаются в значения по умолчанию. udiTimeOut UDINT Определяет время (µs), по истечении которого ФБ прерывает работу из-за таймаута с сообщением об ошибке xDone BOOL TRUE: ФБ успешно завершил работу xBusy BOOL TRUE: ФБ в состоянии выполнения xError BOOL TRUE: Произошла ошибка, ФБ прекращает выполняться FALSE: Ошибок не произошло xAborted BOOL TRUE : Работа ФБ прервана пользователем Разработка в среде CODESYS 3.5 53 3. Основные функции программирования Input Output hCom CAA.HANDLE pBuffer CAA.PVOID szSize CAA.SIZE eError ERROR Обработчик открытого СОМ порта (предварительно получен как результат выполнения COM.Open) Указатель на буфер данных для отправки в СОМ порт Количество байт данных, подготовленных для отправки в СОМ порт Ошибка выполнения ФБ Табл. 8. Функциональный блок COM.Read Входы/выходы Input Output Inpt Имя Тип xExecute BOOL Нарастающий фронт (перевод из FALSE в TRUE): ФБ начинает выполняться Падающий фронт (из TRUE в FALSE): сброс выходов в 0. xAbort BOOL TRUE: ФБ сразу прерывает работу, все его выходы устанавливаются в значения по умолчанию. udiTimeOut UDINT Определяет время (µs), по истечении которого ФБ прерывает работу из-за таймаута с сообщением об ошибке xDone BOOL TRUE: ФБ успешно завершил работу xBusy BOOL TRUE: ФБ в состоянии выполнения xError BOOL TRUE: Произошла ошибка, ФБ прекращает выполняться FALSE: Ошибок не произошло xAborted BOOL TRUE : Работа ФБ прервана пользователем hCom CAA.HANDLE Обработчик открытого СОМ порта (предварительно получен как результат выполнения COM.Open) pBuffer CAA.PVOID Указатель на буфер для сохранения считанных данных из СОМ порта szBuffer CAA.SIZE Максимальный размер в байтах буфера для считываемых данных eError ERROR Ошибка выполнения ФБ szSize CAA.SIZE Возвращает количество принятых в pBuffer байт данных Output 54 Описание Разработка в среде CODESYS 3.5 3. Основные функции программирования Табл. 9. Функциональный блок COM.Close Scope Name Type Comment xExecute BOOL Нарастающий фронт (перевод из FALSE в TRUE): ФБ начинает выполняться Падающий фронт (из TRUE в FALSE): сброс выходов в 0 xDone BOOL TRUE: ФБ успешно завершил работу xBusy BOOL TRUE: ФБ в состоянии выполнения xError BOOL TRUE: Произошла ошибка, ФБ прекращает выполняться FALSE: Ошибок не произошло Input hCom CAA.HANDLE Обработчик открытого СОМ порта (предварительно получен как результат выполнения COM.Open) Output eError ERROR Ошибка выполнения ФБ Input Output Работу с COM портом удобнее всего описать по шагам с использованием оператора CASE: Рис. 3.44. Содержание основной программы проекта Шаг INIT отвечает за сброс используемых функциональных блоков и обнуление вспомогательных переменных. Остальные шаги соответствуют вызываемым ФБ библиотеки CAA SerialCOM. Перед вызовом ФБ COM.Open нужно сформировать настройки COM порта (рис. 2.1), которые затем передаются на вход ФБ, — pParameterList. Рис. 3.45. Настройка параметров COM-порта Разработка в среде CODESYS 3.5 55 3. Основные функции программирования Вызов экземпляра ФБ COM.Open (рис. 3.46). В качестве входных параметров вызова указываются настройки порта pParameterList и количество настроечных параметров usiListLength. Рис. 3.46. Вызов ФБ открытия COM-порта Результатом является обработчик открытого порта. Для передачи данных в открытый СОМ-порт используем экземпляр ФБ COM.Write . Предварительно потребуется сформировать буфер данных для записи. Поскольку данные в нашем примере отправляются в NLS-16DI, работающий по протоколу DCON, сформируем в символьном виде команду чтения имени модуля: ^09Mcr → 5Eh 30h 39h 4Dh 0Dh Здесь cr - возврат каретки (ASCII код 0Dh). Пример вызова ФБ для записи в порт приведен на рис. 3.47. Рис. 3.47. Выбор ФБ записи в COM Port При вызове экземпляра ФБ COM.Write требуется указывать обработчик открытого COM-порта, начальный адрес буфера данных для записи и количество байт данных для записи. Чтобы прочитать ответ модуля, нужно выполнить вызов экземпляра ФБ COM.Read, указав во входных параметрах обработчик открытого порта, начальный адрес буфера, куда будут записаны считанные данные, и максимальный размер буфера рис. 3.48. 56 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.48. Вызов ФБ чтения из COM-порта В результате работы данного ФБ в массив byReadData был записан ответ модуля, что соответствует символам !09NL16DI2cr (рис. 3.49). Рис. 3.49. Результат работы ФБ чтения Для завершения работы с портом используем экземпляр ФБ COM.Close. При вызове потребуется указать обработчик открытого порта. Рис. 3.50. Вызов ФБ COM.Close В проекте используется функция _BUFFER_CLEAR() библиотеки OSCAT Basic 3.31 для очистки байтового массива для хранения считанных из СОМ порта данных. 3.11. Пример использования библиотеки SysSocket Данный пример демонстрирует использование библиотеки SysSocket для реализации TCP-сокетов на ПЛК NLScon-RSB. В примере рассматривается возможность реализации сокета клиента и сокета сервера на ПЛК NLScon-RSB Разработка в среде CODESYS 3.5 57 3. Основные функции программирования для обмена данными c виртуальным ПЛК CODESYS Control Win V3 по сети Ethernet. Для работы с сокетами понадобятся следующие библиотеки CODESYS: SysSocket; CmpErrors. Для описания совместной работы серверного и клиентского TCP-сокетов удобно использовать схему. Указанная схема предполагает закрытие клиентского сокета каждый раз после получения ответа. Такая реализация работы сокетов не является эффективной, но в нашем случае она подходит для демонстрации работы TCP-сокетов сервера и одного клиента. Рис. 3.51. Схема работы серверного и клиентского TCP-сокетов 58 Разработка в среде CODESYS 3.5 3. Основные функции программирования 3.11.1. Реализация TCP-сокета сервера Работу с сокетом проще всего описать последовательностью шагов: создание сокета сервера, настройка опций, привязка к IP-адресу и порту, включение режима прослушивания, прием запроса на соединение («звонка») от клиента, обмен данными, закрытие сокета клиента, закрытие сокета сервера. Первые несколько шагов можно объединить в блок, отвечающий за инициализацию серверного сокета. Он будет включать использование следующих функций библиотеки SysSocket (см. табл. 10 – табл. 16): SysSockCreate – функция создания нового сокета. Возвращает дескриптор сокета. SysSockIoctl – функция, контролирующая режим работы сокета. SysSockSetOption – настройка сокета. SysSockInetAddr – конвертирует IP-адрес, заданный в строковой переменной, в 4-байтовый формат. SysSockHtons – конвертирует номер порта, возвращая номер с сетевым порядком байтов. SysSockBind – функция выполняет привязку сокета к адресу и порту, которые были предварительно заданы в структуре SOCKADDRESS. SysSockListen – функция «включает» прослушивание входящих клиентских соединений. Табл. 10. Функция SysSockCreate Входы/выходы Return Имя Тип Описание SysSockCreate RTS_IEC_HANDLE Дескриптор нового сокета. iAddressFamily INT Семейство адресов сокета (SOCKET_AF_INET) diType DINT Тип сокета (SOCKET_STREAM) diProtocol DINT Input pResult Протокол сокета (SOCKET_IPPROTO_TCP) POINTER TO Указатель на код ошибки выполнеRTS_IEC_RESULT ния функции (см. CmpErrors.library) Табл. 11. Функция SysSockIoctl Входы/выходы Return Имя SysSockIoctl Тип Описание RTS_IEC_RESULT Код ошибки выполнения функции (см. CmpErrors.library) Разработка в среде CODESYS 3.5 59 3. Основные функции программирования hSocket Input diCommand pdiParameter RTS_IEC_HANDLE Дескриптор сокета Команда (SOCKET_FIONBIO — это команда управления блокирующим DINT режимом*) POINTER TO DINT Значение параметра команды (16#1) * Блокирующий (синхронный) режим работы сокета позволяет функциям типа SysSockAccept(), SysSockSend(), SysSockRecv() и некоторым другим выполняться, не возвращая управление программному коду, пока не будет получен результат функции. Например, при случайном обрыве связи по Ethernet блокирующий режим приведет к «зависанию» программного кода на выполнении одной из перечисленных функций. Чтобы исключить такую ситуацию, сокет переводят в неблокирующий режим (как в данном примере). Табл. 12. Функция SysSockSetOption Входы/выходы Return Input Имя Тип SysSockSetOption RTS_IEC_RESULT Описание Код ошибки выполнения функции (см. CmpErrors.library) hSocket RTS_IEC_HANDLE Дескриптор сокета diLevel DINT diOption DINT pdiOptionValue POINTER TO DINT diOptionLen DINT Уровень сокета (SOCKET_SOL) Опция (SOCKET_SO_REUSEADDR*) Указатель на значение опции (значение 16#1) Длина значения в байтах * SOCKET_SO_REUSEADDR – опция, отвечающая за повторное использование локального адреса, уже используемого другим открытым сокетом. Эта опция позволяет исключить появление ошибки ERR_SOCK_ADDRINUSE = 16#207. Табл. 13. Функция SysSockInetAddr Входы/выходы Return Имя Тип SysSockInetAddr RTS_IEC_RESULT szIPAddress REFERENCE TO STRING pInAddr POINTER TO UDINT Input 60 Описание Код ошибки выполнения функции (см. CmpErrors.library) Строковая переменная с адресом Указатель на поле структуры SOCKADDRESS.sin_addr.ulAddr Разработка в среде CODESYS 3.5 3. Основные функции программирования Табл. 14. Функция SysSockHtons Входы/выходы Имя Тип Описание Return SysSockHtons WORD Результат конвертирования Input usHost WORD Значение номера порта Табл. 15. Функция SysSockBind Входы/выходы Return Input Имя Тип Описание SysSockBind RTS_IEC_RESULT Код ошибки выполнения функции (см. CmpErrors.library) hSocket RTS_IEC_HANDLE Дескриптор сокета pSockAddr POINTER TO SOCKADDRESS Адрес сокета (указатель на предварительно сформированную структуру SOCKADDRESS) diSockAddrSize DINT Размер структуры адреса сокета Табл. 16. Функция SysSockListen Входы/выходы Return Input Имя Тип Описание SysSockListen RTS_IEC_RESULT Код ошибки выполнения функции (см. CmpErrors.library) hSocket RTS_IEC_HANDLE Дескриптор сокета diMaxConnections DINT Максимальное количество клиентских подключений Примеры использования перечисленных функций приведены ниже. Рис. 3.52. Функции для инициализации серверного сокета Следующий шаг алгоритма – прием запроса на соединение от клиента. На этом этапе требуется одна основная функция: Разработка в среде CODESYS 3.5 61 3. Основные функции программирования SysSockAccept – функция принимает запрос на следующее входное клиентское соединение, формируя дескриптор для нового клиентского соединения. Табл. 17. Функция SysSockAccept Входы/выходы Имя Тип Return SysSockAccept RTS_IEC_HANDLE Input hSocket RTS_IEC_HANDLE pSockAddr POINTER TO SOCKADDRESS pdiSockAddrSize POINTER TO DINT pResult POINTER TO RTS_IEC_RESULT Описание Дескриптор «принятого» клиента или значение 16#FFFFFFFF при отсутствии принятого клиентского Дескриптор серверногосоедисокета нения. Указатель на структуру адреса подлкюченного клиента Указатель на переменную, Указатель на код ошибки выполнения функции (см. CmpErrors.library) Если функция SysSockAccept() возвращает значение, отличное от 16#FFFFFFFF, значит клиентское соединение успешно принято для обмена данными. Тогда следует включить неблокирующий режим для этого клиента с помощью функции SysSockIoctl(), указав в ее параметрах дескриптор клиента. Следующий шаг выполняет непосредственно обмен данными. Для этого используются функции SysSockSend() и SysSockRecv(). SysSockSend – функция отправляет данные в TCP сокет. Табл. 18. Функция SysSockSend Входы/выходы Return Имя Тип SysSockSend XINT hSocket RTS_IEC_HANDLE pbyBuffer POINTER TO BYTE diBufferSize XINT Количество переданных байт. 0 в случае ошибки передачи Дескриптор клиентского сокета Буфер данных, подготовленных для отправки Максимальный размер буфера diFlags DINT Параметр, позволяющий задать дополнительные опции для функции (SOCKET_MSG_NONE – без доп. опций) pResult POINTER TO RTS_IEC_RESULT Указатель на код ошибки выполнения функции (см. CmpErrors.library). Input 62 Описание Разработка в среде CODESYS 3.5 3. Основные функции программирования SysSockRecv – функция принимает данные из TCP сокета: Табл. 19. Функция SysSockRecv Входы/выходы Return Имя Тип Описание SysSockRecv XINT hSocket RTS_IEC_HANDLE pbyBuffer POINTER TO BYTE Количество принятых байт. 0 в случае ошибки передачи Дескриптор клиентского сокета Буфер для приема данных diBufferSize XINT Максимальный размер буфера diFlags DINT Параметр, позволяющий задать дополнительные опции для функции (SOCKET_MSG_NONE – без доп. опций) pResult POINTER TO RTS_IEC_RESULT Указатель на код ошибки выполнения функции (см. CmpErrors.library) Input Если дальнейший обмен данными с клиентом не предусмотрен, то следует закрыть его сокет. На последнем шаге функция SysSockClose выполняет закрытие и может быть использована для закрытия как клиентского, так и серверного сокета. Табл. 20. Функция SysSockClose Входы/выходы Имя Тип Описание Return SysSockClose RTS_IEC_RESULT Код ошибки выполнения функции (см. CmpErrors.library) Input hSocket RTS_IEC_HANDLE Дескриптор сокета 3.11.2. Реализация TCP-сокета клиента Работа клиентского сокета также может быть описана последовательностью шагов: инициализация сокета, подключение к серверу, обмен данными и закрытие сокета. Настройка клиента в основном предполагает использование тех же функций, что и для сервера, но с декстриптором сокета клиента (рис. 3.53). Разработка в среде CODESYS 3.5 63 3. Основные функции программирования Рис. 3.53. Настройка клиентского сокета На втором шаге, подключении к серверу, со стороны клиента используется функция SysSockConnect(): подключиться к TCP-серверу как клиент. Функция отправляет запрос на подключение, который на сервере принимается функцией SysSockAccept(). Табл. 21. Функция SysSockConnect() Входы/выходы Return Input Имя Тип Описание SysSockConnect RTS_IEC_RESULT Код ошибки выполнения функции (см. CmpErrors.library) hSocket RTS_IEC_HANDLE Дескриптор клиентского сокета pSockAddr POINTER TO SOCKADDRESS Указатель на структуру SOCKADDRESS, в которой содержится адрес сервера diSockAddrSize DINT Размер структуры SOCKADDRESS При обмене данными и закрытии клиентского сокета в программе TCPклиента используются те же функции, что и у сервера, подобным образом. В данном примере можно использовать ПЛК NLScon-RSB как TCP-сервер и как TCP- клиент. Если NLScon-RSB выполняет серверные функции, то клиентом может быть запущенный на ПК CODESYS Control Win V3, и наоборот, если NLScon-RSB – клиент, то сервер — виртуальный контроллер. При этом следует не забывать в серверной и клиентской программах менять IP-адрес на адрес сервера (рис. 3.54). 64 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.54. Настройка IP-адреса сервера в серверном и клиентском приложениях 3.12. Пример использования библиотеки SysCom Данный проект демонстрирует пример использования библиотеки SysCOM (рис. 3.55) для реализации обмена данными с внешним устройством через последовательный порт ПЛК NLScon-RSB (или NLScon-CE). В примере рассматривается возможность отправки запроса и приема ответа от устройства. В качестве подключенного к ПЛК устройства рассматривался модуль RealLab! NLS-16DI, настроенный для работы по протоколу DCON (57600, 8N1, адрес 09h). Для работы в проект CODESYS понадобится добавить библиотеку SysCOM. Эта библиотека реализует функции, выполняющие основные операции с СОМ портом: открытие, установка параметров соединения, запись, чтение и закрытие. Разработка в среде CODESYS 3.5 65 3. Основные функции программирования Рис. 3.55. Библиотека SysCOM В данном примере работа с COM-портом включает четыре этапа: открытие порта (и последующее задание настроек соединения), запись в порт, чтение ответа модуля NLS-16DI и закрытие порта (рис. 3.56 – рис. 3.59). Для открытия порта используется функция SysComOpen и затем, если получен обработчик порта, для задания типовых параметров соединения – функция SysComSetSettings. Рис. 3.56. Открытие COM-порта Таким образом, открытый порт настроен на передачу данных в COM порт №1 ПЛК со скоростью 57600 бит/с, формат 8N1. 66 Разработка в среде CODESYS 3.5 3. Основные функции программирования Запись в порт производится с помощью функции SysComWrite. В функцию записи в качестве аргументов передается обработчик открытого порта, ссылка на начальный адрес подготовленных для записи данных, размер этих данных в байтах и количество миллисекунд (ulTimeout), отведенных на запись. Функция возвращает количество отправленных в порт байтов. При этом, если за отведенное в ulTimeout время были переданы не все подготовленные для передачи байты, то соответственно возвращаемое количество байт будет меньше, чем ulSize. Рис. 3.57. Запись в COM-порт После выполнения функции в переменную dwWritten запишется количество байт, отправленных в порт. В данном примере в порт отправляется последовательность символов: «^09Mcr» - команда чтения имени устройства по протоколу DCON. Для чтения ответа модуля используется функция SysComRead. Аргументами для нее являются обработчик открытого COM-порта; ссылка на область данных для записи считанных байт; количество байт, которые предполагается считать; количество миллисекунд (ulTimeout), отведенных на чтение. Функция возвращает количество считанных за время ulTimeout байтов. При этом, если за отведенное в ulTimeout время были считаны не все байты, то соответственно возвращаемое количество байт будет меньше, чем ulSize. Рис. 3.58. Чтение из COM-порта Функция SysComClose закрывает COM-порт. Аргументом функции является обработчик открытого порта. Разработка в среде CODESYS 3.5 67 3. Основные функции программирования Рис. 3.59. Закрытие COM-порта В проекте используется функция _BUFFER_CLEAR() библиотеки OSCAT Basic 3.31 для очистки байтового массива для хранения считанных из СОМ порта данных. Кроме того, в проекте использованы: генератор импульсов и R_TRIG для циклического запуска работы с портом: Рис. 3.60 Генератор импульсов таймеры для реализации задержки в 50мс между этапами работы с портом: Рис. 3.61. Таймеры 3.13. Пример работы ПЛК в качестве MQTT клиента Для использования ПЛК RealLab в роли клиента MQTT необходимо установить в CODESYS библиотеку MQTT Client Library. Также можно скачать обновленную версию пакета таргет-файлов RealLab для CODESYS, данная библиотека (версии 3.5.13.26 и 3.5.20.3) включена в данный пакет. Важно! При добавлении библиотеки в проект используйте версию 3.5.13.26 для CODESYS 3.5.16.40, а версию 3.5.20.3 для CODESYS 3.5.17.x и выше. Помимо проекта, описанного ниже, на сайте есть второй проект, демонстрирующий подключение ПЛК в роли клиента MQTT. Данный пример демонстрирует использование ПЛК NLScon-RSB в качестве MQTT-клиента для обмена данными по сети Ethernet. 68 Разработка в среде CODESYS 3.5 3. Основные функции программирования Для работы проекта понадобятся: библиотека MQTT Client Library (Stefan Roßmann Engineering Solutions). MQTT-брокер HiveMQ Public Broker; приложение для MQTT-клиента, например, MQTTX Ссылка для скачивания: MQTTX Download; Для использования ПЛК в качестве MQTT-клиента понадобится функциональный блок FB_MQTTClient библиотеки MQTT Client Library (рис. 3.62). Экземпляр данного ФБ в CFC-диаграммах CODESYS выглядит следующим образом: Рис. 3.62. Экземпляр FB_MQTTClient Для обмена данными понадобится настроить несколько входов этого ФБ: Табл. 22. Входы функционального блока FB_MQTTClient Вход Тип FB_MQTTClient переменной Пояснение Присвоенное значение i_xEnable BOOL По нарастающему фронту происходит автоматическое подключе- TRUE ние к MQTT- брокеру i_sBrokerAddress STRING IP или URL MQTT-брокера broker.hivemq.com i_uiPort UINT Порт MQTT-брокера 1883 i_xAutoReconnect BOOL TRUE – автоматическое переподключение после возникновения TRUE исключения Разработка в среде CODESYS 3.5 69 3. Основные функции программирования i_sPayload STRING Сообщение для публикации i_sTopicPublish STRING Топик для публикации сообщений mqttTest_pub i_sTopicSubscribe STRING Топик для подписки i_xPublish BOOL Нарастающий фронт – публикация сообщения из i_sPayload в топик i_sTopicPublish. i_xSubscribe BOOL Нарастающий фронт – подписка на топик i_sTopicSubscribe. q_sLastReceivedMessage STRING Последнее сообщение, полученное от топика, на который подписался клиент. q_sLastReceivedMessageTopic STRING Топик от которого пришло последнее полученное сообщение. hello mqttTest_sub Вызов экземпляра FB_MQTTClient на ST выглядит следующим образом: Рис. 3.63. Вызов экземпляра FB_MQTTClient Чтобы подключиться к MQTT-брокеру, нужно знать его IP (или URL) и номер порта (рис. 3.64). В данном проекте в качестве MQTT-брокера использован HiveMQ Dashboard. 70 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.64. Адрес и порт MQTT-брокера После загрузки и запуска проекта на ПЛК с экрана визуализации можно будет отправлять и принимать сообщения. Для проверки работы можно выбрать один и тот же топик для подписки и для публикации. Тогда сообщение, опубликованное на вкладке Publish (нажать на кнопку «Опубликовать»), должно появиться в поле на вкладке Subscribe (Нажать на кнопку «Подписаться»). Рис. 3.65. Управление подпиской и публикацией с экрана визуализации на ПЛК Для проверки работы с разными топиками подписки и публикации используется еще один MQTT-клиент - приложение MQTTX на ПК. Для подключения MQTT-клиента в приложении MQTTX требуется следующее: 1. Создать новое подключение к брокеру; Разработка в среде CODESYS 3.5 71 3. Основные функции программирования Рис. 3.66. Создание нового подключения в MQTTX 2. Указать имя подключения (Name), адрес брокера (Host), номер порта (Port) и версию протокола, соответствующую используемой библиотеке (MQTT Version = 3.1.1). Затем в правом верхнем углу — подключение (Connect). Рис. 3.67. Настройка подключения к брокеру broker.hivemq.com При успешном подключении появится уведомление и окно MQTTX примет вид: 72 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.68. Вид окна MQTTX при успешном подключении к брокеру 3. Для подписки на топик нужно выбрать New Subscription и указать название топика, например, mqttTest_pub. Далее — подтвердить подписку (Confirm). Рис. 3.69. Выбор топика для подписки 4. На экране визуализации во вкладке Publish сформировать сообщение для публикации и нажать кнопку Опубликовать. Сообщение должно появиться в MQTTX в области с очередью сообщений: Рис. 3.70. Прием сообщения в MQTTX Разработка в среде CODESYS 3.5 73 3. Основные функции программирования 5. Для отправки сообщения нужно использовать нижнюю часть окна MQTTX. Потребуется указать имя топика для публикации (mqttTest_sub), само сообщение и нажать на кнопку отправки. Отправленное сообщение должно появиться на экране визуализации ПЛК во вкладке Subscribe в поле Сообщение. Рис. 3.71 Отправка сообщения из MQTTX 74 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.72. Полученное сообщение с топиком mqttTest_sub 3.14. Энергонезависимые переменные Реманентные переменные могут сохранять свои значения в течение обычного цикла программы. Вы можете объявлять реманентные переменные как RETAIN-переменные или даже как перманентные переменные в приложении. Для полной функциональности необходима достаточная память на ПЛК (NVRam, USV). При отсутствии подходящего диапазона памяти значения VAR RETAIN или VAR PERSISTENT будут потеряны в случае сбоя питания! RETAIN-переменные объявляются с использованием ключевого слова RETAIN после ключевого слова типа переменной (VAR, VAR_GLOBAL и т.д.) в разделе объявления программного объекта. Они сохраняют свои значения после непредвиденного отключения (или онлайн-команды Сброс). При перезапуске программы система продолжает работу с сохраненными значениями. При этом CODESYS инициализирует ‘обычные’ переменные либо с заданными значениями, либо с начальными значениями по умолчанию. Пример инициализации: В POU: VAR RETAIN counter:INT:=1; END_VAR В GVL: VAR_GLOBAL RETAIN gvarRem : INT; END_VAR PERSISTENT-переменные при загрузке нового проекта сохраняют свои значения, если список PERSISTENT-переменных в новом проекте не отличается от старого. PERSISTENT-переменные удобно использовать в тех случаях, когда заранее известно, что проект будет дорабатываться – например, он длительное время будет находиться в опытной эксплуатации, за время которой обслуживающий персонал будет формулировать пожелания и замечания. В течение этого времени операторы могут задавать уставки, параметры рецептов и т. д. Разработка в среде CODESYS 3.5 75 3. Основные функции программирования Рис. 3.73 Добавление списка перманентных переменных Далее появляется вкладка, где вы можете перечислить все перманентные переменные. Рис. 3.74. Запись переменных Если некоторые переменные объявлены в других структурах и POU, то необходимо указать все пути экземпляров, как показано на рис. 3.75. 76 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.75. Добавление путей экземпляров Рис. 3.76. Итоговый результат Примечание: Начиная с CODESYS V3.3.0.1, объявление VAR_GLOBAL PERSISTENT имеет тот же действие, что и объявление VAR_GLOBAL PERSISTENT RETAIN или VAR_GLOBAL RETAIN PERSISTENT. 3.15. Работа с GPIO на NLScon-RSB 3.15.1. Работа с GPIO в проекте CODESYS Для работы с GPIO у вас должен быть установлен пакет таргет-файлов RealLab версии 1.9. Скачать его можно с нашего сайта – reallab.ru. Запустите CODESYS. Создайте стандартный проект CODESYS и выберите в роли устройства “CODESYS Control NIL AP (RealLab)”. Разработка в среде CODESYS 3.5 77 3. Основные функции программирования Рис. 3.77. Выбор устройства для создания проекта После создания проекта в его дереве появится место для подключения шаблона управления дискретными входами и выходами. (рис. 3.78). Рис. 3.78. Дерево проекта Чтобы получить возможность управления дискретными входами и выходами кликните правой кнопкой мыши по <Empty> в дереве устройств проекта и выберите “Подключить устройство”. В открывшемся окне дважды кликните по “Digital Inputs Outputs” – шаблон управления дискретными входам/выходами будет добавлен в проект. При возникновении ошибки “Невозможно открыть библиотеку #Raspberry Pi Peripherals” выполните следующие действия: 78 Разработка в среде CODESYS 3.5 3. Основные функции программирования Откройте менеджер библиотек – плейсхолдеры. Кликните по строке “Raspberry Pi Peripherals” и из выпадающего списка выберите библиотеку версии 4.0.0.0. Рис. 3.79. Добавление библиотеки Рис. 3.80. Дерево устройства с шаблоном Откройте управление дискретными входами и выходами двойным кликом по компоненту “Digital_Inputs_Outputs” в дереве проекта. Во вкладке конфигурации содержится таблица, где каждому входу/выходу GPIO можно назначить роль (вход/выход/не использовать), а также значение по умолчанию (рис. 3.81). Назначение GPIO ПЛК представлено в Табл. 1. Примечание. При добавлении шаблона управления дискретными входами/выходами в проект, изменится индикация состояния CODESYS Разработка в среде CODESYS 3.5 79 3. Основные функции программирования на ПЛК. Если CODESYS работает (переключатель в положении Старт) – светодиод Старт не будет светиться. Если CODESYS будет остановлен (переключатель в положении Стоп) – светодиод Стоп будет светиться красным. Это обсуловлено особенностью взаимодействия среды CODESYS с GPIO ПЛК. Табл. 1 Назначение GPIO. GPIO Описание Функция 2 Дикретный вход NLScon-RSB Din1 на ПЛК серии 3 Дикретный вход NLScon-RSB Din0 на ПЛК серии 12 Дискретный выход Dout0 ПЛК серии NLSconRSB Output 13 Дискретный выход Dout1 ПЛК серии NLSconRSB Output 30 Отвечает за наличие питания от сети. True – питание от сети, False – питание от АКБ. только “not used” Input Input Рис. 3.81. Конфигурация GPIO Во вкладке “Соотнесение входов/выходов” на каждый вход и выход можно назначить переменную для использования ее в программе. Для GPIO, назначенных на вход, соотносить переменную из канала digital input. Для GPIO, назначенных на выход – соотносить переменные из канала digital outputs. (см. Рис. 3.77). 80 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.82. Соотнесение переменных GPIO После назначения соотнесения переменных c входами/выходами GPIO, можно использовать их в коде программы как логические (BOOL) переменные. 3.15.2. Настройка конфигурационного файла CODESYS RT Для того, чтобы управление дискретными входами и выходами на ПЛК серии NLScon-RSB в CODESYS работало корректно, необходимо разрешить выполнение команд Linux в среде исполнения CODESYS. Если этого не сделать, то все входы/выходы будут отображаться как False: Для разрешения вызова команд Linux добавьте строки в конфигурационный файл среды исполнения CODESYS. Для этого подключитесь к ПЛК через VNC и запустите Терминал. Выполните команду, которая откроет конфиг: sudo nano /usr/bin/codesys/CODESYSControl.cfg Добавьте строки, указанные ниже. [SysProcess] BasePriority=Realtime Command=AllowAll Сохраните файл комбинацией клавиш Перезагрузите ПЛК командой reboot. Разработка в среде CODESYS 3.5 Ctrl+O, Enter, Ctrl+X. 81 3. Основные функции программирования 3.16. Рекомендации по настройке визуализации Если наблюдаются проблемы со скоростью работы визуализации на ПЛК NLScon-RSB и A40, пользователю следует корректно настроить следующие параметры (рис. 3.83 – рис. 3.86): Раздел TargetVisualization в Visualization Manager’е. Параметр “Частота обновления визуализации” установите равным 40 мс. Рис. 3.83. Параметры таргет-визуализации Раздел WebVisualization в Visualization Manager’е. Параметр “Частота обновления визуализации” установите равным 40 мс. 82 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.84. Параметры веб-визуализации Конфигурация задачи VISU_TASK, параметр “Частота обновления визуализации” установите равным 40 мс (или тому, который вы установили в таргет-визуализации или веб-визуализации). Рис. 3.85. Параметры задачи VISU_TASK Если изменение выше указанных параметров не помогли, попробуйте установить Default стиль визуализации. Рис. 3.86. Параметры стиля визуализации Также попробуйте снять галочку с опции “Сглаживания”. Разработка в среде CODESYS 3.5 83 3. Основные функции программирования Рис. 3.87. Отключение сглаживания 3.17. Обмен по сети Modbus RTU с помощью библиотеки ModbusFB 3.17.1. ПЛК – Ведущий Данный пример демонстрирует пример использования библиотеки ModbusFB для настройки ПЛК NLScon-RSB в качестве ведущего устройства, а модуль NLS-16DI — в качестве ведомого в сети Modbus RTU. С помощью стандартного функционала CODESYS в дерево устройств добавлено устройство MasterDevice (NLScon-RSB). Рис. 3.88. Дерево устройств проекта Для организации обмена с помощью функций библиотеки ModbusFB в Менеджере библиотек для ведущего и ведомого устройств добавлены библиотеки ModbusFB, SysCom и Standard (рис. 3.89). 84 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.89. Менеджер библиотек Для настройки ПЛК NLScon-RSB в качестве Modbus-мастера с помощью функционала библиотеки Modbus FB в программе MasterMain выполнено следующее: 1. Создан экземпляр функционального блока (ФБ) мастера (клиента) ModbusFB.ClientSerial; client : ModbusFB.ClientSerial; 2. Созданы экземпляры ФБ для отправки запросов мастером: чтение регистров хранения (ФБ ModbusFB.ClientRequestReadHoldingRegisters); чтение входных InputRegisters); регистров (ФБ ModbusFB.ClientRequestRead- clientRequestReadHoldingRegisters: ModbusFB.ClientRequestReadHoldingRegisters; clientRequestReadInputRegisters : ModbusFB.ClientRequestReadInputRegisters; 3. Созданы массивы данных для подготовки значений, записываемых в регистры хранения слейва, и для хранения считанных из слейва значений регистров хранения и входных регистров; aUINT_holding: ARRAY [0..1] OF UINT; aUINT_input: ARRAY [0..1] OF UINT; 4. Настройка мастера: настройка номера COM-порта, к которому подключен опрашиваемый слейв; скорости и формата передачи данных; протокол (RTU или ASCII); настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xConnect. client(iPort:=SysCom.SYS_COM_PORTS.SYS_COMPORT2, dwBaudrate := SysCom.SYS_BR_57600, byDataBits:=byDataBits, Разработка в среде CODESYS 3.5 85 3. Основные функции программирования eRtuAscii:=eRtuAscii, nectDisconnect OR udiLogOptions:=(ModbusFB.LoggingOptions.ClientCon- ModbusFB.LoggingOptions.ClientReceivedValidReplies)); client(xConnect:=TRUE); 5. Настройка параметров запросов: привязка запроса к мастеру; адрес слейва; начальный адрес области данных; количество регистров; указатель на начало массива переменных мастера, куда будут записаны считанные из слейва данные или где находятся подготовленные для записи в слейв значения clientRequestReadHoldingRegisters(rClient:=client, uiUnitId:=9, uiStartItem:=16#0200, uiQuantity:=1, pData:=ADR(aUINT_holding[0])); 6. После того, как мастер и запросы настроены, требуется циклически вызывать экземпляр client ФБ ModbusFB.ClientSerial и запускать запросы установкой их входных переменных xExecute в TRUE. Для проверки результатов работы запроса используются его выходные переменные xDone и xError. Выход xDone = TRUE в случае успешно выполненного запроса, иначе xDone = FALSE, а выход xError = TRUE. После проверки результатов работы запроса следует сбросить переменную xExecute в FALSE. В данном примере используются два запроса: считать состояние дискретных входов (Modbus-функция 04, адрес 0h0000, 1 регистр) и считать адрес модуля (Modbus-функция 03, адрес 0h0200, 1 регистр). В результате опроса модуля считанные данные записываются в соответствующие переменные в ПЛК (см. рис. 3.90): «входные регистры» - адрес 9, «регистры хранения» - состояние входов 4096 (0h1000 – 1 на входе Din12). Рис. 3.90. Результаты опроса NLS-16DI 3.17.2. ПЛК – Слейв Данный пример демонстрирует использование библиотеки ModbusFB для настройки ПЛК NLScon-RSB в качестве ведомого устройства, а ПЛК 86 Разработка в среде CODESYS 3.5 3. Основные функции программирования CODESYS Control Win V3 — в качестве ведущего в сети Modbus RTU (рис. 3.91). С помощью стандартного функционала CODESYS в дерево устройств добавлены устройства MasterDevice (CODESYS Control Win V3) и SlaveDevice (NLScon-RSB). Рис. 3.91. Конфигурация дерева устройств для обмена данными в сети Modbus RTU Для организации обмена с помощью функций библиотеки ModbusFB в Менеджере библиотек для ведущего и ведомого устройств добавлены библиотеки ModbusFB, SysCom и Standard (рис. 3.92). Рис. 3.92. Менеджер библиотек Для настройки виртуального ПЛК CODESYS Control Win V3 в качестве Modbus-мастера с помощью функционала библиотеки Modbus FB в программе MasterMain выполнено следующее: 1. Создан экземпляр функционального блока (ФБ) мастера (клиента) ModbusFB.ClientSerial; Разработка в среде CODESYS 3.5 87 3. Основные функции программирования client: ModbusFB.ClientSerial; 2. Созданы экземпляры ФБ для отправки запросов мастером: чтение регистров хранения (ФБ ModbusFB.ClientRequestReadHoldingRegisters); чтение входных регистров (ФБ ModbusFB.ClientRequestReadInputRegisters); запись регистров хранения (ФБ ModbusFB.ClientRequestWriteMultipleRegisters); clientRequestReadHoldingRegisters : ModbusFB.ClientRequestReadHoldingRegisters; clientRequestReadInputRegisters : ModbusFB.ClientRequestReadInputRegisters; clientRequestWriteMultipleRegisters : ModbusFB.ClientRequestWriteMultipleRegisters 3. Созданы массивы данных для подготовки значений, записываемых в регистры хранения слейва, и для хранения считанных из слейва значений регистров хранения и входных регистров; aUINT_holding : ARRAY [0..10] OF UINT; aUINT_input : ARRAY [0..10] OF UINT; aUINT_multiple : ARRAY [0..10] OF UINT; 4. Настройка мастера: настройка номера COM-порта, к которому подключен опрашиваемый слейв; скорости и формата передачи данных; протокол (RTU или ASCII); настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xConnect. client(iPort:=SysCom.SYS_COM_PORTS.SYS_COMPORT3, dwBaudrate := SysCom.SYS_BR_57600, byDataBits:=byDataBits, eRtuAscii:=eRtuAscii, nectDisconnect OR udiLogOptions:=(ModbusFB.LoggingOptions.ClientCon- ModbusFB.LoggingOptions.ClientReceivedValidReplies)); client(xConnect:=TRUE); 5. Настройка параметров запросов: привязка запроса к мастеру; адрес слейва; начальный адрес области данных; количество регистров; указатель на начало массива переменных мастера, куда будут записаны считанные из слейва данные или где находятся подготовленные для записи в слейв значения. clientRequestReadHoldingRegisters(rClient:=client, uiUnitId:=1, uiStartItem:=5, uiQuantity:=2, pData:=ADR(aUINT_holding[0])); 6) После того, как мастер и запросы настроены, требуется циклически вызывать экземпляр client ФБ ModbusFB.ClientSerial и запускать запросы 88 Разработка в среде CODESYS 3.5 3. Основные функции программирования установкой их входных переменных xExecute в TRUE. Для проверки результатов работы запроса используются его выходные переменные xDone и xError. Выход xDone = TRUE в случае успешно выполненного запроса, иначе xDone = FALSE, а выход xError = TRUE. После проверки результатов работы запроса следует сбросить переменную xExecute в FALSE. Для настройки ПЛК NLScon-RSB в качестве Modbus-слейва с помощью функционала библиотеки Modbus FB в программе SlaveMain выполнено следующее: 1. Создан экземпляр функционального блока (ФБ) мастера (клиента) ModbusFB.ClientSerial; serverSerial: ModbusFB.ServerSerial; 2. Созданы экземпляр ФБ ModbusFB.ExampleDataModel для формирования модели данных слейва — набора регистров, доступных для обмена данными по Modbus RTU. exampleDataModel: ModbusFB.ExampleDataModel; Модель данных ModbusFB.ExampleDataModel является примером формирования набора регистров для слейва и включает следующие секции: discrete inputs; coils; input registers; holding registers. Каждая секция включает по 2 поля данных и имеет начальный адрес 5 по умолчанию. 3. Настройка разрешенных для слейва Modbus-функций: fcsSupported: ModbusFB.SupportedFcs := ( ReadHoldingRegisters:=TRUE, ReadInputRegisters:=TRUE, WriteMultipleRegisters:=TRUE); 4. Настройка слейва: настройка разрешенных Modbus-функций, привязка к модели данных слейва, адрес слейва, настройка номера COM-порта слейва, к которому подключен мастер; скорость и формат передачи данных; протокол (RTU или ASCII); настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xEnable. serverSerial(fcsSupported:=fcsSupported, dataModel:=exampleDataModel.tableDefs, xEnable:=FALSE, uiUnitId:=1, iPort:=SysCom.SYS_COM_PORTS.SYS_COMPORT2, byDataBits:=byDataBits, eRtuAscii:=eRtuAscii, Разработка в среде CODESYS 3.5 89 3. Основные функции программирования dwBaudrate := SysCom.SYS_BR_57600, udiLogOptions:=(ModbusFB.LoggingOptions.ServerStartStop ModbusFB.LoggingOptions.ServerReceivedValidRequests)); OR 5. После того, как слейв настроен, требуется циклически вызывать экземпляр serverSerial ФБ ModbusFB.ServerSerial. Вместо встроенной в библиотеку ModbusFB модели данных ModbusFB.ExampleDataModel можно настроить пользовательскую модель данных типа ModbusFB.TableDefinitions (рис. 3.94). Этот тип представляет собой структуру, включающую описание секций для четырех типов данных: discrete inputs, coils, input registers, holding registers. В данном примере пользовательская модель данных реализована для устройства SlaveDevice_RegisterModel в программе SlaveMain. Рис. 3.93. Проект с пользовательской моделью данных в Modbus-слейв В проекте создана пользовательская модель данных tableDefs типа ModbusFB.TableDefinitions. Эта модель в соответствии со своим типом состоит из четырех структур типа ModbusFB.TableDefinition: tableDiscreteInputs; tableCoils; tableInputRegisters; tableHoldingRegisters. Каждая из перечисленных структур включает следующие поля: количество секций в структуре и указатель на первую секцию. 90 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.94. Модель данных типа ModbusFB.TableDefinitions Таким образом, для Modbus RTU слейва модель данных включает: 1 секцию «дискретных входов», 2 секции «катушек», 3 секции «входных регистров» и 2 секции «регистров хранения». Секции задаются массивом из некоторого количества структур типа ModbusFB.TableSection (рис. 3.95), например, инициализация секций для «входных регистров». Рис. 3.95. Секция «входных регистров» типа ModbusFB.TableSection В данном случае секции для «входных регистров» представляют собой 3 структуры типа ModbusFB.TableSection, которые описываются параметрами: начальный адрес uiStart; количество uiNumDataItems полей данных в секции (бит/байт/слов – в зависимости от назначения секции); Разработка в среде CODESYS 3.5 91 3. Основные функции программирования указатель pStartAddr на область памяти в ПЛК, выделенную для этой секции; размер uiDataItemSize в битах поля данных. Для discrete inputs/coils значение uiDataItemSize может быть равно 1 или 8 бит, для input/holding registers значение uiDataItemSize равно 16 бит. Выбор размера для discrete inputs/coils зависит от того, как они привязаны к области памяти в ПЛК: если выделенная область памяти — это ARRAY [0..x] OF BOOL, то uiDataItemSize=8, если discrete inputs/coils адресуются побитово, то uiDataItemSize=1. Для input/holding registers область памяти должна быть массивом ARRAY [0..x] OF UINT. В данном примере для секции «входных регистров» выделены области памяти: aInputRegistersMemory1 : ARRAY [0..6] OF UINT; aInputRegistersMemory2 : ARRAY [0..2] OF UINT; В нашем случае «входные регистры» для ПЛК настроены следующим образом: первая секция: начальный адрес 0, количество полей в секции 3 штуки (3 регистра), их значения будут хранится в первых трех элементах массива aInputRegistersMemory1[0..2], размерность каждого «входного регистра» – 16 бит. вторая секция: начальный адрес 5, количество полей в секции 4 штуки (4 регистра), их значения будут хранится в последних четырех элементах массива aInputRegistersMemory1[3..6], размерность каждого «входного регистра» – 16 бит. третья секция: начальный адрес 10, количество полей в секции 3 штуки (3 регистра), их значения будут хранится в первых трех элемента массива aInputRegistersMemory2[0..2], размерность каждого «входного регистра» – 16 бит. Подобным образом в программе SlaveMain объявлены секции для discrete inputs, coils и holding registers. Для всех секций в программе должны быть выделены области памяти (рис. 3.96). 92 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.96. Области памяти для пользовательской модели данных ПЛК Чтобы запустить Modbus RTU слейв на ПЛК, потребуется настроить serverSerial (экземпляр ФБ ModbusFB.ServerSerial) и разрешить его работу: 1. Настройка слейва: настройка разрешенных Modbus-функций, привязка к модели данных слейва, адрес слейва, настройка номера COM-порта слейва, к которому подключен мастер; скорость и формат передачи данных; протокол (RTU или ASCII); настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xEnable. serverSerial(fcsSupported:=fcsSupported, dataModel:=tableDefs, xEnable:=FALSE, uiUnitId:=1, iPort:=SysCom.SYS_COM_PORTS.SYS_COMPORT2, byDataBits:=byDataBits, eRtuAscii:=eRtuAscii, dwBaudrate := SysCom.SYS_BR_57600, udiLogOptions:=(ModbusFB.LoggingOptions.ServerStartStop OR ModbusFB.LoggingOptions.ServerReceivedValidRequests)); 2. После того, как слейв настроен, требуется циклически вызывать экземпляр serverSerial ФБ ModbusFB.ServerSerial. Для опроса слейва с пользовательской моделью данных, нужно в программе MasterMain заменить в настройках опроса начальный адрес и количество регистров (при необходимости). Рис. 3.97. Задание начального адреса и кол-ва регистров для опроса 3.18. Обмен по сети Modbus TCP с помощью библиотеки ModbusFB 3.18.1. ПЛК – Слейв Данный пример демонстрирует использование библиотеки ModbusFB для настройки ПЛК NLScon-RSB в качестве ведомого устройства, а ПЛК CODESYS Control Win V3 — в качестве ведущего в сети Modbus TCP. Разработка в среде CODESYS 3.5 93 3. Основные функции программирования Обмен данными между ПЛК CODESYS Control Win V3 и ПЛК NLScon-RSB осуществляется по сети Modbus TCP. Для организации обмена ПЛК NLScon-RSB (порт Ethernet 0) и компьютер, на котором запущена служба CODESYS Control Win V3 (виртуальный ПЛК), подключены к одной локальной сети. С помощью стандартного функционала CODESYS (рис. 3.98) в дерево устройств добавлены устройства MasterDevice (CODESYS Control Win V3) и SlaveDevice (NLScon-RSB). Рис. 3.98. Конфигурация дерева устройств для обмена данными в сети Modbus TCP Для организации обмена с помощью функций библиотеки ModbusFB в Менеджере библиотек для ведомого устройства добавлены библиотеки ModbusFB, SysCom и Standard. Рис. 3.99. Менеджер библиотек Для настройки виртуального ПЛК CODESYS Control Win V3 в качестве Modbus-мастера с помощью дерева устройств добавлены устройства (ПКМ на устройство MasterDevice, Add device): 94 Разработка в среде CODESYS 3.5 3. Основные функции программирования 1. Ethernet; Рис. 3.100. Добавление и настройка компонента Ethernet дерева устройств 2. Modbus TCP Master. Для настройки компонента требуется выставить галочку Auto-reconnect; 3. Modbus TCP Slave. Здесь в поле Slave IP address указываем IP-адрес Modbus TCP слейва; 4. Modbus_Slave_COM_Port. Адрес Slave address для ПЛК NLScon-RSB можно оставить равным 1. На вкладке Modbus Slave Channel нужно создать каналы опроса. После создания каналов нужно перейти на вкладку ModbusGenericSerialSlave I/O Mapping и в выпадающем списке Always update variables выбрать Enabled 2; Разработка в среде CODESYS 3.5 95 3. Основные функции программирования Рис. 3.101. Добавление и настройка компонента Modbus_Slave_COM_Port дерева устройств Рис. 3.102. Настройка компонента Modbus_Slave_COM_Port – обновление переменных Для настройки ПЛК NLScon-RSB в качестве Modbus-слейва с помощью функционала библиотеки Modbus FB в программе SlaveMain выполнено следующее: 1. Создан экземпляр функционального блока (ФБ) мастера (клиента) ModbusFB.ServerTCP; serverTCP: ModbusFB.ServerTCP; 2. Созданы экземпляр ФБ ModbusFB.ExampleDataModel для формирования модели данных слейва — набора регистров, доступных для обмена данными по Modbus RTU. exampleDataModel : ModbusFB.ExampleDataModel; 96 Разработка в среде CODESYS 3.5 3. Основные функции программирования Модель данных ModbusFB.ExampleDataModel является примером формирования набора регистров для слейва и включает следующие секции: discrete inputs; coils; input registers; holding registers. Каждая секция включает по 2 поля данных и имеет начальный адрес 5 по умолчанию. 3. Настройка разрешенных для слейва Modbus-функций: fcsSupported : ModbusFB.SupportedFcs := ( ReadHoldingRegisters:=TRUE, ReadInputRegisters:=TRUE, WriteMultipleRegisters:=TRUE ); 4. Настройка слейва: настройка разрешенных Modbus-функций, привязка к модели данных слейва, символьное обозначение интерфейса Ethernet слейва, настройка номера Ethernet порта слейва; настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xEnable serverTCP(fcsSupported:=fcsSupported, dataModel:=exampleDataModel.tableDefs, xEnable:=FALSE, wsInterfaceName:="eth0", uiPort:=502, udiLogOptions:=(ModbusFB.LoggingOptions.ServerStartStop OR ModbusFB.LoggingOptions.ServerReceivedValidRequests)); Узнать символьное имя сетевого интерфейса слейва можно, временно добавив компонент Ethernet в дереве устройств SlaveDevice и просмотрев параметры сетевого интерфейса (рис. 3.103). Сетевые параметры будут акту- Разработка в среде CODESYS 3.5 97 3. Основные функции программирования альны, если предварительно найти устройство SlaveDevice в сети (сканировать сеть). Здесь же можно узнать IP-адрес слейва, чтобы верно указать его в настройках компонента Modbus TCP Slave. Рис. 3.103. Настройки сетевого интерфейса ПЛК NLScon-RSB 5. После того, как слейв настроен, требуется циклически вызывать экземпляр serverTCP ФБ ModbusFB.ServerTCP. Вместо встроенной в библиотеку ModbusFB модели данных ModbusFB.ExampleDataModel можно настроить пользовательскую модель данных типа ModbusFB.TableDefinitions. Этот тип представляет собой структуру, включающую описание секций для четырех типов данных: discrete inputs, coils, input registers, holding registers. В данном примере пользовательская модель данных реализована для устройства SlaveDevice_RegisterModel в программе SlaveMain (рис. 3.104). Рис. 3.104. Проект с пользовательской моделью данных в Modbus-слейв В проекте создана пользовательская модель данных tableDefs типа ModbusFB.TableDefinitions (рис. 3.105). Эта модель в соответствии со своим типом состоит из четырех структур типа ModbusFB.TableDefinition: 98 Разработка в среде CODESYS 3.5 3. Основные функции программирования - tableDiscreteInputs; - tableCoils; - tableInputRegisters; - tableHoldingRegisters. Каждая из перечисленных структур включает следующие поля: количество секций в структуре и указатель на первую секцию. Рис. 3.105. Модель данных типа ModbusFB.TableDefinitions Таким образом, для Modbus RTU слейва модель данных включает: 1 секцию «дискретных входов», 2 секции «катушек», 3 секции «входных регистров» и 2 секции «регистров хранения». Секции задаются массивом из некоторого количества структур типа ModbusFB.TableSection, например, инициализация секций для «входных регистров» (рис. 3.106). Разработка в среде CODESYS 3.5 99 3. Основные функции программирования Рис. 3.106. Таблица «входных регистров» типа ModbusFB.TableSection В данном случае секции для «входных регистров» представляют собой 3 структуры типа ModbusFB.TableSection, которые описываются параметрами: начальный адрес uiStart; количество uiNumDataItems полей данных в секции (бит/байт/слов – в зависимости от назначения секции); указатель pStartAddr на область памяти в ПЛК, выделенную для этой секции; размер uiDataItemSize в битах поля данных. Для discrete inputs/coils значение uiDataItemSize может быть равно 1 или 8 бит, для input/holding registers значение uiDataItemSize равно 16 бит. Выбор размера для discrete inputs/coils зависит от того, как они привязаны к области памяти в ПЛК: если выделенная область памяти — это ARRAY [0..x] OF BOOL, то uiDataItemSize=8, если discrete inputs/coils адресуются побитово, то uiDataItemSize=1. Для input/holding registers область памяти должна быть массивом ARRAY [0..x] OF UINT. В данном примере для секции «входных регистров» выделены области памяти: aInputRegistersMemory1: ARRAY [0..6] OF UINT; aInputRegistersMemory2: ARRAY [0..2] OF UINT; В нашем случае «входные регистры» для ПЛК настроены следующим образом: первая секция: 100 Разработка в среде CODESYS 3.5 3. Основные функции программирования начальный адрес 0, количество полей в секции 3 штуки (3 регистра), их значения будут хранится в первых трех элементах массива aInputRegistersMemory1[0..2], размерность каждого «входного регистра» 16 бит. вторая секция: начальный адрес 5, количество полей в секции 4 штуки (4 регистра), их значения будут хранится в последних четырех элементах массива aInputRegistersMemory1[3..6], размерность каждого «входного регистра» 16 бит. третья секция: начальный адрес 10, количество полей в секции 3 штуки (3 регистра), их значения будут хранится в первых трех элементах массива aInputRegistersMemory2[0..2], размерность каждого «входного регистра» 16 бит. Подобным образом в программе SlaveMain объявлены секции для discrete inputs, coils и holding registers. Для всех секций в программе должны быть выделены области памяти (рис. 3.107). Рис. 3.107. Области памяти для пользовательской модели данных ПЛК Чтобы запустить Modbus RTU слейв на ПЛК, потребуется настроить serverTCP (экземпляр ФБ ModbusFB.ServerTCP) и разрешить его работу: 1. Настройка слейва: настройка разрешенных Modbus-функций, привязка к модели данных слейва, символьное обозначение интерфейса Ethernet слейва, настройка номера Ethernet порта слейва; настройки вывода сообщений о ходе обмена данными в лог ПЛК. Настройки применятся по переднему фронту переменной xEnable. serverTCP(fcsSupported:=fcsSupported, dataModel:=exampleDataModel.tableDefs, Разработка в среде CODESYS 3.5 101 3. Основные функции программирования xEnable:=FALSE, wsInterfaceName:="eth0", uiPort:=502, udiLogOptions:=(ModbusFB.LoggingOptions.ServerStartStop OR ModbusFB.LoggingOptions.ServerReceivedValidRequests)); Узнать символьное имя сетевого интерфейса слейва можно, временно добавив компонент Ethernet в дереве устройств SlaveDevice_RegisterModel и просмотрев параметры сетевого интерфейса. Сетевые параметры будут актуальны, если предварительно найти устройство SlaveDevice_RegisterModel в сети (сканировать сеть). Здесь же можно узнать IP-адрес слейва, чтобы верно указать его в настройках компонента Modbus TCP Slave. 2. После того, как слейв настроен, требуется циклически вызывать экземпляр serverTCP ФБ ModbusFB.ServerTCP. Для опроса слейва с пользовательской моделью данных нужно заменить в настройках каналов Modbus_Slave_COM_Port начальный адрес и количество регистров (при необходимости). 3.19. Обнаружение ошибок с помощью POU для неявных проверок Для раннего обнаружения типовых ошибок в коде МЭК-программы можно использовать POU для неявных проверок. В проект CODESYS 3.5 данный функционал можно добавить, кликнув ПКМ на “Application” в дереве проекта – “Добавление объекта” – “POU для неявных проверок” (см. Рис. 3.108). По умолчанию пользователю доступны следующие POU, которые будут вызываться автоматически в подходящих им фрагментах программы: 102 Проверка границ (Check Bounds) – при доступе к массиву, выполняется проверка на выход значения индекса за пределы объявленного массива. Значение будет фиксироваться на нижней/верхней границе массива; Проверка деления (CheckDiv*) – проверка деления на ноль. При обнаружении деления на ноль строка с данной операцией не выполняется. Разработка в среде CODESYS 3.5 3. Основные функции программирования Проверка диапазона (CheckRange(Un)Signed) – проверка значения, записываемого в переменную с ограничением диапазона (subrange) для 32-битных типов данных. При выходе за диапазон значение переменной в данном вызове фиксируется на нижней/верхней границе диапазона; Проверка L-диапазона (CheckLRange(Un)Signed) – проверка значения, записываемого в переменную с ограничением диапазона (subrange) для 64-битных типов данных. При выходе за диапазон значение переменной в данном вызове фиксируется на нижней/верхней границе диапазона; Проверка указателя (CheckPointer) – проверка корректности указателя. Данная функция не имеет стандартной реализации – пользователь должен самостоятельно реализовать ее. В качестве альтернативы можно использовать функцию SysMemIsValidPointer из библиотеки SysMem. Рис. 3.108 – Добавление POU для неявных проверок Далее выберите нужные POU и нажмите “Добавить” (см. Рис. 3.109). Разработка в среде CODESYS 3.5 103 3. Основные функции программирования Рис. 3.109 – Выбор POU Пользователь также имеет возможность доработать эти POU под свои задачи – например, добавить вывод сообщений в журнал ПЛК при определенных условиях. Важно! Не следует использовать POU для неявных проверок в роли решения ошибок в коде – эти POU предназначены для их обнаружения! После того, как с помощью POU для неявных проверок будут найдены ошибки – их необходимо исправить вручную! Важно! Использование POU для неявных проверок увеличивает время цикла – рекомендуется использовать их только во время отладки для поиска и устранения ошибок. 3.20. Логирование данных в среде CODESYS Логирование и архивирование данных в среде CODESYS для ПЛК – важная функция для мониторинга, диагностики и анализа работы автоматизированной системы. 3.20.1. Общие принципы логирования в CODESYS Логирование в CODESYS может включать: 104 Запись значений переменных (датчиков, состояний, ошибок и т. д.). Разработка в среде CODESYS 3.5 3. Основные функции программирования - Временные метки (timestamp). Сообщения о событиях (запуск, остановка, ошибка и т. д.). Архивирование на SD-карту, USB-накопитель или внешний сервер. В процессе отладки и эксплуатации системы автоматизации важную роль играет логирование информации об ошибках и событиях. В ПЛК с системой исполнения CODESYS V3.5 для этих целей используется компонент PLC Logger (журнал ПЛК), основанный на системной библиотеке CmpLog. Стандартные компоненты CODESYS используют возможности библиотеки для записи в лог сообщений о своей работе. Кроме того, пользователь может использовать библиотеку для записи в лог собственных сообщений. Библиотека CmpLog – это встроенная системная библиотека, предназначенная для логирования событий, ошибок и отладочной информации в процессе выполнения программы на ПЛК. 3.20.2. Функции библиотеки CmpLog LogAdd – добавляет запись в логгер (для совместимости со старыми версиями библиотек); LogAdd2 – добавляет запись в лог, позволяет указать ссылку на логгер (можно использовать стандартный – LogConstant.LOG_STD_LOGGER) и уникальный ID компонента; LogCreate – создаёт новый логгер; LogDelete – удаляет логгер; LogOpen – открывает существующий логгер; LogClose – закрывает логгер и обнуляет его дескриптор. Информация об ошибках и событиях ПЛК отображается в CODESYS на вкладке Device – Журнал (см. Рис. 3.110). Для того чтобы просмотреть журнал – необходимо подключиться к контроллеру. Для каждого события отображаются: - жесткость – класс события (Предупреждение /Ошибка /Исключение /Сообщение /Сообщение отладки); - временная отметка – метка времени события. По умолчанию отображается с учетом часового пояса ПЛК, при установленной галочке UTC-время – метка времени отображается в UTC+0; - описание – текст сообщения; Разработка в среде CODESYS 3.5 105 3. Основные функции программирования - компонент – название компонента, сформировавшего событие. Рис. 3.110 – Журнал контроллера (лог сообщений) Пока актирован режим Auto scroll – при появлении нового события оно будет автоматически отображено в логгере (если режим отключен – то новые события отображаться не будут). Кнопки экспорта/импорта лога в файл формата .xml. Кнопка лога. используются для очищает окно В случае установки галочки Оффлайн-запись – при отключении от контроллера окно лога будет автоматически очищено. 3.20.3. Настройки конфиг-файла На ПЛК RealLab серии NLScon-RSB и панельных ПЛК NLcon-CED-5-21 директория CODESYS расположена в /usr/bin/codesys. Настройки системного логгера хранятся в конфиг-файле CODESYS (CODESYSControl.cfg), расположенном в директории (/usr/bin/codesys) (см. Рис. 3.111). Открыть конфиг-файл для редактирования настроек можно при помощи команды: $sudo nano CODESYSControl.cfg 106 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.111 – Фрагмент конфиг-файла с настройками логгера Если закомментировано, то используются значения по умолчанию. Параметры логгера секция [CmpLog] имеют следующие настройки, согласно Табл. 23. Табл. 23. Параметры настроек логгера секция [CmpLog] Настройка Описание секция [CmpLog] Настройка логгера Name Имя логгера (если логи сохраняются в файлах – то названия файлов состоят из имени логгера и порядкового номера – например, StdLogger_0.csv и т.д.) Например, в данном примере задан путь к файлу лога: /home/pi/log/codesyscontrol.log Enable 1 – логгер включен, 0 – логгер отключен Разработка в среде CODESYS 3.5 107 3. Основные функции программирования MaxEntries Максимальное число записей в логгере. По достижению этого значения – самые старые записи начинают перезаписываться MaxFileSize Максимальный размер файла лога в байтах (используется в том случае, если бэкенд логгера – файлы). При достижении файлом этого размера – создается новый файл лога (см. MaxFiles) MaxFiles Максимальное число файлов логов (используется в том случае, если бэкенд логгера – файлы). Если создано максимальное число файлов и размер последнего достиг MaxFileSize – то начинается перезапись самого старого файла Backend.<№>.ClassId Тип бэкенда. Из внутренней документации известно, что значение 0x104 соответствует файлам, 0x135 – отправке на syslog-сервер, а 0x10B – выводу лога в последовательный порт (через компонент SysOut) Filter Фильтр классов сообщений, которые поддерживаются логгером. Значение фильтра представляет собой комбинацию флагов LogClass. По умолчанию используется значение 0xFFFFFFFF (LOG_ALL) – в этим режимы логгер поддерживает все классы событий Для корректной работы необходимо добавить библиотеку CmpLog в секцию [ComponentManager] в настройках конфиг-файла CODESYS (см. Рис. Рис. 3.112). 108 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.112 – Фрагмент конфиг-файла с настройками логгера секция [ComponentManager] После редактирования настроек в конфиг-файле необходимо сохранить изменения с помощью команд Ctrl+o, Enter, Ctrl+x и выполнить перезагрузку ПЛК по питанию или через командную строку $sudo reboot Для просмотра содержимого файла лога необходимо перейти в директорию, где расположен данный файл и выполнить команду: $cat codesyscontrol.log 3.21. Взаимодействие с внешними устройствами (SD/USB) 3.21.1. Реализация автоматического монтирования внешних устройств в ОС RealLab! Raspbian Linux Для организации взаимодействия в CODESYS с внешними устройствами – SD-картой или USB-флешкой, сначала необходимо смонтировать устройство, как это сделано в проекте-примере использования библиотеки CAA File. Рекомендуется использовать метод автоматического монтирования, вместо ручного, при котором требовалось редактировать файл /etc/fstab. Разработка в среде CODESYS 3.5 109 3. Основные функции программирования Для реализации функционала автоматического монтирования подключаемых накопителей выполните следующие шаги: Добавьте репозиторий RealLab в список репозиториев ОС RealLab Raspbian Linux : - Создайте и откройте файл с помощью команды $sudo nano /etc/apt/sources.list.d/reallab.list - Добавьте следующую строку и сохраните изменения: deb [trusted=yes] https://www.reallab.ru/images/editor/downloads/software/recovery_RSB/deb ./ Выполните команду $sudo apt update Для установки пакета, реализующего функционал автомонтирования накопителей, выполните команду: $sudo apt install automount-patch-rsb После установки пакета выполните перезагрузку с помощью команды: $sudo reboot Теперь подключенная карта памяти будет всегда монтироваться по пути: /mnt/sd/mmcblk1p1 USB-флешка будет монтироваться по пути: /mnt/usb/sdaX X – номер раздела на флешке. Если раздел один, то флешка будет смонтирована как /mnt/usb/sda1, если разделов несколько, то монтирование будет выполнено соответствующе - /mnt/usb/sda1, /mnt/usb/sda2 и т.д. Если подключено несколько флешек, то они будут монтироваться в /mnt/usb/sdbX, /mnt/usb/sdcX и т.д. После подключения накопителей их пути монтирования можно проверить с помощью команды $ lsblk. При необходимости можно вернуть прежнюю конфигурацию монтирования. Для этого достаточно удалить пакет с помощью команды: $ sudo apt autoremove automount-patch-rsb 110 Разработка в среде CODESYS 3.5 3. Основные функции программирования Рис. 3.113 – Информация о путях монтирования подключенных устройств Во время записи логов и пр. данных на внешнее устройство не рекомендуется отключать его от ПЛК. Например – если USB-флешка вставлена в ПЛК, смонтирована в /dev/usb/sda1 и на нее в данный момент производится запись логов с CODESYS, то если в процессе записи ее отключить от ПЛК, CODESYS продолжит пытаться записывать данные в ту же директорию и при подключении флешки к ПЛК она будет смонтирована как /dev/sdb1 (или как sdc1, если к ПЛК подключена еще одна флешка). В таком случае запись логов на флешку возобновится только после перезагрузки ПЛК. Чтобы этого избежать, необходимо заморозить или завершить процесс, который связан с записью данных на внешний накопитель, перед тем как снова подключить отключенный от ПЛК накопитель. После подключения снова его запустить, убедившись, что устройство смонтировано правильно (в ту же директорию, что и раньше) (в случае с Codesys так делать не рекомендуется, т.к. для этого нужно завершить процесс codesyscontrol, но это остановит работу всей исполнительной системы). 3.21.2. Сохранение данных проекта CODESYS на внешние накопители Рекомендуется переносить проект на внешние накопители с форматом файловой системы ext4 (с другими форматами ФС это также будет работать). Для корректной работы данного метода установите пакет, реализующий функции автоматического монтирования накопителей в ОС RealLab Raspbian Linux (см. п. 3.21.1). Разработка в среде CODESYS 3.5 111 3. Основные функции программирования Для того чтобы расположить проект на внешнем устройстве, необходимо отредактировать конфигурационный файл исполнительной системы Codesys на ПЛК. Ниже приведен пример для сохранения файлов проекта на sd-карту: Сначала нужно проверить путь монтирования карты памяти: 1. Рис. 3.114 – Карта памяти смонтирована в /mnt/sd/mmcblk1p1 2. Затем открыть файл конфигурации исполнительной среды Codesys с помощью команды: $ sudo nano /usr/bin/codesys/CODESYSControl.cfg 3. Найдите блок [SysFile] и строку “;FilePath.1=…”. Раскомментируйте ее (уберите точку с запятой в начале строки, если она там есть). После “=” введите путь сохранения данных проекта. Сохраните файл комбинацией клавиш CTRL+O, Enter, CTRL+X. На скриншоте ниже указана папка TEST_EXT на вставленной в ПЛК карте памяти. В нее и будет сохранен загруженный далее проект. Рис. 3.115 – Редактирование конфигурационного файла 4. Перезагрузите ПЛК командой: $ sudo reboot. 5. После перезагрузки ПЛК загрузите на него Ваш проект. После загрузки проекта на ПЛК введите команду: $ ls -l путь_к_проекту. 112 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 3.116 – Просмотр файлов и папок в папке TEST_EXT на SD-карте 6. Чтобы снова сохранять проект на внутреннюю память в /usr/bin/codesys/ достаточно закомментировать строку FilePath в конфигурационном файле /usr/bin/Codesys/CODESYSControl.cfg (поставить точку с запятой в начале строки). 4. Работа с модулями ввода и вывода RealLab 4.1. Протокол Modbus RTU Проекты с примерами работы с устройствами по протоколу Modbus RTU в среде разработки CODESYS 3.5 можно скачать на нашем сайте. 4.1.1. Рекомендации для работы с модулями серии NL, NLS 1. Рекомендуется устанавливать (по возможности) скорость обмена по шине 115200 бод, а также использовать контрольные суммы. 2. Модули аналогового ввода (NLS-8AI, NLS-4RTD и др.) способны производить аналого-цифровое преобразование со скоростью около 10 раз в секунду. Это значит, что частота опроса не должна превышать 10 Гц. 3. Модули ввода-вывода серии NL имеют собственный сторожевой таймер, который настраивается при конфигурировании модуля. Принцип Разработка в среде CODESYS 3.5 113 4. Работа с модулями ввода и вывода RealLab действия этого таймера основан на передаче модулям по шине данных специальной широковещательной команды «00 06 0А 02 00 01 [CRC16]». Приняв такую команду модуль сбрасывает свой сторожевой таймер. Если таймер сработал до прихода команды, модуль переходит в защищенное состояние, которое также настраивается при конфигурировании модуля. 4. Для ускорения опроса модулей ввода-вывода (и для ускорения работы ПЛК соответственно) рекомендуется разделить эти модули на «скоростные» (те, которые быстро отвечают, как правило — дискретные) и «обычные» (те, которым на отработку команды и ответ требуется 100 мс и более, как правило — аналоговые). «Скоростные» модули рекомендуется подключить к одной шине данных, «обычные» — к другой. В конфигурации задач также рекомендуется разделить опрос «скоростных» и «обычных» модулей по задачам. Т. е. одна задача запускает программный модуль, который использует данные каналов «скоростных» модулей ввода-вывода, другая задача запускает программный модуль, опрашивающий «обычные» модули. Данные между программными модулями можно передавать с помощью глобальных переменных. Разделение алгоритма работы ПЛК по задачам позволит организовать одновременную работу обеих шин данных, а также установить периоды повторения задач, свойственные модулям на шине, с которыми задача взаимодействует. Разделение модулей по шинам данных на «скоростные» и «обычные» позволит работать модулям на своей скорости и не ожидать ответов более медленных модулей. Такое замедление становится особо заметным, когда «обычный» модуль вдруг пропускает запрос (запрос, при этом, приходится повторять), а «скоростной» модуль вынужден ожидать (довольно длительный таймаут), когда ПЛК обратится к нему. 4.1.2. Основная работа в CODESYS 4.1.2.1. Подключение устройства В дереве устройств выбрать Device (CODESYS Control NIL AP) и добавить устройство Modbus COM. Во вкладке “Общее” Modbus COM необходимо указать номер COM-порта, используемого ПЛК, скорость передачи (по умолчанию 9600 бод), а также четность – NONE. Все остальные настройки без изменений. После Modbus COM следует добавить Modbus Master. Во вкладке “Общее” Modbus Master COM Port – установить галочку “Автоперезапуск соединения”. К Modbus Master COM Port добавьте слейв-устройство (модуль), с которым будет установлено соединение. 114 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.1. Пример параметров Modbus для подключения 4.1.2.2. Каналы Modbus Slave Во вкладке “Канал Modbus Slave” (рис. 4.2) необходимо добавить каналы, которые понадобятся для использования в проекте, задать код функции для каждого канала в зависимости от цели использования и возможностей регистра, который связывается с CODESYS. Рис. 4.2. Добавление канала Modbus Slave Для каналов, которые используются для записи значений в память модуля, рекомендуется использовать триггер “по переднему фронту”. Для каналов, читающих данные с устройства и его датчиков, можно оставить триггер Разработка в среде CODESYS 3.5 115 4. Работа с модулями ввода и вывода RealLab “цикл” и установить необходимое время для чтения. Например, при использовании цикла со значением 100 мс, информация, считываемая с устройства, будет обновляться каждые 100 мс. Не стоит устанавливать значение времени цикла меньше, чем поддерживает подключенное устройство или датчик. В примерах каналы, имена которых начинаются с “W_...”, служат для записи значений (см. код функции в графе “тип доступа”, вкладка “Канал Modbus Slave” в параметрах модуля). Каналы, имена которых начинаются с “R_...”, служат для чтения данных с устройства. Чтобы добавить канал, во вкладке вашего устройства “Канал Modbus Slave” нажмите “Добавить канал…”. Введите его имя, укажите тип доступа, триггер, время цикла (если триггер: цикл), сдвиг и длину. 4.1.2.3. Триггеры Во вкладке параметров вашего устройства (например, NLS-8AI) "ModbusGenericSerialSlave Соотнесение входов/выходов" откройте список, который появляется в основном окне. Назначьте нужные вам переменные, которые будут задействованы в программе и/или визуализации. Для переменных, которые имеют триггер “по переднему фронту” для правильной работы программы необходимо добавить триггерную переменную. Например, создать в программе переменную типа данных “R_TRIG” или “F_TRIG” и добавить в виде триггерной переменной параметр “имя переменной.CLK”. Также, триггером может выступать любая BOOL или BIT-переменная. 4.1.2.4. Добавление визуализации в проект Правой кнопкой мыши кликните по “Application” – "Добавление объекта" – "Визуализация" – Поставьте галочку напротив "VisuSymbols" и нажмите “Добавить” (рис. 4.3). 116 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.3. Создание визуализации Справа откроется панель инструментов визуализации. Там можно выбрать категории элементов. Для задействования нужного элемента перетащите его в основное окно визуализации. В дереве устройств ПКМ по “Application” – Добавление объекта – Пул изображений. Введите имя пула и сохраните. В открывшемся окне (рис. 4.4) введите в первую строку: ID пула и имя файла (нажмите на “…” и выберите файл через проводник Windows). Далее в визуализации откройте категорию "Базовый" и перетащите элемент "Изображение" в основное окно визуализации. В ассистенте ввода выберите ваш пул изображений и выберите нужное изображение (рис. 4.5). Рис. 4.4. Настройка пула изображений Разработка в среде CODESYS 3.5 117 4. Работа с модулями ввода и вывода RealLab Рис. 4.5 Импорт фото из пула Затем перетащите из панели инструментов визуализации элемент "Индикатор" (группа Lamps/Switches/Bitmaps) в таком количестве, которое вам нужно. Назначьте индикатору переменную (рис. 4.6). То же самое сделайте с нужными вам элементами. Рис. 4.6. Работа над визуализацией Также, можно выбрать стиль элементов, которые используются в визуализации. Для этого в дереве устройств дважды кликните по менеджеру визуализации и во вкладке “Установки” выберите из списка желаемый стиль (Рис. 4.7). 118 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Помимо этого, есть возможность настройки частоты обновления визуализации (мин. 40 мс). Для этого в дереве устройств в ветке менеджера визуализации выберите Таргет-визуализацию или Web-визуализацию. В настройках обоих вариантов визуализаций есть пункт “Частота обновления (мс)”. Укажите нужное вам значение. Чем значение меньше, тем быстрее работает визуализация. Нет смысла устанавливать слишком маленькую частоту обновления визуализации (например, 40 мс), если данные, выводимые в визуализацию, обновляются гораздо реже (например, раз в 200 мс). В таком случае следует установить частоту обновления визуализации такую же, с которой обновляются данные, или чуть меньше. Рис. 4.7. Выбор стиля визуализации в проекте 4.1.2.5. Функции, используемые в программах Функция WORD2_TO_REAL объединяет 2 WORD-переменных (WORD = 2 байта) в одну переменную REAL (REAL = 4 байта). Объединение можно провести с перестановкой байтов, слов (по 2 байта) и без перестановки. Рис. 4.8. Входные параметры функции WORD2_TO_REAL Разработка в среде CODESYS 3.5 119 4. Работа с модулями ввода и вывода RealLab Функция REAL_TO_2WORD разбивает одну переменную REAL на 2 переменных WORD с возможностью перестановки слов. Рис. 4.9. Входные параметры функции REAL_TO_2WORD 4.1.3. Пример использования NLS-16DI 4.1.3.1. Настройка каналов и соотнесения входов/выходов устройства Дерево устройств – Modbus_COM – Modbus_Master_COM_Port – NLS-16DI, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов". Рис. 3.1.3.1.1 – Каналы модуля NLS-16DI Рис. 4.10. соотнесение входов/выходов модуля NL(S)-16DI В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе (рис. 4.10). 120 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.1.3.2. Визуализация Создана визуализация для модуля NLS-16DI. Запускаем программу и проверяем работу визуализации: подаем напряжение 12 В на контакт Din4: Рис. 4.11. Индикатор показывает наличие контакта на входе Din4 4.1.4. Пример использования NLS-16DO 4.1.4.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.12. Каналы NLS-16DO Дерево устройств – Modbus_COM – Modbus_Master_COM_Port – NLS16DO, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.13). Разработка в среде CODESYS 3.5 121 4. Работа с модулями ввода и вывода RealLab Рис. 4.13 Соотнесение входов/выходов NLS-16DO В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе. 4.1.4.2. Визуализация Помимо индикаторов здесь используются клавишные переключатели. На них назначены переменные W0, W1, W2, …, WF из соотнесения входов/выходов. 122 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.14 Полностью готовая визуализация NLS-16DO 4.1.5. Пример использования NLS-8R 4.1.5.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.15 Каналы на чтение/запись модуля NL(S)-8R Дерево устройств – Modbus_COM – Modbus_Master_COM_Port – NLS16DO, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.16). Разработка в среде CODESYS 3.5 123 4. Работа с модулями ввода и вывода RealLab Рис. 4.16. соотнесение входов/выходов модуля NL(S)-8R В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе. 124 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.1.5.2. Визуализация Рис. 4.17. Полностью готовая визуализация NLS-8R 4.1.6. Пример использования NLS-4AO 4.1.6.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.18. Каналы на чтение/запись NL(S)-4AO Разработка в среде CODESYS 3.5 125 4. Работа с модулями ввода и вывода RealLab Рис. 4.19. Соотнесение входов/выходов NLS-4AO 126 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.1.6.2. Создание программы В дереве устройств дважды кликните по файлу вашей программы, напрмер “PLC_PRG”. Откроется редактор кода. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. В редакторе кода есть верхняя и нижняя части. В верхней части нужно объявлять переменные, а в нижней – писать сам алгоритм, который циклически выполняется модулем (рис. 4.20). Объявим переменные для взаимодействия с нашим модулем NLS-4AO: Рис. 4.20. Объявление переменных программы Переменные типа данных INT: iRadioNumber и iRangeNumber, нужны для реализованной визуализации (см. рис. 4.24). iRadioNumber определяет номер аналогового выхода, в который будет записано значение, введенное в соответствующее поле ввода (см. рис. 4.22). Значение вводится в мВ либо в мкА, т. е. в зависимости от установленного диапазона выхода. iRangeNumber определяет номер аналогового выхода, диапазон которого нужно изменить. Значение диапазона выбирается в выпадающем списке, соответствующем нужному выходу. (см. рис. 4.23). wRANGE_W используется для хранения значения кода общего диапазона. Значение выбирается из выпадающего списка в визуализации и записывается в эту переменную (рис. 4.21). После нажатия кнопки “Установить новый диапазон” (см. рис. 4.23), предварительно выбрав в выпадающем списке “номер выхода” – “[5] Общий диапазон”, сработает триггер и значение из переменной будет записано в нужный регистр устройства. Для работы триггера и установки нового общего диапазона используется следующий код: Разработка в среде CODESYS 3.5 127 4. Работа с модулями ввода и вывода RealLab Рис. 4.21. Фрагмент кода с переменной wRANGE_W При записи общего диапазона срабатывает триггер “trig_all”. Если CLK:=xClicked_10 имеет значение TRUE (переменная xClicked_10 назначена как параметр свойства кнопки в визуализации: “конфигурация ввода” – “Нажатие” – “Переменная”, и значение этой переменной становится TRUE, если нажать на кнопку), значение xRun_all тоже становится TRUE (триггер устанавливает xRun_all:=TRUE если xClicked_10=TRUE). Далее если xRun_all=TRUE, значение переменной wRANGE_W записывается в переменную RANGE_W (строка кода 22, см. рис. 4.21), которая присвоена каналу. Через канал из переменной RANGE_W записывается код общего диапазона в регистр 0x202 (202h). Переменные wW0, wW1, wW2, wW3 используются так же, как wRANGE_W, но записывают диапазоны 0, 1, 2, 3 канала соответственно. Переменная wSPEED_W записывает скорость нарастания выходного сигнала с помощью выбора нужного значения в выпадающем списке (в визуализации). xClicked_10, xRun_10, xRun_all – вспомогательные переменные для триггеров. Триггерными переменными в соотнесении входов/выходов устройства вместо переменных “xRun_...” можно использовать “имя_триггера.CLK”. 4.1.6.3. Визуализация Рис. 4.22. Место в визуализации, где используется iRadioNumber 128 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.23 Место в визуализации, где используется iRangeNumber Рис. 4.24. Полностью готовая визуализация 4.1.7. Пример использования NLS-8AI 4.1.7.1. Настройка каналов и соотнесения входов/выходов устройства Во вкладке “Канал Modbus Slave” необходимо добавить каналы, которые нужны для использования в проекте, задать код функции каждого канала в зависимости от цели использования и возможностей регистра, который связывается с CODESYS с помощью канала. Для каналов, которые используются для записи значений в память модуля следует использовать триггер “по переднему фронту”. Для каналов, читающих данные с устройства и его датчиков, можно оставить триггер “цикл” и установить необходимое время для чтения. Например, при использовании цикла со значением 100 мс, информация, считываемая с устройства, будет Разработка в среде CODESYS 3.5 129 4. Работа с модулями ввода и вывода RealLab обновляться каждые 100 мс. Не стоит устанавливать значение времени цикла меньше, чем поддерживает подключенное устройство или датчик. На рис. 4.25 каналы, имена которых начинаются с “W_...” служат для записи значений (см. код функции в графе “тип доступа”. Каналы, имена которых начинаются с “R_...” служат для чтения данных с устройства). Рис. 4.25. Каналы на чтение/запись NL(S)-8AI 130 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.26. Соотнесение входов/выходов NLS-8AI, ч.1 Разработка в среде CODESYS 3.5 131 4. Работа с модулями ввода и вывода RealLab Рис. 4.27. Соотнесение входов/выходов NLS-8AI, ч.2 132 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.28. Соотнесение входов/выходов NLS-8AI, ч.3 4.1.7.2. Создание программы Откройте файл программы в созданном проекте. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. Нужно объявить переменные (рис. 4.29). Рис. 4.29. Объявленные переменные в PLC_PRG Разработка в среде CODESYS 3.5 133 4. Работа с модулями ввода и вывода RealLab В коде программы есть комментарии. В самом проекте помимо PLC_PRG (файла с ST-кодом) есть 2 функции. WORD2_TO_REAL и REAL_TO_2WORD (рис. 4.30 – рис. 4.31). Функция WORD2_TO_REAL объединяет 2 WORD-переменных (WORD = 2 байта) в одну переменную REAL (REAL = 4 байта). Объединение можно провести с перестановкой батов, слов (по 2 байта) и без перестановки. Рис. 4.30. Входные параметры ф-ии WORD2_TO_REAL Функция REAL_TO_2WORD разбивает одну переменную REAL на 2 переменных WORD с возможностью перестановки слов. Рис. 4.31. Входные параметры ф-ии REAL_TO_2WORD Алгоритм, написанный на ST выполняет преобразование показаний с шестнадцати входов NLS-8AI из вида [2 переменных по 2 байта (т.к. система получает данные из двух 2-байтовых регистров)] в [одну переменную размером 4 байта]. И обрабатывает триггеры для записи значений из переменных в нужный регистр. 134 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.1.7.3. Визуализация Рис. 4.32. Полностью готовая визуализация NLS-8AI 4.1.8. Пример использования NLS-8TI 4.1.8.1. Настройка каналов и соотнесения входов/выходов устройства На рис. 4.33 каналы, имена которых начинаются с “W_...” служат для записи значений (см. код функции в графе “тип доступа”. Каналы, имена которых начинаются с “R_...” служат для чтения данных с устройства). Рис. 4.33. Каналы на чтение/запись NL(S)-8TI Разработка в среде CODESYS 3.5 135 4. Работа с модулями ввода и вывода RealLab Рис. 4.34. Соотнесение входов/выходов NLS-8TI, ч. 1 136 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.35. Соотнесение входов/выходов NLS-8TI, ч. 2 4.1.8.2. Создание программы Откройте файл программы в созданном проекте. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. Нужно объявить переменные (рис. 4.36). Рис. 4.36. Объявленные переменные в PLC_PRG Код программы состоит из триггеров, которые отвечают за реакцию на нажатие кнопок с целью изменения маски и диапазонов входных каналов (рис. 4.37). Разработка в среде CODESYS 3.5 137 4. Работа с модулями ввода и вывода RealLab Рис. 4.37. Код программы В коде используется функция WORD2_TO_REAL. Она переносит данные из двух 2-байтовых переменных в одну 4-байтовую. Есть возможность переноса данных с перестановкой байтов и слов. 4.1.8.3. Визуализация Рис. 4.38. Полностью готовая визуализация NLS-8TI 4.1.9. Пример использования NLS-4RTD-Ex 4.1.9.1. Настройка каналов и соотнесения входов/выходов устройства На рис. 4.39 каналы, имена которых начинаются с “W_...” служат для записи значений (см. код функции в графе “тип доступа”. Каналы, имена которых начинаются с “R_...” служат для чтения данных с устройства). 138 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.39. Каналы на чтение/запись NL-4RTD-EX Рис. 4.40. Соотнесение входов/выходов NL-4RTD-EX, ч. 1 Разработка в среде CODESYS 3.5 139 4. Работа с модулями ввода и вывода RealLab Рис. 4.41. Соотнесение входов/выходов NL-4RTD-EX, ч. 2 4.1.9.2. Создание программы Откройте файл программы в созданном проекте. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. Нужно объявить переменные (рис. 4.42). Рис. 4.42. Объявленные переменные в PLC_PRG Код программы состоит из триггеров и вызовов функции WORD2_TO_REAL. Триггеры отвечают за реакцию на нажатие кнопок с целью считывания либо изменения параметров модуля. Вызовы функций отвечают за перенос данных из двух 2-байтовых переменных типа WORD в одну 4-байтовую переменную типа REAL. 140 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.1.9.3. Визуализация Рис. 4.43. Полностью готовая визуализация NL-4RTD-EX 4.1.10. Пример использования NLS-4C 4.1.10.1. Настройка каналов и соотнесения входов/выходов устройства На рис. 4.44 каналы, имена которых начинаются с “W_...” служат для записи значений (см. код функции в графе “тип доступа”. Каналы, имена которых начинаются с “R_...” служат для чтения данных с устройства). Разработка в среде CODESYS 3.5 141 4. Работа с модулями ввода и вывода RealLab Рис. 4.44. Каналы на чтение/запись NLS-4C 142 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.45. Соотнесение входов/выходов NLS-4C, ч. 1 Разработка в среде CODESYS 3.5 143 4. Работа с модулями ввода и вывода RealLab Рис. 4.46. Соотнесение входов/выходов NLS-4C, ч. 2 144 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.47. Соотнесение входов/выходов NLS-4C, ч. 3 Разработка в среде CODESYS 3.5 145 4. Работа с модулями ввода и вывода RealLab Рис. 4.48. Соотнесение входов/выходов NLS-4C, ч. 4 4.1.10.2. Создание программы Откройте файл программы в созданном проекте. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. Нужно объявить переменные (рис. 4.49 – рис. 4.50). Рис. 4.49 Объявленные переменные в PLC_PRG 146 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.50. Объявленные переменные в TRIG_TASK Код программы разделен на 2 файла (PLC_PRG и TRIG_TASK). В одном файле содержится код преобразования данных из двух переменных формата WORD в одну переменную формата DWORD. В другом файле содержится множество триггеров, которые отвечают за запись значений в регистры по нажатию определенных кнопок в визуализации. Триггеры отвечают за реакцию на нажатие кнопок с целью считывания либо изменения параметров модуля. Вызовы функций отвечают за перенос данных из двух 2-байтовых переменных типа WORD в одну 4-байтовую переменную типа REAL. 4.1.10.3. Визуализация Рис. 4.51. Полностью готовая визуализация NLS-4C 4.2. Протокол Modbus TCP Проекты с примерами работы с устройствами по протоколу Modbus TCP в среде разработки CODESYS 3.5 можно скачать на нашем сайте. Разработка в среде CODESYS 3.5 147 4. Работа с модулями ввода и вывода RealLab 4.2.1. Основная работа в CODESYS 4.2.1.1. Подключение устройства Подключитесь к ПЛК. В дереве устройств дважды кликните по “Device”. В основном окне нажмите кнопку “Сканировать сеть” и выберите ПЛК к которому хотите подключиться. ПКМ (Правой кнопкой мыши) по "Device" в дереве устройств – Добавить устройство – Ethernet. ПКМ по Ethernet – Добавить устройство – Modbus_TCP_Master. ПКМ по Modbus_Master_COM_Port – Добавить устройство – [выберите ваше устройство из списка]. Двойной клик по Ethernet – “Конфигурация Ethernet” – установите параметры: интерфейс сети, IP-адрес, маска, Gateway. Сделать это можно с помощью нажатия на “…” справа от поля ввода “Интерфейс сети”. Откроется всплывающее окно “Сетевые адаптеры”. Выберите нужный вам интерфейс и нажмите ОК (рис. 4.52). Рис. 4.52. пример параметров Modbus для подключения Далее дважды кликните по “Modbus_TCP_Master” в дереве устройств. Поставьте галочку на “автоподключение” во вкладке “Общее”. Дважды кликните по названию модуля в дереве устройств. Во вкладке "Общее" необходимо указать Unit-ID модуля, его IP-адрес, таймаут ответа и порт. 148 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.2.1.2. Каналы Modbus Slave Во вкладке “Канал Modbus Slave” (рис. 4.53) необходимо добавить каналы, которые нужны для использования в проекте, задать код функции для каждого канала в зависимости от цели использования и возможностей регистра, который связывается с CODESYS с помощью канала. Рис. 4.53. Добавление канала Modbus Slave Для каналов, которые используются для записи значений в память модуля, рекомендуется использовать триггер “по переднему фронту”. Для каналов, читающих данные с устройства и его датчиков, можно оставить триггер “цикл” и установить необходимое время для чтения. Например, при использовании цикла со значением 100 мс, информация, считываемая с устройства, будет обновляться каждые 100 мс. Не стоит устанавливать значение времени цикла меньше, чем поддерживает подключенное устройство или датчик. Удобно, когда каналы, имена которых начинаются с “W_...” служат для записи значений (см. код функции в графе “тип доступа”). Каналы, имена которых начинаются с “R_...” служат для чтения данных с устройства. Разработка в среде CODESYS 3.5 149 4. Работа с модулями ввода и вывода RealLab Чтобы добавить канал, во вкладке вашего устройства “Канал Modbus Slave” нажмите “Добавить канал…”. Введите его имя, укажите тип доступа, триггер, время цикла (если триггер: цикл), сдвиг и длину. 4.2.1.3. Использование функций в программах Функция WORD2_TO_REAL (рис. 4.54) объединяет 2 WORD-переменных (WORD = 2 байта) в одну переменную REAL (REAL = 4 байта). Объединение можно провести с перестановкой байтов, слов (по 2 байта) и без перестановки. Рис. 4.54. Входные параметры функции WORD2_TO_REAL Функция REAL_TO_2WORD (рис. 4.55) разбивает одну переменную REAL на 2 переменных WORD с возможностью перестановки слов. Рис. 4.55. Входные параметры функции REAL_TO_2WORD 4.2.2. Пример использования NLS-16DI-Ethernet 4.2.2.1. Настройка каналов и соотнесения входов/выходов устройства Дерево устройств – Ethernet – Modbus_TCP_Master – NLS-16DI_Ethernet, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.57). Рис. 4.56. Каналы модуля NLS-16DI-Ethernet 150 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.57. Соотнесение входов/выходов модуля NL(S)-16DI-Ethernet В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе. 4.2.2.2. Визуализация Рис. 4.58. Полностью готовая визуализация NLS-16DI-Ethernet Разработка в среде CODESYS 3.5 151 4. Работа с модулями ввода и вывода RealLab 4.2.3. Пример использования NLS-16DO-Ethernet 4.2.3.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.59 Каналы NLS-16DO-Ethernet Дерево устройств – Ethernet – Modbus_TCP_Master – NLS-16DO_Ethernet, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.60). Рис. 4.60. Соотнесение входов/выходов NLS-16DO-Ethernet 152 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе. 4.2.3.2. Настройка каналов и соотнесения входов/выходов устройства Помимо индикаторов здесь используются клавишные переключатели. На них назначены переменные W0, W1, W2, …, W15 из соотнесения входов/выходов. Рис. 4.61. Полностью готовая визуализация NLS-16DO-Ethernet 4.2.4. Пример использования NLS-8R-Ethernet 4.2.4.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.62. Каналы на чтение/запись модуля NL(S)-8R-Ethernet Дерево устройств – Modbus_COM – Modbus_Master_COM_Port – NLS-16DO, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.63). Разработка в среде CODESYS 3.5 153 4. Работа с модулями ввода и вывода RealLab Рис. 4.63. соотнесение входов/выходов модуля NL(S)-8R-Ethernet В параметрах соотнесения входов/выходов можно присваивать каналам и их составляющим не только переменные, которые нигде не объявлены, но и уже объявленные в программе. 4.2.4.2. Визуализация Рис. 4.64. Полностью готовая визуализация NLS-8R-Ethernet 154 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.2.5. Пример использования NLS-4AO-Ethernet 4.2.5.1. Настройка каналов и соотнесения входов/выходов устройства Дерево устройств – Ethernet – Modbus_TCP_Master – NLS-4AO_Ethernet, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.65 – рис. 4.69). Рис. 4.65. Каналы на чтение/запись NLS-4AO-Ethernet Рис. 4.66. Соотнесение входов/выходов NLS-4AO-Ethernet, ч. 1 Разработка в среде CODESYS 3.5 155 4. Работа с модулями ввода и вывода RealLab Рис. 4.67. Соотнесение входов/выходов NLS-4AO-Ethernet, ч. 2 156 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.68. Соотнесение входов/выходов NLS-4AO-Ethernet, ч. 3 Рис. 4.69. Соотнесение входов/выходов NLS-4AO-Ethernet, ч. 4 4.2.5.2. Создание программы В дереве устройств дважды кликните по файлу вашей программы, например “PLC_PRG”. Откроется редактор кода. Если в дереве устройств нет Разработка в среде CODESYS 3.5 157 4. Работа с модулями ввода и вывода RealLab файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. В редакторе кода есть верхняя и нижняя части. В верхней части нужно объявлять переменные, а в нижней – писать сам алгоритм, который циклически выполняется модулем. Объявим переменные для взаимодействия с нашим модулем NLS-4AOEthernet: Рис. 4.70. Объявление переменных программы Переменные типа данных INT: iOutNumber, iPowerNumber, iSafeNumber, iRangeNumber, iSpeedNumber. В них записываются значения номеров выходов, для которых устанавливаются параметры: значения напряжения/силы тока на выходах (iOutNumber), значения напряжения/силы тока на выходах при запуске (Power On - iPowerNumber) и при срабатывании сторожевого таймера (Safe Value - iSafeNumber), коды диапазонов (iRangeNumber), скорость нарастания выходного сигнала (iSpeedNumber). Массивы: RANGE_ARR и SPEED_ARR используются для записи диапазонов выходов и скоростей нарастания в память модуля (через каналы в регистры). Триггеры: trig_out, trig_power, trig_safe, trig_range, trig_speed. Нужны для записи значений в память модуля. При нажатии на кнопку записи определенных данных срабатывает один из триггеров. Триггерная переменная, указанная для каждого канала записи принимает значение TRUE и данные записываются в нужный регистр модуля. Переменные: xClicked_Out, xClicked_Power, xClicked_Safe, xClicked_Range, xClicked_Speed, xRun_Out, xRun_Power, xRun_Safe, xRun_Range, xRun_Speed, являются дополнением к триггерам. “xClicked_...” установлены в визуализации на кнопки, при нажатии на которые эти переменные принимают значение TRUE. 158 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Оставшиеся массивы по две WORD-переменные (2 элемента по 2 байта) нужны для хранения значений выходов (текущие значения, значения Power On и Safe Value), т.к. значения хранятся в FLOAT (4 байта). Данные выходов разбиты по двум регистрам по 2 байта для каждого выхода. Чтобы данные удобно было читать, нужно переносить их из двух 2-байтовых переменных в одну 4-байтовую. Это делается с помощью функции WORD2_TO_REAL. Обратная конвертация из одной REAL переменной в две WORD переменных выполняется функцией REAL_TO_2WORD. Функция WORD2_TO_REAL (рис. 4.71) объединяет 2 WORD-переменных (WORD = 2 байта) в одну переменную REAL (REAL = 4 байта). Объединение можно провести с перестановкой батов, слов (по 2 байта) и без перестановки. Рис. 4.71. Входные параметры функции WORD2_TO_REAL Функция REAL_TO_2WORD (рис. 4.72) разбивает одну переменную REAL на 2 переменных WORD с возможностью перестановки слов. Рис. 4.72. Входные параметры функции REAL_TO_2WORD Разработка в среде CODESYS 3.5 159 4. Работа с модулями ввода и вывода RealLab 4.2.5.3. Визуализация Рис. 4.73. Полностью готовая визуализация NLS-4AO-Ethernet 4.2.6. Пример использования NLS-8AI-Ethernet 4.2.6.1. Настройка каналов и соотнесение входов/выходов устройства Дерево устройств – Ethernet – Modbus_TCP_Master – NLS-4AI_Ethernet, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.75 – рис. 4.76). Рис. 4.74. Каналы на чтение/запись NLS-8AI-Ethernet 160 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.75. Соотнесение входов/выходов NLS-8AI-Ethernet, ч. 1 Разработка в среде CODESYS 3.5 161 4. Работа с модулями ввода и вывода RealLab Рис. 4.76. Соотнесение входов/выходов NLS-8AI-Ethernet, ч. 2 4.2.6.2. Создание программы Откройте файл программы в созданном проекте. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. Нужно объявить переменные (рис. 4.77). Рис. 4.77. Объявление переменных с комментариями Код программы (рис. 4.78) содержит инициализацию триггеров и функции конвертации данных из двух WORD-переменных в одну типа REAL. 162 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.78. Код программы для примера работы с модулем NLS-8AIEthernet Работа с переменными, объявленными в соотнесении входов/выходов, проходит в визуализации (переменные такие как, например, R_RANGE_0, привязаны к элементам визуализации, отображающим и позволяющим изменять значение этих переменных). 4.2.6.3. Визуализация Рис. 4.79. Полностью готовая визуализация NLS-8AI-Ethernet Разработка в среде CODESYS 3.5 163 4. Работа с модулями ввода и вывода RealLab 4.2.7. Пример использования NLS-16AI-I (Ethernet) 4.2.7.1. Настройка каналов и соотнесение входов/выходов устройства Дерево устройств – Ethernet – Modbus_TCP_Master – NLS-16AI-I_Ethernet, во вкладке "ModbusGenericSerialSlave Соотнесение входов/выходов" (рис. 4.81 – рис. 4.82). Рис. 4.80. Каналы на чтение/запись NLS-16AI-I-Ethernet Рис. 4.81. Соотнесение входов/выходов NLS-16AI-I-Ethernet, ч. 1 164 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.82. Соотнесение входов/выходов NLS-16AI-I-Ethernet, ч. 2 4.2.7.2. Создание программы В дереве устройств дважды кликните по файлу вашей программы, например “PLC_PRG”. Откроется редактор кода. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. В редакторе кода есть верхняя и нижняя части. В верхней части нужно объявлять переменные, а в нижней – писать сам алгоритм, который циклически выполняется модулем. Объявим переменные для взаимодействия с нашим модулем NLS-16AI-I: Рис. 4.83. Объявление переменных с комментариями Код программы (рис. 4.84) содержит инициализацию триггера и функции конвертации данных из двух WORD-переменных в одну типа REAL. Разработка в среде CODESYS 3.5 165 4. Работа с модулями ввода и вывода RealLab Рис. 4.84. Код программы для примера работы с модулем NLS-16AI-IEthernet Работа с переменными, объявленными в соотнесении входов/выходов, проходит в визуализации (переменные такие как, например, R_RANGE_0, привязаны к элементам визуализации, отображающим и позволяющим изменять значение этих переменных). 4.2.7.3. Визуализация Рис. 4.85. Полностью готовая визуализация NLS-16AI-I-Ethernet 166 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.2.8. Пример использования NLS-4RTD (Ethernet-2P) 4.2.8.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.86. Каналы на чтение/запись NLS-4RTD-Ethernet Рис. 4.87. Соотнесение входов/выходов NLS-4RTD-Ethernet, ч. 1 Разработка в среде CODESYS 3.5 167 4. Работа с модулями ввода и вывода RealLab Рис. 4.88. Соотнесение входов/выходов NLS-4RTD-Ethernet, ч. 2 4.2.8.2. Создание программы В дереве устройств дважды кликните по файлу вашей программы, например “PLC_PRG”. Откроется редактор кода. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. В редакторе кода есть верхняя и нижняя части. В верхней части нужно объявлять переменные, а в нижней – писать сам алгоритм, который циклически выполняется модулем. Объявим переменные NLS-4RTD-Ethernet: для взаимодействия с нашим модулем Рис. 4.89. Объявление переменных с комментариями Код программы содержит инициализацию триггера и функции конвертации данных из двух WORD-переменных в одну типа REAL (рис. 4.90). Рис. 4.90. Код программы для примера работы с модулем NLS-4RTDEthernet 168 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.2.8.3. Визуализация Рис. 4.91. Полностью готовая визуализация NLS-4RTD-Ethernet 4.2.9. Пример использования NLS-8TI (Ethernet) 4.2.9.1. Настройка каналов и соотнесения входов/выходов устройства Рис. 4.92. Каналы на чтение/запись NLS-8TI-Ethernet Разработка в среде CODESYS 3.5 169 4. Работа с модулями ввода и вывода RealLab Рис. 4.93. Соотнесение входов/выходов NLS-8TI-Ethernet, ч. 1 Рис. 4.94. Соотнесение входов/выходов NLS-8TI-Ethernet, ч. 2 170 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.2.9.2. Создание программы В дереве устройств дважды кликните по файлу вашей программы, например “PLC_PRG”. Откроется редактор кода. Если в дереве устройств нет файла программы, то его нужно создать. Для этого нажмите правой кнопкой мыши по объекту “Application” (там же, в дереве устройств) – “Добавление объекта” – “POU”. В редакторе кода есть верхняя и нижняя части. В верхней части нужно объявлять переменные, а в нижней – писать сам алгоритм, который циклически выполняется модулем. Объявим переменные для взаимодействия с нашим модулем NLS-8TI-Ethernet: Рис. 4.95. Объявление переменных с комментариями Код программы содержит инициализацию триггера и функции конвертации данных из двух WORD-переменных в одну типа REAL. 4.2.9.3. Визуализация Рис. 4.96. Полностью готовая визуализация NLS-8TI-Ethernet Разработка в среде CODESYS 3.5 171 4. Работа с модулями ввода и вывода RealLab 4.3. Протокол CANOpen Проекты с примерами работы с устройствами в среде разработки CODESYS 3.5 можно скачать на нашем сайте. 4.3.1. Подключение устройства CAN Создайте новый проект. Подключитесь к ПЛК. В дереве устройств дважды кликните по “Device”. В основном окне нажмите кнопку “Сканировать сеть” и выберите ПЛК к которому хотите подключиться. ПКМ (Правой кнопкой мыши) по "Device" в дереве устройств – Добавить устройство – CANbus - CANbus. ПКМ по CANbus – Добавить устройство – CANopen – CANopenManager – CANopen_Manager. ПКМ по CANopen_Manager – Добавить устройство – [выберите ваше устройство из списка]. Дважды кликните по CANbus в дереве устройств. Во вкладке CANbus “Общее” укажите номер CAN-порта и скорость передачи (Кбит/с). Двойной клик по CANopen_Manager – установите параметры как на рис. 4.97. Рис. 4.97. Пример параметров CANopen_Manager для подключения После СANopen Manager добавьте необходимое slave-устройство. Например, NLS-16DO-CAN. В настройках slave-устройства (рис. 4.98) на вкладке “Общее” укажите ID узла. Поставьте галочку на “Экспертные установки”, чтобы получить доступ к дополнительным параметрам. Снимите галочку “Сброс узла”. Если обмен данными не происходит, установите галочку “Опц. устройство”. 172 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.98. Настройки устройства CAN Если Вам необходимо, чтобы после запуска проекта, все подключенные CAN устройства запускались сразу, а не находились в состоянии конфигурации, установите галочки “Запуск слейвов” и “NMT Запустить все (если возможно)”. 4.3.2. Настройка параметров PDO / SDO Дважды кликните по имени вашего модуля в дереве устройств. Вам понадобятся вкладки: PDO, SDO, CANopen Соотнесение входов/выходов. PDO (объект данных процесса) и SDO (объект данных службы): CANopen определяет два основных метода связи: PDO и SDO. PDO используются для обмена данными между устройствами в режиме реального времени, обеспечивая быструю и эффективную передачу важной информации. SDO, с другой стороны, используются для настройки и доступа к параметрам и настройкам устройства, обеспечивая структурированный метод для удаленной настройки устройства. 4.3.2.1. PDO Протокол PDO это протокол обмена данными между узлами сети. Длина данных 8 байт. Протокол PDO определяет формат данных в зависимости от настроек PDO. Протокол PDO соответствует CANopen application layer and communication profile CiA 301. Важно! Кадры протокола PDO обрабатываются только в рабочем состоянии. Разработка в среде CODESYS 3.5 173 4. Работа с модулями ввода и вывода RealLab Протокол PDO включает в себя два вида кадров данных TPDOn (передаваемые) и RPDO (принимаемые). Каждый вид кадров включает в себя по четыре независимых потока. Каждый поток имеет параметры коммуникации и параметры сопоставления. Рис. 4.99. Пример PDO модуля NLS-16DI-CAN Чтобы добавить соотнесение в PDO, нажмите “ + Добавить соотнесение” в верхней части интерфейса программы. Один объект RPDO/TPDO может иметь максимальную битовую длину, размером 64 бита. Важно! В случае, когда используется асинхронный тип передачи TPDO, требуется установить параметр “Время события” не равным нулю в задействованных потоках TPDO, иначе обмен данными происходить не будет!. Чтобы установить время события для потока TPDO, дважды кликните по его имени (например: “Transmit PDO n Parameter”, где n – номер потока). Убедитесь, что тип передачи асинхронный и установите время события. Рис. 4.100 – Настройка времени события TPDO 174 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 4.3.2.2. SDO Протокол SDO определяет команды доступа к объектам SDO. Протокол SDO соответствует CANopen application layer and communication profile CiA 301. Важно! Кадры протокола SDO не обрабатываются, когда устройство находится в состоянии остановки. Важно! Кадры протокола SDO с командой записи обрабатываются, только когда устройство находится в состоянии конфигурирования. Обмен данными протокола SDO производится в режиме клиент – сервер. Устройство является сервером SDO, а ведущее устройство сети - клиентом SDO. Инициатором обмена выступает клиент SDO и на каждый запрос сервер генерирует ответ (если устройство не может предоставить какие-либо значимые данные, или если запрос сам по себе был ошибочным, то сервер SDO передаст информацию об ошибке). Важно! Снимите флажок с пункта “Записать полную конфигурацию PDO”, при установке флажка на пункт “Включить защиту узла” во вкладке “Общее” – “Защита узла”. Иначе есть риск, что модуль будет перезапускаться сам по себе и перестанет отвечать на запросы ведущего устройства. Рис. 4.101. Вкладка SDO Разработка в среде CODESYS 3.5 175 4. Работа с модулями ввода и вывода RealLab Внимание! Если в вашей программе (в визуализации) уже реализовано управление состояниями модуля и редактирование параметров SDO, снимите флажок с пункта “Создать все SDO” т.к. данная вкладка имеет больший приоритет выполнения, чем работа с SDO с помощью кода самой программы, и каждый раз когда устройство будет перезапускаться, параметры SDO будут взяты с таблицы данной вкладки, что очень неудобно в определенных случаях. Примеры управления модулем, его состоянием и параметрами SDO с помощью кода, включены в примеры использования модулей серии CAN: NLS-8AI, NLS-8TI, NLS-8AI-I, NLS-4RTD, NLS-4AO. 4.3.3. Использование функций в программах 4.3.3.1. Функция WORD2_TO_REAL Функция WORD2_TO_REAL (рис. 4.102) объединяет 2 WORD-переменных (WORD = 2 байта) в одну переменную REAL (REAL = 4 байта). Объединение можно провести с перестановкой байтов, слов (по 2 байта) и без перестановки. Данную функцию можно использовать также и для перемещения информации из массива байтов, размерностью 4 байта, в 4 байтовую переменную. Или можно использовать упрощенный вариант данной функции – BYTE4_TO_REAL. Рис. 4.102. Входные параметры функции WORD2_TO_REAL 4.3.3.2. Функция BYTE4_TO_REAL Функция BYTE4_TO_REAL (рис. 4.103) объединяет 4 BYTE переменных в одну переменную типа REAL (4 байта). Объединение производится без перестановки байтов. Данную функцию можно заменить функцией WORD2_TO_REAL. Также эта функция может перемещать данные из любой 4-байтовой переменной в массив, размерностью 4 байта (например, массив из 4-х BYTE переменных). 176 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Рис. 4.103. Входные параметры функции BYTE4_TO_REAL 4.3.3.3. Пример использования функции в программе В примерах использования модулей, где используются функции работы с SDO в коде программы, пригодится использование данной функции. Пример: Необходимо записать значение объекта 6423h (включение/выключение глобального прерывания аналогового входа). Для этого необходимо: объявить переменную-функциональный блок, массив из 4-х байтов по индексам от 1 до 4, переменную типа REAL, а также переменную-триггер, которая будет присвоена кнопке. При нажатии на кнопку, в SDO будет записано значение объекта 6423h, которое будет применено к модулю после сохранения параметров и перезапуска модуля. Необходимо будет перенести данные из переменной типа REAL в 4-байтовый массив (массив BYTE на 4 элемента). Для этого и пригодится функция BYTE4_TO_REAL (рис. 4.104). Массив байтов размером 4 элемента используется для записи данных об объекте 6423h функциональным блоком SDO_WRITE4. Рис. 4.104 Пример использования функции BYTE4_TO_REAL 4.3.4. Управление состоянием устройства в CODESYS Для того, чтобы управлять состоянием устройства в CODESYS, необходимо выполнить следующие шаги: 1. Создать визуализацию; 2. Добавить в визуализацию кнопки, с помощью которых планируется управлять состоянием устройства; 3. Написать код для каждой кнопки, который будет выполняться по ее нажатию. Для создания кнопки в визуализации достаточно перейти в раздел “Стандартные элементы управления” в панели инструментов визуализации и перетащить кнопку в окно конструктора визуализации. Задайте кнопке размеры, свойства цвета и шрифта, если требуется. Объявите логическую (BOOL) переменную, которая будет менять своё состояние при нажатии на кнопку, в коде программы (рис. 4.105). Далее, в свойствах кнопки, выберите Разработка в среде CODESYS 3.5 177 4. Работа с модулями ввода и вывода RealLab пункт “Конфигурация ввода – Нажатие – Переменная” и укажите там объявленную вами переменную. Рис. 4.105 Назначение переменной кнопке Чтобы полноценно управлять состоянием подключенного устройства, достаточно кнопок: Стоп; Старт; Перезапустить модуль; Перевести устройство в режим конфигурации. Также можно добавить кнопку перезапуска соединения. Следующий шаг – объявление переменных для остальных кнопок и переменной (функционального блока) для передачи NMT-команд (рис. 4.106). Рис. 4.106 Объявленные переменные для управления состоянием модуля Входные параметры функционального блока (ФБ) NMT, включенного в библиотеку CIA405: Номер сети, переменная-триггер (назначается на нажатие кнопки), таймаут, ID подключенного устройства, состояние (точнее, его код), в которое перейдет модуль после выполнения команды. Выходные параметры ФБ NMT: логическая переменная CONFIRM, значение которой показывает, успешно ли выполнена команда (1, если да, а иначе – 0), и переменная, отображающая код ошибки, в случае неудачного выполнения команды. 178 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Коды состояний устройства CAN: Старт – 16#5; Стоп – 16#4; Состояние конфигурации – 16#7F; Перезапуск модуля – 16#6; Перезапуск соединения – 16#7. Приведенные выше значения в исходном столбце не отображают значения спецификации CiA 405. При использовании специального оборудования для мониторинга передачи данных сообщений NMT будут отображаться значения как на рис. 4.107. Рис. 4.107. Значения состояний устройства, указанные в спецификации Рис. 4.108. Входные и выходные параметры функционального блока NMT Рис. 4.109. Основной код программы, отвечающий за управление модулем. Разработка в среде CODESYS 3.5 179 4. Работа с модулями ввода и вывода RealLab Рис. 4.110. Пример визуализации управления модулем NLS-16DI-CAN 4.3.5. Протоколы, используемые в работе CAN модулей 4.3.5.1. Протокол Heartbeat (Сердцебиение) Протокол определяет службу контроля над ошибками (Error Control Service) без необходимости использования удалённых запросов. Механизм Heartbeat (“сердцебиение”) для устройства CANopen устанавливается путем циклической передачи в миллисекундах сообщения о работе устройства без сбоев и ошибок, что позволяет своевременно сообщить пользователю о сбое в работе устройства. Если цикл Heartbeat завершится сбоем для устройства, генерирующего “сердцебиение”, т.е. heartbeatсообщение не будет передано, потребитель “сердцебиения” будет проинформирован об этом событии. Несмотря на то, что по умолчанию как сердцебиение, так и защита отключены, рекомендуется использовать эти механизмы контроля ошибок. Для активации протокола Heartbeat в CODESYS необходимо выполнить следующие шаги: 1. Открыть проект CODESYS и дважды кликнуть по названию устройства, для которого нужно активировать данный протокол; 2. Открыть вкладку “Общее”; 180 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab 3. Установить флажок на пункт “Включить генерацию сердцебиения; 4. Установить частоту, с которой Ваше устройство будет отправлять heartbeat-сообщения потребителю heartbeat о работе без ошибок и сбоев. Частота: Период времени в миллисекундах, с которым узел будет передавать в сеть сообщение Heartbeat (рис. 4.111). Идентификатор сообщения Heartbeat: 16#700+NodeID. Сообщение содержит байт текущего состояния узла: 4 (STOPPED), 5 (OPERATIONAL), 127 (PRE-OPERATIONAL) Значение по умолчанию равно 0, что означает отсутствие передачи Heartbeat-сообщения. Частоту отправки heartbeat-сообщений можно так же установить с помощью SDO-объекта 1017h – Producer Heartbeat time (Время поставщика соединения). Рис. 4.111. Протокол Heartbeat активирован и работает с частотой 200 мс CANopenManager (ведущее устройство) также может посылать heartbeatсообщения. Для активации во вкладке “Общее” CANopenManager’а необходимо установить флажок на “Включить генерацию сердцебиения”. Важно! Когда вы вставляете устройство с функцией сердцебиения, его параметры приводятся в соответствие с мастером (CANopenManager). Важно! В случае активации протокола Heartbeat протокол Guard не используется. Важно! Устройство не может выступать в роли ведомого устройства в протоколе Heartbeat. Разработка в среде CODESYS 3.5 181 4. Работа с модулями ввода и вывода RealLab Для настройки Heartbeat-протокола в параметрах CANopenManager’а, точно так же необходимо установить флажок “Включить генерацию сердцебиения”. В CANopenManager’е это работает следующим образом: Мастер отправляет сообщения сердцебиения, которые определяют временной интервал в поле “Частота”. Если для ведомых устройств включена функция сердцебиения, для ведущего устройства создается объект потребления сердцебиения от ведомого. При этом применяются ID узла и интервал сердцебиения 1.5x. 4.3.5.2. Протокол Guard (Защита узла) Защита узла: С помощью этого протокола сообщения (удаленные кадры CAN) отправляются ведущим NMT, существующим ведомым устройствам CANopen. Ведомые устройства должны отвечать на эти сообщения в течение определенного времени. Если ответа нет, то это регистрируется мастером NMT как сбой/ошибка. Поскольку, как правило, следует избегать удаленных кадров CAN, предпочтительнее мониторинг с помощью сердцебиения (протокола Heartbeat). Протокол Guarding используется для индикации устройства в сети CAN в формате запрос-ответ. Ведущее устройство генерирует запрос, в формате кадра RTR с идентификатором 700h + Node-ID, после получения которого устройство формирует ответный кадр в формате, представленном в Табл. 24. Табл. 24. Протокол Guarding Длина данных COB-ID 700h+ID 1 Байт 0 Бит 7 Биты 6-0 Контроль четности Toggle-bit Текущее состояние устройства 04h – остановлен 05h – рабочее 7Fh - конфигурирования Для активации протокола необходимо задать значение объекта “Время защиты сети (Guard Time)” не равное 0, для определения времени ожидания кадра до момента фиксации ошибки коммуникации в мс. Значение может быть увеличено с помощью объекта “Множитель времени защиты сети” (Life Time Factor). 182 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Также активировать данный протокол можно с помощью установки флажка “Защита узла” во вкладке “Общее” CANopenManager’а в дереве устройств CODESYS, там же можно настроить остальные параметры этого протокола. После установки галочки “Включить защиту узла” и запуска программы, CANopenManager отправляет сообщение ведомому устройству с интервалом “Интервал (мс)”. Если слейв не отвечает с заданным COB-ID (идентификатор объекта связи), CANopenManager повторно отправляет это сообщение столько раз, сколько задано в параметре “Время жизни”, или до тех пор, пока не ответит ведомое устройство. Если ведомое устройство не отвечает, оно помечается как “недоступное”. Рис. 4.112 Активация протокола защиты узла При активации устройство ожидает кадр в течении Time. Расчёт времени синхронизации происходит в зависимости от параметров (табл. 25). Табл. 25. Параметры для расчета времени синхронизации Guard Time = 00h Life Time Factor = 00h Защита сети отключена Guard Time ≠ 00h Time = Guard Time Time = Guard Time * Life Time Factor В случае если время ожидания превысило установленное время устройство генерирует ошибку коммуникации. Life Time Factor ≠ 00h Важно! В случае активации протокола Heartbeat протокол Guard не используется. Важно! Устройство не может выступать в роли ведущего устройства в протоколе Guard. 4.3.5.3. Протокол SYNC Важно! Устройство не может выступать в роли ведущего устройства в протоколе SYNC. Устройство не формирует кадр протокола SYNC. Разработка в среде CODESYS 3.5 183 4. Работа с модулями ввода и вывода RealLab Устройство принимает кадры протокола SYNC с адресом, указанным в объекте “Идентификатор коммуникационного” объекта, посылок синхронизации (COB-ID SYNC message) индекс 1005h и имеющие длину 0 байт После приёма кадра протокола SYNC устройство производит наращивание счётчика SYNC кадров для каждого из TPDO отдельно. Если в режиме приёма TPDO установлено значения от 00h - F0h (устройство ожидает указанное количество кадров SYNC после чего обновляет данные и передаёт кадр TPDO) или FCh (в данном режиме устройство ожидает кадр SYNC, после чего обновляет данные, и отправляет кадр TPDO после получения кадра типа RTR). Для активации протокола, перейдите во вкладку “Общее” CANopenManager’а и установите флажок “Синхронная генерация” и установите значения нужных вам параметров (рис. 4.113). Рис. 4.113. Параметры SYNC протокола в CANopenManager 184 Разработка в среде CODESYS 3.5 4. Работа с модулями ввода и вывода RealLab Лист регистрации изменений Дата изменения Описание изменения 29.11.2024 Настройка CANopen перенесена в п 4.3, добавлена информация о настройке времени события TPDO. 14.02.2025 Добавлена информация о настройке ПЛК как самостоятельного устройства CANopen Slave (п. 3.1.1). 21.03.2025 Добавлена информация о POU для неявных проверок (п. 3.19). 19.09.2025 Изменения в п. 3.13 (MQTT). Добавлен п. 3.20 (логирование в CODESYS). Исправления в п. 3.6 (OPC UA). Добавлен п. 3.21. Разработка в среде CODESYS 3.5 Примечание 185