串口数据解析问题!
收到串口数据后应该如何解析?
[2007:01:13:15:52:17][接收]25 4C 4C 4C 99 98 35 30
[2007:01:13:15:52:17][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:17][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:17][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:17][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:17][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:17][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:17][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:17][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:17][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:17][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:17][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:17][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:17][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:17][接收]32 30 30 30 31 38 03 02
[2007:01:13:15:52:18][接收]2B 30 30 31 32 30 30 30
[2007:01:13:15:52:18][接收]31 38 03 02 2B 30 30 31
[2007:01:13:15:52:18][接收]32 30 30 30 31 38 03 02
[2007:01:13:15:52:18][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:18][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:18][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:18][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:18][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:18][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:18][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:18][接收]31 44 03 02 2B 30 30 31
[2007:01:13:15:52:18][接收]32 30 35 30 31 44 03 02
[2007:01:13:15:52:18][接收]2B 30 30 31 32 30 35 30
[2007:01:13:15:52:18][接收]31 44 03 02 2B 30 30 31
这是用串口调试程序得到的数据! 数据为=1205
02 2B 30 30 31 32 30 35 30 31 44 03
这是我要解析的正常数据!但是如何从数据中解析出来?
发送的数据是12位!!我的数据触发应该设置为多少最合适?
spReceive.ReceivedBytesThreshold = 1;
1。连续方式:所传送的数据为仪表显示的当前称重(毛重或净重)。每帧数据由12组数据组成。
格式如下:
第X字节 内容及注释
1 02(XON) 开始
2 +或- 符号位
3 称重数据 高位
4 称重数据 ..
5 称重数据 ..
6 称重数据 ..
7 称重数据 ..
8 称重数据 低位
9 小数点位数 从右到左(0—4)
10 异或校验 高四位
11 异或校验 低四位
12 03(XOFF) 结束
异或:2异或3异或....8异或9
//spReceive接收数据函数
public void spReceive_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string tempTxt = " ";
ASCIIEncoding encoding = new ASCIIEncoding();
try
{
//接收缓冲区的字符数
int n = spReceive.BytesToRead;
byte[] readBuffer = new byte[n];
spReceive.Read(readBuffer, 0, n);
//数值接收正确
foreach (byte bb in readBuffer)
{
tempTxt = tempTxt + String.Format( "{0:d} ", bb) + "- ";
//应该如何处理接收的数据??
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
[解决办法]
没搞过;帮你顶下;
[解决办法]
up
[解决办法]
这个值设为 12比较好,即一次读一条记录,也便于好处理
spReceive.ReceivedBytesThreshold = 12;
处理过程见
pfworld(胡剑) ( ) 信誉:100 Blog
正解
[解决办法]
根据你的协议要求设立一个接收步长,然后判断,如果接收字节数小于接收步长则等待,如果大于步长则进行协议判断,成功后把多余的字节与下次接收的字节连接起来继续与接收步长判断。
[解决办法]
个人认为,讲接收方式改为文本接收模式比较好操作一点,至少我比较喜欢,这样你可以省去讲16进制数转换成ASCII码的麻烦,而且一般它的小数点也在返回数据中有,所以,取其中的一截,然后强制转换成浮点数就可以了。
另外,我发了一个我写的称重传感器的通讯程序给你,也许你能用的上……
[解决办法]
本人从事C#开发已有三年时间,希望结交行内好友,大家共同进取,
请加我的QQ群号码:35651007 注明CSDN即可
[解决办法]
通讯源程序,我也需要,wenzuodan@sohu.com谢谢