串口通信出错

takpod 2015-06-27 11:23:05
我给主机发送一个命令,然后主机返回给我一个字符串,平时是正常的。

但有时候会出现如下错误,重启软件后就正常了。

我向主机发送出一个命令 ,(主机也接收到了,并且也立刻返回了我一个字符串)
然后读到的不是当前主机返回给我的字符串,而是读到 主机16个命令前返回给我的那个字符。


                SerialPort sp1 = new SerialPort();
public void SpIni()
{
sp1.PortName = "COM1";
sp1.BaudRate = 9600;
sp1.ReadTimeout = 400;
sp1.Open();
}

public void SendAndRecv()
{
string StringContext;
byte[] SendBuf = Encoding.ASCII.GetBytes("T1\r");
sp1.Write(SendBuf, 0, SendBuf.Length);
StringContext = "";
StringContext = sp1.ReadLine();
}


主机接收到命令 并返回字串
...全文
573 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-07-06
  • 打赏
  • 举报
回复
要么你就自己加个sleep(400);等待400ms之后再开始接收数据
於黾 2015-07-06
  • 打赏
  • 举报
回复
sp1.ReadTimeout = 400; 这只是告诉串口,如果400ms没有任何数据接收到,就抛个错误,进入catch 而如果有数据到达,到底是10个字节触发recieved事件还是20个字节触发事件,是不确定的
much0726 2015-07-06
  • 打赏
  • 举报
回复
尝试使用sp1.Read()方式,获取单字节,并把接收的线程独立出来。
takpod 2015-07-06
  • 打赏
  • 举报
回复
引用 8 楼 wolf163361 的回复:
波特率改115200, 是不是给主机的发送间隔时间太短
间隔有4秒呢
takpod 2015-06-30
  • 打赏
  • 举报
回复
引用 6 楼 takpod 的回复:
[quote=引用 4 楼 Z65443344 的回复:] 要自己处理分包粘包的问题 收到字节数组之后,先写入list<byte>,等收到足够的长度之后再转字符串
我现在的解决方法是每发送一次命令就 new 一个SerialPort sp1 = new SerialPort();再配置一下 这样每次用新的对象 好像就不会出错了,因为这个问题不是常常发生所以也不好找问题在哪里[/quote] 但这样好时间太久了,可能不行
takpod 2015-06-30
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
要自己处理分包粘包的问题 收到字节数组之后,先写入list<byte>,等收到足够的长度之后再转字符串
我现在的解决方法是每发送一次命令就 new 一个SerialPort sp1 = new SerialPort();再配置一下 这样每次用新的对象 好像就不会出错了,因为这个问题不是常常发生所以也不好找问题在哪里
takpod 2015-06-30
  • 打赏
  • 举报
回复
引用 3 楼 q27981872 的回复:
sp1.ReadTimeout = 400; 这句去掉或者时间设置再大点试试。 另一种原因,波特率9600是对的么,用115200试试。
sp1.ReadTimeout = 400; 时间足够了一般200就可以了,如果是波特率不对的话应该是一直都接收不到吧~而不会像现在这样 运行着运行着就出错。
海阔天空CE 2015-06-30
  • 打赏
  • 举报
回复
波特率改115200, 是不是给主机的发送间隔时间太短
於黾 2015-06-29
  • 打赏
  • 举报
回复
要自己处理分包粘包的问题 收到字节数组之后,先写入list<byte>,等收到足够的长度之后再转字符串
q27981872 2015-06-29
  • 打赏
  • 举报
回复
sp1.ReadTimeout = 400; 这句去掉或者时间设置再大点试试。 另一种原因,波特率9600是对的么,用115200试试。
takpod 2015-06-29
  • 打赏
  • 举报
回复
有没有人能帮忙?
takpod 2015-06-28
  • 打赏
  • 举报
回复
有没有人能帮忙?

110,567

社区成员

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

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

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