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

Материал из SRNS
Перейти к: навигация, поиск
(Новая страница: «<summary [ hidden ] > RTKlib из-под wine не работает с Javad. Описан способ решения данной проблемы <center>[[Fi…»)
 
(ser2net)
 
(не показаны 4 промежуточные версии 1 участника)
Строка 52: Строка 52:
  
 
Аналогичным образом можно раздавать по сети данные и от других приёмников.
 
Аналогичным образом можно раздавать по сети данные и от других приёмников.
 +
 +
== ser2net ==
 +
 +
Достоинство NetCat заключается в том, что NetCat уже, как правило, установлен и его можно использовать сразу. Но есть и проблема - при отключении клиента NetCat тоже отключается и его надо перезапускать. Это неприемлемо для предполагаемого применения.
 +
 +
Одним из возможных решений является программа ser2net, предназначенная специально для вещания данных из физического порта в сеть.
 +
 +
ser2net есть в стандартных репозиториях Linux и ставится стандартным способом.
 +
 +
Для правильной работы ser2net нужно его настроить. Обычно предполагается, что будет использоваться настроечный файл, но я решил, что удобнее будет запускать ser2net по мере необходимости для каждого порта отдельно, указывая параметры в коммандной строке.
 +
 +
Делается это таким образом:
 +
<source lang="bash">
 +
ser2net -C "2222:raw:0:/dev/ttyUSB0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL"
 +
</source>
 +
 +
После этого поток данных из последовательного порта доступен через сеть:
 +
<source lang="bash">
 +
curl 127.0.0.1:2222
 +
</source>
 +
После перезапуска curl всё продолжает работать.
 +
 +
== Multiple clients ==
 +
 +
Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный 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 }}

Текущая версия на 14:44, 25 апреля 2017

Содержание

[править] Проблема

В прошлой статье было описано, как обработать данные с приёмника 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 Сервер
Инструменты