- 热门文章:
- · PB10中Microsoft OLE DB数据库连接配置
- · PowerBuilder8.0动态连接SQL Server技巧
- · PB通用类库和业务类库的设计思想(二)
- · 初学者:PB中的几种参数传递方式
- · PB通用类库和业务类库的设计思想(一)
- · Pb6中的串行通信(MSCOMM32.OCX)完全解答版
- · SQL Server连接VFP数据库的实现
- · 多語言版vfp程序設計簡單實現
- · 给pb的listview或者treeview控件加上背景图
- · PowerBuilder 9.0 抢先预览
- · [UDF系列]如何创建InterBase UDF
- · (interbase之九)intebase的存储过程、触发器以及事件、异常
上一篇:PB代码优化 >>
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. 显示仪表数据。
以上为读取地磅数据中最关键的部分内容,希望大家多提宝贵意见。
下一篇:PB10中Microsoft OLE DB数据库连接配置 >>
相关文章:
- · (interbase之七) 使用域扩展interbase的数据类型
- · (interbase之六) interbase的dialect
- · (INTERBASE之五) IB技术指标
- · (INTERBASE之四) interbase技术探秘
- · (INTERBASE之三) 什么是interbase
- · (INTERBASE之二) INTERBASE的发展史
- · (INTERBASE之一) INTERBASE有趣的故事
- · (interbase之八) interbase的事务处理
- · [UDF系列]如何编写InterBase UDF 之三
- · [UDF系列]如何编写InterBase UDF 之二
- · [UDF系列]如何编写InterBase UDF 之一
- · 如何在pb中创建COM组件,并在asp中调用并返回结果集?
- · 如何在pb9中调用WebService
- · Powerbuilder6.0实现 Browser/Server结构的Internet解决方案和工作方式
- · How did Interbase appear?(Interbase是如何出现的?)
- · PowerBuilder中回车键的应用
- · PowerBuilder数据库配置方法
- · PB中对INI文件读写的补充函数:删除指定的节或者指定节中某个项
- · 用PowerBuilder建立browser-server结构应用程序
- · PB7.0通用选字段查询窗口的设计
- · 怎样在PB中调用外部程序并判断其运行结束?
- · 如何在PB中实现串口编程
- · PowerBuilder修改数据库表结构的技巧
- · PowerBuilder窗口之间传递多参数的方法
- · 使PB窗口居中
- · 用PB实现Windows2000下的自动关机
- · InterBase 6.5的新特性
- · 2001-12-04 Borland 交付InterBase® 6.5
- · 通用权限管理工具,支所有ADO(包括ODBC)支持的数据库,不管用什么编程都行,VC/BCB/VB/PB/Delphi
- · 在PowerBuilder7.0中应用DDE技术一例
- · 不用重新安装PowerBuilder8.0也可以使用
- · powerbuilder中API應用10則
- · powerbuilder初學者概念20則
- · PB中表的修改对数据窗口和报表的影响的解决办法
- · 自适应屏幕分辨率的基类窗口(pb)
- · pb用纯函数实现在数据窗口中模拟资源管理器鼠标单击动作动态排序,并显示排序箭头
- · PowerBuilder 7.0实用技巧八则
- · 建立和部署PowerBuilder组件
