Я разрабатываю систему под QNX 6.2 .... и столкнулся с проблемой разворота линии RS485.
Вкратце о системе :
Есть обычный PC у которого есть RS232, есть контроллеры, которые
могут общаться по RS485 и есть преобразователь (RS232/RS485 (без поддержки авторазворота линии)). Преобразователь разворачивается
на передачу активным уровнем сигнала на линии RTS (RS232) .
Для правильной работы такой системы необходимо точно знать момент передачи и удерживать активным сигнал RTS в течении этого промежутка
времени. Ранее, в Линуксе я решил эту проблему, опрашивая бит TEMT
(вызов ioctl(portfd,TIOCSERGETLSR,@status)) в регистре LSR UARTa в
течении передачи, пока он не установится в 1 (что говорит о том, что передача окончена)
Стандартный драйвер компорта в QNX не поддерживает команды TIOCSERGETLSR,
и не поддерживает ничего подобного (если я не ошибаюсь :) )
Вопрос : Как быть? В каком направлении копать :) ?
Как решить эту проблему при помощи аппаратной доработки я знаю,
но от меня требуют программное решение.....
Зарание спасибо.
Первоначально опубликовано Evpator
Добрый день
Я разрабатываю систему под QNX 6.2 .... и столкнулся с проблемой разворота линии RS485.
Вкратце о системе :
Есть обычный PC у которого есть RS232, есть контроллеры, которые
могут общаться по RS485 и есть преобразователь (RS232/RS485 (без поддержки авторазворота линии)). Преобразователь разворачивается
на передачу активным уровнем сигнала на линии RTS (RS232) .
Для правильной работы такой системы необходимо точно знать момент передачи и удерживать активным сигнал RTS в течении этого промежутка
времени. Ранее, в Линуксе я решил эту проблему, опрашивая бит TEMT
(вызов ioctl(portfd,TIOCSERGETLSR,@status)) в регистре LSR UARTa в
течении передачи, пока он не установится в 1 (что говорит о том, что передача окончена)
Стандартный драйвер компорта в QNX не поддерживает команды TIOCSERGETLSR,
и не поддерживает ничего подобного (если я не ошибаюсь :) )
Вопрос : Как быть? В каком направлении копать :) ?
Как решить эту проблему при помощи аппаратной доработки я знаю,
но от меня требуют программное решение.....
Зарание спасибо.
Вопросы по QNX обсуждаются здесь:
http://www.qnx.org.ru
С уважением,
Бессонов Ян.
Первоначально опубликовано bessonov
Вопросы по QNX обсуждаются здесь:
http://www.qnx.org.ru
Это нужно бы спросить хозяев форума...
Вопрос несколько более общий, чем просто по QNX:
- как это сделать (как хорошо сделать) вообще;
- ... а потом - как это оформить в QNX;
Поэтому - вполне могло бы быть уместно и здесь. Тем более, что на http://www.qnx.org.ru именно сейчас "реконструкция" и некоторое ... неудобство в работе.
А нельзя ли записывать значение прямо в соответствующий регистр управления порта RS-232? Неужели в QNX нет команды типа outportb()?
Первоначально опубликовано KozlovKS
А нельзя ли записывать значение прямо в соответствующий регистр управления порта RS-232? Неужели в QNX нет команды типа outportb()?
наверно есть, но это уже не красивая реализация.
на http://www.qnx.com есть база знаний -- там можно смотреть.
С уважением,
Бессонов Ян.
Первоначально опубликовано KozlovKS
А нельзя ли записывать значение прямо в соответствующий регистр управления порта RS-232? Неужели в QNX нет команды типа outportb()?
Есть, конечно, такая команда - а иначе как бы эта OS использовалась в системах "под крышкой чипа"?
Я думаю, что вопрос ставился несколько по другому: как это сделать так, чтоб это было наибольшим образом "в стиле" системы..., не разрушая логику системы драйверов системы и т.д. Т.е.:
- если работать с портом (адресом) напрямую, то тогда как гибко менять конфигурации: с /dev/ser1 на /dev/ser2 и т.д. ... а если в SETUP порт 3F8 приписан к /dev/ser2 и наоборот.
- если грубо писать в порт - то, очевидно, нужно предварительно "убить" драйвер сериального порта, который тоже может работать с этим аппаратным портом?
- хорошо, пишем в порт... но тогда всю функциональность драйвера /dev/ser дублировать нужно в своём коде: управление режимами, скорость, чётность... все, что стандартно в UNIX через termcap работает. А исходника стандартного драйвера - нет. Всё пишем сами. А нужна то всего такая малось: после записи в порт средствами стандартного драйвера - переключить линию...
P.S. у меня есть некоторые соображения на сей счёт ("... у меня тут совершенно случайно в кустах белый рояль...") - если сообщество сочтёт уместным обсуждать предмет здесь - изложу.
Первоначально опубликовано Olej
Первоначально опубликовано bessonov
Вопросы по QNX обсуждаются здесь:
http://www.qnx.org.ru
Это нужно бы спросить хозяев форума...
Вопрос несколько более общий, чем просто по QNX:
- как это сделать (как хорошо сделать) вообще;
- ... а потом - как это оформить в QNX;
Поэтому - вполне могло бы быть уместно и здесь. Тем более, что на http://www.qnx.org.ru именно сейчас "реконструкция" и некоторое ... неудобство в работе.
по хорошему:
если есть преобразователь, то не надо глумиться над драйвером QNX. Для таких изделий не требуется специального софта или хитроумных приёмов работы с ним.
А сайт http://www.qnx.org.ru работает совершенно нормально -- обсуждение идёт полным ходом.
С уважением,
Бессонов Ян.
Первоначально опубликовано bessonov
если есть преобразователь, то не надо глумиться над драйвером QNX. Для таких изделий не требуется специального софта или хитроумных приёмов работы с ним.
Почему же это не нужно?
Глумиться всегда нужно... :D :D
Можно, конечно, лупасить по 3F8 прямо из тела своего "цельного" программного кода...
Хорошо это?
Тогда лучше не использовать вообще никакую OS, а делать это из голого кода приложение, работающего автономно на оборудовании.
Я не совсем понял сути вопроса... Как же тогда стандартный драйвер работает с обычным модемом? Насколько я понимаю, при включенном аппаратном согласовании DTE должен выставить сигнал RTS на время передачи, на что DCE отвечает сигналом CTS. Для преобразователя достаточно соединить CTS с RTS...
Инженер-системотехник
+7 (916) 477 3925
Да вы правы .... хотелось - бы решить проблему в рамках существующих
возможностей драйвера. Мне всё-же кажется, что я либо чего-то недочитал, либо чего-то недопонял, не смотря на то, что покопался
уже достаточно много. Мне всё ещё неверится что драйвер компорта под
QNX не может помочь мне точно определить момент передачи данных.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме