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-команды и ответы используют следующий формат:
| IEC | STX | Команда/ответ | CR |
Символ IEC, за которым следует STX (код ASCII 2), отмечает начало команды (ответа). CR (код ASCII 13) отмечает конец команды (ответа). Все символы до IEC/STX и после CR считаются «обычными» данными для маршрутизации. Содержимое поля Команда/ответ описано в разделе программирование.
В этом обмене сетевой хост отправляет строку данных «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-команда не будет обработана (пока не будут наконец переданы все данные, предшествующие этой команде).