Название: [РЕШЕНО] serialbus через UART Отправлено: sergek от Октябрь 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? Название: Re: serialbus через UART Отправлено: kuzulis от Октябрь 26, 2017, 22:21 Сначала нужно проверить сам ttyS0, может это не тот что кажется, потом посмотреть на это (https://bugreports.qt.io/browse/QTBUG-48304), а потом уже думать.
Название: Re: serialbus через UART Отправлено: sergek от Октябрь 27, 2017, 00:11 Почитал, ничего не придумывается :( Сделал минимальный тестовый пример - открыть порт и прочесть два holding регистра. Под рутом подключается, запрос передается, дальше - какая-то фигня:
Код: sergek@LCSp:~/Modbus-uart $ sudo ./master В QModbusClient::errorOccurred лезет ошибка "Resource error". А нужны для UART какие-нибудь дополнительные пакеты, кроме тех, что есть в системе для RPi zero? Название: Re: serialbus через UART Отправлено: kuzulis от Октябрь 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. Название: Re: serialbus через UART Отправлено: sergek от Октябрь 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. |