【doc】动态链接库在数据采集系统中的一个应用
优采云 发布时间: 2020-08-25 13:24【doc】动态链接库在数据采集系统中的一个应用
动态链接库在数据采集系统中的一个应用2004 控制工程ControlEngineeringofChina Jan。2004 Vo1。11。No。1 文章编号:1671—7848(2004)01~008704 动态链接库在数据采集系统中的一个应用 (大连铁道学院软件学院,辽宁抚顺116028)摘要:在实时系统的检测和控制过程中,为了达到数据采集的实时性和准确性。采 用了编制动态链接库的方式,对数据采集卡进行读写操作。详细介绍了动态链接库 集卡进行读写操作。能够保证数据采集的实时性和准确性。被控系统才能达到控制要求。 关键词:动态链接库(DLL);ACL 一8112 数据采集卡;数据采集 中图分类号:TP273 文献标识码:A 引言实时系统的检测和控制都离不开数据采集系 统,保证数据采集系统的高效性是实现高质量的 监测和控制的一个首要前提。目前,随着高集成 度数据采集卡的性能价钱比不断提升,它在数据 采集系统中的应用越来越广泛。为了将数据采集 信号采集到控制器中,使用动态链接库是一种挺好的办法。动态链接库文件 (DII)是一种用途十分广泛的文件,例如在Win— dows 操作系统中,它饰演着重要的角色,无论是 WindowsNT 还是Windows95/98,它们大部分的 功能都是通过动态链接库提供的。
动态链接库可 以很方便地被不同的用户使用,编写动态链接库 的程序开发人员只须提供动态链接库的库文件和 个函数调用说明文件,其他的应用程序开发人员就可以很方便地调用动态链接库的库函数。这 为结构化编程提供了便捷,并且让应用程序的升 级愈发便利,从而降低了编程的工作量。 动态链接库动态链接库(DynamiclankLibrary,简称 DLI)是能否进行动态链接的一个或多个函数的 集合。应用程序和函数的链接形式有动态链接和 静态链接两种。当应用程序和函数静态链接时, 每一个应用程序必须从静态链接库中取得所有需 要调用函数的代码,并且把这种代码放到应用程 序的可执行代码中。而动态链接则不同,首先,应 用程序中并不需要收录函数的代码,它仅仅收录 了应用程序运行过程中所调用的DLI 函数的一 些最基本信息(例如DII 文件位置函数名等)。 其次,应用程序和函数的链接既可以在应用程序 编译时进行,也可以在应用程序运行时进行。 与静态链接相比,动态链接有以下优点: 减少应用程序的规格,从而节省了硬碟空 间。特别是当几个应用程序使用同一个动态链接 库时,节约出来的硬碟空间将是太可观的。多 个应用程序可以同时访问显存中的动态链接库的 单一映射,节约程序运行的显存空间。
有利于 不同的程序共享数据,资源。使用动态链接库, 用户可以将应用程序分拆成各个独立的模块,有 利于程序日后的升级。必要时,开发者只需直接 更新DII 而用不着对应用程序本身做任何改动 就可以对应用程序的功能和用户插口做较大改 善。有利于用户养成结构化编程的好习惯。 1)动态链接库的导入方法动态链接库中 的函数可以分为内部函数和导入函数两种,内部 函数仅仅供动态链接库中的函数使用,只有导入 函数能够被其他的程序所调用。动态链接库存在 种函数导入方法。在源代码中使用一declspec(dllexport)关键 字。在一个DEF 文件中使用EXPORTS 声明 函数。LINK 命令中用EXPORTS 声明函数。 其中,前两种方式得到了广泛的应用。 收稿日期:2002。09。04;收修初稿日期:2002—11—07 作者简介:赵慧敏(1977 一),女,黑龙江尚志人,助教,硕士,主要从事智能控制,计算机 控制等方面的教学与科研工作。 2)动态链接库的链接形式动态链接库和应用程序之间的链接有两种链接形式:隐式链接 和显式链接。 隐式链接隐式链接时,应用程序和由编 写动态链接库程序员提供的lib 文件链接。
当调 用该动态链接库的应用程序被载入显存时,系统 自动加载动态链接库。 隐式链接时,用户难以提示系统DII 所在的 位置,因此,DII 文件最好保存在Windows 操作 系统手动搜救的地方。即 a。Windows 的目录下。b。Windows 操作系统 中的系统目录(通常为\Windows\System)。c。 应用程序所在的路径。d。当前路径//可以在当 前路径运行应用程序。 显式链接显式链接是在应用程序运行过 程中进行的。显式链接时,应用程序必须以明晰 的句子来申明加载/解载DII 的过程。当应用程 序须要加载动态链接库函数时,必须通过 Win32API 的LoadIibrary()和GetProeAddress() 函数分别实现载入动态链接库和获得待调用的函 数表针。当使用DIL 的程序结束时,框架手动调 用FreeIibrary()函数从显存中卸载它。 3DLL 在ACL。8112HG 数据采集卡中的 应用 用动态链接库编制了上位机与ACI 一8112HG 数据采集卡的读写程序。ACI。8112HG 是一种高 性能,高速度,*敏*感*词*的数据采集卡。它提供了 12 位的A/D,D/A,DIO(数据输入输出)和计时器 /计数器几种最常用的检测和控制功能。
ACI 8112HG的硬件电路主要是由模拟I/O 电路,数 电路,时序控制电路,接口电路等构成。本系统中主要用到模拟量输入输出电路。通过此 数据采集卡,采集控制系统输出的各类模拟讯号, 并把它们转换成计算机就能辨识的数字讯号,然 后输入计算机。并把经计算机估算后输出的控制 电压数字讯号转换成模拟讯号传递给控制系统。 使用VB 来开发界面及处理程序,使用VC++编 制动态链接库来实现对数据采集卡的操作。 1)用VB 和VC 混合编程如今越来越多的 人采用VB 和VC 混合编程,用VB 快速开发出漂 亮的界面以及*敏*感*词*处理程序,再用VC 编写底层 的各类操作,例如显存的操作,IO 端口的操作等。 VC 中还可以嵌入汇编语言进行更底层的操作。 般的做法是将VC程序编译成DLI,在VB 用Declare句子申明DII 中的函数。 这是因为,VB 的一个很大的优点是能迅速 有效地编制程序界面,VB 的快速程序开发环境 在界面设计中和程序开发中是太有效的。另外, 在现代社会中,程序必须随着外界变化而不断改 变,VB 就太适合于这类工作。 但是,VB 的一个很大的缺点就是它对硬件 的访问能力比较差,速度低。
而C++语言则可 以对硬件的数学地址进行直接访问,能进行位操 作,硬件控制能力强,速度很快。所以,常用C C++来编制的动态链接库被VB调用以优化速 度。这也是为何VB 也就能拿来编制DII,但 却不被使用的诱因。 2)DII 在ACI 一8112HG 中的应用在所建 立的直流调速系统中,数据采集卡肩负着采集3 路模拟输入量:转速给定,转速反馈,电流反馈和 输出1 路数字输出量:控制电流输出的任务。 DII 的具体实现过程如下: 在VC++中新建MFCAppWizard(DLI)工 程MylO,在源代码文件MylO。cpp 中添加下边3 个函数: intFARPASCALinport(unsignedshortport)l/输入 函数 voidFARPASCALoutport(unsignedshortport,int value)//输出函数 floatFARPASCALsample(unsignedshortbase,int num)//A/D 转换函数 程序的主要代码如下: intFARPASCALinport(unsignedshortport) //调用一outp(port。
value)函数,向端口port输出值value shorttemp;floatdata; BYTEchannel;//BYTE 定义字节型变量 期赵慧敏等:动态链接库在数据采集系统中的一个应用。89。switch(num) {case0: channel=16;//把二进制数00010000 传送给A/ 通道多路转换寄存器,选择推挽形式,并告之数据采集卡启动第0 路模拟通道。A/D 通道多路转换寄存器是一 个只写寄存器,它拿来控制A/D 通道转换。当通道数写入 寄存器,多路转换器打开一个新通道并等待转换。其中, CLn 为多路转换器通道数(":0-3);CS0,CS1 是进行差 动和推挽选择的讯号。 break; case1: channel:17;//选择通道1 break; case2: channel=18://选择通道2 break; case3: channel=19;//选择通道3 break; case4: channel=20://选择通道4 break; case5: channel=21//选择通道5 break; case6: channel=22;//选择通道6 break; case7: channd=23://选择通道7 break; //选择A/D转换的通道号及输入方法 mowbx,base addbx,10 mowdx,bx mowal,channel oUtdx,al //触发A/D 转换 movbx,base addbx,12 mowdx,bx moval。
1 OUtdx,al//base+12 为软件触发寄存器地址。为让 ACL 一8112 产生一个A/D 转换触发脉冲。必须向寄存器写 入一些数据,这时A/D 转换将被触发。本程序向寄存器写 //查询A/D转换是否结束 movbx,base addbx,5 movdx。bx aal:inal,dx andal,OxlO jnzaal//ALC-8112 对模拟输入通道有12 位分辨率, 转换完的数字数据将储存在A/D 数据寄存器里,A/D 据被送到两个8位寄存器中,低字节数据送到地址base+ 中。高字节数据送到地址base+5中。数据就绪位 (DRDY)用来分辨A/D 转换器的状态,当DRDY 位变为 低电平表明A/D 转换已完成。 转换结束,取数据movbx,base addbx,5 movdx,bx ina1。dx andal,0xf movbx,base addbx,4 rflovdx,bx ina1。dx rflovtemp,ax data=((float)temp/4096)*10;returndata; 模块定义文件MylO。def如下: LIBRARYMyI DESCRIPTION'MylOWindowsDynamicLinkLi— brary' EXPORTS; inport@1 outport@2 sample@3 在VB 中做一个模块,用来对所引用的动态 链接库函数进行声名。
如果MylO。dll 文件在 Windows 操作系统手动搜索的目录下,那么声名 格式如下: DeclareFunctioninportLib"MylO。dll"(ByValportAs Integer) DeclareFunctionoutportLib"MylO。du"(ByValport AsInteger。ByValValueAsInteger) DeclareFunctionsampleLib"MylO。dll"(ByValbaseAs Integer,ByValmumAsInteger) 结语本文首先介绍了动态链接库的编制方法,并 给出了动态链接库在直流调速系统的数据采集系 统中的一个应用在直流调速系统的运行过程 中,DII 保证了数据采集的实时性和准确性。在 事实上,动态链接库在许多方面都有重要的应用, 在程序的结构化设计中起到了非常重要的作用。 参考文献: 刘小石,郑淮,马林伟,等。精通VisualC++6。0[M]。北京:电子工业出版社,1999。 清源计算机工作室。VisualBasic6。0 开发宝典 [M]。北京:机械工业出版社,1999。 DavidJung。
PierreBoutquin。VB6 开发人员参考手 册[M]。北京:机械工业出版社,2000, ApplicationoftheDynamicLinkLibraryinDataAcquisitionSystems ZHAOHui—rain,LIWen,WANGXiao-ning,N 陋Bing,LIANGPei—peng (CollegeofSoftware。DalianRailwayInstitute。Dalian116028,China) Abstract:Inordertoassurethepropertiesofreal-timeandveracityofthedataacquisitioninthe processofmonitorandcontrol oftherea1。timesystem,thewayofdesigningprogramofthedynamiclinklibraryisusedtoread andwritethedataacquisition card。Firstly,thefunctionsandtheprocessofdesigningprogramsofthedynamiclinklibraryisi ntroduced。
Andthen,anappli— cationoflinngthedataacquisitionsystemwiththecontrollerbymeansofthedynamiclinklibr aryinthedirectcurrenttiming systemisgiven。Theactualresultofthedirectcurrenttimingsystemshowsthatitcanassurethe real—timeandtheveracityof thedataacqui~tionandthesystemcanattainthemanipulativeneedswithreadingandwritingt hedataacquisitioncardusedthe dynamiclinklibrary。 Keywords:dynamiclinklibrary:ACL-8112dataacquisitioncard;data采集 (上接第75 了200%多;用MMX技术优化时,由于Canny 子在模板运算后要进行求模操作,需要用C语言 实现,但速率也提升了400%多。
结语本文提出的两种对Canny 算子的过程进行 优化的方式适用于VC++6。0 或更高版的编译 平台,特别是第2 种方式只适用于支持MMX 术的处理器。由于Canny算子属于估算密集型 算法,处理的数据量大,基本上是对相邻的数据进 行操作,且通常是短小而高度重复的循环,因此适 合于MMX 编程。无论是更改现有的应用程序, 还是写一个新程序,都需考虑要加工的数据是否 -+--4---4-*+*+-+ 适合MMX 处理,如何优化程序结构以提升处理 效率等。实验结果表明,上述方式能较大地增强 Canny 算子的运算速率,对其他从事图象处理算 法优化的人员也具有一定的参考意义。 参考文献: 种有效方式一应用于半透明物体边沿检查[J]。天津轻工业学院,1998,13(2):55—59。 郑南宁。计算机视觉与模式识别[M]。北京:国防 工业出版社。1998。 "uDH。ShengLS。DSPchipanditsapplicationin image[J],Measurement&ControlTechnology, 2001。20(5):16—23。 [4]WuzY,RenYC,ZhangzY。
Multimediadataeffi— cientprocessingbasedonMMXtechnology[J]。Au— dioEngineering,1999,24(12):34—37。 DevelopmentandOptimizationofanIndustrialImageProcessing SoftwareBasedonEdgeDetection ZHANGCan。1ong,WANGQ,WENXiao-jun,ZHANGChao-ying,TANGYah。ping,LIUH ai-yan (1。CollegeofPhysicandInformationEngineering。GuangxiNormalUniversity,Guilin5410 04。China; 2。DeptofTeachingAffairs,GuilinUniversityofEelectronicTechnology,Guilin541004。Chi na) Abstract:AfastseparatealgorithmwithCannyoperatorusedforprocessingtheindustrialima gesisintroduced。
Twom~ures, compileroptimizationandMMXtechnologyoptimization。areadaptedinVC++6。0tofurthe roptimizethealgorithminorder todetecttheedgeofindustrialimagesquicklyandexactly,Theformerismainlyusedtocombin eselectionitemsofCcompiler, whilethelateradaptsMMXinstructionsandSIDM。Theresultsofexperimentshowthattheim provingalgorithmisfasterby 20096~4oO%thantheordinaryone。 Keywolds:Cannyoperator;compileroptimization;MMXtechnology