全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年1月 动态链接库在组态软件中的应用 页数4动态链接库在组态软件中的应用盛柏林高连生北京航空航天大学机械工程及自动化学院北京100191摘 要:本文介绍了Windows系统下使用动态链接库的优点和调用方法,分析并给出了组软件的总体框架结构。根据组态软件的结构划分,使用动态链接库分别设计了图形组态系统的图库中的图元的接口;实时数据库的接口;I/O设备通信的接口。应用程序通过加载动态链接库,调用它的导出接口函数,可以实现相应的功能。关键词:动态链接库;调用方式;组态软件中图分类号:TP273.5The application of Dynamic Link Library in SCADA/HMISheng Bai-Lin Gao Lian-ShengBeihang UniversityBeijing100191Abstract: The paper introduces the advantages and calling method of Dynamic Link Library in windows operation, analyses and designs the total architecture of SCADA/HMI. Design the pictures interface in picture-store, the Real-time databases interface and the I/O device communications interface using Dynamic Link Library according the softwares architecture. The application can call the exported functions to accomplish some functions by loading the concerned Dynamic Link Library.Key words:Dynamic Link Library, Calling method, SCADA/HMI高连生 北京航空航天大学机械工程及自动化学院 副教授 研究方向:计算机控制,SPC质量控制盛柏林 北京航空航天大学机械工程及自动化学院 研究生 研究方向:工业监控组态软件2010年1月 动态链接库在组态软件中的应用 页数4引言 自从微软推出Windows操作系统的第一个版本以来, DLL一直是Windows操作系统的基础,它既是多个进程共享资源的主要方式,也是不同模块向应用程序提供系统服务的重要手段。Windows操作系统充分挖掘了DLL的优势,向应用程序提供服务中包含三个最重要的DLL,(1)Kernel32.dll,用于管理内存、进程和线程;(2)User32.dll,用于执行用户界面任务;(3)GDI32.dll,用于绘图和显示文本。应用程序使用DLL有诸多优点:(1)有助于资源共享。DLL包含的对话框模板、字符串、图标和位图等资源,可以供多个应用程序使用和共享;(2)有助于节省内存。多个应用程序使用同一个DLL时,该DLL的页面只放入R A M一次,所有的应用程序都可以共享DLL的页面。(3)隐藏程序实现的细节。DLL中的例程可以被应用程序访问,但这些例程的实现细节对应用程序是封装的;(4)有助于软件升级。当动态链接库中的函数需要更新或修复时,只需修改或替换原来的DLL,这一点对应用程序是透明的,即不需要对应用程序进行更新1。组态的含义是使用软件工具对计算机及软件的各种资源进行配置,达到使计算机或软件按照预先设置,自动执行特定任务,满足使用者要求的目的。在工程实践中所谓的组态,就是工程技术人员按应用要求,选择所需的功能模块,确定其运行方式,结合相关信息组成合适的应用系统。组态软件,就是一种通过其运行从而帮助人们完成组态的工具软件2。使用动态链接库编写组态软件的各个模块,有利于模块间的并行开发,模块的管理和升级,提高组态软件的开发速度和可扩展性。在面向冷库温控组态系统课题中使用动态链接库技术开发某些模块,已经产生了良好的效果。1 动态链接库的调用方式动态链接库的调用方式分隐式链接和显式加载。显式链接是指应用程序执行过程中调用某函数时,才把该函数从DLL中装入内存,也可以随时卸载DLL文件。这是一种比较节约内存的调用方式,与隐式链接相比,它不需要头文件和导入库文件,具有更好的灵活性。在显式链接中常常要用到以下几个函数:LoadLibrary()和FreeLibrary()函数用来加载和卸载一个DLL文件映像;GetModuleHandle()函数可以检查DLL是否已经被映射到进程的地址空间中;GetProcAddress()函数用来得到已加载的DLL中某个函数的地址。图1为显示链接DLL的执行步骤。图1为显式加载动态链接库的过程3。显示加载比隐式链接要复杂,但显示加载是应用程序在运行过程中动态加载DLL,每加载一次,DLL的使用计数加一,每卸载一次,使用计数减一,当使用计数为零时,DLL将从内存中卸载。2 组态软件的总体框架及动态链接库的应用本文通过对众多组态软件的结构进行详细分析,将组态软件分为如下四个部分:图形界面组态模块,实时数据库模块,I/O设备驱动模块和通信及第三方程序接口模块。总体框架结构的划分如图2所示。下面分别分析每个模块的结构,并讨论以动态链接的方式实现某些模块的功能。2. 1图形组态图形组态系统是任何一个工业监控组态软件必须具备的图形处理系统,几乎所有的工程画面,无论是监视画面还是控制画面,都需要利用图形组态子系统来完成,它在整个工控组态软件系统中占有十分重要的地位。图形组态包括基本图元(线、矩形、圆、椭圆、文本、图片等)以及它们的属性(颜色、线形、是否填充)的组态;图形组件的组态,包括实时和历史趋势组态;控件的组态,包括基本的windows控件,如文本编辑控件、复选框控件、下拉列表控件、日期控件等;报警组态;控制策略的组态;数据库的组态;动画链接组态;事件记录与日志组态等。组态软件的图元数量有上千种,每个图元的实现都放在应用程序中是不现实的,那样将会使主程序异常的庞大,且增加新的图元将会很困难,不利于软件的团队开发、升级和扩展。基本图元的实现可以放在主程序中,其它的图元放在图库中进行管理。图库中的每个图元的功能和实现都对应一个动态链接库文件,当用户选择绘制图库中某个图元时,应用程序加载图元对应的动态链接库文件,实现图元的绘制和编辑。以下为图库的接口类的设计。2.1.1 CHMIWizardAPI接口这个接口由HMI提供,但它不是纯虚类接口。CHMIWizardAPI类中的方法在动态链接库程序里可以直接调用。CHMIWizardAPI为开发图库中的图元提供了一组操作HMI、获取HMI资源的方法。图3 CHMIWizardAPI接口UML图2.1.1 CWizard接口这个接口是由HMI提供的一个纯虚类接口,动态链接库程序需要在这个类的基础上派生出一个子类,并逐一实现其中的纯虚函数方法;CWizard接口在动态链接库中实现,由HMI调用。图4 CWizard接口UML图2.1.3 装载和卸载接口这个接口包括2个导出函数CreateSuperWizard和DeleteSuperWizard。在编写DLL程序时必须实现这2个导出函数,否则HMI程序将不能正确装载或卸载DLL。一般地,这2个导出函数可以在DLL的入口函数DllMain()的下面书写。导出函数的实现为固定形式,具体代码如下:1) 装载函数extern C AFX_EXT_API CWizard* CreateSuperWizard(CHMIWizardAPI* pHMIWizardAPI)/CMyWizard继承CWizardCMyWizard* pObj = new CMyWizard(pHMIWizardAPI);return pObj;2) 卸载函数 extern C AFX_EXT_API void DeleteSuperWizard(CWizard* pObj) delete pObj; 2.2实时数据库实时数据库系统是指其数据和事务都具有定时特性或确定的定时限制的数据库系统,系统的正确性不仅依赖于逻辑结果,而且依赖于逻辑结果产生的时间,也就是说系统宁可接受在时间限度内的不准确的数据,也不接受超过时间限制的准确的数据。实时数据库系统主要完成数据采集、数据处理、数据读写和查询、事件报警、历史数据存盘等操作。根据实时数据库的功能和要求,在动态链接库中提供一组导入、导出函数,实现对实时数据库的读写、查询和管理等。在系统运行时,应用程序启动动态链接库,这样应用程序就可以通过这些接口函数对实时数据库进行操作了。表1列出了几个接口函数4。2.3 I/O设备驱动现在各种组态软件都带有大量的通用设备驱动程序,给工程设计人员的开发带来了很大的便利,节约了大量的时间。但是当系统中使用了特殊的设计人员自行开发的硬件的,组态软件就没有现成的设备驱动程序设计人员使用,需要自己开发设备驱动程序。开发设备驱动程序可以使用动态链接库的方式来实现。应用程序根据组态人员添加的设备加载对应的设备驱动动态链接库文件。下面以串口设备为例,设计串口设备与上位机通信的导出函数。Windows操作系统将串口作为资源,以文件读写的方式提供了一组读写串口API函数。表2为串口设备通信的导出函数5。表2 串口设备通信的导出函数函数名返回值函数说明InitPort(UINT portnr,UINT baud,char parity,UINT databits,UINT stopbits,DWORD dwCommEvents,UINT writebuffersize)BOOL初始化串口StartMonitoringaisle()BOOL启动监视线程StopMonitoringaisle()BOOL结束监视线程ReadPort(int nPort,int nNum,charStartAddr,char NumAddr)int 读串口WriteDMaisle(int nPort,int nNum,charcWriteAddr,char cBuffer) int写串口2.4 通信组件与第三方程序接口通信及第三方程序接口组件是开发系统的标志,是组态软件与第三方程序交互及实现远程数据访问的重要手段之一。它有下面三个主要作用:(1)用于双机冗余系统中,主机与从机间的通信;(2)构建分布式HMFSCADA应用时多机间的通信;(3)在基于Intemet或Browser/Serve:(B/S)应用中实现通信功能。通信组件中有的功能是一个独立的程序,可以单独使用6。因此一般不采用动态链接库进行设计,因为动态链接库不能单独运行。3 结束语本文介绍了Windows系统下使用动态链接库的优点和调用方法,分析并给出了组软件的总体框架结构。根据组态软件的结构划分,使用动态链接库分别设计了图形组态系统的图库中的图元的接口;实时数据库的接口;I/O设备通信的接口。应用程序通过加载动态链接库,调用它的导出接口函数,可以实现相应的功能。参考文献 References1 Jeffrey Richter, Christophe Nasarre Windows核心编程M.清华大学出版社.北京. 2008 , 463-4762 李建伟,郭宏. 监控组态软
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026汽车改装车制造行业市场分析及创新技术与品牌营销策略报告
- 2026人工智能大数据资源分析与应用价值研究全景解读报告
- 2026中国市场农业行业市场现状供需分析投资评估规划分析研究报告
- 新人教部编版三年级语文上册期末考试卷(完整版)
- 山东省淄博市七年级生物下册 4.5.2 人粪尿的处理教案 新人教版
- 五年级英语下册 Unit 2 In Beijing(Again Please)教案 冀教版(三起)
- 2026年污水再生利用技术考试题及答案
- 小学政治(道德与法治)2拉拉手交朋友教案
- 2026年农业技术推广考试题(附答案)
- 2026年抗菌药物分级管理培训考试题库(含答案)
- 2026年天津市公安辅警笔试试题(含答案)
- (2026)政工师职称考试题库及参考答案
- 2026年江苏小升初(数学)真题试卷(含答案)
- 2026年杭州市农产品冷链仓储可行性研究报告
- 箱式电阻炉操作规程操作规程
- 2022中国功能性消化不良诊治专家共识课件
- 2026江苏省数据集团数字科技有限公司招聘笔试考试参考试题及答案
- 2026年北京市劳动合同范本三篇
- 《图形图像处理》课程标准
- 年产3600吨薯类食品生产线技术改造项目可行性研究报告模板拿地申报
- 2026湖南株洲市消防救援支队消防文员招聘14人笔试参考题库及答案解析
评论
0/150
提交评论