c#串口为何一次收到的数据不全啊。

小恒丶 2014-12-26 05:30:40
每次只收到设备发过来的一部分数据 要收几次才是完整的
代码如下。

Sport.PortName = ApplicationSettings.PortName ;
Sport.BaudRate = ApplicationSettings .BaudRate ;
Sport.DataBits = 8;
Sport.Parity = ApplicationSettings.InterfaceIp == "NONE" ? Parity.None : (ApplicationSettings.InterfaceIp == "ODD" ? Parity.Odd : Parity.Even);
Sport.StopBits = StopBits.One;
Sport.RtsEnable = true;
try
{
Sport.Open();
if (Sport.IsOpen)
{
Sport.DataReceived += new SerialDataReceivedEventHandler(Sport_DataReceived);
DataProcessing.RunWorkerAsync();
log.Debug("串口打开成功");
}
}
catch (Exception ee)
{

log.Error("串口未能打开" + ee);
}




接收的方法

if (!isExit)
{
lock (readLock)
{
if (myQ.Count > 5000)
{
myQ.Dequeue();
}
int n = Sport.BytesToRead;
if (n > 0)
{
byte[] buf = new byte[n];
Sport.Read(buf, 0, n);
myQ.Enqueue(buf);
string hex = ComLibrary.Coder.TextEncoder.ByteArrayToHexString(buf);
log.Debug("接收:" + hex);
}
}
}


代码接收跟定义如上。拿到项目上测试收到的代码的时候每次都没收全。到底是我代码的问题还是项目设备的问题啊
...全文
393 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newxdlysk 2014-12-26
  • 打赏
  • 举报
回复
所以一般自己会定制通讯协议,然后根据协议的标志位和校验来验证一条数据是否接受完整且有效
zixingcheng_ 2014-12-26
  • 打赏
  • 举报
回复
串口发送数据还真没研究过,不过数据发送接收基本都是有分段的,拆分为一个个的数据包发送,一次发送太理想,拆分发送才通用嘛!
  • 打赏
  • 举报
回复
没来 --> 本来
  • 打赏
  • 举报
回复
串口没来就是一个字节一个字节发送的啊。你从缓冲区里读取一次,不代表着对方一共只有这么多字节。串口本来就是这样,是你刚开始对串口编程时没有学到正确的概念。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧