请教兄弟们bcd解码问题,如何转换成数字

brightfran 2014-09-29 09:39:30
最近搞个地磅读取的程序,请教兄弟们如何把接收到的字节转换成数字字符,有酬谢。.说明书如下。HT9800 称重 串行通讯方式:连续发送称重值
(1) 波特率:600/1200/2400/480/9600可选
(2) 连续发送称重值
(3) 数据格式
每隔100Ms发送一组数据,每组数据有5帧,每帧数据有11位:1位起始位(0),8位数据位(D0-D7),2位停止位(1).其定义如下:

第1帧:D0-D7 ------ 0FFH(起始位)
第2帧:D0-D2 ------ 为小数点位置(0-5)
D3-NC
D4-1 表示称重稳定 0表示称重示稳定
D5-1 表示重量为负 0表示重量为正
D6-NC
D7-1表示超载
第3帧:D0-D7 ----- BCD1(称重值)
第4帧:D0-D7 ----- BCD2(称重值)
第5帧:D0-D7 ----- BCD3(称重值)
注: (1)BCD3.BCD2.BCD1为由高到低的称重值的BCD码
(2)如用户需要以指令方式通讯,我们可根据用户的要求修改串行通讯程序.
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightfran 2014-09-29
  • 打赏
  • 举报
回复
获取到这三帧的bcd数据后,不知要怎样处理了
mjp1234airen4385 2014-09-29
  • 打赏
  • 举报
回复
以前弄过地磅的串口称重。不复杂。 不过没有C#的代码了。
brightfran 2014-09-29
  • 打赏
  • 举报
回复
谢谢版主的回复.请问,我以下代码,要如何转换成重量呢,原代码如下:,如何sb对象如何再次转换 Listening = true;//设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。 int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据 received_count += n;//增加接收计数 comm.Read(buf, 0, n);//读取缓冲数据 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //<协议解析> bool data_1_catched = false;//缓存记录数据是否捕获到 //1.缓存数据 buffer.AddRange(buf); //2.完整性判断 StringBuilder sb = new StringBuilder(); for (int i = 4; i >= 2; i--) { string str1 = Convert.ToString(buf[i], 2).PadLeft(8, '0'); string stry = str1.Substring(4, 4); string strx = str1.Substring(0, 4); int x = Convert.ToInt32(strx, 2); int y = Convert.ToInt32(stry, 2); sb.Append(x); sb.Append(y); }
threenewbee 2014-09-29
  • 打赏
  • 举报
回复
BCD最简单了,它是二进制形式的十进制。 一般就是4个二进制表示一组,比如 0001 0010,就是十进制的 12,你只要每4位二进制转换为十进制,然后乘以10的n-1次方(n等于它从后数是第几组),每一位相加即可。 参考 http://www.cnblogs.com/cancer_xu/archive/2012/09/14/WeighBridge-Com.html (不同设备协议略有不同,不能直接用)

110,499

社区成员

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

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

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