c++ - RS232通讯经常出错

标签 c++ c serial-port

我知道这个问题并不新鲜,可以通过谷歌搜索一些示例代码/类来进行 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 下载的另一个类测试了我的项目。我把代码放在这里供引用

Serial.cpp Serial.h

这就是我如何使此类适应我的代码:

my adaptation

所以,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/

相关文章:

c++ - 如何跳过输入流 C++ 中的前导空格?

c++ - 以下程序中创建的用于 map 初始化的临时变量在哪里

c - msvc中的按位运算符左移与linux gcc不同?

c++ - Qt4 Wrapper 导致段错误

.net - 使用 FTDI FTD2xx_NET 检测正确的设备

c++ - 使用 MFC 的表/网格

c++ - 如何从 std::strings 数组中检索特定元素作为 LPCSTR?

c - for循环计数器中的数组下标运算符

node.js - USB-to-RS485 使用 Nodejs

c# - System.IO.Ports.dll 错误中的 System.TimeoutException