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

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

Контроллеры ОВЕН, разработанные на базе среды CODESYS V3.5 (ПЛК210, ПЛК200, СПК, СПК210), не только совместимы со стандартными промышленными протоколами Modbus RTU/TCP (в режимах Master/Slave) и OPC UA (в режиме Server), но и дают возможность настроить обмен данными с использованием нестандартных протоколов.

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

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

Пример использования библиотеки OwenCommunication

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

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

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

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

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

0010MV00D$0D

Обратите внимание, что последний фрагмент запроса, обозначенный в инструкции как CR, мы заменили на $0D. Дело в том, что CR — это общепринятое сокращение от Carriage Return («возврат каретки»), которое обозначает специальный символ. Программа не позволяет вводить такие символы напрямую, поэтому сначала нужно указать символ $, а затем код символа из таблицы ASCII. Согласно таблице, код символа CR равен 0D.

В ответ на наш запрос мы получили корректный ответ. Кроме того, на этом этапе мы определили сетевые параметры датчика: согласно руководству, он работает в режиме 8-N-1 (8 бит данных, без контроля чётности, 1 стоповый бит), однако скорость обмена не указана. Экспериментальным путём была определена стандартная скорость обмена, равная 115 200 бод.

Затем мы создали проект для виртуального контроллера 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. Такая же величина отображалась в этот момент на дисплее датчика.

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

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

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

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

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