社区
Delphi
帖子详情
串口通讯:接收不到完整的数据?
noall
2014-02-09 09:27:34
用mscomm串口控件,
设置接收20个字节时,触发事件,
但有事件触发,但收到的数据不足20个字节。
用BusHound监控查看,发现,是分二段数据还回。。
请问下,这种情况要怎么处理?
:会提示:
...全文
2479
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
Java使用开源Rxtx实现
串口通讯
串口开发
串口通讯
,也称为串行通信,是指
数据
逐位顺序传输的方式,与并行通信相比,
串口通讯
通常需要较少的硬件资源,适合长距离通信且速度相对较慢。在Java中,由于标准API并不直接支持串口操作,因此开发者通常需要依赖像...
VB串口通信源码210个
046、VB
串口通讯
测试源代码,有文本和图形两种端口
数据
观察方式 047、VB
串口通讯
程序,用来跟单片机通讯 048、VB
串口通讯
代码(部分) 049、VB
串口通讯
的参考源程序 050、VB
串口通讯
实例 高精度电压表(24bit) VB源程序 ...
C# SerialPort串口通信发送
接收
,处理
接收
数据
完整
本文介绍C#
串口通讯
,并通过实例讲解使用方法,解决了
数据
接收
不
完整
问题
串口通信(5)-C#串口通信
数据
接收
不
完整
解决方案
本文讲解C#串口通信
数据
接收
不
完整
解决方案。实现满足modbus协议的
接收
数据
实例
Qt串口通信
接收
数据
不
完整
_qt串口
接收
数据
Qt串口通信
接收
数据
不
完整
_qt串口
接收
数据
Delphi
5,943
社区成员
262,943
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章