Inband-программирование (TCP)

Inband-команды и ответы передаются внутри самого TCP-соединения для данных и могут смешиваться с данными, которые маршрутизируются между сетевым хостом и подключённым последовательным устройством. Как объясняется в разделе программирование по сети, этот способ работает, только если текущий транспортный протокол (TP) [настройка /параметр ] равен 1 (TCP), а настройка Inband (IB) равна 1 (включена).

Поскольку inband-команды и ответы перемешаны с данными, для обозначения начала команды (ответа) в потоке данных нужен специальный управляющий символ - Inband Escape Character (IEC). Код IEC - 255. Если настройка Inband (IB) равна 1 (включена) и DS получает символ с кодом 255, за которым следует любой символ, кроме 255, DS считает это началом inband-команды. Чтобы отправить символ данных с кодом 255, сетевой хост должен отправить два подряд идущих символа с кодом 255. DS воспримет их как один символ данных с кодом 255. Поэтому сетевой хост сам должен просматривать отправляемые в DS данные и «удваивать» все символы данных с кодом 255.

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

Все inband-команды и ответы используют следующий формат:

IECSTXКоманда/ответCR

Символ IEC, за которым следует STX (код ASCII 2), отмечает начало команды (ответа). CR (код ASCII 13) отмечает конец команды (ответа). Все символы до IEC/STX и после CR считаются «обычными» данными для маршрутизации. Содержимое поля Команда/ответ описано в разделе программирование.

Пример
обмен между сетевым хостом и DS. Ниже показаны данные, переданные в TCP-соединении для данных. Специальные символы обозначены так: IEC - u , STX - J , CR - � .
Хост-->DS
ABCuu DEFuJ GIP� GHIK
DS-->Хост
LMNuJ A192.168.100.40� XYZ

В этом обмене сетевой хост отправляет строку данных «ABCu DEFGHIK». В ней есть один символ с кодом 255 (u ), но DS требуется удвоить этот символ. В поток данных вставлена команда «GIP» (команда Get Setting (G), читаемая настройка - IP-адрес (IP)). Перед командой стоит IEC (u ), затем STX (J ), а завершает её CR (� ).

DS отправляет сетевому хосту строку данных «LMNXYZ». В какой-то момент, когда ответ на команду готов, DS вставляет его в поток данных. Ответ содержит текущий IP-адрес DS.

В отличие от внеполосного UDP-программирования, inband-программирование не поддерживает несколько команд: нельзя отправить сразу несколько команд и получить несколько ответов. Сетевой хост должен отправлять следующую команду только после получения ответа на предыдущую.

Очень важно! Поскольку inband-команды передаются вместе с данными, выполнение таких команд в DS может откладываться неограниченно долго, если данные не удаётся передать (отправить) через последовательный порт DS. Так бывает, когда текущее управление потоком (FC) [настройка /параметр ] равно 1 (включено), а вход CTS устройства DS удерживается в состоянии «не передавать». В этом случае DS не отправляет данные, и «встроенная» в этот поток inband-команда не будет обработана (пока не будут наконец переданы все данные, предшествующие этой команде).