COM порт в Ubuntu

Jul 30, 2014 00:02




Для работой с cisco по com-порту удобно пользоваться PuTTY, но необходимо дать права на пользование.
По умолчанию к устройствам /dev/tty* имеют доступ пользователи из группы «dialout». Посмотреть:

ls -al /dev/ttyS0
ответ

crw-rw---- 1 root dialout 4, 64 мая 5 07:42 /dev/ttyS0
можно увидеть, что доступ открыт для группы dialout

нужно добавить себя в эту группу:

sudo adduser dialout
Перезагрузится.

случай сложнее, используется контроллер
Serial controller: MosChip Semiconductor Technology Ltd. PCI 9865 Multi-I/O Controller

usermod -a -G plugdev,dialout NameUser
id NameUser

lspci -v
lspci -nn
lspci -xvv

sudo dmidecode
dmesg | grep tty

sudo apt install setserial

setserial /dev/ttyS0 -a
setserial /dev/ttyS4 -a
setserial /dev/ttyS5 -a

stty -g -F /dev/ttyS0
stty -g -F /dev/ttyS4
stty -g -F /dev/ttyS5

stty -a < /dev/ttyS0
stty -a < /dev/ttyS4
stty -a < /dev/ttyS5

Стандартная скорость, бит/сек: 50,75,110,150,300,600,1200,1800,2000,2400,3600,4800,7200,9600,14400,19200,28800,38400,57600,115200
Проверка COM порта под linux
Установка minicom и подключение по консольному порту к коммутатору
Программирование COM порта

сканер штрихкодов
Silicon Labs CIPHERLAB 308 USB-to-RS232
https://forum.ubuntu.ru/index.php?topic=11431.0

lsusb -v
setserial -g /dev/ttyS*
sudo modprobe usbkbd
/dev/ttyUSB0

screen /dev/ttyUSB0 115200
screen -S session_name -X at window_number stuff ^C
screen -S session_name -X at window_number stuff $'\003'
screen -S session_name -X -p window_number stuff $'\003'

stty -a
lsof /dev/ttyUSB0
picocom --baud 115200 --flow n /dev/ttyUSB0
minicom -l -8 -c on
minicom -l -8 -c on -b 115200 -D /dev/ttyUSB0

http://ru.cipherlab.com/document.asp?id=1450

дисплей покупателя
Вывод информации на дисплей покупателя
Програмируем символы валют для дисплея покупателя
https://www.ascii-codes.com/cp866.html
http://docs.artix.su/display/ArtixDoc46/Epson

настройка дисплея
обязательно разрешить переключение кодовой страницы

Дисплей покупателя: Epson
Параметры подключения:
порт: /dev/ttyS1
Кодовая страница: cp866
Переключать кодовую страницу: вкл
Ширина строк: 20
Задержка сообщений: 0

Для начала работы инициализируем дисплей покупателя очистив память и экран индикации командой ESC @:
$ echo -n -e \\x1B\\x40 > /dev/ttyUSB0

стандартная проверка:
$ echo -n -e Hello, world!\\n > /dev/ttyUSB0

Отображение

Для индикации в дисплеях покупателя используется VFD или LCD панель обычно содержащая 2-е строки по 20 символов. Каждый символ в зависимости от модели дисплея может состоят из матрицы от 5*7 до 8*8 точек. Для данного примера используется дисплей с размером символа 5 точек по горизонтали и 7 точек по вертикали.

Символы закодированы в ПЗУ дисплея и доступны для вывода в диапазоне от 0x20 до 0xFF байта. И если диапазон от 0x20 до 0x7F, это стандартная кодовая страница ANSI, то диапазон от 0x80 до 0xFF выделен для дополнительных кодовых страниц, например кириллицы. Для переключения кодовых страниц используется команда ESC t n, где n, это номер кодовой страницы. Пример:

$ echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
$ echo -n -e \\x87\\xA4\\xE0\\xA0\\xA2\\xE1\\xE2\\xA2\\xE3\\xA9\\x2C\\x20\\x95\\xA0\\xA1\\xE0\\x21\\n > /dev/ttyUSB0

для замены символы доллара(код 0x26 в таблице символов нашего дисплея) на символ тенге с таким-же кодом, нам понадобится ESC/POS команда следующего вида:
$ echo -n -e \\x1b\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5f\\x50\\x50 > /dev/ttyUSB0

Включаем загруженные символы командой ESC % n, где значение n единица или ноль в зависимости от того, включены или нет загруженные символы:
$ echo -n -e \\x1b\\x25\\x01 > /dev/ttyUSB0

Проверяем работу:
$ echo -n -e 1500$ > /dev/ttyUSB0

Программирование

Теперь осталось сделать автоматическим при подключении инициализацию кириллицы и загрузку символа тенге. Для этого нам необходимо установить для udev правила автоматического запуска bash-скрипта при подключение дисплея покупателя к Raspberry Pi. Командой udevadm узнаём код вендора и модели нашего дисплея.
$ udevadm info -q all -n /dev/ttyUSB0 | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'

E: ID_MODEL_ID=2303
E: ID_VENDOR_ID=067b

Создаём правила 90-init-vfd-display.rules:
$ sudo nano /etc/udev/rules.d/90-init-vfd-display.rules

, следующего содержания:

ACTION=="add", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", RUN+="/usr/local/bin/init-vfd-display.sh"

и скрипт:
$ sudo nano /usr/local/bin/init-vfd-display.sh

#!/bin/bash

sleep 20

echo -n -e \\x1B\\x40 > /dev/ttyUSB0
echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
echo -n -e \\x1B\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5F\\x50\\x50 > /dev/ttyUSB0

sleep 3

Делаем исполняемым bash-скрипт и активируем наши правила:
$ sudo chmod +x /usr/local/bin/init-vfd-display.sh
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger --action=add
$ sudo service udev restart

Пробуем одновременно использовать символ доллара и тенге переключая их поочерёдно.
$ echo -n -e 1$ =\\x1B\\x25\\x01 181,95$ \\x1B\\x25\\x00 > /dev/ttyUSB0

####################################################################################

Для корректной работы с ДП установим скорость передачи данных:
stty -F /dev/ttyUSB0 9600

Для очистки экрана дисплея выполним команду:
echo -e -n "\x0c\x0b" > /dev/ttyUSB0

echo - команда вывода в терминал. Опция -e - включает поддержку вывода escape-последовательностей, -n - указывает, что не надо выводить перевод строки. Допускается запись -en.
0с - очистка экрана дисплея и отмена строчного режима, 0b - перемещает курсор в верхнюю крайнюю левую позицию. Символ > - управление потоком (перенаправляет вывод). В данном случае в файл /dev/ttyUSB0 нашего устройства

команду изменяющую скорость для передачи данных на устройство можно было записать и так:
stty 9600 < /dev/ttyUSB0

Ну и для вывода сообщений на русском языке выполним:
echo -n "Привет!" | iconv -f UTF-8 -t CP866 > /dev/ttyUSB0

| - перенаправляет вывод одной команды на вход другой (конвейер). В нашем случае последовательность символов "Привет!" не выводится в файл устройства сразу, а передаётся на "конвертирование" утилите iconv. iconv - преобразует из одной кодировки в другую.

Работа с СОМ-портом на Си в linux
Неизвестный UART: теория

команды, утилита, права, com, cisco, linux, centos, ubuntu, debian, консоль, tty, switch

Previous post Next post
Up