10.04.2017 Подключение Javad через сеть

Материал из SRNS
Перейти к: навигация, поиск

Содержание

Проблема

В прошлой статье было описано, как обработать данные с приёмника Javad в RTKlib. Проблема заключалась в том, что программа RTKnavi неправильно работает с последовательным портом. Приходилось сначала записывать поток данных в файл, а потом обрабатывать через convbin/rtkpost.

Netcat

RTKnavi позволяет работать с приёмником не только через последовательный порт, но и через сеть. Но Javad не имеет сетевого интерфейса.

Решением может быть перенаправление последовательного порта в сетевой сокет. Это делается с помощью программы netcat (nc).

Я создал скрипт, настраивающий Javad на передачу данных и запускающий трансляцию данных в сеть:

#!/bin/bash

PORT=/dev/ttyUSB0
FILE=/tmp/javad.log

stty -F $PORT raw
stty -F $PORT 115200 cs8 -parenb -cstopb -ixon

echo "em,,def:{1,,}" > $PORT
echo "em,,jps/gd"    > $PORT
echo "em,,jps/qd"    > $PORT
echo "em,,jps/WD"    > $PORT

nc -l -p 3500 </dev/ttyUSB0

Последняя команда передаёт данные из порта /dev/ttyUSB0 в порт TCP 3500.

После этого к нему можно подключиться через RTKnavi:

20170410 RTKnavi TCPclient.png

Режим работы TCP Client, указывается адрес 127.0.0.1 (компьютер, на котором это всё запущено), или другой, порт - 3500, тот, который был указан netcat.

После нажатия кнопки Start всё работает.

20170410 RTKnavi works.png

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

ser2net

Достоинство NetCat заключается в том, что NetCat уже, как правило, установлен и его можно использовать сразу. Но есть и проблема - при отключении клиента NetCat тоже отключается и его надо перезапускать. Это неприемлемо для предполагаемого применения.

Одним из возможных решений является программа ser2net, предназначенная специально для вещания данных из физического порта в сеть.

ser2net есть в стандартных репозиториях Linux и ставится стандартным способом.

Для правильной работы ser2net нужно его настроить. Обычно предполагается, что будет использоваться настроечный файл, но я решил, что удобнее будет запускать ser2net по мере необходимости для каждого порта отдельно, указывая параметры в коммандной строке.

Делается это таким образом:

ser2net -C "2222:raw:0:/dev/ttyUSB0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL"

После этого поток данных из последовательного порта доступен через сеть:

curl 127.0.0.1:2222

После перезапуска curl всё продолжает работать.

Multiple clients

Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный ser2net данную возможность не поддерживает. На github есть версия с такой возможностью: https://github.com/longshine/ser2nets, но у меня она почему-то не передаёт данные. Надо разбираться.

Есть вот такое решение: https://wiki.openwrt.org/doc/howto/networked.gps, но это коряво.

GPStk расчитан только на NMEA, который нас не интересует.



[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты