Russian Qt Forum
Ноябрь 25, 2024, 09:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] serialbus через UART  (Прочитано 6336 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« : Октябрь 26, 2017, 19:43 »

Коллеги,
есть программа, которая на Raspberry pi опрашивает по modbus устройство с интерфейсом RS-485, подключенное через преобразователь USB/RS-485. Используется Qt Serial Bus через порт ttyUSB0. Понадобилось теперь перенести это хозяйство на Raspberry pi Zero.
Из-за недостатка USB портов (в одном торчит флешка с ОС) вместо него используется UART ttyS0, устройство умеет работать по UART.
Однако обмен не работает, вываливается ошибка 3 Resource error. Права на uart такие же, что и USB.
Железяка с uart работает, пробовали работать с ней с помощью opnhab.
В чем может быть проблема на rpi zero?
« Последнее редактирование: Октябрь 27, 2017, 12:14 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Октябрь 26, 2017, 22:21 »

Сначала нужно проверить сам ttyS0, может это не тот что кажется, потом посмотреть на это, а потом уже думать.
Записан

ArchLinux x86_64 / Win10 64 bit
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Октябрь 27, 2017, 00:11 »

Почитал, ничего не придумывается Грустный Сделал минимальный тестовый пример - открыть порт и прочесть два holding регистра. Под рутом подключается, запрос передается, дальше - какая-то фигня:
Код:
sergek@LCSp:~/Modbus-uart $ sudo ./master
port: /dev/ttyS0, unit id: 1, address: 1, entries: 2
Connected
qt.modbus: (RTU client) Sent Serial PDU: 0x0300010002
qt.modbus.lowlevel: (RTU client) Sent Serial ADU: 0x01030001000295cb
qt.modbus: (RTU client) Send successful: 0x0300010002
qt.modbus: (RTU server) QSerialPort error: QSerialPort::SerialPortError(ResourceError) "Ресурс временно недоступен"
qt.modbus: (RTU client) Receive timeout: 0x0300010002
qt.modbus: (RTU server) QSerialPort error: QSerialPort::SerialPortError(ResourceError) "Ошибка ввода/вывода"
qt.modbus: (RTU client) Sent Serial PDU: 0x0300010002
qt.modbus.lowlevel: (RTU client) Sent Serial ADU: 0x01030001000295cb
qt.modbus: (RTU server) QSerialPort error: QSerialPort::SerialPortError(ResourceError) "Ошибка ввода/вывода"
qt.modbus: (RTU server) QSerialPort error: QSerialPort::SerialPortError(ResourceError) "Ошибка ввода/вывода"
...
и т.д.
В QModbusClient::errorOccurred лезет ошибка "Resource error".
А нужны для UART какие-нибудь дополнительные пакеты, кроме тех, что есть в системе для RPi zero?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Октябрь 27, 2017, 09:04 »

Цитировать
Почитал, ничего не придумывается

Эмм...

1. Если нужно запустить от пользователя - то нужно добавить его
в группу dialout, tty, uucp (в зависимости от дистрибутива).

2. Modbus Rtu в qtserialbus работает через QSerialPort, который,
в свою очередь, при открытии всегда создает lock-файлы в /var/lock
или, возможно, немного других местах. Так вот, перед запуском
от пользователя желательно найти и удалить эти файлы, если ранее
пытались запускать от рута, иначе оно не откроется.

3. Т.к. оно работает через QSerialPort, то желательно запустить
его terminal-пример на борде и попробовать что-то по-посылать,
по-принимать - вылезет или нет ошибка там.

Цитировать
лезет ошибка "Resource error".

Я дал ссылку выше на баг репорт, в котором говорится, что это модет быть
из-за проблем с драйверами в Убунте в определенных ядрах.
Я не знаю, что стоит на твоем Raspberry pi, нужно просто посмотреть версию
ядра и попробовать его обновить/откатить, выкинуть нахрен Убунту и накатить
ArchLinux.

Также непонятна версия Qt.
« Последнее редактирование: Октябрь 27, 2017, 09:06 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Октябрь 27, 2017, 12:14 »

Эмм...
Спасибо огромное, заработало!
Мои коллеги, которые сейчас работают с малиной, утверждают, что помогло дополнительное включение пользователя в группу tty (раньше был только dialout). Я им не верю Подмигивающий, т.к. я пробовал от рута - результат отрицательный. Скорее всего, поправили еще /boot/config.txt (enable_uart=1) и cmdline.txt. Может быть, не перезагрузили ее.
Теперь-то и рут, и мой пользователь свободно работают с uart.
По остальным пунктам:
2) проверил - нет ничего лишнего, порт открывался нормально.
3) до terminal-примера дело не дошло, но буду иметь в виду - ребята, когда готовят новую машину всегда чего-то забывают Подмигивающий
Ядро и дистрибутив Linux version 4.9.35+, Distributor ID: Raspbian, Description: Raspbian GNU/Linux 8.0 (jessie).
Qt 5.7.

Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.