C# 串口如何一次性接收完数据?

具体问题是:下位机(单片机)分不定次数(间隔1s,每次数据长度还可能不一样)发给电脑C#串口软件数据,我是想一次性接收完,再处理数据并显示。问题是在本人电脑上没怎么设置,... 具体问题是:下位机(单片机)分不定次数(间隔1s,每次数据长度还可能不一样)发给电脑C#串口软件数据,我是想一次性接收完,再处理数据并显示。问题是在本人电脑上没怎么设置,效果就是一次性接收完,再引发串口处理事件的;而把软件复制到其他电脑后,就出现了分两次才接收完,不知道为什么会这样。高手们,有什么好的解决方法吗? 展开
 我来答
ansenyou
2013-01-21 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.1万
采纳率:8%
帮助的人:7993万
展开全部
c#是使用流来处理串口的,所以不是存在准确的间隔时间的。串口驱动并不一定能及时引发DataReceived事件。而且串口的不确定性也不能用时间间隔作为数据的分隔。下位机应使用特定的通信协议来传送数据。电脑则使用默认的每来一个字节触发一次DataReceived,但这个触发时机也是不准的,不可能真的每来一个字节就会触发一次DataReceived。当收来下位机发来的起始字符就说明收数开始,可一直收到结束字符。使用串口一定要对数据进行CRC校验。通常来这样设计通信协议:起始字符 数据 结束字符 CRC校验码。校验正确后就可对数据进行处理。
johnwanz
推荐于2016-05-17 · TA获得超过781个赞
知道小有建树答主
回答量:716
采纳率:80%
帮助的人:232万
展开全部
对串口而言,不存在完整数据长度,都是以Byte为单位;一般来说,通常是透过时间跟固定数量来进行接收动作。(可能要看各PC的OS或Driver的设置情况)

通常在串口处理上,要确认接收数据完整,是在PC软件上进行接收、保存跟判断的动作,在完整收到後,才进行显示或处理。

参考资料: 自己

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxbv70
2013-01-21
知道答主
回答量:9
采纳率:100%
帮助的人:1.1万
展开全部
COM1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(COM1_DataReceived1);(添加event handler)
单片机一次发过来有多少你收多少
private delegate void SetTextDeleg(string text);
然后通过mutlithread来进行数据处理
我的建议是 你也可以用一个arraylist保存起来
建立一个timer来检查arraylist的count 当count不变后进行处理也行
最好是有明显的结束信号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仝沛白w8
2013-01-21 · 超过10用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:15.3万
展开全部
这个只能通过软件对你串口数据包进行截取分析。然后进行软件调试才能知道问题。可能是串口信号问题。也可能是你截获的时候没有对信号波段设置吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式