AN005. Удалённое управление линиями ввода-вывода на DS

Что есть в этой рекомендации по применению

Многие наши заказчики спрашивали, можно ли заставить наши модули (например, EM100) или готовые устройства (DS100) работать как удалённые линии ввода-вывода, то есть использовать DS для управления «нагрузками» (включать и выключать что-либо) и контроля «датчиков» (определять, замкнут ли выключатель). Ответ - «да». В этой рекомендации по применению разобрано, как это сделать.

Содержание:

  • Линии ввода-вывода общего назначения серверов устройств Tibbo
  • Управление линиями ввода-вывода через виртуальный последовательный порт
  • Установка и чтение состояния линий ввода-вывода с помощью команд on-the-fly
  • Использование уведомлений для получения состояния линий ввода-вывода

Линии ввода-вывода общего назначения серверов устройств Tibbo

Вероятно, вы знаете, что каждая модель DS, которую мы выпускаем, содержит некоторое количество линий, которые можно использовать как удалённые линии ввода-вывода. Например, последовательный порт последовательного сервера устройств DS100R содержит линии RTS (выход) и CTS (вход). Для последовательного порта RTS и CTS выполняют конкретную функцию, связанную с портом, но при этом их можно использовать и как универсальные выход и вход!

Другие «внешние» последовательные серверы устройств, например DS100B и DS203, также имеют линии DTR (выход) и DSR (вход). Вместе с RTS/CTS это даёт всего два выхода и два входа.

У большинства встраиваемых модулей, таких как EM100 и EM200, линий ввода-вывода ещё больше, и часть из них вообще не связана со стандартными линиями управления последовательным портом. Например, помимо RTS, CTS, DTR и DSR, у EM200 есть ещё пять линий: P0, P1, P6, P7, P8. Все 9 линий можно использовать как универсальные входы и выходы - на уровне модуля выделенных выводов «только вход» или «только выход» нет*.

Управление линиями ввода-вывода через виртуальный последовательный порт

Самый простой способ управлять линиями ввода-вывода DS - через виртуальный последовательный порт (VSP). Естественно, это ограничено установкой состояния линий RTS и DTR и чтением состояния CTS и DSR. Дополнительные линии, такие как P0, P1 и т. д., так не управляются. Кроме того, RTS/DTR работают только как выходы, а CTS/DSR - только как входы, даже на встраиваемых модулях, у которых выводы ввода-вывода двунаправленные (см. выше). Преимущество VSP в простоте: не нужно писать много дополнительного кода.

Чтобы проверить работу VSP с линиями ввода-вывода DS, можно создать простое приложение на Visual Basic. Для работы с VSP используйте ActiveX-элемент MSComm. Помните, что к удалённому управлению последовательным портом DS применяются те же правила, что и к обычному COM-порту ПК:

  • Чтобы установить RTS и читать CTS, задайте MSComm.Handshaking="None". Если задать handshaking "ComRTS", программа на VB не сможет работать с RTS/CTS напрямую.
  • После установки MSComm.Handshaking="None" состоянием RTS можно управлять через MSComm.RTSEnable, а состояние CTS читать через MSComm.CTSHolding.
  • Аналогично, состоянием DTR можно управлять через MSComm.DTREnable, а состояние DSR читать через MSComm.DSRHolding.
  • Чтобы управлять DTR удалённо, задайте настройку DTR Mode (DT) у DS равной 0 (idle). Чтобы DSR работал как чистая входная линия, не задавайте Connection Mode (CM) равным 3 (on command или DSR=HI). Обе настройки выставит автоматически Connection Wizard, если использовать его, как описано ниже.

Перед тестом нужно правильно настроить VSP и DS. Запустите Connection Wizard и сделайте следующие выборы. Важные моменты:

  • Job: выберите создание связи между виртуальным последовательным портом и сервером устройств.
  • Initiator of data exchange: Virtual Serial Port.
  • On-the-fly commands: yes, включите команды on-the-fly и используйте метод доступа out-of-band.

(все остальные выборы очевидны или не имеют значения).

Когда мастер выполнит свою работу и дойдёт до последнего экрана, сделайте следующее:

  • Нажмите «open COM settings» - откроются свойства VSP (то же окно можно открыть из VSP Manager).
  • Измените Connection Mode VSP на «immediately».
  • Нажмите OK, чтобы закрыть диалог.

Несколько комментариев к только что описанной настройке. Команды on-the-fly включены, потому что управление состоянием линий ввода-вывода выполняется именно через них. Connection Mode VSP установлен на «immediately», чтобы уведомления об изменении состояния отправлялись с DS на VSP (ПК) сразу после открытия VSP. Подробнее об этом см. в одном из разделов ниже («Использование уведомлений для получения состояния линий ввода-вывода»).

После завершения настройки можно работать с линиями RTS, CTS, DTR и DSR из программы на VB. Пока вы экспериментируете, посмотрите, что записывает Port Monitor. Вот пример вывода:

...

COM4 (INFO): "On-the-Fly" command for 192.168.100.97: enabling line change notification for DSR, CTS...success <--- настройка уведомлений

...

...

COM4 (INFO): "On-the-Fly" command for 192.168.100.97: set DTR to low...success <--- команда от VSP к DS

COM4 (INFO): "On-the-Fly" command for 192.168.100.97: set DTR to high...success <--- команда от VSP к DS

COM4 (INFO): "On-the-Fly" command for 192.168.100.97: set RTS to low...success <--- команда от VSP к DS

COM4 (INFO): "On-the-Fly" command for 192.168.100.97: set RTS to high...success <--- команда от VSP к DS

COM4 (INFO): Line status change notification: DSR:low CTS:high <--- уведомление от DS к VSP

COM4 (INFO): Line status change notification: DSR:low CTS:low <--- уведомление от DS к VSP

Как видно из журнала, отдельная команда отправляется с VSP на DS, когда нужно изменить состояние конкретного выхода. Уведомление с состоянием обоих входов отправляется с DS на VSP, когда хотя бы один из входов (DSR или CTS) меняет состояние. Уведомления описаны ниже («Использование уведомлений для получения состояния линий ввода-вывода»).

Установка и чтение состояния линий ввода-вывода с помощью команд on-the-fly

Virtual Serial Port работает с линиями RTS, CTS, DTR и DSR через так называемые команды on-the-fly. Официально они называются «сетевые параметры и инструкции». Как следует из названия, эти команды отправляются через сеть. «On-the-fly» означает, что любая отправленная команда сразу меняет соответствующий последовательный порт или линию ввода-вывода DS.

К управлению линиями ввода-вывода относятся две инструкции:

Чтобы эти инструкции работали, DS должен быть настроен на их приём. Для этого задайте настройку On-the-fly Commands (RC) равной 1 (enabled).

Команды on-the-fly отправляются так же, как и все остальные команды сетевого программирования, то есть способ доставки может быть out-of-band, inband и т. д. Команды on-the-fly в режиме out-of-band можно при необходимости защитить паролем: задайте настройку On-the-fly Commands (RC) равной 1 (enabled) и укажите пароль в настройке Password (PW).

Если вы собираетесь работать с линиями P2 (DSR), P3 (DTR), P4 (CTS) или P5 (RTS), отключите их «специальные» функции, чтобы превратить их в чистые линии ввода-вывода. При управлении этими линиями:

  • Отключите управление потоком RTS/CTS, задав настройку Flow Control (FC) равной 0 (idle или remote).
  • Задайте настройку DTR Mode (DT) у DS равной 0 (idle).
  • Чтобы DSR работал как чистая входная линия, не задавайте Connection Mode (CM) равным 3 (on command или DSR=HI).

Примечание: при использовании VSP эти изменения вносить вручную не нужно. Запуск Connection Wizard, как описано выше, сделает всё автоматически.

Подробно работу с инструкциями Set I/O Pin Status и Get I/O Pin Status здесь не разбираем: это повторило бы информацию из перечисленных выше разделов.

Использование уведомлений для получения состояния линий ввода-вывода

Упомянутая выше инструкция Get I/O Pin Status (Gx) позволяет узнать состояние любого вывода DS, но опросом. Чтобы отслеживать состояние конкретного вывода, эту команду нужно отправлять многократно (то есть опрашивать вывод).

Более удобный вариант - использовать сообщение-уведомление (J). При правильной предварительной настройке DS отправляет на ПК специальное сообщение каждый раз, когда один из «отслеживаемых» выводов меняет состояние. Полную картину работы этого механизма даёт раздел Notification (J) message.

Важно понимать: сообщения-уведомления отправляются только тогда, когда есть соединение для данных между сетевым узлом (который должен получать уведомления) и DS. Поэтому мы просили вас изменить Connection Mode VSP на «connect immediately». Если этого не сделать, сначала придётся установить соединение для данных (то есть отправить какие-либо данные). Только после этого DS начнёт отправлять уведомления.

* Единственное исключение - вывод P2 у EM100, который может работать только как вход.