C#通过串口接收到的地磅数据解析问题

qq_17275555 2017-08-24 10:47:14
接收到的内容如下:
02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D
02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D
02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D

官方文档给出的协议格式如下:


请问我代码该如何校验,获取小数点位置,本人小白(刚接触C#没多久),还请大神给思路,或者贴一下代码,万分感激。
...全文
1734 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-08-24
  • 打赏
  • 举报
回复
协议中数据长18字节 而你给的数据长 17字节(02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D) 显然没有校验和(协议中也说校验和是可选的) 第二个字节(31)是状态字A 前3个二进制位表示小数点位置00110001 但协议说 00110001 bit5恒为1 bit5恒为0,显然你的不是 可见你收到的数据是错误的
易2017 2017-08-24
  • 打赏
  • 举报
回复
引用 4 楼 qq_38588710 的回复:
02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D 这段数据02是起始符,固定的 31 30 20对应状态字ABC,从状态字A的二进制码前三位来读取你的小数位,同理利用状态字B的二进制位来读其他数据。你的开发文档里很清楚 两段20 20 20 20 30是你要读的数据,具体怎么定义的要自己去破解 0D为校验和 我说的还不够明白么
这里有点错误 数据X20 20 20 20 20 20 和数据Y 30 20 20 20 20 20是不同的皮重毛重我不清楚,看你怎么理解了
易2017 2017-08-24
  • 打赏
  • 举报
回复
02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D 这段数据02是起始符,固定的 31 30 20对应状态字ABC,从状态字A的二进制码前三位来读取你的小数位,同理利用状态字B的二进制位来读其他数据。你的开发文档里很清楚 两段20 20 20 20 30是你要读的数据,具体怎么定义的要自己去破解 0D为校验和 我说的还不够明白么
qq_17275555 2017-08-24
  • 打赏
  • 举报
回复
引用 2 楼 qq_38588710 的回复:
31是状态A,转换成二进制是00110001,看前三位来确定你的小数点位置
多谢大神,请问能在给点提示或者示例代码一类的吗,本人小白一只,,到现在只是调通了与地磅的通信
易2017 2017-08-24
  • 打赏
  • 举报
回复
31是状态A,转换成二进制是00110001,看前三位来确定你的小数点位置
易2017 2017-08-24
  • 打赏
  • 举报
回复
L314896283 2017-08-24
  • 打赏
  • 举报
回复
重量数据转成Ascii码,再看下。20是空格,30是0。给出的重量数据的毛重和净重都是0。
qq_17275555 2017-08-24
  • 打赏
  • 举报
回复
引用 19 楼 cyg17173 的回复:
用串口调试伴侣 调试下,不称和称重状态,对比一下就出来了。 如果一直是 02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D ,肯定就错了。 现在的电子秤都不用做太多的数据解析,发送的时候16进制,带有分割符=,serialPort1_DataReceived 接收到的就是已经解析好的 00.0000,然后反转数据就得到结果了。
恩,这个东西是需要多测试,,谢了。
cyg17173 2017-08-24
  • 打赏
  • 举报
回复
用串口调试伴侣 调试下,不称和称重状态,对比一下就出来了。 如果一直是 02 31 30 20 20 20 20 20 20 30 20 20 20 20 20 30 0D ,肯定就错了。 现在的电子秤都不用做太多的数据解析,发送的时候16进制,带有分割符=,serialPort1_DataReceived 接收到的就是已经解析好的 00.0000,然后反转数据就得到结果了。
易2017 2017-08-24
  • 打赏
  • 举报
回复
引用 17 楼 qq_17275555 的回复:
[quote=引用 15 楼 qq_38588710 的回复:] 有趣,楼主你查下ASCII码表,意思是00.0000对应的数据是30 30 30 30 30
按照官方给的文档,我不应该是根据状态码获取小数点位置么,他会直接在数据位上给我小数点? 不还是需要解析么。[/quote] 是啊,我只是给你说明下这段数据怎么解,小数点还是看状态字A
qq_17275555 2017-08-24
  • 打赏
  • 举报
回复
引用 15 楼 qq_38588710 的回复:
有趣,楼主你查下ASCII码表,意思是00.0000对应的数据是30 30 30 30 30
按照官方给的文档,我不应该是根据状态码获取小数点位置么,他会直接在数据位上给我小数点? 不还是需要解析么。
qq_17275555 2017-08-24
  • 打赏
  • 举报
回复
引用 14 楼 cyg17173 的回复:
[quote=引用 13 楼 qq_17275555 的回复:] [quote=引用 12 楼 cyg17173 的回复:] [quote=引用 11 楼 qq_38588710 的回复:] [quote=引用 10 楼 cyg17173 的回复:] 接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
呃,你这是自己解析后的数据吧,20 20 20 20 30这段数据怎么解[/quote] 串口发送的都是ASCII , 查看ASCII 对照表,20是空格,30是0,31是1。 你现在配置不成功,所以接收的都是20 20 20 20 30这样的数据。 我当初花了1个月研究这个呢,当时手边没有电子秤,都是远程协助人家开发的。[/quote] 那就是说 我现在接收到的数据就是有问题的了? 那设置正确的情况下返回的该是什么呢?[/quote] =00.0000 现在的电子秤,如 上海耀华,一些知名的品牌,都是这样的数据格式。 [/quote] 我这个是托利多T800,100吨地磅。
易2017 2017-08-24
  • 打赏
  • 举报
回复
有趣,楼主你查下ASCII码表,意思是00.0000对应的数据是30 30 30 30 30
cyg17173 2017-08-24
  • 打赏
  • 举报
回复
引用 13 楼 qq_17275555 的回复:
[quote=引用 12 楼 cyg17173 的回复:] [quote=引用 11 楼 qq_38588710 的回复:] [quote=引用 10 楼 cyg17173 的回复:] 接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
呃,你这是自己解析后的数据吧,20 20 20 20 30这段数据怎么解[/quote] 串口发送的都是ASCII , 查看ASCII 对照表,20是空格,30是0,31是1。 你现在配置不成功,所以接收的都是20 20 20 20 30这样的数据。 我当初花了1个月研究这个呢,当时手边没有电子秤,都是远程协助人家开发的。[/quote] 那就是说 我现在接收到的数据就是有问题的了? 那设置正确的情况下返回的该是什么呢?[/quote] =00.0000 现在的电子秤,如 上海耀华,一些知名的品牌,都是这样的数据格式。
qq_17275555 2017-08-24
  • 打赏
  • 举报
回复
引用 12 楼 cyg17173 的回复:
[quote=引用 11 楼 qq_38588710 的回复:] [quote=引用 10 楼 cyg17173 的回复:] 接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
呃,你这是自己解析后的数据吧,20 20 20 20 30这段数据怎么解[/quote] 串口发送的都是ASCII , 查看ASCII 对照表,20是空格,30是0,31是1。 你现在配置不成功,所以接收的都是20 20 20 20 30这样的数据。 我当初花了1个月研究这个呢,当时手边没有电子秤,都是远程协助人家开发的。[/quote] 那就是说 我现在接收到的数据就是有问题的了? 那设置正确的情况下返回的该是什么呢?
cyg17173 2017-08-24
  • 打赏
  • 举报
回复
引用 11 楼 qq_38588710 的回复:
[quote=引用 10 楼 cyg17173 的回复:] 接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
呃,你这是自己解析后的数据吧,20 20 20 20 30这段数据怎么解[/quote] 串口发送的都是ASCII , 查看ASCII 对照表,20是空格,30是0,31是1。 你现在配置不成功,所以接收的都是20 20 20 20 30这样的数据。 我当初花了1个月研究这个呢,当时手边没有电子秤,都是远程协助人家开发的。
易2017 2017-08-24
  • 打赏
  • 举报
回复
引用 10 楼 cyg17173 的回复:
接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
呃,你这是自己解析后的数据吧,20 20 20 20 30这段数据怎么解
cyg17173 2017-08-24
  • 打赏
  • 举报
回复
接收的数据明显不对,地磅的设置有问题。 一般设置成功的数据都是这样,如8.62 Kg的数据格式: =26.8000=26.8000=26.8000=26.8000 如果没秤东西,串口连接成功,则接收的数据一般是 =00.0000
易2017 2017-08-24
  • 打赏
  • 举报
回复
难道不是么,bit0难道不是最低位,我接触单片机比较多,I/O寄存器中就是这样的
xuzuning 2017-08-24
  • 打赏
  • 举报
回复
是吗?你确定是倒过来读的?
加载更多回复(1)

110,534

社区成员

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

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

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