реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Чтение из виртуального COM 9 битовых слов
SergeyAB
сообщение May 12 2013, 21:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 13-11-10
Пользователь №: 60 853



Здравствуйте!
Недавно мне было нужно управлять одним изделием, во внутреннюю структуру которого я не могу лезть и менять, по RS-485 с компьютера на скорости 115200. Я использовал преобразователь на FT232RQ и MAX485, т.е. подключал к USB и отсылал данные через виртуальный COM-порт. Устройство принимало 9-битные посылки (9бит=1 для адреса и 9бит=0 для данных).
Я написал программу используя QT и библиотеку qextserialport-1.2 . Не найдя в сети внятного ответа как слать честные 9бит, я стал использовать бит четности как 9 бит, т.е. устанавливал его как parity MARK при отсылки адреса и parity SPACE для данных. При переконфигурации порта с MARK на SPACE возникала задержка. На осцилографе было видно что данные отсылаются примерно через 1мс после адресного слова.
Но устройство не реагировало на такое промедление и переконфигурация происходила без проблем.

Теперь же я работаю с похожим устройством и мне нужно еще и прочесть ответ на мою посылку, который также состоит из 9-битного адреса и 9-битных данных. Я не могу нормально принять данные, поскольку мне нужно после приема первого адресного байта резко переключить настройки четности.
Как реализовать чтение 9битных посылок, в которых заранее известно что лишь первое слово с 9битом=1, а остальные с 9 битом =0? Или же какой то общий способ чтения честных 9-бит на QT.
Было бы просто супер если это было возможно сделать на QT, ибо я раньше особо не писал на с++ и вообще ничего для компьютера, только AVR,MSP430,STM32,SHARC.
Go to the top of the page
 
+Quote Post
редактор
сообщение May 13 2013, 08:53
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



В качестве 9-го бита в RS используется именно бит четности. Во многих МК под это дело заточен прием данных (только с установленным 9-м битом). На больших машинах с этим намного сложнее. Лет 15 назад делали нечто подобное под DOS.
Алгоритм был примерно следующий: порт настраивался на прием со сброшенным 9-м битом (прием данных) и принимал все данные. Если принимались данные с установленным 9-м битом, то возникала ошибка четности. В обработчике ошибок проверялся принятый байт на совпадение адреса и ставился флаг на разрешение (запрет) приема данных.
Очень быстро от таких протоколов ушли именно из-за неудобства их обработки на ПК. Под DOS - в прерывании это отрабатывалось быстро, а вот под виндой стали появляться проблемы со скоростью обработки потока. ПК были не сильно шустрые.




--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 03:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.02591 секунд с 7
ELECTRONIX ©2004-2016