Работа с последовательным портом

Материал из Wiren Board

Реализация последовательных портов в ОС Linux

Основы

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

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

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

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

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

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

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

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

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

fuser /dev/ttyRS485-1

Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт.

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

Драйвер можно остановить одним из способов:

  1. Остановите драйвер из командной строки
  2. В веб-интерфейсе контроллера, в настройках serial-порта снимите галочку «Enabled» и сохраните настройки.

Утилиты для ОС Linux

Serial_tool

Пример работы с утилитой 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.

Настройка параметров подключения

Пример настройки параметров подключения в minicom

Для настройки параметров подключения, запустите утилиту с ключом -s и укажите имя профиля, в который хотите сохранить настройки.

Например, настроим соединение с портом /dev/ttyGSM:

  1. Запустите minicom от имени суперпользователя в режиме настройки соединения и укажите имя профиля, например, ttyGSM:
    minicom -s ttyGSM
    
  2. В появившемся меню Configuration, выберите пункт Serial port setup.
  3. Теперь выберите нужные пункты нажатием соответствующих клавиш на клавиатуре, меняйте настройки и каждое изменение подтверждайте клавишей Enter:
    • A — введите имя serial-порта: /dev/ttyGSM.
    • E — откроется окно Comm Parameters, в котором нужно указать:
    1. Скорость соединения, секция Speed — выберите E — 115200.
    2. Количество бит в символе, секция Data — выберите V — 8 бит.
    3. Проверка чётности, секция Parity — выберите L — None.
    4. Стоп-биты, секция Stopbits — выберите W — 1 стоп-бит.
    • Hardware flow control (аппаратный контроль потока) — клавиша F переключает состояние, выберите No.
    • Software flow control (программный контроль потока) — клавиша G переключает состояние, выберите No.
  4. Выйдете из настроек порта в главное меню, для этого нажмите на клавиатуре клавишу Enter.
  5. Сохраните настройки в профиль, для этого выберите Save Setup as ttyGSM.
  6. Закройте 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.