Маршрутизация данных из последовательного порта в Ethernet

Задача маршрутизации данных из последовательного порта в Ethernet - выбрать, как группировать последовательные данные в Ethernet-пакеты разумного размера. Если в каждый пакет помещать слишком мало данных, растёт нагрузка на сеть, а если отправлять пакеты с большим объёмом данных, доставка этих данных узлу сети замедляется (поскольку сначала все они должны накопиться в буфере). Группа настроек инкапсуляции пакетов определяет, как и когда последовательные данные превращаются в Ethernet-пакеты и отправляются узлу сети.

В режиме маршрутизации данных последовательный порт DS рассматривает все входящие последовательные данные как последовательность блоков последовательных данных*. Во многих случаях обмен с подключённым последовательным устройством структурирован (то есть использует какие-то пакеты данных). Поскольку логично применить такое же деление к исходящим сетевым пакетам, DS можно настроить так, чтобы он распознавал начало и конец блоков последовательных данных. Это не значит, что DS может работать только со структурированными последовательными данными: совершенно случайный поток данных можно рассматривать как один непрерывный блок.

Блоки последовательных данных начинаются, когда обнаружено условие старта, и заканчиваются, когда обнаружено условие стопа. После обнаружения условия старта DS начинает записывать все входящие последовательные данные в буфер маршрутизации «последовательный-в-Ethernet» **. Таким образом, условие старта «открывает» блок данных. Когда обнаружено условие стопа, DS прекращает запись входящих последовательных данных в буфер (закрывает блок последовательных данных) и подтверждает (commit) все данные в буфере маршрутизации «последовательный-в-Ethernet». Подтверждённые данные - это данные, которые DS попытается передать узлу сети при первой возможности. До подтверждения DS не пытается их передавать. Поэтому количество подтверждённых байт в буфере может быть меньше общего числа байт.

DS игнорирует все данные между блоками последовательных данных.

Помимо условий старта и стопа существует также условие разрыва. Когда обнаружено условие разрыва, DS подтверждает данные в буфере, но не закрывает блок последовательных данных. Условия разрыва позволяют разбивать большие блоки последовательных данных на части.

Ниже описаны доступные условия старта, стопа и разрыва:

Условия старта. DS можно настроить так, чтобы он открывал новый блок последовательных данных либо после приёма любого символа (следующего за концом предыдущего блока данных), либо после приёма определённого заданного символа - это определяет настройка Start On Any Character (SA). Когда эта настройка равна 0 (выключено), для включения и выбора конкретного символа старта используются две другие настройки - Use Start Character (F1) и Start Character Code (S1). Новый блок последовательных данных открывается, только если получен этот символ старта. Все символы между концом предыдущего блока и символом старта игнорируются. Символы старта, полученные после открытия блока, рассматриваются как обычные символы данных и не «переоткрывают» блок.

Условие стопа задаётся управляющим символом стопа, который включается и выбирается двумя отдельными настройками - Use Stop Character (U1) и Stop Character Code (E1). Когда символ стопа выключен, условия стопа вообще не возникают, то есть однажды открытый блок никогда не заканчивается. Кроме того, настройка Number Of Post Characters (P1) задаёт количество символов после символа стопа, которые считаются принадлежащими тому же блоку данных.

Условия разрыва формируются в зависимости от двух настроек: Maximum Intercharacter Delay (MD) и Maximum Data Length (ML). Первая задаёт максимальное время в миллисекундах, в течение которого DS ждёт прихода следующего символа. Если это время превышено, формируется условие разрыва. Вторая настройка задаёт количество байт в буфере «последовательный-в-Ethernet», при превышении которого формируется условие разрыва.

Обратите внимание: все описанные выше настройки не задают напрямую длину отдельных Ethernet-пакетов, которые формирует DS, а определяют только, когда данные в буфере «последовательный-в-Ethernet» подтверждаются. После подтверждения DS попытается доставить эти данные узлу сети как можно скорее, но не обязательно одним «куском».

Заводские значения настроек формирования пакетов задают простую и обычно приемлемую схему: включён старт на любом символе, символ стопа выключен, максимальная задержка между символами равна 1 (10 мс), а максимальная длина данных составляет 255 байт для транспортного протокола UDP и 127 байт для TCP (см. объяснение в описании настройки Maximum Data Length (ML)). Эта схема универсальна и может обрабатывать случайные данные любого размера. Все данные записываются в буфер «последовательный-в-Ethernet» и подтверждаются либо когда достигнут максимальный размер, либо когда есть пауза в поступлении последовательных данных.

* Термин «блоки последовательных данных» введён, чтобы не использовать слово «пакеты», которое может привести к путанице с сетевыми пакетами.

** Для этого последовательный порт должен быть открыт.