社区
Delphi
帖子详情
串口通讯:接收不到完整的数据?
noall
2014-02-09 09:27:34
用mscomm串口控件,
设置接收20个字节时,触发事件,
但有事件触发,但收到的数据不足20个字节。
用BusHound监控查看,发现,是分二段数据还回。。
请问下,这种情况要怎么处理?
:会提示:
...全文
2495
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中
接收
串口
数据
不
完整
、分段的解决方法
最进在串口通信时碰到了一个问题,向485串口发送指定报文,会收到一条关于压力数值的
数据
。但我将其qDebug打印出来却发现
数据
被分成了两部分依次打印,之后通过验证我确定了问题出在readyRead的信号与槽这一部分。 连接函数: connect(my_serialport,&QSerialPort::readyRead,this,&MainWindow::readMyCom); 在槽函数readyRead的入口处加入 qDebug()<<"-"; 可以发现 “-” 连同分段的
串口中怎样
接收
一个
完整
数据
包的解析
这里以串口作为传输媒介,介绍下怎样来发送
接收
一个
完整
的
数据
包。过程涉及到封包与解包。设计一个良好的包传输机制很有利于
数据
传输的稳定性以及正确性。串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的
数据
传输。在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题。 一、根据帧头帧尾或者帧长检测一个
数据
帧 1、帧头+
数据
+校验+帧尾 这是一个典型的方案,但是对帧头与
QT多线程
接收
串口
数据
** QT多线程
接收
串口
数据
** 1.前言 QT多线程的使用,和绝大数人一样,犯了错误(请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it-wrong介绍)。为了解决问题,网上查阅学习了几十篇文章,基本都是错误的使用方法,或者不
完整
,未能给予正确的引导。 为方便后来学习者,少走弯路,于是自己动手写了一下程序,过程不再赘述,只以
完整
的案例进行教学,内部注释较多,可供大家阅读、思考。 2.功能作用 使用多线程,避免上位机软件与单片机等硬件设备高速通讯时
C# SerialPort串口通信发送
接收
,处理
接收
数据
完整
本文介绍C#
串口通讯
,并通过实例讲解使用方法,解决了
数据
接收
不
完整
问题
网口通讯与
串口通讯
(内含代码)
网口通讯与
串口通讯
Delphi
5,943
社区成员
262,943
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章