串口发送时的奇怪现象?有经验的看看。 - C++ Builder / Windows SDK/API
我一个朋友,前两天写了一个软件,让我在公司平台上帮忙测试一下。结果发现了一个很奇怪的现象:
在我的电脑和我朋友电脑上测试串口通讯部分都正常,可是一放在公司的一台工控机上运行,问题就来了。电脑第一次启动后运行软件,总是无法通讯,后来通过连接到另一个串口,发现软件发送的全都是0x80 0x00 0x80 0x00之类的乱码。然后关掉软件,随便运行串口调试工具之类的软件向串口发点数据后,我朋友做的那个软件发送数据就正常了。
请问大家是否也遇到过这种问题?我朋友软件里的串口类是他N年前从网上下载的,一直用的很好。没出现过问题。
[解决办法]
不要GetCommState后修改几个参数再Set。
其它程序运行后如果修改了你程序中没修改的那个参数,很可能就会有问题。
把if(!::GetCommState(hComm,&dcb)) return FALSE;去掉,把所有的DCB里的成员都设置一次。要偷懒的话可以考虑用BuildCommDCB,如BuildCommDCB("baud=9600 parity=N data=8 stop=1 rts=tg dtr=on",&dcb);
[解决办法]
typedef struct _DCB { DWORD DCBlength; DWORD BaudRate; DWORD fBinary :1; DWORD fParity :1; DWORD fOutxCtsFlow :1; DWORD fOutxDsrFlow :1; DWORD fDtrControl :2; DWORD fDsrSensitivity :1; DWORD fTXContinueOnXoff :1; DWORD fOutX :1; DWORD fInX :1; DWORD fErrorChar :1; DWORD fNull :1; DWORD fRtsControl :2; DWORD fAbortOnError :1; DWORD fDummy2 :17; WORD wReserved; WORD XonLim; WORD XoffLim; BYTE ByteSize; BYTE Parity; BYTE StopBits; char XonChar; char XoffChar; char ErrorChar; char EofChar; char EvtChar; WORD wReserved1;} DCB, *LPDCB;