Serial Port: различия между версиями

Материал из Wiren Board
(Подготовка страницы к переводу)
 
(не показаны 54 промежуточные версии 6 участников)
Строка 1: Строка 1:
<languages/>
{{DISPLAYTITLE: Работа с последовательным портом (serial-портом)}}
<translate>
== Serial-порты в контроллере Wiren Board ==
=== Реализация ===
Полное описание читайте в [http://www.tldp.org/HOWTO/Serial-HOWTO.html документации], вот выжимка из неё:
* В serial-порт можно посылать данные и получать данные из него.
* В ОС Linux serial-порты — это псевдофайлы из папки <code>/dev</code>. Например, в контроллерах Wiren Board это могут быть <code>/dev/ttyGSM</code>, <code>/dev/ttyRS485-1</code>, <code>/dev/ttyUSB0</code> — у всех в названии есть <code>tty</code>.


== Перед началом работы ==
Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство:
* Скорость в битах в секунду, самое популярное — 9600 бит/с.
* Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит.
* Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах.


Монументальное описание последовательных портов - http://www.tldp.org/HOWTO/Serial-HOWTO.html
=== Определение занятости порта и монопольное использование ===
[[Image: Enable-disable serial port.png |300px|thumb|right| Отключение serial-порта в веб-интерфейсе контроллера Wiren Board ]]
Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.


Далее будет дано краткое неточное описание.
Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить.  


В последовательный порт вы можете посылать данные, и получать их оттуда. В Linux последовательные порты представлены в виде некоторых псевдофайлов из папки ''/dev/'', например, в Wiren Board это ''/dev/ttyAPP0'', ''/dev/ttyNSC1'', ''/dev/ttyUSB0'' (у всех в названии есть ''tty'').
Проверим, свободен ли порт <code> /dev/ttyRS485-2</code>. Для этого выполните команду:
<syntaxhighlight lang="console">
# fuser -v /dev/ttyRS485-1
                    USER        PID ACCESS COMMAND
/dev/ttyS2:          root      32296 F.... wb-mqtt-serial
</syntaxhighlight>
Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. В примере выше порт занят драйвером wb-mqtt-serial.


Перед тем, как начать работать с портом, надо настроить его скорость и другие параметры в зависимости от того, какое устройство к нему подключено:
В контроллерах Wiren Board порты <code>/dev/ttyRS485-1</code> и <code>/dev/ttyRS485-2</code> обычно заняты драйвером <code>wb-mqtt-serial</code>. Перед работой с этими портами — остановите драйвер одним из способов:
* скорость в битах в секунду. Самое популярное значение 115200
* [[wb-mqtt-serial#Управление драйвером | Остановить драйвер]] из командной строки.
* количество бит в символе, чётность, количество стоп-битов. Самая популярная конфигурация называется ''8N1'' - восемь бит в символе, проверки чётности нет, один стоп-бит
* [[RS-485:Configuration via Web Interface | В веб-интерфейсе контроллера]], в настройках serial-порта снять галочку '''Enable port''' и сохранить настройки.
* аппаратный и программный контроль потока. Если не знаете - поставьте нет в обоих настройках.


== Программы для работы с serial-портом ==
Программы для разных ОС:
* Linux: [[Serial_tool | Serial_tool]], [[Minicom | Minicom]], [[PuTTY | PuTTY]].
* Windows: [[PuTTY | PuTTY]].
* macOS: [https://www.ssh.com/ssh/putty/mac/ PuTTY for Mac OS X] или терминальный клиент <code>cu</code>: <code>cu -s 115200 -l /dev/usbmodem00001</code>
* Android: [https://play.google.com/store/apps/details?id=jp.sugnakys.usbserialconsole&hl=en_US USB Serial Console] и другие аналогичные программы.


== Интерактивный HEX-терминал serial_tool ==
Дополнительно:
* Если вы не можете использовать программы из этой статьи — посмотрите [http://elinux.org/RPi_Serial_Connection этот список].
* Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты [[modbus_client]].
* Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из [https://tldp.org/HOWTO/Serial-Programming-HOWTO/ Serial-Programming-HOWTO].


Для интерактивной отправки и приёма данных в HEX (шестнадцатеричном) формате используйте утилиту [https://github.com/contactless/serial_tool serial_tool] (уже установлена в Wiren Board).
<gallery mode="traditional" widths="250px"  caption="Примеры работы с serial-портом в различных программах">
 
Image: Akko setting address.png |Отправка команд через [[serial_tool]]
=== Справка по использованию ===
Image: Minicom-AT-4G.png | Отправка AT-команд в программе [[minicom]]
 
Image: Putty serial logged in.png | Работа с Debug-консолью в [[PuTTY]]
<pre>
</gallery>
root@wirenboard:~# serial_tool -h
usage: serial_tool [-h] [-b BAUD] [-p PARITY] [-d DATA_BITS] [-s STOP_BITS]
                  [-t READ_TIMEOUT]
                  port
 
serial_tool - interactive hex serial port console
 
positional arguments:
  port                  Serial port to open, i.e. /dev/ttyXXX
 
optional arguments:
  -h, --help            show this help message and exit
  -b BAUD, --baud BAUD  Baud rate (default: 9600)
  -p PARITY, --parity PARITY
                        set parity, one of [N, E, O, M, S] (default: N)
  -d DATA_BITS, --data-bits DATA_BITS
                        set number of data bits, i.e. bytesize (default: 8)
  -s STOP_BITS, --stop-bits STOP_BITS
                        set number of stop bits, one of [1, 1.5, 2] (default:
                        1)
  -t READ_TIMEOUT, --timeout READ_TIMEOUT
                        number of seconds to wait for answer (default: 1)
</pre>
 
 
=== Пример запуска ===
 
<pre>
root@wirenboard:~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyNSC1
serial_tool on /dev/ttyNSC1: 9600 8N2.0
Enter your commands below in HEX form.  
All characters but 0-9,a-f including spaces are ignored.
Press Control-D or Control-C to leave the application.
Press [Enter] to print received data
>> FF FF 0A 01 11 00 00 1C
<< FF FF 0A 00 11 00 00 1B
</pre>
Здесь установлены настройки 9600 8N2, таймаут 1 секунда, порт /dev/ttyNSC1 (RS-485).
 
 
== Интерактивный режим работы из консоли ==
 
Самая удобная утилита для работы с последовательным портом из консоли - '''minicom''' (есть в стандартном образе Wiren Board).
Minicom удобно пользоваться для работы с устройстами, которые управляются текстовыми командами или выводят текстовые сообщения.  Примерами таких устройств являются GSM-модемы (управляются AT-командами), в том числе встроенный в Wiren Board GSM-модуль; GPS-модули, работающие по протоколу NMEA и т.п.
 
Краткая инструкция (считаем, что мы будем работать с портом /dev/ttyAPP0):
* В первый раз запускаем '''minicom''' с ключом, создающим профиль работы с портом (в нём хранятся номер порта, скорость передачи данных, чётность, и т.д.):
<pre>
$ minicom -s /dev/ttyAPP0
</pre>
* Зайти в настройки (нажать ''Ctrl+A'', затем ''O''), выбрать пункт ''Serial port setup'', там установить порт ''/dev/ttyAPP0'', скорость и чётность - ''115200, 8N1'', ''Hardware flow control - No'', ''Software flow control - No''
* Сохранить настройки: ''Save setup as _dev_ttyAPP0''
* Далее запускать как:
<pre>
$ minicom /dev/ttyAPP0
</pre>
(все параметры будут сразу браться из профиля с названием ''/dev/ttyAPP0'', который мы ранее создали)
* Теперь можно вводить данные, которые вы хотите отправить в порт. Приходящие в порт данные от внешних устройств также будут выводиться
 
----
 
 
== modbus-client ==
 
Одним из самых удобных средств отладки коммуникаций Modbus из командной строки Wiren Board является утилита '''modbus-client'''.
Описание и примеры можно найти на этой странице [[Special:MyLanguage/modbus-client|modbus-client]].
 
 
== Работа с последовательным портом из своей программы ==
 
http://tldp.org/HOWTO/Serial-Programming-HOWTO/
</translate>

Текущая версия на 08:30, 13 апреля 2023

Serial-порты в контроллере Wiren Board

Реализация

Полное описание читайте в документации, вот выжимка из неё:

  • В serial-порт можно посылать данные и получать данные из него.
  • В ОС Linux serial-порты — это псевдофайлы из папки /dev. Например, в контроллерах Wiren Board это могут быть /dev/ttyGSM, /dev/ttyRS485-1, /dev/ttyUSB0 — у всех в названии есть tty.

Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство:

  • Скорость в битах в секунду, самое популярное — 9600 бит/с.
  • Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит.
  • Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах.

Определение занятости порта и монопольное использование

Отключение serial-порта в веб-интерфейсе контроллера Wiren Board

Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.

Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить.

Проверим, свободен ли порт /dev/ttyRS485-2. Для этого выполните команду:

# fuser -v /dev/ttyRS485-1
                     USER        PID ACCESS COMMAND
/dev/ttyS2:          root      32296 F.... wb-mqtt-serial

Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. В примере выше порт занят драйвером wb-mqtt-serial.

В контроллерах Wiren Board порты /dev/ttyRS485-1 и /dev/ttyRS485-2 обычно заняты драйвером wb-mqtt-serial. Перед работой с этими портами — остановите драйвер одним из способов:

Программы для работы с serial-портом

Программы для разных ОС:

Дополнительно:

  • Если вы не можете использовать программы из этой статьи — посмотрите этот список.
  • Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты modbus_client.
  • Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из Serial-Programming-HOWTO.