Demka_DV
09-09-2010, 10:49
Очень хотелось попробовать работу Autoit c виртуальным или физическими COM портами.
Я взял CommMG.au3 и commg.dll указанных на страничке http://www.autoitscript.com/forum/index.php?showtopic=45842
ссылка (http://www.mosaiccgl.co.uk/AutoItDownloads/confirm.php?get=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
жирным шрифтом выделил интересующий вопрос
Я взял CommMG.au3 и commg.dll указанных на страничке http://www.autoitscript.com/forum/index.php?showtopic=45842
ссылка (http://www.mosaiccgl.co.uk/AutoItDownloads/confirm.php?get=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
жирным шрифтом выделил интересующий вопрос