Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

работа с портом(232) через DLL и COM .Почему???   Найти похожие ветки 

 
Talla2k ©   (2004-04-26 17:06) [0]

Проблема такая:
в программе необходимо обращаться к порту(232) через мою dll и через вражеский COM обьект.
Написал.Работает,НО!!!
если после работы с вражеским COM обьектом я вызываю свою DLL,то не приходит ничего...(из порта 232)
Причем,COM обьект после работы закрываю,более того PortMon тоже говорит,что порт(232) закрывается как после работы COM обьекта
так и после вызова моей DLL.
Вот,даже решил выложить мониторинг порта (может так понятней будет...)

ЭТО ЧЕРЕЗ ВРАЖЕСКИЙ COM-Обьект
IRP_MJ_CREATE                             Options: Open
IOCTL_SERIAL_SET_QUEUE_SIZE InSize: 1024 OutSize: 4096
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_SET_BAUD_RATE Rate: 38400
IOCTL_SERIAL_CLR_RTS
IOCTL_SERIAL_CLR_DTR
IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
IOCTL_SERIAL_SET_CHAR   EOF:0 ERR:0 BRK:0 EVT:d XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW Shake:80000000 Replace:80000003 XonLimit:512 XoffLimit:20
IOCTL_SERIAL_SET_TIMEOUTS RI:25 RM:0 RC:5000 WM:0 WC:0
IOCTL_SERIAL_SET_DTR
IOCTL_SERIAL_SET_RTS
IOCTL_SERIAL_PURGE              Purge: TXABORT
IOCTL_SERIAL_PURGE              Purge: TXCLEAR RXCLEAR
IOCTL_SERIAL_GET_COMMSTATUS
IRP_MJ_READ                            Length 6: 1B 61 A0 1B 61 80
IRP_MJ_READ                            Length 3: 1B 61 80
IRP_MJ_WRITE                            Length 1: 11
IRP_MJ_WRITE                            Length 2: 1B 41
IOCTL_SERIAL_PURGE             Purge: TXABORT
IOCTL_SERIAL_PURGE             Purge: TXCLEAR RXCLEAR
IOCTL_SERIAL_GET_COMMSTATUS
// ну...там,дальше обмен пошел
IRP_MJ_CLEANUP
IRP_MJ_CLOSE

А ЭТО ВЫЗОВ МОЕЙ DLL,после работы вражеского COM-обьекта
(напомню,если не вызывать вражеский COM-обьект,то все работает...)
IRP_MJ_CREATE                         Options: Open
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_SET_BAUD_RATE          Rate: 38400
IOCTL_SERIAL_CLR_RTS
IOCTL_SERIAL_CLR_DTR
IOCTL_SERIAL_SET_LINE_CONTROL     StopBits: 1 Parity: NONE WordLength: 8
IOCTL_SERIAL_SET_CHAR   EOF:0 ERR:0 BRK:0 EVT:d XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW         Shake:80000000 Replace:80000003 XonLimit:2048 XoffLimit:512
IOCTL_SERIAL_SET_TIMEOUTS       RI:-1 RM:0 RC:0 WM:0 WC:0
IOCTL_SERIAL_SET_WAIT_MASK          Mask: RXFLAG RLSD
IOCTL_SERIAL_PURGE                  Purge: TXCLEAR
IOCTL_SERIAL_PURGE                  Purge: RXCLEAR
IOCTL_SERIAL_SET_TIMEOUTS      RI:0 RM:25 RC:100 WM:0 WC:0
IOCTL_SERIAL_PURGE                       Purge: TXCLEAR
IOCTL_SERIAL_PURGE                       Purge: RXCLEAR
IOCTL_SERIAL_PURGE                       Purge: TXABORT
IRP_MJ_READ                                     Length 0:  
// вот,ничего не приходит...
IRP_MJ_READ                                     Length 0:
IRP_MJ_READ                                     Length 0:
IRP_MJ_READ                                     Length 0:
// ну ... и так далее
IRP_MJ_CLEANUP
IRP_MJ_CLOSE

Не могу понять в чем дело...
Вроде и сброс делаю в начале работы (PurgeComm) и закрываю все(closehandle)


 
tesseract ©   (2004-04-26 19:08) [1]

Судя по всему вражеский объект handle не осовобождает. А логи, если не вызывать объект отличаются???? Может он меняет настройки порта. - У тебя например не выставлен размер буфера приёма/передачи.


 
Talla2k ©   (2004-04-26 20:21) [2]

>Судя по всему вражеский объект handle не осовобождает.
А как проверить???Сказать честно,ДОЛЖЕН освобождаться.Ведь все действия у меня в потоке и когда поток заканчивается,то он все сам мочит...
>А логи, если не вызывать объект отличаются????
Не понял вопроса.
>У тебя например не выставлен размер буфера приёма/передачи.
Не,это не из-за этого.100%


 
Jack128 ©   (2004-04-26 20:40) [3]


> А как проверить???
у тя в dll порт открывается? Если да, то вражий ком объект порт отпускает..


 
Talla2k ©   (2004-04-26 20:44) [4]

>у тя в dll порт открывается? Если да, то вражий ком объект порт отпускает..
Да,конечно...Ведь я даже лог монитора выложил.


 
Jack128 ©   (2004-04-26 21:02) [5]


> Talla2k ©   (26.04.04 20:44)
угу - туплю.

а асцилогрофом не пытался проверить реально в порт приходит что нить?


 
Talla2k ©   (2004-04-26 21:58) [6]

Короче,всем спасибо разобрался.
Оказывается ВРАЖЕСКИЙ COM обьект посылал XOFF и соответственно устройство молчало.Сделал XON из своей DLL и все заработало.

НО,рву себе волосы на лоб... ПОЧЕМУ,PORTMON промолчал???Ведь если посылается XOFF ,то при повторном вызове COM-обьекта ОН ПРОСТО ОБЯЗАН послать XON что-бы устройство разморозилось.(а он не посылает)



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
4-1082126253
Islander
2004-04-16 18:37
2004.05.30
Какое сообщение поступает форме, когда она получает фокус?


7-1083062572
nv_
2004-04-27 14:42
2004.05.30
Как предотвратить повторные запуски ДОС программ?


6-1081443598
Coder
2004-04-08 20:59
2004.05.30
Indy


1-1084967551
infom
2004-05-19 15:52
2004.05.30
Может кто встречал такое дополнение к Delphi


14-1084368392
a3a3ello
2004-05-12 17:26
2004.05.30
delphi и XP