Russian Qt Forum

Qt => Вопросы новичков => Тема начата: vyacheslav от Ноября 02, 2014, 21:29



Название: [РЕШЕНО] QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 02, 2014, 21:29
Всем привет.

Вопрос в следующем:
Есть два устройства ADAM-4561 основаны на (pl2303), написал программу наподобие terminal  из примеров, на винде вссё работате на ура, на линуксе (SUSE 13.1) не хочет. Запускал terminal из примеров, эффект тот же.
Может кто знает куда копать?
Ошибок при открытии/передачи нет. На осциллографе передача идёт, настройка на разные скорости тоже проходит. Такое ощущение, что система не выдаёт из своего буфера, потому  как если поиграться с открытием разных портов, то иногда при открытии вываливается мусор в виде моих ранее переданных данных.

Очень прошу помощи, хотелось весь свой софт перенести на линукс, а из-за этого ни как!


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 02, 2014, 22:57
С pl2303 отлично работает в Linux.

Цитата: vyacheslav
Запускал terminal из примеров, эффект тот же.
Это странно.

Какая версия QtSerialPort? Другие терминалки работают? Используется RS485/232? DIP переключатели установлены корректно?
В каком режиме открывается порт (с какими настройками) ?




Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 03, 2014, 11:35
Цитировать
Какая версия QtSerialPort?
Поставил последнюю Qt с офф сайта. Пробовал 32 и 64 bit, а также более старую из репозитория suse.
Цитировать
Другие терминалки работают?
Можно поподробней, какие. Пробовал через minicom, ничего не получилось.
Цитировать
Используется RS485/232? DIP переключатели установлены корректно?
Использую 485. Там один переключатель, он установлен в автоматическое управление направления линией передачи.
проверил в режиме 232, всё нормально, всё работает.
т.е. проблема остаётся в системе. Кто нибудь может подсказать как нибудь можно настроить драйвер, для работы с 485?
сами адаптеры работающие, в винде всё работает.


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 03, 2014, 13:43
Цитата: vyacheslav
Можно поподробней, какие. Пробовал через minicom, ничего не получилось.

Значит что-то с железкой не то или еще что-то.

Цитата: vyacheslav
Использую 485.

А правильно Rx/Tx подключены?

Цитата: vyacheslav
проверил в режиме 232, всё нормально, всё работает.
т.е. проблема остаётся в системе

С чего это вдруг? А может в твоей железке?

Цитата: vyacheslav
Кто нибудь может подсказать как нибудь можно настроить драйвер, для работы с 485?

Не нужно ничего настраивать. PL2303 предоставляет только 232 интерфейс. Остальное (485) доделывают уже другие чипы,
которые внутри твоего адама.

Как вариант - попробовать замерить состояние линий DTR/RTS и прочих при открытии порта в Windows и Linux и сравнить.
Возможно что другие микрухи требуют каких-то определенных состояний этих сигналов для корректной работы
(автоопределение направления и прочего).

ИМХО - дохлый адам :)


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 03, 2014, 14:08
Цитировать
А правильно Rx/Tx подключены?
в 485 нет Rx/Tx, он полудуплексный.

Цитировать
С чего это вдруг? А может в твоей железке?
в винде то работает.

Цитировать
Не нужно ничего настраивать. PL2303 предоставляет только 232 интерфейс. Остальное (485) доделывают уже другие чипы,
которые внутри твоего адама.
в том и прикол что 485 делает сама микруха PL-2303H. дальше только опторазвязка идёт.

Цитировать
Как вариант - попробовать замерить состояние линий DTR/RTS и прочих при открытии порта в Windows и Linux и сравнить.
Срвнмвал всё одиноаково. и данный преобразователь не использует линии DTR/RTS.

Цитировать
ИМХО - дохлый адам Улыбающийся
а в винде воскресает.
так же в первом посте я говорил что после того как я переоткрываю порт (без флуша) из него вываливаеться мусор (не всегда и редко) из моих переданных данных.


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 03, 2014, 14:22
ну хз.

Попробуй это: http://www.spinics.net/lists/linux-usb/msg83763.html

Ну, и сделай strace


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 04, 2014, 15:52
Цитировать
Попробуй это: http://www.spinics.net/lists/linux-usb/msg83763.html
Это не подходит, хотя признаки те же. В новых ядрах это уже реализовано.

Спасибо за помощь, надо будет попробовать какие нить другие преобразователи, походу с этим ничего не получиться. >:(


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 05, 2014, 15:51
Всё я разобрался, когда залес в адам.
До этого я работал по картинке из документации на устройсво, которое как окозалось не соответсвует действительности, внутри действительно стоит pl2303 без буквы Н, и дополнительные преобразователи на 485, которые управляються от сигнала RTS. Так, что я признаю - был неправ.
C помощью функции setRequestToSend() и задержек мне удалось получить стабильную передачу.
Но возник вопрос как высавлять сигнал  автоматически?
Я думал setFlowControl(QSerialPort::HardwareControl) будет автоматически выставлять сигнал RTS, а судя по осцилографу он этого не делает.


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 05, 2014, 16:58
Цитата: vyacheslav
Но возник вопрос как высавлять сигнал  автоматически?

Эмм.. это должен делать сам ADAM. Вручную нужно управлять RTS только в случае если ADAM не поддерживает автоматическое определение направления.
Но твой ADAM поддерживает автоматическую распознавалку. Возможно что-то ты не доустановил (дип-переключалки).

Цитата: vyacheslav
Я думал setFlowControl(QSerialPort::HardwareControl) будет автоматически выставлять сигнал RTS, а судя по осцилографу он этого не делает.

Это вообще из "другой оперы".


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: Bepec от Ноября 05, 2014, 17:05
Кстати да, была проблема с адамами. Там внутри дип переключатели на планке.

PS из 2 адамов у меня заработал только один. Второй тоже передавал только в 1 сторону.


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 05, 2014, 17:07
Там еще странность в том, что в "оригинальной" доке указано что используется не PL2303 а CP21xx чип: http://downloadt.advantech.com/ProductFile/Downloadfile1/1-MDYDEV/ADAM-4561_User_Manual_Ed3.pdf
В общем, ковыряйся с ADAM (возможно он какой-то левый). :)


Название: Re: QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 06, 2014, 15:22
Цитировать
Там еще странность в том, что в "оригинальной" доке указано что используется не PL2303 а CP21xx чип: http://downloadt.advantech.com/ProductFile/Downloadfile1/1-MDYDEV/ADAM-4561_User_Manual_Ed3.pdf
В общем, ковыряйся с ADAM (возможно он какой-то левый). Улыбающийся
Ну то, что он не левый это точно, может просто один из первых.

Цитировать
Кстати да, была проблема с адамами. Там внутри дип переключатели на планке.
Есть такой. но он для 422 (как написанно).

Посидев с тестером и осцилографом востановил схему платы. И получаеться, что можно с помощью джампера, поставить напралением передачи, всегда на выдачу, либо  осуществляеться на прямую с ножки RTS (pl2303).  Выходит именно эти адамом в линухе (в винде походу это реализовали в самом драйвере) придётся дергать ножкой самому.

Если ни кто ничего нового не предложить, то можно вопрос считать закрытым. Всем огромное спасибо!


Название: Re: [РЕШЕНО] QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 06, 2014, 18:48
А под виндой драйвер стоит стандартный от Prolific? Или некая его кастомизация от Advantech?


Название: Re: [РЕШЕНО] QtSerialPort не принимает байты (Linux)
Отправлено: vyacheslav от Ноября 06, 2014, 20:22
Цитировать
А под виндой драйвер стоит стандартный от Prolific? Или некая его кастомизация от Advantech?
Именно кастомизация.


Название: Re: [РЕШЕНО] QtSerialPort не принимает байты (Linux)
Отправлено: kuzulis от Ноября 06, 2014, 21:42
Ну, если так  (если действительно так) - то скорее всего этот драйвер сам дергает ногами RTS и прочими..
Еще один факт в пользу этого утверждения тот, что в документации к ADAM в качестве поддерживаемых ОС указаны только
Windows (хотя, конечно, это не обязательно так).