Форум: "WinAPI";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизРабота с TApdComPort(Async Professional) и с RS485... Найти похожие ветки
← →
Kolan © (2006-07-25 17:45) [0]Здравствуйте,
Проделал эксперимент.
1. Создал новый проект в D7.
2. КинулTApdComPort
.
3. Поставил RS485 mode = True.
4. И кнопку. При нажатии кнопки открывается порт.
FPort.Open := True;
5. Слежу за всем шпионом.
Ситуация такая при нажатии на кнопку, те при открытии порта начинается чтение(Rx), те компонент пытается читать из порта...
Хотелось бы понять как заставить его не делать этого....
Только как?
Исходники компонента есть...
← →
Германн © (2006-07-25 17:58) [1]
> Ситуация такая при нажатии на кнопку, те при открытии порта
> начинается чтение(Rx), те компонент пытается читать из порта.
> ..
>
> Хотелось бы понять как заставить его не делать этого....
>
> Только как?
Не открывать порт. Другого способа нет. А в исходниках не разберешься.
← →
Kolan © (2006-07-25 18:02) [2]
> Другого способа нет
Точно?
Так а что он там делает?...
Вообще-то проблемма оч. серьезная.. Есть программа, которая работает с портом. Но с 232 нужно сделать на 485... Какие еще есть варианты кроме написания собств. драйвера, и использования этого компонента......
← →
GanibalLector © (2006-07-25 18:42) [3]А какая разница 232 или 485 ??? CreateFile м вперед
← →
Kolan © (2006-07-25 18:44) [4]Да да а ртс установить :)
← →
Германн © (2006-07-25 21:18) [5]
> Какие еще есть варианты кроме написания собств. драйвера,
> и использования этого компонента......
В NT системах можно попробовать задействовать флаг RTS_CONTROL_TOGGLE. Но там тоже не так всё просто.
> при открытии порта начинается чтение(Rx), те компонент
> пытается читать из порта...
А с чего ты это взял? Компонент напрямую не читает из порта. Он берет данные с драйвера, а драйвер уже читает Rx. Если на Rx ничего не передаётся, то и у драйвера ничего нет.
← →
Kolan © (2006-07-25 23:04) [6]
> можно попробовать задействовать флаг RTS_CONTROL_TOGGLE
Можно, и там все просто :), да только он не работает.....не реализован.
> А с чего ты это взял?
Шпион показывает...
Я в состоянии написать простенький компонент для работы с портом(и уже это сделал). Вот с 485 затык...
Ессно мой компонент при октытии порта(по данным шпиона) ни че не читает..
← →
Германн © (2006-07-26 00:54) [7]
> > можно попробовать задействовать флаг RTS_CONTROL_TOGGLEМожно,
> и там все просто :), да только он не работает.....не реализован.
>
В NT-линейке он реализован, но, имхо, насколько я знаю от других людей, есть проблема с буфером FIFO микросхемы COM-порта.
> > А с чего ты это взял?Шпион показывает...
А вот тут самое главное! Что именно "шпион" показывает? Насколько помню, а дело было довольно-таки давно, ПортМон от Руссиновича показывал очень частые проверки "состояния порта". Это весьма "приблизительное" утверждение, но вот тут более подробное разъяснение из хэлпа:
The Windows communication API provides two methods to check for received data and line/modem status changes: API calls and an event word. The event word is maintained by the Windows communications driver. As data is received or line/modem status changes occur, the driver sets bits in the event word. The application can check the bits to determine if any communication events occurred. If so, the application can make the appropriate API call to clear the event word and retrieve the data or the new line/modem status values.
Windows also provides API calls to retrieve the same status information provided by the event word but the API calls are slower. Async Professional uses the event word by default for the fastest possible performance. Unfortunately, there is at least one communication driver (WRPI.DRV, included with some U.S. Robotics modems) that doesn"t appear to support the event word. For this and similar drivers, UseEventWord must be set to False before Async Professional will receive data.
А в контексте сабжа скажу, что эта активность по чтению "статусов" COM-порта просто необходима, если нужно обеспечить правильное переключение RTS в режиме RS485 для любой ОС!
Но! Во-первых, нет, имхо, никакой "головной боли" от этой активности. Есть у меня тестовая программа активно работающая с внешним устройством по стандарту RS485. В ней используется TApdComPort и нет никаких претензий!
Во-вторых. Уверен ли ты, что тебе именно нужен режим с переключением направления передачи по RTS? Это ведь тоже не есть "общепринятый стандарт"!
← →
GanibalLector © (2006-07-26 01:01) [8]> да только он не работает.....не реализован.
Как так? А структуру DCB переписал? Она ж в "генофонде" не полная.
З.Ы. Google- Группы - "Delphi 485 CreateFile" (много интересного)
← →
Kolan © (2006-07-26 01:14) [9]
> Уверен ли ты, что тебе именно нужен режим с переключением
> направления передачи по RTS? Это ведь тоже не есть "общепринятый
> стандарт"!
Да точно.
> что эта активность по чтению "статусов" COM-порта просто
> необходима
Возможно этого я не знаю..
> никакой "головной боли" от этой активности
Проблема то в чем. По RS232 с мною писаными объектами все работает.. Далее для перехода к 485 использовал все тоже самое, что и раньше но с TApdComPort. По непонятным причинам стало работать плохо...
Например через опр время InBufferUsed(показаывает сколько байт принято) возврашает всегда 0 хотя данные сыпятся, обмен идет....
Я и незнаю куда копать.. Единственное отличие - это постоянно горящий "светодиод" Rx в шпионе...
PS
Кста шпион оч. хороший LGComSpy++ ниразу не подвел....
PPS
Проблемма кста только с чтение с записью в порт все ок....может я не так пользуюсь компонентом?
Как делаю:
ПроверяюInBufferUsed
если что-то есть, тоGetChar
"ом илиGetBlock
"ом вычитываю....
← →
Kolan © (2006-07-26 01:15) [10]
> Delphi 485 CreateFile"
Чет ниче не нашел.... ткни, а :)
← →
Германн © (2006-07-26 01:51) [11]
> Проблемма кста только с чтение с записью в порт все ок..
> ..может я не так пользуюсь компонентом?
OnTrigeerAvail правильно пользуешь? И пользуешь ли вообще?
← →
Kolan © (2006-07-26 11:01) [12]
> И пользуешь ли вообще?
Не не использую вообще. С самим компонентом не очень разобрался...
Пользуюсь такLength := FPort.InBufferUsed;
for I := 1 to Length do
C := FPort.GetChar;
end;
Ну и ли без цикла сGetBlock
.
← →
Kolan © (2006-07-26 11:11) [13]Прочел про
OnTrigeerAvail
не понял когда оно вызывается...
Мне бы хотелось как только хоть что-то пришло в порт прочитать это все.
А там вроде:
Defines an event handler that is called whenever a certain amount of serial input data is available for processing
А где пройти краткий лик без по компоненту... Может объясните здесь...
← →
Kolan © (2006-07-26 11:43) [14]
> Может объясните здесь
Что мне надо:
Как тольто пришли данные в порт отдать их все мне.. и все.
← →
Kolan © (2006-07-26 12:29) [15]
> А в контексте сабжа скажу, что эта активность по чтению
> "статусов" COM-порта просто необходима, если нужно обеспечить
> правильное переключение RTS в режиме RS485 для любой ОС
Кстати если режим 485 не включать, все равно читает...
← →
Германн © (2006-07-26 13:03) [16]
> Что мне надо: Как тольто пришли данные в порт отдать их
> все мне.. и все.
Как только придут данные в порт, так вызывется обработчик ApdComPort1TriggerAvail(CP: TObject; Count: Word), где Count как раз количество байт считанных из порта. Вот в этом обработчике и вызывай GetChar или GetBlock.
Ей богу, по-моему в справке всё это хорошо описано и примеров навалом!
← →
Kolan © (2006-07-26 19:48) [17]
> Германн © (26.07.06 13:03) [16]
Все благодарю разабрался.. Шас буду делать.. :)
> Ей богу
Ну ладно уж... Когда не знаещшь что искать, то трудно найти..
Благодарю.
← →
Kolan © (2006-07-26 20:27) [18]Вроде получилось. Завтра с устройством проверю.
Эээхх узнать бы как в Async сделана поддержка 485 и сделать сомому......
← →
tesseract © (2006-07-26 22:12) [19]> [18] Kolan © (26.07.06 20:27)
> Эээхх узнать бы как в Async сделана поддержка 485 и сделать
> сомому......
Павел Агуров "Последовательные интерфейсы ПК. Практика программирования
← →
GanibalLector © (2006-07-26 23:32) [20]2 tesseract © (26.07.06 22:12) [19]
>Павел Агуров "Последовательные интерфейсы ПК. Практика программирования
Там очень скудно. Буквально 3 страницы :(
← →
tesseract © (2006-07-26 23:34) [21]> [20] GanibalLector © (26.07.06 23:32)
да вроде хватает.
← →
Германн © (2006-07-27 00:20) [22]
> Эээхх узнать бы как в Async сделана поддержка 485 и сделать
> сомому......
Ты сам писАл, что 5. Слежу за всем шпионом.
Ну так если это PortMon от Руссиновича или что-то подобное, то в его логе ты увидишь, что именно "Async" опрашивает и какими функциями для разных ОС, чтобы вовремя отловить "момент переключения" направления передачи. Ну так вперед! Проанализируй лог, пойми что для чего и зачем, и сделай сам такое же. Если займешься этим "основательно", то рано или поздно сможешь "сделать сомому", или даже лучше! Чем Ч. не шутит пока Б. спит. :-)
← →
Kolan © (2006-07-27 19:18) [23]
> Германн © (27.07.06 00:20) [22]
>
>
Да точно копать буду тк уже 2 проект пришлось на RS422 переделать(аппаратную часть). Благо это тестовые образцы.....
← →
tesseract © (2006-07-27 21:13) [24]> [23] Kolan © (27.07.06 19:18)
А чем он так сильно отличается? Вроде только уровнем синала.
← →
Германн © (2006-07-27 23:55) [25]
> tesseract © (27.07.06 21:13) [24]
Одно из двух. То ли кто-то что-то не так сказал, то ли кто-то кого-то не понял. :-)
← →
Германн © (2006-07-27 23:58) [26]Блин опять промахнулся. Нажал "Добавить" вместо ">". :-(
> tesseract © (27.07.06 21:13) [24]
В дополнение к [25] - Но уж точно не
> уровнем синала
, имхо.
← →
tesseract © (2006-07-28 10:11) [27]
> Германн © (27.07.06 23:58) [26]
Да это я перерабтал. Тыкаем их как удлиннители на Rs-232, дешевле чем rs-485 выходит.
← →
Kolan © (2006-07-29 00:19) [28]
>
> А чем он так сильно отличается? Вроде только уровнем синала.
>
Ну работать с множеством устройств не получится,
проводов 2 раза больше,
на счет длинны линии не уверен, кажется длинная не получится..
... А главное ТЗ.
А для программиста как раз ничем :)
← →
Германн © (2006-07-29 01:03) [29]
> Ну работать с множеством устройств не получится,
> проводов 2 раза больше,
> на счет длинны линии не уверен, кажется длинная не получится.
> .
>
> ... А главное ТЗ.
Ну хоть ты скажи между чем и чем происходит сравнение! А то я уже ничего не понимаю!
Работаю с "множеством устройств" и по RS232 и по RS485-422. Проводов, да разное количество (в некоторых случаях). Длина линии, ну тут свои особенности. Стандарты - это одно, реализация - это другое.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.046 c