C# 串口如何一次性接收完数据?
具体问题是:下位机(单片机)分不定次数(间隔1s,每次数据长度还可能不一样)发给电脑C#串口软件数据,我是想一次性接收完,再处理数据并显示。问题是在本人电脑上没怎么设置,...
具体问题是:下位机(单片机)分不定次数(间隔1s,每次数据长度还可能不一样)发给电脑C#串口软件数据,我是想一次性接收完,再处理数据并显示。问题是在本人电脑上没怎么设置,效果就是一次性接收完,再引发串口处理事件的;而把软件复制到其他电脑后,就出现了分两次才接收完,不知道为什么会这样。高手们,有什么好的解决方法吗?
展开
4个回答
展开全部
c#是使用流来处理串口的,所以不是存在准确的间隔时间的。串口驱动并不一定能及时引发DataReceived事件。而且串口的不确定性也不能用时间间隔作为数据的分隔。下位机应使用特定的通信协议来传送数据。电脑则使用默认的每来一个字节触发一次DataReceived,但这个触发时机也是不准的,不可能真的每来一个字节就会触发一次DataReceived。当收来下位机发来的起始字符就说明收数开始,可一直收到结束字符。使用串口一定要对数据进行CRC校验。通常来这样设计通信协议:起始字符 数据 结束字符 CRC校验码。校验正确后就可对数据进行处理。
展开全部
对串口而言,不存在完整数据长度,都是以Byte为单位;一般来说,通常是透过时间跟固定数量来进行接收动作。(可能要看各PC的OS或Driver的设置情况)
通常在串口处理上,要确认接收数据完整,是在PC软件上进行接收、保存跟判断的动作,在完整收到後,才进行显示或处理。
通常在串口处理上,要确认接收数据完整,是在PC软件上进行接收、保存跟判断的动作,在完整收到後,才进行显示或处理。
参考资料: 自己
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
COM1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(COM1_DataReceived1);(添加event handler)
单片机一次发过来有多少你收多少
private delegate void SetTextDeleg(string text);
然后通过mutlithread来进行数据处理
我的建议是 你也可以用一个arraylist保存起来
建立一个timer来检查arraylist的count 当count不变后进行处理也行
最好是有明显的结束信号。
单片机一次发过来有多少你收多少
private delegate void SetTextDeleg(string text);
然后通过mutlithread来进行数据处理
我的建议是 你也可以用一个arraylist保存起来
建立一个timer来检查arraylist的count 当count不变后进行处理也行
最好是有明显的结束信号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个只能通过软件对你串口数据包进行截取分析。然后进行软件调试才能知道问题。可能是串口信号问题。也可能是你截获的时候没有对信号波段设置吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询