0

我知道这个问题并不新鲜,可以通过谷歌搜索一些示例代码/类来进行 rs232 通信。但是,现在我已经在使用一个类。但它有时有效,但通常无效。通信刚刚停止阅读所有串行通信概念并调试此代码将花费我大量时间

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

谢谢,

PS:顺便说一句,在我的项目中,我需要经常将一个字符串(char数组)连续或在某些已定义的实例发送到另一个rs232终端。会不会是每次通讯都没有关闭、重新打开RS232/COM句柄造成的?

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

RS232.cpp RS232.hpp RS232_client

编辑01:

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

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

编辑02:

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

串行.cpp 串行 .h

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

我的适应

所以,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."));
4

1 回答 1

0

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

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

感谢您的帮助!

于 2013-06-18T08:01:35.020 回答