当前位置:编程学习 > C#/ASP.NET >>

SerialPort1接受数据的问题

我用SerialPort1 组件来进行串口接收数据,每组大概150个字节,如果数据是1分钟收一次,没有任何问题,但是如果改为1秒钟发一次,那么数据就乱了,即收到的数据不是整包的,如收到200个字节,即把2组数据或1组半当作一组来处理,我想知道通过设置SerialPort1 属性能否解决此问题,
我已在SerialPort1_DataReceived中设置了 Thread.Sleep(500)
请教高手~!!!!!!!!!!!!
--------------------编程问答-------------------- 1.数据缓存
2.数据有效性检查(是否完整,是否正确,是否有效)
3.数据分析

遵循这个方式。就不会出错。可以看看我博客。有些例子,不过是c#写的。 --------------------编程问答-------------------- 修改serialport1的属性能解决吗? --------------------编程问答-------------------- LZ:你设置的波特率? --------------------编程问答-------------------- 不能修改。这些接口的通信,要注意有时候几包可能会一起传过去,因为时间太快了。如果硬件没有问题的话,误码问题不大。处理这个问题或者这类问题就是在接收的时候不要想着一次接收一包,而是一次可能接收到了很多包。那么用个循环处理这些数据吧。 --------------------编程问答-------------------- 波特率是9600,但是我一秒钟一次怎么就乱了呢? --------------------编程问答-------------------- 接收后的需要判断和处理.
理论上9600波特率是可以每秒传递960字节数据.关键看你每帧数据包是否等长,如果字节长度不等,需要依据数据包帧首尾字节值及字节长度等进行判断.
那些需要明确的通信协议约定. --------------------编程问答--------------------
引用 6 楼 zdingyun 的回复:
接收后的需要判断和处理.
理论上9600波特率是可以每秒传递960字节数据.关键看你每帧数据包是否等长,如果字节长度不等,需要依据数据包帧首尾字节值及字节长度等进行判断.
那些需要明确的通信协议约定.

每帧的数据包是等长的啊,我的问题是能直接通过修改属性或串口配置来实现吗?
难道必须进行数据判断和处理的程序吗? --------------------编程问答--------------------
引用 7 楼 seaside9349 的回复:
每帧的数据包是等长的啊,我的问题是能直接通过修改属性或串口配置来实现吗?
难道必须进行数据判断和处理的程序吗?


设置SerialPort1.ReceivedBytesThreshold为接收字节长度.由于串口通信易受干扰,所以必须进行数据判断和处理(数据判断和处理的速度远快于串口传递数据的速度). --------------------编程问答--------------------
引用楼主 seaside9349 的回复:
我用SerialPort1 组件来进行串口接收数据,每组大概150个字节,如果数据是1分钟收一次,没有任何问题,但是如果改为1秒钟发一次,那么数据就乱了,即收到的数据不是整包的,如收到200个字节,即把2组数据或1组半当作一组来处理,我想知道通过设置SerialPort1 属性能否解决此问题,
我已在SerialPort1_DataReceived中设置了 Thread.Sleep(500)
……

首先感谢回复,但是我想问一下,如何逐字节判断收到的内容呢,要是不符合,直接往后继续判断,而不是直接把收到的数据都扔掉 --------------------编程问答-------------------- SerialPort1_DataReceived中设置了 Thread.Sleep(500)这没有必要.
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,