rs232通信经常产生错误

时间:2013-06-16 14:44:00

标签: c++ c serial-port

我知道这个问题不是新问题,可以通过谷歌搜索一些示例代码/类来进行rs232通信。 但是,现在我已经在上课了。但它有时有效,但往往不行。沟通就此停止 我需要花费大量时间来阅读所有串行通信概念并调试此代码

我能从SO那里得到一些帮助吗?

谢谢,

PS:顺便说一下,在我的项目中,我需要经常将字符串(char数组)连续地或在某些已定义的实例上发送到另一个rs232终端。 错误是由于没有关闭,每次通信时重新打开RS232 / COM句柄引起的吗?

拜托,我已经包含了我的代码

RS232.cpp RS232.hpp RS232_client

Edit01:

RS232_client是在另一侧写的代码。我的一面是使用win7的PC,项目是用MSVS2008编译的

关于我的代码中的错误,有时当我调用“int RS232 :: Write(double * joints)”时,它会引发错误并且传输停止,在PC端没有任何显示

Edit02:

正如@Chris Stratton所说,我的问题可能来自糟糕的写入rs232类而没有必要的检查。所以我用从CodeProject CSerial下载的另一个类来测试我的项目。我把代码放在这里供参考

Serial.cpp Serial.h

这就是我将这个类改编为我的代码的方法:

my adaptation

因此,PC端的过程是相同的,即发送一个字符串,等待读取's'或'S',然后发送一个“q \ r \ n”进行退出。

对于上面3步这个新代码,我可以执行第1步确定,但是对于第2步,它会挂起,好像没有(读)事件被引发

        // Wait for an event
        lLastError = serialPort.WaitEvent();   // it waits here forever!!!!
        if (lLastError != ERROR_SUCCESS)
            ShowError(serialPort.GetLastError(), _T("Unable to wait for a COM-port event."));

1 个答案:

答案 0 :(得分:0)

我终于可以拥有一个RS232模块,可以摆脱奇怪的突然停止。在这里,我上传了新版RS232.cpp

两个版本之间唯一不同的是新的RS232_open(),我不使用GetCommState。相反,配置由BuildCommDCBA使用设置字符串baudr

设置

感谢SO的帮助!