社区
Delphi
帖子详情
串口通讯:接收不到完整的数据?
noall
2014-02-09 09:27:34
用mscomm串口控件,
设置接收20个字节时,触发事件,
但有事件触发,但收到的数据不足20个字节。
用BusHound监控查看,发现,是分二段数据还回。。
请问下,这种情况要怎么处理?
:会提示:
...全文
2507
19
打赏
收藏
串口通讯:接收不到完整的数据?
用mscomm串口控件, 设置接收20个字节时,触发事件, 但有事件触发,但收到的数据不足20个字节。 用BusHound监控查看,发现,是分二段数据还回。。 请问下,这种情况要怎么处理? :会提示:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BruceLee2020
2014-02-28
打赏
举报
回复
以前搞BCB的时候,用的是 API写的,后来有一天发现,其实这个是网上经典的一个串口的 简单裁剪版本! 现在用delphi, 还搞串口,用的SPComm控件,很好用,也没有出过问题!
Mr Dang
2014-02-26
打赏
举报
回复
设置每接受到1个字节时,触发oncomm事件。 oncomm事件中写: 1、把接到到的数据转换为字符用个全局变量字符串存起来(如0A 0B 1C 这样子存起来)。 2、通过协议的结束标志字符判断此帧有没有结束,没结束就退出。结束了,就置位一个接受完成标志位。 发送数据函数: 1、发送数据. 2、是全局变量接受字符串=‘’ 、接受完成标志位=false. 3、延时3s(如果接受完成标志位置位就退出延时) 注:此处的延时相当于超时时间。//这里很关键 4、判断全局变量接受字符串等,然后处理接收到的数据。
看那山瞧那水
2014-02-19
打赏
举报
回复
用CPORT控件吧,有些控件会把某些字节数据当成特殊控制字符。还有,延时长点,缓冲区大点,可能的话,降低速率试试
「已注销」
2014-02-18
打赏
举报
回复
你应该把触发事件的字节数改为1个,这样每个字节都能处理了,方便很多啊
IDWB
2014-02-18
打赏
举报
回复
串口通讯分两段很正常的现象,现在我都是自己写底层代码,串口当文件读写
wangyang4506
2014-02-13
打赏
举报
回复
MScomm不怎么好控制,我也用过,嫌麻烦,现在用SPCOMM,你那个提示貌似接收数据超过数组定义长度。 20个字节数据分两包返回,可能是线上有干扰,或者通讯线质量有问题,以前也遇到过,或者可以把停止位改了看看会不会好一点。
星際訪客
2014-02-13
打赏
举报
回复
基於掌握度...串口通訊不建議使用現成的控件...最佳的串口通訊方式為多線程+API...說來簡單實作不易...建議塿主花點時間研究一下串口 API 之特性...... 關於 Windows RS-232C 串列通訊經驗談 http://blog.csdn.net/start8588/article/details/10045287
孤独de猫
2014-02-11
打赏
举报
回复
我用的是cnpack的VCL控件里面带RS232串口通信的
noall
2014-02-11
打赏
举报
回复
程序上是没有多大的问题。连续跑几十个小时,也正常。 主要还是硬件受到干扰引起的。偶尔给你抛出个异常就烦人。 只是想要如何从软件上避免去处理。 每一条的协议肯定是有协商好的。 再试试看后二位说的。。
nydns
2014-02-10
打赏
举报
回复
是pc 和单片机通信吗.
mdejtod
2014-02-10
打赏
举报
回复
使用固定的通讯协议,先将数据存到缓冲区中,再判断缓冲区的数据是否为你需要的数据
noall
2014-02-10
打赏
举报
回复
MSComm.RThreshold :=self.OutLen;// RecvCount[add]; //设置接收多少字节开产生oncomm事件 MSComm.InBufferCount:=0;//清空数据 mscomm.output:=senddata; 1、每一次发送之前都有清空,并设置为接收到多少人字节时,为触发。 2、是PC和DSP的通讯 3、发送之后,都有设置延时时间。延时的时间足够发送并回收 4、缓冲区:返回的字节数,不会超过50个字节。所以缓冲区应该是足够的。
xiaoyulier
2014-02-10
打赏
举报
回复
缓冲区一定要清理为0
xiaoyulier
2014-02-10
打赏
举报
回复
是不是设置了时间限制的,在给定的时间内没有接收完全,就断开连接了。在mscomm1.rthread:=20;进行接收。
lhy
2014-02-10
打赏
举报
回复
可能是缓冲区太小。
babydog01
2014-02-10
打赏
举报
回复
楼上几位说的比较全了。 串口通讯会产生多条数据连续接收或接收不完整的情况。可以用一个全局变量来累加接收结果,再判断这个变量是否包含完整数据并做相应处理。
haitao
2014-02-09
打赏
举报
回复
数据到达不一定是完整的 所以最好协议里规定 首2字节是后续字节数,这样就可以一直等待读完这些字节为止
lhy
2014-02-09
打赏
举报
回复
是不是超时了?
noall
2014-02-09
打赏
举报
回复
不是超时了。 是有收到返回的,但个数明显不对。 奇怪的是。为什么第一次收到没达到个数,也会触发。 会提示: variant or safe array index out of bounds
Qt中
接收
串口
数据
不
完整
、分段的解决方法
本文介绍了在串口通信中遇到的
数据
分包问题及其解决方案。通过使用定时器延时读取的方式,确保
接收
到
完整
的
数据
帧。
串口中怎样
接收
一个
完整
数据
包的解析
本文详细介绍了串口环境下发送和
接收
完整
数据
包的方法,包括帧头、帧尾、帧长检测,以及
数据
校验算法的应用。同时,讨论了根据
接收
超时来判断
数据
包的实现方式,并提供了优化通讯效率的建议。
QT多线程
接收
串口
数据
本文围绕QT多线程
接收
串口
数据
展开。作者曾在QT多线程使用上犯错,网上资料多有误或不
完整
。为助后来者,给出
完整
案例教学。使用多线程可避免上位机与硬件高速通讯时界面假死、丢包,还封装了串口。提供
完整
代码,编译环境为QT5.8.0,Qt Creator4.2.1,并介绍基本步骤。
C# SerialPort串口通信发送
接收
,处理
接收
数据
完整
本文详细介绍了串口通信的定义,包括并行通信和串行通信的区别,同步通信与异步通信的特性。讨论了串口协议如RS-232、RS-422、RS-485,以及.NET Framework 2.0中C#的SerialPort类,探讨了如何处理串口通信中
接收
数据
不
完整
的问题。
网口通讯与
串口通讯
(内含代码)
本文详细对比网口(TCP/UDP)与串口(RS232/RS485)通讯的技术差异,涵盖传输速率、距离、连接方式和
数据
格式;并分别给出基于Socket的网口通讯(客户端/服务器)和Windows API串口操作(Open/Configure/Read/Write)的
完整
实现步骤与关键代码要点;同时推荐NetAssist和UartAssist两款调试工具。
Delphi
5,943
社区成员
262,942
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章