Контроллеры ОВЕН ПЛК210/ПЛК200 и СПК1хх широко применяются в системах диспетчеризации – в том числе для опроса технологического оборудования по нестандартным протоколам обмена. Библиотека OwenVendorProtocols для среды CODESYS V3.5 предоставляет разработчику готовые функциональные блоки для различных устройств, позволяя снизить затраты времени на создание проекта.
Большинство устройств, применяемых в системах промышленной автоматизации, поддерживает один или несколько стандартных протоколов обмена – таких как Modbus, Profinet, OPC UA и т.д.
Совсем иначе обстоит дело с измерительным оборудованием (электро- и теплосчетчиками, газоанализаторами, расходомерами и т.д.) – значительное число производителей до сих пор выпускает приборы, которые поддерживают только собственные протоколы обмена. Настройка обмена с такими устройствами, как правило, является нетривиальной задачей – программист должен разобраться, как формировать запросы нужного формата, и как получить ответы на них. Часто это осложняется отсутствием сопроводительной документации от производителя.
Чтобы упростить пользователям решение этой задачи, компания ОВЕН разработала библиотеку OwenVendorProtocols для среды CODESYS V3.5, которая включает в себя блоки опроса наиболее востребованных устройств.
Поддерживаемые устройства
На момент публикации статьи в библиотеке поддерживаются следующие приборы:
- электросчетчики «Меркурий» с двумя протоколами обмена – для однофазных «Mеркурий 2xx» и трехфазных счетчиков «Меркурий 23x»;
- электросчетчики «Энергомера» с протоколами CE и IEC 61107;
- электросчетчики СЭТ-4ТМ и другие счетчики с СЭТ-подобным протоколом (ПСЧ и т.д.);
- теплосчетчики ВКТ-5 и ВКТ-7;
- теплосчетчики ТЭМ-104 и ТЭМ-106;
- счетчики импульсов «Пульсар» и другие устройства с протоколом «Пульсар-М».
Обзор библиотеки
Все функциональные блоки библиотеки имеют унифицированный интерфейс, что упрощает их использование. В таблице перечислены типы входов и выходов и их описание.
Таблица. Типы входов и выходов функциональных блоков библиотеки
Название | Тип | Описание |
Входы | ||
xExecute | BOOL | По переднему фронту выполняется однократная отправка запроса |
tTimeOut | TIME | Таймаут ожидания ответа на запрос |
usiRetry | USINT | Число переповторов в случае отсутствия ответа |
hCom | OVP.CAA.HANDLE | Дескриптор COM-порта, полученный от ФБ COM_CONTROL (блок открытия COM-порта) |
eParam | Перечисление (индивидуальное для каждого устройства) | Отправляемая команда |
pRequestData | OVP.CAA.PVOID | Указатель на буфер данных запроса |
szRequestData | OPV.CAA.SIZE | Размер буфера запроса в байтах |
pResponseData | OVP.CAA.PVOID | Указатель на буфер ответа |
szResponseData | OPV.CAA.SIZE | Размер буфера ответа в байтах |
DeviceAddr | Зависит от устройства | Адрес устройства |
Выходы | ||
xDone | BOOL | TRUE – получен корректный ответ |
xBusy | BOOL | TRUE – блок находится в работе |
xError | BOOL | TRUE – флаг ошибки |
eError | OVP.ERROR | Код ошибки |
Перечисление eParam описывает команду, которая будет отправлена устройству – например, чтение измеренных значений, запись системного времени и т.д. Функциональный блок для опроса электросчетчиков «Меркурий 23x» показан на рис. 1, и соответствующее ему перечисление MERCURY23x_PARAMS – на рис. 2. В описании перечисления для каждой команды указаны типы данных, которые должны быть размещены под указателями pRequestData (буфер запроса) и pResponseData (буфер ответа). В буфере запроса указываются дополнительные аргументы команды (например, для команды записи системного времени таким аргументом является значение системного времени), в буфере ответа размещаются полученные от прибора данные. Для некоторых команд один или даже оба этих входа не используются. Например, команда перезапуска счетчика не требует дополнительных аргументов, а ответ на нее не содержит никаких данных.
Так как протоколы счетчиков могут включать в себя десятки или даже сотни команд, то поддержать их в полном объеме является чрезвычайно сложной задачей. Поэтому в библиотеке поддерживаются только основные, наиболее часто используемые команды. Но при необходимости пользователь может отправить любую команду – для этого в перечислении команд всегда есть специальное значение USER_DEFINED (пользовательская команда). Аргументы этой команды размещаются в буфере по указателю pRequestData и/или задаются с помощью специальных входов блока. Разбор ответа на такую команду пользователь должен реализовать самостоятельно, ориентируясь на спецификацию протокола.
Помимо унифицированных входов/выходов, у каждого блока есть и специфические, требуемые для реализации конкретного протокола. Например, для блока опроса электросчетчиков «Меркурий 23x» (рис. 1) такими входами являются пароль счетчика, уровень доступа, номер массива энергий, месяц и тариф (используются в запросе значения накопленной энергии) и т.д.
Опрос неподдерживаемых устройств
В библиотеке поддерживаются 9 типов счетчиков, наиболее широко используемых клиентами ОВЕН, но, разумеется, на рынке автоматизации представлено значительно больше устройств с нестандартными протоколами, и создать блок опроса для каждого такого прибора попросту невозможно. Но и в этом случае разработчику не придется «начинать с нуля» – он может воспользоваться библиотекой OwenCommunication, которая включает в себя блоки для отправки произвольных данных через COM-порт или TCP/UDP-сокет. Таким образом, «коммуникационная» часть задачи будет сразу решена – программисту останется только написать код для формирования запросов и разбора ответов.
Документация и примеры
Документация и примеры использования библиотеки доступны на официальном сайте ОВЕН в разделе CODESYS V3.5. Задать вопросы по работе с библиотекой можно на форуме ОВЕН в разделе ПЛК (среда программирования CODESYS V3.5) в теме Библиотека OwenVendorProtocols.