c# serial port接收信息后转换格式再显示的问题 switchc#serial port 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 while (serialPort.BytesToRead > 0)这就不对了你是如何确保收到的信息是对的?仅仅是断点调试?要知道,你在断点调试的时候,程序走的是很慢的,而你正常运行的时候,是很快的串口发送,跟TCP包不同,不能确保一次性收到完整的包,你必须循环,直到一定时间内不再有数据到达,才算完整这个一定时间,可以根据波特率来确定,一般是3.5个字节周期比如波特率9600,每秒1200字节,每字节大约1ms,那么如果超过4ms还没有数据到达,就可以认为此次发送已经结束如果你另一头的设备也是自己编程,那么可以将协议做的更简单一些,就是发送间隔不要太短,接收的时候也就不用太严格按照3.5ms来做,直接在while里加个sleep(100),那么100ms之后没有新数据,while才退出循环 另外,既然涉及到只读一次无法读到完整数据的问题你处理的时候也应该先将读到的数据放到list里,等确定全部读完了,再统一处理而不是收到1字节,就处理1字节float占4字节,你只收到3个字节就开始计算,那能对吗 你好,谢谢你的回复! 我在一开始用了一个invoke来显示刚刚收到的信息,是hex的,然后才进入协议。我在正常运行的时候,进行了很多次的实验,确保每次接收到的信息(也就是hex形式的)都是对的。所以我认为可以收到正确的信息。请问您怎么看?谢谢! float f11 = BitConverter.ToSingle(rxDataBuffer, 0); float f22 = BitConverter.ToSingle(rxDataBuffer, 4);那就是这里错了你重新定义一个byte[4],把数据放到这个byte数组里,再转float而不是直接8位一起转float 你好!我也不认为是这个问题,因为,我在断电调试的时候,问题在rxdatastate之前就出现了,就是说,在byte转换float之前,乱码就自己出来了。谢谢! C#导出Excel时按类型分Sheet Winform事件问题 panel的问题 C#ASCII码与汉字互换问题 再问个问题 datagridview 的问题 我一个继承于Control自定义控件,总是收不到KeyPress事件,怎么回事啊? 南京有要找软件开发工作的来看看 一个低级的问题,我刚接触C#,请问如何输入数? 帮忙提供一个思路 c# 调用C++的DLL函数报错 ZMQ C# using(){}请教 ActiveReports WinFroms 平台 PDF 导出代码
这就不对了
你是如何确保收到的信息是对的?仅仅是断点调试?
要知道,你在断点调试的时候,程序走的是很慢的,而你正常运行的时候,是很快的
串口发送,跟TCP包不同,不能确保一次性收到完整的包,你必须循环,直到一定时间内不再有数据到达,才算完整
这个一定时间,可以根据波特率来确定,一般是3.5个字节周期
比如波特率9600,每秒1200字节,每字节大约1ms,那么如果超过4ms还没有数据到达,就可以认为此次发送已经结束如果你另一头的设备也是自己编程,那么可以将协议做的更简单一些,就是发送间隔不要太短,接收的时候也就不用太严格按照3.5ms来做,直接在while里加个sleep(100),那么100ms之后没有新数据,while才退出循环
你处理的时候也应该先将读到的数据放到list里,等确定全部读完了,再统一处理
而不是收到1字节,就处理1字节
float占4字节,你只收到3个字节就开始计算,那能对吗
float f22 = BitConverter.ToSingle(rxDataBuffer, 4);
那就是这里错了
你重新定义一个byte[4],把数据放到这个byte数组里,再转float
而不是直接8位一起转float