10.04.2017 Подключение Javad через сеть
Boldenkov (обсуждение | вклад) (→ser2net) |
Boldenkov (обсуждение | вклад) (→ser2net) |
||
Строка 73: | Строка 73: | ||
</source> | </source> | ||
После перезапуска curl всё продолжает работать. | После перезапуска curl всё продолжает работать. | ||
+ | |||
+ | == Multiple clients == | ||
Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный ser2net данную возможность не поддерживает. На github есть версия с такой возможностью: https://github.com/longshine/ser2nets, но у меня она почему-то не передаёт данные. Надо разбираться. | Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный ser2net данную возможность не поддерживает. На github есть версия с такой возможностью: https://github.com/longshine/ser2nets, но у меня она почему-то не передаёт данные. Надо разбираться. | ||
+ | |||
+ | Есть вот такое решение: https://wiki.openwrt.org/doc/howto/networked.gps, но это коряво. | ||
+ | |||
+ | GPStk расчитан только на NMEA, который нас не интересует. | ||
{{wl-publish: 2017-04-10 11:19:45 +0300 | Boldenkov }} | {{wl-publish: 2017-04-10 11:19:45 +0300 | Boldenkov }} |
Текущая версия на 14:44, 25 апреля 2017
|
[править] Проблема
В прошлой статье было описано, как обработать данные с приёмника Javad в RTKlib. Проблема заключалась в том, что программа RTKnavi неправильно работает с последовательным портом. Приходилось сначала записывать поток данных в файл, а потом обрабатывать через convbin/rtkpost.
[править] Netcat
RTKnavi позволяет работать с приёмником не только через последовательный порт, но и через сеть. Но Javad не имеет сетевого интерфейса.
Решением может быть перенаправление последовательного порта в сетевой сокет. Это делается с помощью программы netcat (nc).
Я создал скрипт, настраивающий Javad на передачу данных и запускающий трансляцию данных в сеть:
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:
Режим работы TCP Client, указывается адрес 127.0.0.1 (компьютер, на котором это всё запущено), или другой, порт - 3500, тот, который был указан netcat.
После нажатия кнопки Start всё работает.
Аналогичным образом можно раздавать по сети данные и от других приёмников.
[править] ser2net
Достоинство NetCat заключается в том, что NetCat уже, как правило, установлен и его можно использовать сразу. Но есть и проблема - при отключении клиента NetCat тоже отключается и его надо перезапускать. Это неприемлемо для предполагаемого применения.
Одним из возможных решений является программа ser2net, предназначенная специально для вещания данных из физического порта в сеть.
ser2net есть в стандартных репозиториях Linux и ставится стандартным способом.
Для правильной работы ser2net нужно его настроить. Обычно предполагается, что будет использоваться настроечный файл, но я решил, что удобнее будет запускать ser2net по мере необходимости для каждого порта отдельно, указывая параметры в коммандной строке.
Делается это таким образом:
После этого поток данных из последовательного порта доступен через сеть:
После перезапуска curl всё продолжает работать.
[править] Multiple clients
Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный ser2net данную возможность не поддерживает. На github есть версия с такой возможностью: https://github.com/longshine/ser2nets, но у меня она почему-то не передаёт данные. Надо разбираться.
Есть вот такое решение: https://wiki.openwrt.org/doc/howto/networked.gps, но это коряво.
GPStk расчитан только на NMEA, который нас не интересует.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.