我知道这个问题并不新鲜,可以通过谷歌搜索一些示例代码/类来进行 rs232 通信。 但是,现在我已经在使用一个类了。但有时它会起作用,但很多时候却不起作用。通讯就停止了 我需要花费大量时间来阅读所有串行通信概念并调试此代码
我可以向SO寻求帮助吗?
谢谢
PS:顺便说一句,在我的项目中,我需要频繁地连续或在某些定义的实例中将字符串(字符数组)发送到另一个rs232终端。 是否是每次通讯时没有关闭、重新打开RS232/COM句柄导致的错误?
拜托,我已经包含了我的代码
RS232.cpp RS232.hpp RS232_client
编辑01:
RS232_client是对方写的代码。我这边是win7的PC,项目是用MSVS2008编译的
关于我的代码中的错误,有时当我调用“int RS232::Write(double* junction)”时,它会引发错误并且传输停止,在PC端什么也不显示
编辑02:
正如 @Chris Stratton 所建议的,我的问题可能是由于未经必要检查而写得不好的 rs232 类造成的。因此,我使用从 CodeProject CSerial 下载的另一个类测试了我的项目。我把代码放在这里供引用
这就是我如何使此类适应我的代码:
所以,PC端的过程是相同的,即发送一个字符串,等待读取's'或'S',然后发送一个“q\r”退出。
对于使用此新代码的上述 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."));
最佳答案
我终于可以拥有一个 RS232 模块,可以摆脱奇怪的突然停止的情况。这里我上传新版本RS232.cpp
两个版本之间唯一的区别是在 new RS232_open() 中,我不使用 GetCommState。相反,该配置由 BuildCommDCBA 使用设置 baudr 的字符串来设置
感谢SO的帮助!
关于c++ - RS232通讯经常出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134457/