wiki:EndpointR485

Version 5 (modified by alx, 3 years ago) ( diff )

Исправлены опечатки.

Канальное окончание R485

Канальное окончание R485 предназначено для работы с модулем R485, установленным в плате VE-02 (блоке MC04-DSL-VIP). Модуль R485 позволяет подключить к плате VE-02 (блоку MC04-DSL-VIP) двунаправленную линию интерфейса RS-485 (TIA/EIA-485-A). Канальное окончание R485 предназначено для передачи данных интерфейса RS-485 через сеть IP.

Строго говоря, R485 в плате VE-02 (блоке MC04-DSL-VIP) не работает с каналами TDM, поэтому не является канальным окончанием в том же смысле, что и другие канальные окончания, например FXS или FXO. Окончание R485 по сути является просто конвертером интерфейса. Однако для простоты и единообразия мы будем называть его канальным окончанием.

Описание работы канального окончания

Канальное окончание R485 транслирует данные, приходящие через интерфейс RS-485, в сеть IP по протоколу TCP, а данные, приходящие из сети по протоколу TCP, передает в интерфейс RS-485. Канальное окончание работает в одном из двух режимов - "клиент" или "сервер". Эти режимы определяют, как канальное окончание устанавливает соединение TCP. В режиме "сервер" канальное окончание ожидает установки входящего соединения от другого хоста в сети, в режиме "клиент" канальное окончание само делает попытки подключения к удаленному хосту.

Установка соединения в режиме Сервер

При работе в режиме "сервер" канальное окончание R485 создает TCP сокет, привязывает его к порту TCP, номер которого установлен конфигурационный параметром "Порт", переходит в состояние Listen и ожидает входящее соединение от клиента. В данном состоянии обмен данными по линиям RS-485 не производится: данные в линию не передаются, а принимаемые данные игнорируются (отбрасываются).

При установке соединения с клиентом канальное окончание закрывает ранее открытый сокет и переходит в состояние Connected. В этом состоянии канальное окончание не принимает новые входящие соединения, пока уже установленное соединение не будет разорвано. В состоянии Connected канальное окончание R485 передает данные между линией интерфейса RS-485 и удаленным хостом. Подробно этот процесс описан в разделе "Передача данных через установленное соединение" ниже.

При разрыве соединения TCP канальное окончание снова создает серверный сокет, переходит в состояние Listen и ожидает новое входящее соединение, как это было описано выше.

Установка соединения в режиме Клиент

При работе в режиме "клиент" канальное окончание R485 само устанавливает соединение TCP с удаленным сервером, имя (адрес) и номер порта которого заданы конфигурационными параметрами "Сервер" и "Порт" соответственно. Установка соединения начинается с перехода канального окончания в состояние Resolving. В этом состоянии канальное окончание резолвит имя сервера, указанное в конфигурационном параметре "Сервер", в адреса IP. При успешном резолвинге канальное окончание создает сокет TCP, начинает процесс подключения к серверу и переходит в состояние Connecting. При успешном подключении канальное окончание переходит в состояние Connected. В состоянии Connected канальное окончание R485 передает данные данными между линиями RS-485 и удаленным хостом. Подробно этот процесс описан в разделе "Передача данных через установленное соединение" ниже. В случае, если установка соединения не удалась, и у сервера имеются другие IP адреса, канальное окончание пытается установить соединение с другим адресом.

В случае, если попытки установки соединения со всеми имеющимися адресами IP сервера закончились ошибками, или ошибка возникла при резолвинге имени сервера, канальное окончание переходит в состояние Error. В состоянии Error канальное окончание выдерживает паузу 30 секунд, после чего описанный выше процесс подключения начинается с начала (с резолвинга имени сервера).

В случае, если по любым причинам разрывается уже успешно установленное соединение TCP (то есть канальное окончание находится в состоянии Connected), канальное окончание сразу приступает к повторной установке соединения (начиная с резолвинга имени сервера).

Передача данных через установленное соединение

В состоянии Connected канальное окончание осуществляет обмен данными между интерфейсом RS-485 и удаленным хостом через установленное соединение TCP.

При поступлении от удаленного хоста данных канальное окончание R485 переходит в режим передачи и передает полученные данные в линию интерфейса RS-485. Прием данных в это время отключается. Когда все полученные от удаленного хоста данные переданы, канальное окончание R485 переключается в режим приема данных из линии RS-485.

В режиме приема данные, принимаемые из интерфейса RS-485, передаются удаленному хосту. Алгоритм этой передачи зависит от значения конфигурационного параметра "Таймаут передачи". При нулевом значении параметра принятые из интерфейса RS-485 данные немедленно передаются в сеть удаленному хосту (записываются в сокет). При ненулевом значении параметра при приеме из интерфейса RS-485 первого октета данных принятый октет помещается во временный буфер, при этом запускается таймер передачи на значение таймаута, установленное конфигурационным параметром. До истечения заданного таймаута все принимаемые из интерфейса RS-485 данные дописываются во временный буфер. При истечении заданного таймаута все накопленные во временном буфере данные передаются в сеть удаленному хосту. Таким образом, установка ненулевого значения таймаута передачи позволяет снизить частоту передаваемых через соединение TCP сегментов данных и тем самым сократить накладные расходы и уменьшить общий объем данных, передаваемых по сети, ценой некоторого увеличения задержки передачи. Это может быть полезно, например, в случае передачи через широкополосный канал с оплатой по объему трафика.

Обратите внимание, что установка нулевого значения конфигурационного параметра "Таймаут передачи" не гарантирует, что принятые из интерфейса RS-485 данные будут немедленно отправлены в сеть. Отправка сегмента данных может быть задержана алгоритмами протокола TCP, например при наличии потерь из-за узкой полосы или низкого качества канала связи.

При накоплении во временном буфере большого количества принятых из интерфейса RS-485 данных (около 1200 байт) накопленные данные будут отправлены канальным окончанием в сеть не дожидаясь истечения таймаута передачи, так как при дальнейшем накоплении данных накопленные данные не поместятся в один пакет TCP и будут разбиты на несколько, и, таким образом, дальнейшее накопление не имеет смысла.

TCP keep-alive и таймаут неактивности

Функции TCP keep-alive и таймаут неактивности позволяют канальному окончанию распознавать "мертвые" соединения TCP.

Примером мертвого соединения может быть соединение, в котором пакеты IP проходят через один или несколько маршрутизаторов с функцией NAT (трансляцией сетевых адресов). Трансляция адресов требует хранения таблицы трансляции. Для освобождения ресурсов маршрутизатор может периодически "чистить" таблицу, удаляя из нее записи о старых соединениях. Если через установленное соединение TCP ничего не передается в течение длительного времени, запись об этом соединении может оказаться удаленной из таблицы трансляции адресов, в результате чего последующие пакеты TCP перестанут проходить от одного хоста к другому.

Другим примером "мертвого" соединения TCP может быть соединение клиента с сервером, после установления которого на стороне сервера было отключено питание устройства. После включения питания на стороне сервера соединение TCP отсутствует, однако клиент будет по-прежнему считать, что соединение установлено, так как не получал от сервера пакетов, свидетельствующих о разрыве соединения.

Одним из способов предотвращения "умирания" соединений TCP является TCP keep-alive. При установке ненулевого значения конфигурационного параметра "TCP keep-alive" при неактивности соединения TCP в течение заданного параметром времени канальное окончание передает удаленной стороне TCP ACK пакет и ожидает ответный ACK. Таким образом, при установке ненулевого значения параметра "TCP keep-alive" пакеты TCP соединения передаются не реже заданного параметром значения времени, что позволяет, например, предотвратить удаление записи об этом соединении из таблицы NAT. При отсутствии ответа TCP АСK передается повторно с интервалом 2 секунды. Если после передачи четырех таких пакетов ответ так и не был получен, канальное окончание разрывает TCP соединение. При нулевом значении параметра "TCP keep-alive" пакеты keep-alive не отправляются.

Если TCP соединение предполагает регулярное получение данных от удаленной стороны, для контроля целостности соединения может использоваться таймаут неактивности. Если конфигурационный параметр "Таймаут неактивности" имеет ненулевое значение, то при отсутствии данных от удаленной стороны в течение установленного параметром времени канальное окончание разрывает соединение TCP.

Параметры конфигурации канального окончания

Пример конфигурации канального окончания R485:

Скорость
Параметр определяет скорость в бит/с передачи и приема данных через интерфейс RS-232. Допустимые значения: 150, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600 и 115200. Значение по умолчанию - 9600.
Контроль четности
Параметр определяет наличие и значение бита четности/нечетности в символах интерфейса RS-485. Допустимые значения: "нет" (бит четности/нечетности отсутствует), "четность" (передается бит четности), "нечетность" (передается бит нечетности).
Число стоповых бит
Параметр определяет число стоповых бит в символах интерфейса RS-485. Допустимые значения: 1 (один стоповый бит), 2 (два стоповых бита).
Режим работы
Параметр определяет режим работы канального окончания. Допустимые значения: "клиент" (канальное окончание устанавливает соединение с удаленным сервером), "сервер" (канальное окончание ожидает подключения от удаленного клиента).
Сервер
Параметр устанавливает имя или адрес IP сервера, с которым будет устанавливать соединение канальное окончание, работающее в режиме "клиент". При работе канального окончания в режиме "сервер" данный параметр не используется.
Порт
Параметр устанавливает номер порта TCP, на который канальное окончание R485 будет принимать соединение в режиме "сервер" или на который канальное окончание R485 будет устанавливать соединение в режиме "клиент".
Таймаут неактивности
Параметр устанавливает время, при отсутствии в течение которого данных, принимаемых из соединения TCP, канальное окончание разрывает соединение. Значение 0 означает отключение функции разъединения по таймауту.
TCP keep-alive
Параметр устанавливает время, при отсутствии в течение которого активности соединения канальное окончание отправляет TCP ACK. Значение 0 означает отключение функции TCP keep-alive.
Таймаут передачи
Параметр устанавливает время, в течение которого принимаемые из интерфейса RS-485 данные накапливаются во временном буфере. При установке значения 0 накопление данных во временном буфере не производится.

Состояния канального окончания

Далее описаны состояния, в которых может находиться канальное окончание R485, и их краткое описание.

Initial
Начальное состояние канального окончания.
Listen
Канальное окончание ожидает входящее соединение.
Resolving
Канальное окончание резолвит имя сервера.
Connecting
Канальное окончание подключается к серверу.
Connected
Соединение TCP установлено.
Error
Ошибка соединения.

См. также

окончание R232, окончание R485.

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.