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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QtSerialPort не принимает байты (Linux)  (Прочитано 6352 раз)
vyacheslav
Гость
« : Ноябрь 02, 2014, 21:29 »

Всем привет.

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

Очень прошу помощи, хотелось весь свой софт перенести на линукс, а из-за этого ни как!
« Последнее редактирование: Ноябрь 06, 2014, 15:24 от vyacheslav » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Ноябрь 02, 2014, 22:57 »

С pl2303 отлично работает в Linux.

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

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


« Последнее редактирование: Ноябрь 02, 2014, 23:08 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
vyacheslav
Гость
« Ответ #2 : Ноябрь 03, 2014, 11:35 »

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

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Ноябрь 03, 2014, 13:43 »

Цитата: vyacheslav
Можно поподробней, какие. Пробовал через minicom, ничего не получилось.

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

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

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

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

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

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

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

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

ИМХО - дохлый адам Улыбающийся
« Последнее редактирование: Ноябрь 03, 2014, 13:45 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
vyacheslav
Гость
« Ответ #4 : Ноябрь 03, 2014, 14:08 »

Цитировать
А правильно Rx/Tx подключены?
в 485 нет Rx/Tx, он полудуплексный.

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

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

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

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

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Ноябрь 03, 2014, 14:22 »

ну хз.

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

Ну, и сделай strace
Записан

ArchLinux x86_64 / Win10 64 bit
vyacheslav
Гость
« Ответ #6 : Ноябрь 04, 2014, 15:52 »

Цитировать
Это не подходит, хотя признаки те же. В новых ядрах это уже реализовано.

Спасибо за помощь, надо будет попробовать какие нить другие преобразователи, походу с этим ничего не получиться. Злой
Записан
vyacheslav
Гость
« Ответ #7 : Ноябрь 05, 2014, 15:51 »

Всё я разобрался, когда залес в адам.
До этого я работал по картинке из документации на устройсво, которое как окозалось не соответсвует действительности, внутри действительно стоит pl2303 без буквы Н, и дополнительные преобразователи на 485, которые управляються от сигнала RTS. Так, что я признаю - был неправ.
C помощью функции setRequestToSend() и задержек мне удалось получить стабильную передачу.
Но возник вопрос как высавлять сигнал  автоматически?
Я думал setFlowControl(QSerialPort::HardwareControl) будет автоматически выставлять сигнал RTS, а судя по осцилографу он этого не делает.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Ноябрь 05, 2014, 16:58 »

Цитата: vyacheslav
Но возник вопрос как высавлять сигнал  автоматически?

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

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

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

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #9 : Ноябрь 05, 2014, 17:05 »

Кстати да, была проблема с адамами. Там внутри дип переключатели на планке.

PS из 2 адамов у меня заработал только один. Второй тоже передавал только в 1 сторону.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #10 : Ноябрь 05, 2014, 17:07 »

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

ArchLinux x86_64 / Win10 64 bit
vyacheslav
Гость
« Ответ #11 : Ноябрь 06, 2014, 15:22 »

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

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

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

Если ни кто ничего нового не предложить, то можно вопрос считать закрытым. Всем огромное спасибо!
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Ноябрь 06, 2014, 18:48 »

А под виндой драйвер стоит стандартный от Prolific? Или некая его кастомизация от Advantech?
Записан

ArchLinux x86_64 / Win10 64 bit
vyacheslav
Гость
« Ответ #13 : Ноябрь 06, 2014, 20:22 »

Цитировать
А под виндой драйвер стоит стандартный от Prolific? Или некая его кастомизация от Advantech?
Именно кастомизация.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #14 : Ноябрь 06, 2014, 21:42 »

Ну, если так  (если действительно так) - то скорее всего этот драйвер сам дергает ногами RTS и прочими..
Еще один факт в пользу этого утверждения тот, что в документации к ADAM в качестве поддерживаемых ОС указаны только
Windows (хотя, конечно, это не обязательно так).
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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