Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   помогите с управлением COM-портом (http://forum.oszone.net/showthread.php?t=185020)

Demka_DV 09-09-2010 10:49 1491605

помогите с управлением COM-портом
 
Очень хотелось попробовать работу Autoit c виртуальным или физическими COM портами.
Я взял CommMG.au3 и commg.dll указанных на страничке http://www.autoitscript.com/forum/in...howtopic=45842
ссылка (http://www.mosaiccgl.co.uk/AutoItDow...et=COMMGv2.zip)
Пишу утилиту обращения PC к ECU автомобиля по протоколу ISO 9141-2 с подключенным преобразователем USB-K-Line

После подключения к разъему диагностики автомобиля и хост-компьютеру происходит инициализации, в виде специальной посылки. Это является простым методом для определения факта подключения.
Иначе называется ('Send 0x33 (00110011) at rate of 5 baud (LSB) with a Start Bit and a Stop bit)
после отправки 0x33 на скорости 5 baut, затем требуется переключить скорость работы порта на 10400 baud?, после чего начинается обмен данными с ECU автомашины
Вопрос.

в CommMG.au3 имеется функция _CommSendBreak(), вот описание:
;================================================================================================
; Function Name: SendBreak($iDowTime,$iUpTime)
; NB Simulates the break signal used by some equipment to indicate the start of a sequence
; Not tested so might Not work. Any feedback welcome - PM martin on Autoit forum

; Description: sets the TX line low for $iDowTime, then sets it high for $iUpTime

; Parameters: $iDowTime - integer: the number of ms to hold the TX line down
; $iUpTime - integer: the number of ms to hold the line up for before returning
; if $iDowTime or $iUpTime is zero then does nothing and returns
; Returns: on success returns 1
; on failure returns 0 and sets @error to
; = 1 if one of params is zero
; = 2 1 unable to use the DLL file,
; = 3 unknown "return type" from dll
; = 4 "function" not found in the DLL file.

; Notes : Not tested!
;================================================================================================
функция позволяет задавать длительность перевода линии Tx в состояние (0) или (1)....подскажите как мне эмулировать передачу данных (0x33) на скорости 5 baud..
длительность импульсов нашел в инернете..порядка 200 ms. , если я все правильно понял, то эмуляция означает следующее...
'Send 0x33 (00110011) at rate of 5 baud (LSB) with a Start Bit and a Stop bit

'Send Startbit
Set K line low (0)
Pause 200ms

'Now to send out 0x33
'Send out bit0
Set K line high (1)
pause 200ms
'Send out bit1
Set K line low (1)
pause 200ms
'Send out bit2
Set K line low (0)
pause 200ms
'Send out bit3
Set K line low (0)
pause 200ms
'Send out bit4
Set K line low (1)
pause 200ms
'Send out bit5
Set K line low (1)
pause 200ms
'Send out bit6
Set K line low (0)
pause 200ms
'Send out bit7
Set K line low (0)
pause 200ms

'Send Stopbit
Set K line high (1)
Pause 200ms


можно ли это программно организовать?
как вариант может поставить перемычку на DTR и использовать функцию _CommSetDTR()
очень жду ваших решений..

привожу лог работы порта из другой рабочей программы
COM port is opened
In/out queue size 1024/512
Purge the serial port: RXABORT, RXCLEAR, TXABORT, TXCLEAR
Set timeouts: ReadInterval=-1, ReadTotalTimeoutMultiplier=0, ReadTotalTimeoutConstant=0, WriteTotalTimeoutMultiplier=0, WriteTotalTimeoutConstant=5000
Baud rate 19200
RTS off
DTR on
Data bits=8, Stop bits=1, Parity=None
Set chars: Eof=0x1A, Error=0x00, Break=0x00, Event=0x00, Xon=0x11, Xoff=0x13
Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(), XonLimit=256, XoffLimit=256
Baud rate 10400
RTS off
DTR on
Data bits=8, Stop bits=1, Parity=None
Set chars: Eof=0x1A, Error=0x00, Break=0x00, Event=0x00, Xon=0x11, Xoff=0x13
Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(), XonLimit=256, XoffLimit=256
Purge the serial port: RXABORT, RXCLEAR
Break on
Break off
Break off
Break on
Break on
Break off
Break off
Break on
Break on
Break off

U (0x55)
ў (0xA2)
ў¦ (0xA2A6)
Baud rate 10400
RTS off
DTR on
Data bits=8, Stop bits=1, Parity=None
Set chars: Eof=0x1A, Error=0x00, Break=0x00, Event=0x00, Xon=0x11, Xoff=0x13
Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(), XonLimit=256, XoffLimit=256

жирным шрифтом выделил интересующий вопрос

Creat0R 09-09-2010 21:31 1492062

Код заключайте в соответствующие теги.

Demka_DV 10-09-2010 09:32 1492313

Вы безусловно правы в части оформления, только код я не отправлял, представил только логическую схему и лог порта, а основной вопрос был по функциям CommMG.au3 и организации отправки значения 0x33 на скорости 5 baut.

Creat0R 10-09-2010 10:11 1492332

Цитата:

Цитата Demka_DV
код я не отправлял »

А это что:

Цитата:

'Send Startbit
Set K line low (0)
Pause 200ms

....
?

Не важно код AutoIt'а это или нет, длинный текст, например тот же лог нужно заключать в тег кода. Также можно помещать в цитату, либо в тег more. Иначе пропадает желаение читать ваш пост, всё перемешано на первый взгляд, и разбирать ну никак не хочется (это же для вас не в пользу, те кто захотят помочь только из за этого могу выйти из темы и пойти дальше по своим делам :) ).


Время: 22:15.

Время: 22:15.
© OSzone.net 2001-