Опрос датчика вакуума с нестандартным протоколом обмена в CODESYS V3.5

Контроллеры ОВЕН, программируемые в CODESYS V3.5 (ПЛК210, ПЛК200, СПК1xx, СПК210) позволяют настраивать обмен с устройствами по нестандартным протоколам. Часть из них реализована в библиотеке OwenVendorProtocols: протоколы электросчетчиков Меркурий и Энергомера, теплосчетчиков ВКТ и других популярных на рынке устройств учета.

Однако поддержать нестандартные протоколы для существующих устройств – невозможно из-за их количества. Поэтому в ряде случаев пользователю приходится реализовывать нестандартные протоколы самому. Сделать это на наших контроллерах достаточно просто – для таких целей была специально разработана библиотека OwenCommunication. Она предоставляет пользователю высокоуровневые коммуникационные блоки.

Рассказываем о конкретном примере использования этой библиотеки: 

Контроллеры ОВЕН, программируемые в среде CODESYSV3.5 (ПЛК210, ПЛК200, СПК1xx, СПК210) не только поддерживают стандартные промышленные протоколы ModbusRTU/TCP (в режимах Master/Slave) и OPCUA (в режиме Server), но и позволяют настраивать обмен с устройствами по нестандартным протоколам передачи данных.

В библиотеке OwenVendorProtocols реализованы протоколы электросчетчиков Меркурий и Энергомер, теплосчетчиков ВКТ и других популярных на рынке устройств учета. Но поддерживать нестандартные протоколы для существующих устройств невозможно из-за их количества. Поэтому в ряде случаев пользователю приходится реализовывать нестандартные протоколы самостоятельно.

При использовании контроллеров ОВЕН это достаточно просто сделать, для таких целей была специально разработана библиотека OwenCommunication, предоставляющая пользователю высокоуровневые коммуникационные блоки.

Пример использования библиотеки OwenCommunication
К нам обратился клиент, которому требовалось подключить к контроллеру СПК два датчика вакуума Smartline VSM77DL, выпускаемых компанией Thyracont Vacuum Instruments. Для опроса этих датчиков необходимо использовать нестандартный строковый протокол обмена, разработанный производителем. Клиенту требовалось считать с датчика лишь текущее значение давления, то есть отправить на датчик одну команду, получить ответ и извлечь из него нужную величину.

В документации на протокол датчика эта команда выглядит следующим образом:

В примере из документации датчик имеет адрес 001 (значение по умолчанию). Для экономии времени не реализовывать полноценный «сборщик» запросов с расчетом длины пакета и контрольной суммы, в ОВЕН предложили клиенту оставить для обоих датчиков адрес 1 и подключить их к разным COM-портам контроллера.

Поскольку контроллер СПК имеет 3 порта RS-485, это оказалось приемлемым решением: на два порта подключены 2 датчика (по одному на порт) и еще на один порт – шина с модулями ввода-вывода ОВЕН Mx110. Других устройств в проекте клиента не использовалось.

Для начала датчик был подключен к ПК через конвертер интерфейсов USB/RS-485 ОВЕН АС4-М. С помощью утилиты HerculesSetupUtility на него был отправлен запрос, указанный в руководстве:

0010MV00D$0D

Заметим, что последний фрагмент запроса, который в руководстве отмечен как CR, мы заменили на $0D. Дело в том, что CR – это общепринятое обозначение спецсимвола конца строки (аббревиатура от CarriageReturn – «возврат каретки»). Утилита не позволяет вводить такие спецсимволы в явном виде: сначала нужно ввести символ $, а потом код спецсимвола из таблицы ASCII. Посмотрим в таблицу, и увидим, что код символа CR – это 0D.

В ответ на запрос получили корректный ответ. Также на этом этапе определили сетевые настройки датчика: в руководстве указано, он работает в режиме 8-N-1 (8 бит данных, без контроля четности, 1 стоповый бит), но не указана скорость обмена. Опытным путем было установлено, скорость обмена по умолчанию составляет 115200 бод.

После этого был создан проект для виртуального контроллера CODESYSControlWinV3. В проект добавили библиотеку OwenCommunication, с помощью двух блоков которой написали простейший отладочный проект:

В рамках проекта запрос к датчику жестко задан в виде начального значения переменной sRequest. Ответ размещается в переменной sResponse. Экземпляр блока COM_Control используется для открытия COM-порта с нужными настройками, а экземпляр UNM_SerialRequest – для отправки запроса в этот порт и получения ответа.

Ответ приходит в виде строки, содержащей адрес устройства и другую информацию. Но наиболее интересным фрагментом ответа является значение давления – причем в программе его желательно получать не в строковом виде, а в виде значения с плавающей точкой (типа REAL). Для этого полученный ответ обрабатывается функциями Between (из библиотеки OwenStringUtils) и MID (из библиотеки Standard), которые «вырезают» из него ненужные фрагменты, а потом конвертируют оставшееся в строке значение давления в тип REAL с помощью оператора TO_REAL.

Далее запустили виртуальный контроллер CODESYSControlWinV3, загрузили в него созданный нами проект и присвоили значение TRUE в переменной xGetPressure. Эта переменная привязана ко входу xExecute экземпляра блока UNM_SerialRequest. По переднему фронту на этом входе происходит однократная отправка запроса и получение ответа. Соответственно, в реальном проекте на этот вход требуется завести выход генератора импульсов с нужным периодом (например, 1 секунда) – каждый импульс будет приводить к очередному сеансу обмена.

После вызова экземпляра блока переменная rValue получила значение 1000. Такое же значение отображалось в этот момент на дисплее датчика.

Эта процедура настройки обмена с прибором заняла полчаса, к началу процедуры датчик уже был подключен к ПК.

Созданный пример можно практически без доработок интегрировать в пользовательский проект и запустить на реальном контроллере, добавив генератор импульсов для циклического обмена.

Для опроса второго датчика требуется лишь скопировать созданный код и поменять номер COM-порта, указываемый в вызове экземпляра COM_Control.

Таким образом, контроллеры ОВЕН позволяют достаточно просто и с минимальными затратами времени настроить обмен с другими устройствами по нестандартным протоколам. Подробное руководство с примерами разработки собственных протоколов в CODESYS V3.5 и использованные в примере библиотеки доступны по ссылке.

Если у вас возникают вопросы по статье или реализации нестандартных протоколов обмена в CODESYS V3.5, напишите: mail@elefantkip.ru и специалисты технической поддержки ОВЕН с радостью вас проконсультируют!

© Материал является объектом авторского права компании ОВЕН. Запрещается копирование, распространение или любое иное использование информации и объектов данного материала без предварительного согласия правообладателя.

#ОВЕН_от_Элефант

Источник: https://t.me/owen_prom