首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

串口发送时的奇怪现象?有经验的看看。该怎么解决

2012-04-07 
串口发送时的奇怪现象?有经验的看看。 - C++ Builder / Windows SDK/API我一个朋友,前两天写了一个软件,让

串口发送时的奇怪现象?有经验的看看。 - 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);
[解决办法]

C/C++ code
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; 

热点排行