Serial Port: различия между версиями
м (A.Degtyarev переименовал страницу Working with serial port в Serial Port без оставления перенаправления: Часть переводимой страницы Working with serial port.) |
(Переписал) |
||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Работа с последовательным портом }} | |||
== | == Реализация последовательных портов в ОС Linux == | ||
=== Основы === | |||
{{note|note| Последовательный порт ещё называют serial-портом.}} | |||
Полное описание читайте в [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-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство: | |||
* Скорость в битах в секунду, самое популярное — 115200 бит/с. | |||
* в | * Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит. | ||
* Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах. | |||
=== Определение занятости порта и монопольное использование === | |||
[[Image: Enable-disable serial port.png |300px|thumb|right| Отключение serial-порта в веб-интерфейсе контроллера Wiren Board ]] | |||
Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся. | |||
Если порт | |||
Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить. | |||
== serial_tool | Проверим, свободен ли порт <code> /dev/ttyRS485-2</code>. Для этого выполните команду: | ||
<syntaxhighlight lang="bash"> | |||
fuser /dev/ttyRS485-1 | |||
</syntaxhighlight> | |||
Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. | |||
В контроллерах Wiren Board порты <code>/dev/ttyRS485-1</code> и <code>/dev/ttyRS485-2</code> обычно заняты драйвером <code>wb-mqtt-serial</code>. Перед работой с этими портами — остановите драйвер. | |||
Драйвер можно остановить одним из способов: | |||
# [[wb-mqtt-serial#Управление драйвером | Остановите драйвер из командной строки]] | |||
# В [[RS-485:Configuration via Web Interface | веб-интерфейсе]] контроллера, в настройках serial-порта снимите галочку «Enabled» и сохраните настройки. | |||
== Утилиты для ОС Linux == | |||
=== serial_tool === | |||
[[Image: Akko setting address.png |300px|thumb|right| Пример работы с утилитой serial_tool ]] | |||
serial_tool — утилита для отправки и получения наборов бит. Используйте её для отправки и получения данных в шестнадцатеричном формате: побитово, группами по четыре бита. | |||
Утилита serial_tool предустановлена на все контроллеры Wiren Board. На компьютеры с Linux её нужно установить из [https://github.com/wirenboard/serial_tool нашего репозитория]. | |||
< | Для вызова справки по утилите, запустите утилиту с параметром <code>-h</code>: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
~# serial_tool -h | |||
usage: serial_tool [-h] [-b BAUD] [-p PARITY] [-d DATA_BITS] [-s STOP_BITS] | usage: serial_tool [-h] [-b BAUD] [-p PARITY] [-d DATA_BITS] [-s STOP_BITS] | ||
[-t READ_TIMEOUT] | [-t READ_TIMEOUT] | ||
Строка 62: | Строка 66: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Например, запишем последовательность бит в порт /dev/ttyRS485-1 с параметрами порта 8N2 и таймаутом в одну секунду: | |||
<syntaxhighlight lang="bash"> | |||
~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyRS485-1 | |||
< | serial_tool on /dev/ttyRS485-1: 9600 8N2.0 | ||
serial_tool on /dev/ | |||
Enter your commands below in HEX form. | Enter your commands below in HEX form. | ||
All characters but 0-9,a-f including spaces are ignored. | All characters but 0-9,a-f including spaces are ignored. | ||
Строка 74: | Строка 76: | ||
>> FF FF 0A 01 11 00 00 1C | >> FF FF 0A 01 11 00 00 1C | ||
<< FF FF 0A 00 11 00 00 1B | << FF FF 0A 00 11 00 00 1B | ||
</ | </syntaxhighlight> | ||
Другие примеры использования утилиты смотрите в статьях о настройке приводов штор, например, [[Akko AM82]]. | |||
=== minicom === | |||
minicom — утилита для отправки и получения символьных команд. Её удобно использовать для работы с устройствами, которые управляются текстовыми командами и выводят текстовые сообщения в ответ. Например, c помощью minicom удобно отправлять AT-команды на GSM-модемы или получать данные с GPS-модулей, которые работают по протоколу NMEA. | |||
Утилита minicom предустановлена на все контроллеры Wiren Board, а на ПК с ОС Linux её нужно будет установить. Для установки minicom на ПК с ОС Linux, выполните поочереди команды: | |||
<syntaxhighlight lang="bash"> | |||
sudo apt update | |||
sudo apt install minicom | |||
</syntaxhighlight> | |||
Для запуска minicom нужны права суперпользователя, на контроллерах Wiren Board вы уже работаете под суперпользователем, а на ПК с ОС Linux используйте <code>sudo</code>. | |||
==== Настройка параметров подключения ==== | |||
[[Image: Minicom settings.png |300px|thumb|right| Пример настройки параметров подключения в minicom ]] | |||
Для настройки параметров подключения, запустите утилиту с ключом -s и укажите имя профиля, в который хотите сохранить настройки. | |||
Например, настроим соединение с портом <code>/dev/ttyGSM</code>: | |||
# Запустите minicom от имени суперпользователя в режиме настройки соединения и укажите имя профиля, например, '''ttyGSM''': | |||
#: <syntaxhighlight lang="bash"> | |||
minicom -s ttyGSM | |||
</syntaxhighlight> | |||
# В появившемся меню '''Configuration''', выберите пункт '''Serial port setup'''. | |||
# Теперь выберите нужные пункты нажатием соответствующих клавиш на клавиатуре, меняйте настройки и каждое изменение подтверждайте клавишей <kbd>Enter</kbd>: | |||
#* <kbd>A</kbd> — введите имя serial-порта: <code>/dev/ttyGSM</code>. | |||
#* <kbd>E</kbd> — откроется окно '''Comm Parameters''', в котором нужно указать: | |||
## Скорость соединения, секция '''Speed''' — выберите <kbd>E</kbd> — 115200. | |||
## Количество бит в символе, секция '''Data''' — выберите <kbd>V</kbd> — 8 бит. | |||
## Проверка чётности, секция Parity — выберите <kbd>L</kbd> — None. | |||
## Стоп-биты, секция '''Stopbits''' — выберите <kbd>W</kbd> — 1 стоп-бит. | |||
#* '''Hardware flow control''' (аппаратный контроль потока) — клавиша <kbd>F</kbd> переключает состояние, выберите '''No'''. | |||
#* '''Software flow control''' (программный контроль потока) — клавиша <kbd>G</kbd> переключает состояние, выберите '''No'''. | |||
# Выйдете из настроек порта в главное меню, для этого нажмите на клавиатуре клавишу <kbd>Enter</kbd>. | |||
# Сохраните настройки в профиль, для этого выберите '''Save Setup as ttyGSM'''. | |||
# Закройте minicom, для этого выберите в меню пункт '''Exit from Minicom'''. | |||
==== Запуск с сохранёнными настройками ==== | |||
В предыдущем пункте мы создали профиль настроек, теперь мы можем запустить minicom с этим профилем: | |||
<syntaxhighlight lang="bash"> | |||
~# minicom ttyGSM | |||
Welcome to minicom 2.7 | |||
OPTIONS: I18n | |||
Compiled on Apr 22 2017, 09:14:19. | |||
Port /dev/ttyGSM, 10:03:25 | |||
Press CTRL-A Z for help on special keys | |||
</syntaxhighlight> | |||
Чтобы отправить команды serial-устройству — вводите их в терминале и нажимайте клавишу <kbd>Enter</kbd>. | |||
< | Для вызова справки зажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>A</kbd>. | ||
< | Чтобы выйти из minicom — нажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>X</kbd>. | ||
< | |||
</ | |||
< | |||
</ | |||
== | === PuTTY === | ||
Об использовании PuTTY для подключения к serial-порту читайте в [[статье PuTTY]]. | |||
=== Протокол Modbus RTU === | |||
Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты [[modbus_client]]. | |||
== | === Собственное ПО === | ||
Если вы пишете скрипт или свою программу для работы с serial-портом, то руководствуйтесь советами из [https://tldp.org/HOWTO/Serial-Programming-HOWTO/ Serial-Programming-HOWTO]. | |||
== Утилита для ОС Windows == | |||
Об использовании PuTTY для подключения к serial-порту в ОС Windows читайте в [[PuTTY | статье PuTTY]]. | |||
Версия 16:39, 16 августа 2021
Реализация последовательных портов в ОС Linux
Основы
Последовательный порт ещё называют serial-портом. Полное описание читайте в документации, вот выжимка из неё:
- В serial-порт можно посылать данные и получать данные из него.
- В ОС Linux serial-порты — это псевдофайлы из папки
/dev
. Например, в контроллерах Wiren Board это могут быть/dev/ttyGSM
,/dev/ttyRS485-1
,/dev/ttyUSB0
— у всех в названии естьtty
.
Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство:
- Скорость в битах в секунду, самое популярное — 115200 бит/с.
- Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит.
- Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах.
Определение занятости порта и монопольное использование
Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.
Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить.
Проверим, свободен ли порт /dev/ttyRS485-2
. Для этого выполните команду:
fuser /dev/ttyRS485-1
Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт.
В контроллерах Wiren Board порты /dev/ttyRS485-1
и /dev/ttyRS485-2
обычно заняты драйвером wb-mqtt-serial
. Перед работой с этими портами — остановите драйвер.
Драйвер можно остановить одним из способов:
- Остановите драйвер из командной строки
- В веб-интерфейсе контроллера, в настройках serial-порта снимите галочку «Enabled» и сохраните настройки.
Утилиты для ОС Linux
serial_tool
serial_tool — утилита для отправки и получения наборов бит. Используйте её для отправки и получения данных в шестнадцатеричном формате: побитово, группами по четыре бита.
Утилита serial_tool предустановлена на все контроллеры Wiren Board. На компьютеры с Linux её нужно установить из нашего репозитория.
Для вызова справки по утилите, запустите утилиту с параметром -h
:
~# 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)
Например, запишем последовательность бит в порт /dev/ttyRS485-1 с параметрами порта 8N2 и таймаутом в одну секунду:
~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyRS485-1
serial_tool on /dev/ttyRS485-1: 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
Другие примеры использования утилиты смотрите в статьях о настройке приводов штор, например, Akko AM82.
minicom
minicom — утилита для отправки и получения символьных команд. Её удобно использовать для работы с устройствами, которые управляются текстовыми командами и выводят текстовые сообщения в ответ. Например, c помощью minicom удобно отправлять AT-команды на GSM-модемы или получать данные с GPS-модулей, которые работают по протоколу NMEA.
Утилита minicom предустановлена на все контроллеры Wiren Board, а на ПК с ОС Linux её нужно будет установить. Для установки minicom на ПК с ОС Linux, выполните поочереди команды:
sudo apt update
sudo apt install minicom
Для запуска minicom нужны права суперпользователя, на контроллерах Wiren Board вы уже работаете под суперпользователем, а на ПК с ОС Linux используйте sudo
.
Настройка параметров подключения
Для настройки параметров подключения, запустите утилиту с ключом -s и укажите имя профиля, в который хотите сохранить настройки.
Например, настроим соединение с портом /dev/ttyGSM
:
- Запустите minicom от имени суперпользователя в режиме настройки соединения и укажите имя профиля, например, ttyGSM:
minicom -s ttyGSM
- В появившемся меню Configuration, выберите пункт Serial port setup.
- Теперь выберите нужные пункты нажатием соответствующих клавиш на клавиатуре, меняйте настройки и каждое изменение подтверждайте клавишей Enter:
- A — введите имя serial-порта:
/dev/ttyGSM
. - E — откроется окно Comm Parameters, в котором нужно указать:
- Скорость соединения, секция Speed — выберите E — 115200.
- Количество бит в символе, секция Data — выберите V — 8 бит.
- Проверка чётности, секция Parity — выберите L — None.
- Стоп-биты, секция Stopbits — выберите W — 1 стоп-бит.
- Hardware flow control (аппаратный контроль потока) — клавиша F переключает состояние, выберите No.
- Software flow control (программный контроль потока) — клавиша G переключает состояние, выберите No.
- A — введите имя serial-порта:
- Выйдете из настроек порта в главное меню, для этого нажмите на клавиатуре клавишу Enter.
- Сохраните настройки в профиль, для этого выберите Save Setup as ttyGSM.
- Закройте minicom, для этого выберите в меню пункт Exit from Minicom.
Запуск с сохранёнными настройками
В предыдущем пункте мы создали профиль настроек, теперь мы можем запустить minicom с этим профилем:
~# minicom ttyGSM
Welcome to minicom 2.7
OPTIONS: I18n
Compiled on Apr 22 2017, 09:14:19.
Port /dev/ttyGSM, 10:03:25
Press CTRL-A Z for help on special keys
Чтобы отправить команды serial-устройству — вводите их в терминале и нажимайте клавишу Enter.
Для вызова справки зажмите одновременно клавиши Ctrl+A, а затем клавишу A.
Чтобы выйти из minicom — нажмите одновременно клавиши Ctrl+A, а затем клавишу X.
PuTTY
Об использовании PuTTY для подключения к serial-порту читайте в статье PuTTY.
Протокол Modbus RTU
Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты modbus_client.
Собственное ПО
Если вы пишете скрипт или свою программу для работы с serial-портом, то руководствуйтесь советами из Serial-Programming-HOWTO.
Утилита для ОС Windows
Об использовании PuTTY для подключения к serial-порту в ОС Windows читайте в статье PuTTY.