PB中读取地磅称量数据

原创 2004年03月15日 09:31:00

PB中读取地磅称量数据

PB开发企业应用时我们经常会遇到与仪器仪表接口的处理,这里我总结了一下与地磅接口读取称量数据的方法。

一般的地磅都有以下的参数组成:

串口编号

串口参数

时钟周期

读数长度

读字符串起始位

读字符串长度

首末位字符标志

首末位判断(是否从首位起读) '0'为首位

字符串是否反序

编码类型(1.ASCII 2.BCD 3.其他)

当前使用的大多数地磅都是使用串口与计算机连接的,仪表在其每一个时钟周期发送一次数据到串口,处理程序需要在设备的每个时钟周期读取仪表数据(在PB中是使用timer来处理的)。

从串口取数方法很多,可以直接用API读取,也可以用第三方空间读取,在此就不在描述了。这里主要描述一下对数据的分析处理过程,分别对应ASCII编码和BCD编码。

ASCII编码的数据处理过程(相对比较简单):

1.       读取串口数据(一般读取后的是Blob类型,需要转换成String类型使用)。

2.       根据仪表参数(读字符串起始位,读字符串长度,首末位字符标志)截取数值字串。

3.       如果仪表参数指示需要对读取的字串反序处理就对截取后的字串进行反序处理。

4.       显示字串。

BCD编码的数据处理过程(相对复杂):

使用BCD编码的仪表可能各厂家的是不一样的,具体实现要参照仪表的技术资料。

大多数使用BCD编码的是一位标志位,一位状态位,三个BCD数字位(低位在前),以前描述的就是这种类型。

BCD是一种压缩数字存储方式,每4个二进制位存放一个

BCD码数值采用压缩格式,用一个字节来存放两位数字.

数值99BCD码的存储方法如下(以数值99压缩后的表现为例):

二进制表示           1001 1001

ASCII码字符表示      153

十六进制字符表示     0x99

压缩存储是采用把一个字节分成两部分来存储数据,4位和低4位各存储一位数字

PB中二进制操作不方便,所以本方法采用将ASCII值转为16进制字符取其两位数字的方法。

1.       读取串口数据(使用Blob读取)

2.       Blob数据逐个字段转换为String类型在转换为ASCII编码字符串,并且每个ASCII编码之间用一个符号(不能是仪表使用的符号)分割,新的字串末尾需要一个符号位。

3.       在字串中查找格式标志检查这个时钟周期是否收到格式数据,没有收到格式数据停止处理等待下一个时钟周期。

4.       一般字串的第一位为状态位,取出状态位处理。

状态位的值为一个ASCII码值,我们对ASCII码值进行算术运算加简单的判断即可取出状态信息,程序如下:

if li_State > 128 then li_State -= 128  //数据溢出

 

if li_State > 64 then li_State -= 64    //稳定

 

if li_State > 32 then li_State -= 32    //符号

 

if li_State > 16 then                //单位:吨

li_State -= 16

ls_Unit = "T"

end if

 

if li_State >= 8 then li_State -= 8     //重量 ,此时li_State为小数符号位

5.       取出BCD1处理:将ASCII码值转换为16进制在将16进制字符的两位作为数字转换为两位数的数值,并保存BCD1数值。(此时两位数位个位和十位)

6.       取出BCD2处理:同BCD1。(此时两位数位百位和千位)

7.       取出BCD3处理:同BCD1。(此时两位数位万位和十万位)

8.       合并转换后的三个BCD位的数值:BCD = BCD3 * 10000 + BCD2 * 100 + BCD1

9.       处理小数位:此时的小数位位数存放于状态位ASCII值算术处理的后的结果li_State中,所以只要执行操作:BCD = BCD / 10 ^ li_State即可。

10.   处理单位换算,如果单位为吨则执行操作:BCD = BCD * 10 ^ 3

11.   显示仪表数据。

    以上为读取地磅数据中最关键的部分内容,希望大家多提宝贵意见。

delphi地磅读取窗口(通过串口读取地磅实时数据)

  • 2009年01月04日 12:44
  • 4KB
  • 下载

地磅称量系统之(7~9)添加继承窗体

让知识更加联贯 让技术走进生活我的博客       我的程序 我的网络               ------郑紫至               E-mail:zhengzizhi@yahoo.co...
  • zhengzizhi
  • zhengzizhi
  • 2008年03月06日 15:20
  • 475

电商营销方式抢购,秒杀Redis原子减decr方法作为剩余库存判断条件的实现方式(1)

电商营销方式抢购,秒杀Redis原子减decr方法作为剩余库存判断条件的实现方式...
  • zhengzizhi
  • zhengzizhi
  • 2017年09月09日 00:51
  • 1977

地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类

让知识更加联贯 让技术走进生活我的博客       我的程序 我的网络               ------郑紫至               E-mail:zhengzizhi@yahoo.co...
  • zhengzizhi
  • zhengzizhi
  • 2008年03月07日 10:17
  • 562

地磅称量系统之(51)应用自己创建的Icon文件作为位图

让知识更加联贯 让技术走进生活我的博客       我的程序 我的网络               ------郑紫至               E-mail:zhengzizhi@yahoo.co...
  • zhengzizhi
  • zhengzizhi
  • 2008年03月06日 21:16
  • 508

托利多地磅数据的网口读取方法

现在车辆称重大部分都采用了托利多公司的地磅设备,当前主要型号为IND560,IND800,IND880等。 国内的托利多售后服务,基本上只提供地磅硬件设备(包括地磅表头)的安装和调试,很少直接提供程序...
  • yyb0101
  • yyb0101
  • 2015年01月06日 13:41
  • 2244

PB中读取地磅BCD解码

PB中读取地磅BCD解码 (加入日期:2004-9-29) 【保存文章至硬盘】【打印文章】【字体:大 中 小】 分享到: 0 我在《PB中读取地磅称量数据》中简述了PB读取地磅操作过...
  • hunter403
  • hunter403
  • 2012年03月30日 21:53
  • 170

PB中读取地磅BCD解码PB中读取地磅BCD解码

PB中读取地磅BCD解码BCD编码将一个字节的8个位拆分成高4位和低4位两个部分,也就是说一个字节能存储两个数字。所以BCD的编码过程就是将数字压缩的过程,将两个字节的数字压缩成一个字节。反之,解码就...
  • lynice
  • lynice
  • 2007年08月21日 15:17
  • 1089

[原创]PB中读取地磅BCD解码

PB中读取地磅BCD解码我在《PB中读取地磅称量数据》中简述了PB读取地磅操作过程,有网友反映对BCD码的读取及解码不是很清楚。在此,特追加此部分内容来解释BCD解码过程。认识BCD编码BCD编码是一...
  • myclife
  • myclife
  • 2004年09月25日 11:01
  • 1447

pb读取串口数据-一个测试例子

powerbuilder mscomm 串口 msdn
  • lovewoniu111
  • lovewoniu111
  • 2011年04月09日 13:16
  • 1118
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PB中读取地磅称量数据
举报原因:
原因补充:

(最多只允许输入30个字)