社区
Delphi
帖子详情
串口通讯:接收不到完整的数据?
noall
2014-02-09 09:27:34
用mscomm串口控件,
设置接收20个字节时,触发事件,
但有事件触发,但收到的数据不足20个字节。
用BusHound监控查看,发现,是分二段数据还回。。
请问下,这种情况要怎么处理?
:会提示:
...全文
2381
19
打赏
收藏
串口通讯:接收不到完整的数据?
用mscomm串口控件, 设置接收20个字节时,触发事件, 但有事件触发,但收到的数据不足20个字节。 用BusHound监控查看,发现,是分二段数据还回。。 请问下,这种情况要怎么处理? :会提示:
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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源程序 ...
Qt串口通信
接收
数据
不
完整
_qt串口
接收
数据
Qt串口通信
接收
数据
不
完整
_qt串口
接收
数据
C# SerialPort串口通信发送
接收
,处理
接收
数据
完整
本文介绍C#
串口通讯
,并通过实例讲解使用方法,解决了
数据
接收
不
完整
问题
Unity 串口
接收
的报文不
完整
?处理方式在这
Unity
串口通讯
接收
完整
报文并处理
串口通讯
Read()函数的处理解决问题的过程对Read()函数的应用弊端结束
串口通讯
Unity 中的
串口通讯
和C#的处理方式基本一致, Serial.Read(); 可以读取缓存区中的十六进制数 Serial...
Delphi
5,930
社区成员
262,936
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章