Как отправить данные на последовательный порт и посмотреть какой-либо ответ?

В Linux я хочу отправить командную строку (т. е. некоторые данные) на последовательный порт (содержащий управляющие символы) и прослушать ответ (который также может содержать контрольные символы).

Как я могу сделать это максимально простым в Linux? Приведем пример!

26 голосов | спросил Alex 26 FebruaryEurope/MoscowbWed, 26 Feb 2014 16:22:15 +0400000000pmWed, 26 Feb 2014 16:22:15 +040014 2014, 16:22:15

5 ответов


38

Все устройства в Unix сопоставляются с файлом устройства, последовательные порты будут /dev/ttyS0 /dev/ttyS1 ....

Сначала посмотрим на разрешения на этот файл, допустим, вы используете /dev/ttyS1.

ls -l /dev/ttyS1

Вам понадобится доступ read.write, если это общая система, тогда вы должны учитывать последствия для безопасности, открывая их для всех.

chmod o+rw /dev/ttyS1

Очень простой грубый метод для записи в файл, будет использовать простую команду echo.

echo -ne '\033[2J' > /dev/ttyS1

и читать

cat -v < /dev/ttyS1

У вас может быть кошка, работающая в одном терминале, и эхо во втором.

Если все тарабарщина, то скорость передачи, бит настройки может потребоваться настройка перед началом отправки. stty сделает это. !! ПРИМЕЧАНИЕ stty будет использовать stdin в качестве дескриптора файла по умолчанию, чтобы повлиять.

Эквивалентные команды.

stty -speed 19200 < /dev/ttyS1
stty -speed 19200 -f /dev/ttyS1

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

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

Среднее решение будет использовать терминальную программу, такую ​​как screen, которая будет работать на последовательном устройстве.

screen /dev/ttyS1

man screen man minicom man stty для получения дополнительной информации

ответил X Tian 26 FebruaryEurope/MoscowbWed, 26 Feb 2014 18:33:56 +0400000000pmWed, 26 Feb 2014 18:33:56 +040014 2014, 18:33:56
5

Все, что вам нужно сделать, это открыть два терминала. В первом терминале вы cat все от устройства, например

cat /dev/ttyS0

в другом терминале, вы можете отправить произвольные шестнадцатеричные символы и текст на терминал, например. следующим образом:

echo -e "\x7E\x03\xD0\xAF und normaler Text" > /dev/ttyS0

Команда echo -e позволяет интерпретировать escape-обраты с обратной косой чертой.

Нужно, конечно, убедиться, что (i) серийные настройки (скорость, длина слова, поток ctrl и т. д.) являются правильными, и (ii) последовательное устройство (на другом конце) не блокирует.

ответил Alex 26 FebruaryEurope/MoscowbWed, 26 Feb 2014 18:43:38 +0400000000pmWed, 26 Feb 2014 18:43:38 +040014 2014, 18:43:38
2

Программы, которые разговаривают с последовательными устройствами:

picocom
minicom
socat

или из оболочки, которую вы можете сделать:

exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99  # this reads just a CR
read answer <&99  # this reads the answer OK
exec 99<>&-
ответил Zibri 27 TueEurope/Moscow2016-12-27T15:03:01+03:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2016 15:03:01 +0300 2016, 15:03:01
1

Вы можете читать и писать на устройство одновременно:

cat /dev/cu.usbmodem411 & cat > /dev/cu.usbmodem411

Ваше сообщение отправляется ко второму cat из stdin, а первый cat передает ответ на stdout, превратив ваш терминал в чат.

Чтобы закончить, ctrl-c, затем запустите fg, затем ctrl-c.

ответил diachedelic 14 WedEurope/Moscow2016-12-14T20:09:29+03:00Europe/Moscow12bEurope/MoscowWed, 14 Dec 2016 20:09:29 +0300 2016, 20:09:29
0

Это может быть лучший подход:

stty -F /dev/ttyUSB0 115200 raw -echo   #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0                     #REDIRECT SERIAL OUTPUT TO FD 3
  cat <&3 > /tmp/ttyDump.dat &          #REDIRECT SERIAL OUTPUT TO FILE
  PID=$!                                #SAVE PID TO KILL CAT
    echo "R" > /dev/ttyUSB0             #SEND COMMAND STRING TO SERIAL PORT
    sleep 0.2s                          #WAIT FOR RESPONSE
  kill $PID                             #KILL CAT PROCESS
exec 3<&-                               #FREE FD 3
cat /tmp/ttyDump.dat                    #DUMP CAPTURED DATA
ответил Leonardo Mendoza 20 J0000006Europe/Moscow 2017, 02:27:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132