我的串口收数为什么是分段读取显示的?

sunny_may 2007-05-15 08:29:43
我编了一个程序,用触发方式让串口自动读取数据,并按行显示到Edit控件中,
运行时 如果发1234567 接收正常,
如果发123456789,就在Edit中显示成了 12345678
9


123456789被分成了2段读取的,看起来是先读取了第一个字节,请问怎么解决这个问题?
...全文
2156 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny_may 2007-05-24
  • 打赏
  • 举报
回复
回毛毛:
我使用API方式编写的串口通讯程序,你的建议我回去再试试,看看能否解决。

回NextMoon:
对于自动接收数据,我是用CVI做的软件,先给串口安装一个回调函数InstallComCallback(...),这个函数的触发方式是串口收到数据就回调里面的读串口数程序。
NextMoon 2007-05-22
  • 打赏
  • 举报
回复
我最近也做这个,遇到比你楼主还要烦的问题,就是连数据都没读到,因为通过串口接的仪器自动会向串口发送数据的,只要协议设置正确的话,请问这个自动接受的代码如何写的,谢谢。
Waiting4you 2007-05-22
  • 打赏
  • 举报
回复
不是"串口读数前,加上延时等待",而是用SetCommTimeouts函数设置串口读写延时,其中的ReadIntervalTimeout表示读取两个字节之间的时间间隔. 如果设置成10ms, 你有一段文章以每9ms的速度发, 那么串口可以一次读取所有的字符. 但是如果中间有两个字符之间差了11ms, 串口就会当作两段读.

另外,这个还和你使用的串口控件的实现有关,有些是有一点读一点的方式, 这种方式就不适合上面的方法.
sunny_may 2007-05-22
  • 打赏
  • 举报
回复
解决措施除了让串口读数前,加上延时等待,而这可能会影响实时性,而且,要选的延时也不能确定,延时长了是实行差,短了读数不全。

还有什么方法能较好解决这个问题么?
Waiting4you 2007-05-19
  • 打赏
  • 举报
回复
想简单一点就把串口的TimeOut设置得长一点,比如50ms.

constantine 2007-05-18
  • 打赏
  • 举报
回复
是啊,我做通信是有协议的,有头有尾,只有接收到完整的帧才处理显示,你这样的很正常的
EagleFew 2007-05-18
  • 打赏
  • 举报
回复
这个问题是正常的!
可以通过设置串口的超时时间等措施进行调整
也就是每个字符之间的发送的返回时间,如果长的话发送的就慢,或者接收的也慢
sunny_may 2007-05-18
  • 打赏
  • 举报
回复
To : constantine(飘遥的安吉儿)

这也正是我想要问的一个问题,如何做通信协议?
我目前只是能用串口收发数据了,可是如果传送数据也需要好的可靠性,所以如果用通信协议,怎么处理数据包呢?比如打包数据,解析数据包,数据包结构,处理方法?感觉很晕

以前没有接触过,请指教一下。
cczlp 2007-05-17
  • 打赏
  • 举报
回复
正常,读取速度比发送的速度快。
sunny_may 2007-05-15
  • 打赏
  • 举报
回复
不好意思,写错了,是MEMO组件中显示分行了。

我发现
同样的程序如果设置断点,再去读,就可以一次读完了,显示也是一行。
我想是不是因为发送的的数据还没有准备好,而读串口函数就已经开始去读了,导致没有能读到所有数据呢??才会留一部分数据在下次读呢???

如果是这样,问题怎么解决呢?
i_love_pc 2007-05-15
  • 打赏
  • 举报
回复
Edit中能显示多行吗?

是不是缓冲区设置的问题

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧