"Удлинитель" портов RS-232 через Internet

Описание и инструкция по настройке.


Описание
--------

"Удлинитель" портов RS-232 заменяет невозможно длинный кабель,
соединяющий два устройства с портами RS-232 (DTE и DCE),
передавая в обоих направлениях данные и состояние
управляющих/модемных линий.

Схема удлинителя:

---------       ----------              ----------       --------
|    DTE|--> >--|DCE     |              |     DTE|--> >--|DCE   |
| ПК    | ..... | SG-17R |-- Internet --| SG-17R | ..... | УСТР.|
|    DTE|--> >--|DCE     |              |     DTE|--> >--|DCE   |
---------       ----------              ----------       --------


Направление передачи управляющих/модемных линий:

Прямой соединительный кабель:

    DTE    DCE
    ---    ---
    DTR -> DTR
    DSR <- DSR
    RTS -> RTS
    CTS <- CTS
    CD  <- CD
    RI  <- RI

null-modem:

    DTE    DTE
    ---    ---
    DTR -> DSR,CD
 CD,DSR <- DTR
    RTS -> CTS
    CTS <- RTS



Устройство и принципы работы
----------------------------

На каждый сконфигурированный порт RS-232 на каждом рутере
запускается отдельный экземпляр демона rs232-tcpext,
на одной стороне (рутере SG-17R) в пассивном режиме
(ожидание соединений), на другой стороне в активном режиме
(установление соединений).
Устанавливаются два соединения TCP/IP, одно для данных,
другое для состояния управляющих/модемных линий.
Состояние управляющих/модемных линий опрашивается с заданным
интервалом времени, обычно 100 msec.
В случае любой ошибки, закрытия любого из соединений,
закрытия порта RS-232, невожможности установления соединений
с другой стороной, происходит рестарт (закрытие и открытие)
соединений и порта RS-232 с заданной задержкой, обычно 1000 msec.

Архитектура с отдельными экземплярами демонов для каждого порта
обеспечивает при конфигурировании/рестарте одного порта
невмешательство в потоки данных других портов.


Инструкция по настройке
-----------------------

1. Откройте в браузере две вкладки на страницы управления обоими
рутерами.

2. Во вкладках Hardware/ttyRS* настройте параметры выбранных
портов RS-232 и нажмите кнопку "save".

3. Для каждого интерфейса RS-232 решите, который из рутеров
для данного интерфейса RS-232 будет активной и пассивной сторонами.
Пассивная сторона ждёт соединения на выбранном сетевом адресе
от активной стороны.

4. Во вкладках Services/ttyRS* обоих рутеров настройте стороны соединения.

Селектор "mode" определяет режим:
* "Disable" - служба выключена,
* "Listen On" - ждать соединений на заданных "host", "port" (пассивный режим)
* "Connect To" - соединится с заданными "host", "port" (активный режим)

Поля "host" и "port" определяют сетевой адрес и порт,
на котором пассивная сторона ждёт соединения от активной стороны (см. bind(2))
или на которые делает соединение активная сторна.
Значение по умолчанию - 0.0.0.0 - принимать соединение от любого из
сетевых интерфейсов. localhost (127.0.0.1) не сможет принимать соединения
от других узлов в сети.

Поле "Modem lines polling interval (msec)" определяет интервал времени опроса
состояния модемных линий, по умолчанию 100 msec.

Поле "Restart delay (msec)" определяет задержку перед рестартом
в случае любой ошибки, по умолчанию 1000 msec.

Нажмите кнопки "save".
Убедитесь, что на каждом рутере запущен процесс: во вкладке System/Console
введите команду "ps ax" и убедитесь, что процесс rs232-tcpext запущен:

ps ax
...
 728 ? S 0:00 rs232-tcpext /dev/ttyRS0 0.0.0.0 3000 listen /var/run/rs232-tcpext.ttyRS0.pid 100 1000

3571 ? S 0:00 rs232-tcpext /dev/ttyRS0 192.168.2.101 3000 connect /var/run/rs232-tcpext.ttyRS0.pid 100 1000

Учтите, что процесс запуска из web системы достаточно медленный.

Во вкладках System/Tools/Syslog можно наблюдать сообщения демонов:

Пассивная сторона:

daemon.warn rs232-tcpext ttyRS0  listen : started up
daemon.info rs232-tcpext ttyRS0  listen : pid file '/var/run/rs232-tcpext.ttyRS0.pid' created
daemon.info rs232-tcpext ttyRS0  listen : Waiting data connection...

После соединения от активной стороны:

daemon.info rs232-tcpext ttyRS0  listen : Data connection from 192.168.3.102:2937
daemon.info rs232-tcpext ttyRS0  listen : Waiting state connection...
daemon.info rs232-tcpext ttyRS0  listen : State connection from 192.168.3.102:2938
daemon.info rs232-tcpext ttyRS0  listen : Recv modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0
daemon.info rs232-tcpext ttyRS0  listen : Send modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0
daemon.info rs232-tcpext ttyRS0  listen : Recv modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0

Активная сторона:

daemon.warn rs232-tcpext ttyRS0  connect: started up
daemon.info rs232-tcpext ttyRS0  connect: pid file '/var/run/rs232-tcpext.ttyRS0.pid' created
daemon.info rs232-tcpext ttyRS0  connect: Connecting (data) to 192.168.2.101:3000 ...
daemon.err rs232-tcpext ttyRS0  connect: socket_connect(): Could not connect to 192.168.2.101:3000
daemon.warn rs232-tcpext ttyRS0  connect: restart
daemon.info rs232-tcpext ttyRS0  connect: Connecting (data) to 192.168.2.101:3000 ...
daemon.info rs232-tcpext ttyRS0  connect: Connecting (state) to 192.168.2.101:3000 ...
daemon.info rs232-tcpext ttyRS0  connect: Send modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0
daemon.info rs232-tcpext ttyRS0  connect: Recv modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0
daemon.info rs232-tcpext ttyRS0  connect: Send modem state: 0x03, DTR:1 DSR:1 RTS:0 CTS:0 CD:0 RI:0


6. Простая проверка работы удлинителя RS-232.

Соедините выбранные интерфейсы RS-232 рутеров с портами ПК:

------------------        ------------------------------
|     : COM1 DTE | ------ | DCE ttyRS0 : рутер1 : eth0 | ...... Internet ...
|     :          |        ------------------------------    .              .
|     :     eth1 | ..........................................              .
|     :          |                                                         .
| ПК  :..........|                                                         .
|     :          |                                                         .
|     :     eth2 | ..........................................              .
|     :          |        ------------------------------    .              .
|     : COM2 DTE | ------ | DCE ttyRS0 : рутер2 : eth0 | ...... Internet ...
------------------        ------------------------------


Настройте интерфейсы RS-232 ПК (скорость, 8n1, ...) так же, как и
соединённые с ними интерфейсы рутера.

На обоих ПК запустите терминальные программы на соотвествующие интерфейсы
и попечатайте.

Для проверки передачи сигналов управления/модемных линий эта схема непригодна.