串口发送时的奇怪现象?有经验的看看。
我一个朋友,前两天写了一个软件,让我在公司平台上帮忙测试一下。结果发现了一个很奇怪的现象:
在我的电脑和我朋友电脑上测试串口通讯部分都正常,可是一放在公司的一台工控机上运行,问题就来了。电脑第一次启动后运行软件,总是无法通讯,后来通过连接到另一个串口,发现软件发送的全都是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;