![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять serial порт... [D5, WinXP]
bg8 © (2005-12-09 20:47:00)Доброго времени суток, Мастера!
Извиняюсь сразу, вопрос собственно не то чтобы о Delphi, а философский...
Проблема в следующем. Есть некий девайс, который умеет общаться с компьютером при помощи интерфейса RS485. Есть WinXP, и переходник USBRS485. При подключении переходника в системе просто появляется еще один COM порт. Пусть будет COM3. Т.о. казалось бы, очень просто общаться с девайсом. НО. Девайс принимает команду в следующем формате:
1й байт - адрес устройства в сети RS485 (в данном случае пусть будет 1)
2й байт - кол-во байтов в пакете, исключая первый и второй
3й байт - код команды (команда - это один символ/байт)
У команды может быть некоторое кол-во параметров - от 2-х до 4-х байт
Последний байт - контрольная сумма.
Ну так вот, девайс реагирует только на команду, адресованную ему, если он знает этй команду и если контрольная сумма правильная. В противном случае он просто молчит. Если команда им распознана, то он отвечает на нее в таком же формате, единственное что меняется - это значение и кол-во параметров.
Теперь к делу (извините за объемность текста, но все по делу помоему). под винду девайс реагирует только на две самых простых команды - команды эти без параметров, и никаких параметров в ответ на эти команды девайсу возвращать не надо (это "ПУСК" и "СТОП"). Т.е. в ответ на эти команды он просто возвращает те же 4 байта, которые ему посылаешь, и включается (выключается). Ни на какие другие команды, которые требуют выхода за 4-х байтную границу, прибор не реагирует. (Я не утверждаю, что дело в числе 4, но сие есть экспериментальный факт.)
Есть тестовая программулька под ДОС, она требует чтоб был преобразователь COM в RS485 и висел он на COM2. Если загрузиться в ДОСе, то девайс на все команды отвечает адекватно, все работает зашибись. Думал, что дело в USB-конвертере, но нет, под винду повесил этот же конвертер COM в RS485, который работал в ДОСе, в винде все то же самое, что и с USB.
В описании этой программульки есть фраза, что "управление направлением передачи данных порта осуществляется с помощью сигнала RTS". Преобразователь интерфейса, что один, что другой, умеют аппаратно управлять направлением передачи данных. А в исходниках тестовой программульки есть такой кусочек: (программка на C, извините, на паскале нету:) )
(я по памяти пишу, поскольку все осталось на работе, попозже могу поточнее написать)
void outchar(int out){
outportb(COM+4,2);
outportb(COM,out);
while(!(inportb(COM+5)&64)) outportb(COM+4,0);
outportb(COM+4,2);
}
а переменная COM определена как 0х2F8 (ну в общем, адрес 2-го ком порта - тоже точно не помню).
В общем, я отчаялся добиться работы девайса под винду,
ай нид хелп!!
Заранее спасибо!
GanibalLector (2005-12-10 12:39:00) [21]Поставь PortMon и смотри за передачей/приемом.
З.Ы. И еще...я работал примерно по такому протоколу,но с другим устройством.Так вот,после посылки команды "старт" у меня требовалось переинициализировать порт(на другую четность).Описание протокола хоть есть???
tesseract (2005-12-10 12:09:00) [22]
> Ну так блин, разобрал конечно, ничего (!) там нету такого,
> чего бы я не сделал... скорость 9600, четности нету, стопбит
> 1, биты данных 8 бит... вот тот кусоче кода, кот. я привел,
> мне покоя не дает... т.е. это как раз установка RTS, но
> че происходит с сигналами управления портом, когда на нем
> висят умные переходники, которые "реализуют аппаратное управление
> направлением передачи"?!
Зависит от умных переходников. RS485 всё таки от rs232 отличается. CTS/RTS там , если память не изменяет нет.
bg8 (2005-12-09 22:23:00) [23]Ну так блин, разобрал конечно, ничего (!) там нету такого, чего бы я не сделал... скорость 9600, четности нету, стопбит 1, биты данных 8 бит... вот тот кусоче кода, кот. я привел, мне покоя не дает... т.е. это как раз установка RTS, но че происходит с сигналами управления портом, когда на нем висят умные переходники, которые "реализуют аппаратное управление направлением передачи"?!
Джо (2005-12-09 22:19:00) [24]Я в этом деле не специалист, но что мешает основательно разобрать ту самую работающую "досовскую программу", особенно на предмет установки параметров работы порта?
bg8 (2005-12-09 22:05:00) [25]А про себя я не хвастаюсь... просто уж давнооо... я вроде как программер... а вот с такими вещами первый раз столкнулся... и не знаю че делать... понимаю, что дело вроде именно в контроле за направлением передачи... как собачка... все понимаю, а сказать не могу...
bg8 (2005-12-09 22:00:00) [26]Вряд ли озвучивание "девайса" поможет Мастерам ответить на вопрос... Но если желаете... Пжалуйста... "Девайс" - импульсный источник высокого напряжения ИПЭИ-60, выдает в импульсе от 20 до 60 кВ, макс. частота следования импульсов 10 Гц, длительность импульса - 15 мс, создан в Институте Прикладной Физики РАН, где я собственно и учусь/работаю. Ну что, легче стало? ))
RS485 позволяет считывать и устанавливать значения внутреннего ЦАП/АЦП, т.е. измерять напряжение на выходе неконтактным( прямым) способом, что позволяет избавиться от всяких высоковольтных шунтов, делителей и пр. А исчо есть такие полезные команды у него как пуск и стоп...
bg8 (2005-12-09 21:54:00) [27]Ну ткнули носом, ну согласен, ну извините))
Джо (2005-12-09 21:49:00) [28]
> [1] bg8 © (09.12.05 21:45)
> Не понимаю, чего в моем вопросе от конференции "начинающим"...
Цитирую текст вверху страницы форумов:
Если Вам не хватает знаний и Вы затрудняетесь четко сформулировать вопрос, просьба размещать его в специальной конференции "для начинающих".
Ваш вопрос, насколько я понял, сводится к словам: "В общем, я отчаялся добиться работы девайса под винду". Ну, и что здесь можно конкретного сказать, если даже "девайс" не озвучен?
bg8 (2005-12-09 21:45:00) [29]Не понимаю, чего в моем вопросе от конференции "начинающим"... Все бы были такими начинающими, как я...