【发布时间】:2015-11-10 17:11:53
【问题描述】:
这里是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 命令并回读 OK\n> 响应,即使是上层协议之一(OBD2:命令是0100\r)也得到了正确的答案。但是当我尝试其他命令时,例如扫描支持的 pids(例如0000\n、0101\n、0202\n 等),整个事情要么回显我写给它的任何内容,要么只是超时。从超级终端发出相同的命令序列可以正常工作。如果重要,这些串行端口是虚拟模拟端口 - http://com0com.sourceforge.net/。
我错过了什么?也许对某些引脚进行一些读取/设置/重置?自从我上次接触 RS232 以来已经有一段时间了……谢谢!
编辑:刚刚在https://www.scantool.net/downloads/diagnostic-software/ 尝试了扫描工具,它也可以正常工作。
【问题讨论】:
标签: windows winapi serial-port virtual simulation