2015-08-17 236 views
0

這裏是COM口開口部:串行COM端口號@讀

portHandle=CreateFileA(portName, GENERIC_READ|GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); 
if (portHandle == INVALID_HANDLE_VALUE) 
{ 
    return -1; 
} 
COMMCONFIG Win_CommConfig; 
COMMTIMEOUTS Win_CommTimeouts; 
unsigned long confSize = sizeof(COMMCONFIG); 
Win_CommConfig.dwSize = confSize; 
GetCommConfig(portHandle, &Win_CommConfig, &confSize); 
Win_CommConfig.dcb.Parity = 0; 
Win_CommConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE; 
Win_CommConfig.dcb.fOutxCtsFlow = FALSE; 
Win_CommConfig.dcb.fOutxDsrFlow = FALSE; 
Win_CommConfig.dcb.fDtrControl = DTR_CONTROL_DISABLE; 
Win_CommConfig.dcb.fDsrSensitivity = FALSE; 
Win_CommConfig.dcb.fNull=FALSE; 
Win_CommConfig.dcb.fTXContinueOnXoff = FALSE; 
Win_CommConfig.dcb.fInX=FALSE; 
Win_CommConfig.dcb.fOutX=FALSE; 
Win_CommConfig.dcb.fBinary=TRUE; 
Win_CommConfig.dcb.DCBlength = sizeof(DCB); 
if (baudrate != -1) 
{ 
    Win_CommConfig.dcb.BaudRate = baudrate; 
} 
Win_CommConfig.dcb.ByteSize = 8; 
Win_CommTimeouts.ReadIntervalTimeout = 50; 
Win_CommTimeouts.ReadTotalTimeoutMultiplier = 0; 
Win_CommTimeouts.ReadTotalTimeoutConstant = 110; 
Win_CommTimeouts.WriteTotalTimeoutMultiplier = 0; 
Win_CommTimeouts.WriteTotalTimeoutConstant = 110; 
SetCommConfig(portHandle, &Win_CommConfig, sizeof(COMMCONFIG)); 
SetCommTimeouts(portHandle,&Win_CommTimeouts); 
return 0; 

它連接好了,我設法發出一些AT comamnds和回讀OK \ N>響應,上一級的甚至一個協議(OBD2:命令是0100\r)得到了正確的答案。但是,當我嘗試其他命令,例如掃描支持的pid(例如0000\n,0101\n,0202\n等)時,整個事情或者回應我寫給它的任何內容或者只是超時。從超級終端發出相同的命令序列可正常工作。這些串行端口是虛擬模擬端口 - http://com0com.sourceforge.net/。 我錯過了什麼?也許一些閱讀/設置/重新設置一些引腳?自從我上次與RS232混合在一起以來已經有一段時間了...謝謝!

編輯:剛試過https://www.scantool.net/downloads/diagnostic-software/ scantool,它也可以。

回答

0

e.g 0000 \ -N,0101 \ N,0202 \ n

這是問題。最後應該是\ r,而不是\ n。超級終端工作,因爲密鑰會在Windows上插入\ r這裏。可能有些輸入驗證是通過連接的設備完成的,因此即使輸入了錯誤的結束符也可以正常工作。