MyException - 我的异常网
当前位置:我的异常网» C# » C# serialport 串口 接收数据不全,该如何解决

C# serialport 串口 接收数据不全,该如何解决

www.MyException.Cn  网友分享于:2014-08-09  浏览:0次
C# serialport 串口 接收数据不全
使用serialport 向设备发送请求并获得响应数据 

SerialPort sp = new SerialPort(); 
sp.PortName = "COM2";
 sp.BaudRate = 2400;
 sp.StopBits = StopBits.One;
sp.Parity = Parity.Even;
sp.DataBits = 8;
sp.WriteTimeout = 1000;

// 使用的是Modbus协议通信  1 4  是固定的 0 0 是高位 低位 歧视地址  0 2 是高位 低位 请求数量   113 203 是校验码
byte[] request = { 1, 4, 0, 0, 0, 2, 113, 203 }; 
sp.Open();
sp.Write(request, 0, request.Length);
 System.Threading.Thread.Sleep(1000);
 byte[] buffer = new byte[sp.BytesToRead];
int len = sp.Read(buffer, 0, sp.BytesToRead);

//  使用串口调试助手 接收到的数据 是正确的 01 04 04 00 4F 00 4E 4A 67      01 04 分别对应 1 4    04是请求数量*2 转换成16进制   00 4F 00 4E 是请求数量返回的具体值    4A 67 返回的校验码


我用sp.Read(buffer, 0, sp.BytesToRead)  读取到的数据 不正确 不是9位 长度  并且返回的 好多数据 都是63  转换16进制是3F  错误在哪里
------解决方案--------------------
先用串口调试助手,确定数据是否正常,再谈软件问题.
如果数据本身就是63,你读到63不就对了?

造成数据异常可能有很多种原因,比如线接错了,波特率设置错了,校验设置错了.
------解决方案--------------------
sp.Open(); 之后,不要马上发送数据,而是先等待一下,然后清空串口缓冲区,再发送,试试.
你真正要用的话,open和write也是必然要分开的,不可能每发一次数据,就开关一次串口吧
------解决方案--------------------
serialport会有串码的问题,需要自己验证返回数据格式,建议还是用c++或者直接调用windows api比较好。
------解决方案--------------------
引用:
open后 我是Thread.Sleep(500) 然后才开始write 
open和write  也是分开的  不会 发送一次 打开一次


Thread.Sleep(500) 时间设置长一点看看
------解决方案--------------------
根据经验,一但看到很多3F,或者7F(不同的厂家芯片可能不一样),就表示,和设备的通信协议有问题,出现了数据乱码。
你可以到网上下载一个串口监视工具,看一下串口调试助手是用什么参数,打开,收发数据的的,然后和你的程序对比一下就知道了。
------解决方案--------------------
我打开之前做的工程看了一下,当时设置的是2400,7,E,1
SerialPort对于奇偶校验设置,是没有BUG的.

其他代码也没看出有什么问题.
按我说的,设置一下sp.ReadTimeout=-1试试.咱俩代码只有这里不一样了.
------解决方案--------------------
还有,我看你是先发送,再清空缓冲区.试试打开串口后不要直接发送,先清空发送缓冲区,避免里面已经存在数据.

还有,你的程序现在是一运行就发送一次,
试试做成输入1,打开串口,输入2,关闭串口,输入3,发送并接收数据.

这样可以试试打开串口之后,再多次发送,看到底什么结果.
我总觉的还是打开串口后直接发送造成的影响.
------解决方案--------------------
又仔细看了一下,你确定你发的是完整代码??
同样用BitConverter.ToString()
为毛发送字节中间是空格隔开,而接收字节是 - 隔开?

怀疑你中间转换的过程有问题.建议断点测试,看读到的到底是个什么,不要仅仅从转换出来的字符串看结果

文章评论

做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
我是如何打败拖延症的
我是如何打败拖延症的
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
老程序员的下场
老程序员的下场
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
中美印日四国程序员比较
中美印日四国程序员比较
每天工作4小时的程序员
每天工作4小时的程序员
鲜为人知的编程真相
鲜为人知的编程真相
程序员必看的十大电影
程序员必看的十大电影
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
漫画:程序员的工作
漫画:程序员的工作
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员和编码员之间的区别
程序员和编码员之间的区别
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
 程序员的样子
程序员的样子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
程序员的鄙视链
程序员的鄙视链
如何成为一名黑客
如何成为一名黑客
我的丈夫是个程序员
我的丈夫是个程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
为什么程序员都是夜猫子
为什么程序员都是夜猫子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
旅行,写作,编程
旅行,写作,编程
Java程序员必看电影
Java程序员必看电影
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
编程语言是女人
编程语言是女人
那些争议最大的编程观点
那些争议最大的编程观点
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
代码女神横空出世
代码女神横空出世
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有