- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用PB实现数据采集的程序设计方法
用PB实现数据采集的程序设计方法
钮立红
(南京市中医院, 210001)
摘要:介绍了用VC创建数据采集动态链接库和PB调用DIA.的方法。
关键词:DLI_;数据采集
1 用DLL技术实现数据采集
在 计算 机工业控制系统中,常常使用A/
D接口模块作为输人硬件,用PB编制人机
交互界面。但PB不具备直接对硬件端口进
行访问的函数。为了实现动态数据的采集和
处理,采用C语言或汇编语言编制对硬件端
口访问的DI-I 函数,然后由PB主程序调
用,从而实现对I/()口的访问和控制,这样
既能保留PB设计界面的灵活和快捷,又能
发挥DLL在Windows环境下多个应用程序
之间共享代码和资源,提高运行效率的优势。
2 用VC创建数据采集动态链接库
本 文 采 用VisualC ++6 .0 集成开发环
境作为开发工具,创建用于数糖来集0动态
链接库。
2.1 建立DLL的C++源程序(.CPP)
DI A. 源 程序包括以下内容:
(1) C ”连 接说明
为 了将 DLI_编译成一个C十十程序,必须
在程序的起始部分增加‘℃”连接,以避免标
准C++命令损坏的发生。具体如下所示:
ex ter n C{
函数 模 块
}
2 )导 出 函数的说明
为了 调 用 包含在‘DIA,中的函数,必须将
其导出;为了使用包含在DIA,中的函数,必
须将其导人。使用C/C++时,导出操作是通
过使用dllexport关键字完成的,导人操作是
通过使用d1limport完成的。dllexport和
dllmport关键字不能单独使用,前面必须有
另一个扩展关键字_declspec。具体应用格式
为:
ded s pec f dl l export)void Myfunction
(int a)
3) 自 定 义输出的库函数Myfunction()
这一 部 分 是整个程序的核心,执行DLI_
程序特定的任务。
2. 2 编译并生成动态链接库
在 Vi su alC 十+6.0集成开发环境下选择
File菜单下New子项创建工程文件。mpr,
项目类型选为Win32D ynamic_ L ink
Library (. DLL),并把以上DI,I,的源文件
.CPP加入该项目中,经过编译后自动生成
动态链接库文件.DI,I,。将此DI-1-文件存放
在与应用程序相同的目录中,这样就可以在
编写应用程序时调用。
3 DLL应用实例
下 面 就如何采集METTLER
TOLED08142型称重仪表数据说明DI,I,函
数模块的编制。TOLED08142型仪表数据输
出方式有两种:命令方式和连续方式。本文选
择其连续方式,其数据格式为:
含起始状恋状态状态显示的重量值
义符02字A 字H 字C H L
收稿日期:2000--08--1l
《电脑与信息技术》2001年第1期
{for (i=O;i(9;++1)
由于 V C 关于硬件端口的函数inp)和
outp )等仅支持DOS程序,因此在创建
DIA,模块时,通过在VC程序中嵌人汇编语
言代码来实现对端口的访问。
源代 码 文 件read_ c omm.C pp如下:
#i nc lu de ( w indows.h )
# inc lu de stdio.h
#i nc lu de a fx.h
# in clu d e dos.h
ex te rn c
uns ig ned l ong_declspec(dllexport)SetCom()考
as m {
asm {
mo v dx,0
m ov ah,0 2
in t1 4h
mo vd ata2,al //读数据位
an da l, Ofh
mo vd atal,al}
if W )=4)(i(9))
// 判 是 否 为 数 据 位 ?
if((data2)=48)乙各.(data2(=57))
//判 是 否 为 有 效 数 据 ?
total=total -}-data 1,pow(10,8
m ov
i)
m ov
ah,0 刀功能=初始化通讯口
dx,0 //选择com 1口
mo v a l ,Of ah //初始化参数:波特率9600,
偶校验,1位停止位,7位数据位
else
(err二1
int 1 4h //转BIOS
}
}
unsignedi nt_dec)spec(d llexport)GetData( ){
unsigned int result;
int total;
BYTE data I.data2,err,state;
int i;
data I= 1;
total=0;
do
{
er r= 0;
do
考
//若非有效数据,则重新读取
bre ak ; }
}
}
)w hi le (er
文档评论(0)