论文部分内容阅读
摘 要:本论文主要探讨在大型系统中多系统、不同开发环境、不同操作系统的软件程序间进行数据访问的方法。介绍了组态软件对OPC协议的支持,组态软件与其他软件进行通信方法,高级语言开发的软件采用OPC协议实现对组态软件数据的读写功能。采用第三方WinTech OPC Client库进行开发,OPC客户端实现过程。分析了文件存储方法,采用文件模式和采用数据库模式进行比对,两种方案优缺点。并对配方传递原理,触发机制,服务器端采取措施,客户端浏览模式实现过程,传递数据注意事项进行阐述。
关键词:OPC;开发;二进制文件;配方;日志接收器
中图分类号:TP274.2 文献标识码: A 文章编号: 2095-8595(2017) 02-076-07
电子科学技术 URL: http://www.china-est.com.cn DOI: 10.16453/j.issn.2095-8595.2017.02.019
Abstract: This study focuses on the large system, different development environments, different operating system software program for data access methods. Support for OPC Protocol of HMI/SCADA, HMI/SCADA to communicate with other software, advanced language software OPC Protocol is used to implement the reading and writing function of the HMI/SCADA data. Using WinTech OPC Client library for development, OPC client implementation process. File storage method, using file mode, and using database schema compare, both advantages and disadvantages. Recipe transfer theory, trigger mechanism, server-side take measures to client browsing process, passing data considerations. Cross-process log receiver for the preparation of cross-process debugging, HMI/SCADA developing program using log receiver.
Key words: Object Linking and Embedding for Process Control; Develop; Binary File;Recipe;Log Receiver
引言
近些年隨着计算机技术快速发展,不同操作系统,不同开发环境,众多的子系统,整个系统最终达到网络和软件层面的完全融合,是许多大型项目中从事软件、测量、控制专业人员经常碰到并且十分棘手的问题。
在工业现场,工程人员常常使用组态软件做人机界面,完成过程控制或逻辑控制。组态软件具有丰富的图库、完善的内置驱动,可以和现场的硬件无缝连接,从而轻松进行逻辑操作及过程控制,是工厂自动化首选开发平台,组态软件位于MES、ERP下一层,为两者提供底层数据和信息,但如果对组态软件有某种特殊功能上的要求则需要对组态软件进行二次开发,对组态软件进行二次开发大多采用高级语言如C++等编程,但高级语言程序和组态软件之间在数据交换存在天然的鸿沟,如何解决好这个问题,是每一个做软件开发的工程人员必须面对的。
1 软件系统组成和功能划分
主控计算机系统采用的开发工具为WinCC和VC。WinCC开发软件主要完成系统人机界面和操作,重点是逻辑控制和过程控制;VC开发软件主要功能包括:传感器标定、通道编辑、界面编辑;WinCC后台用于能量控制、通信功能的DLL模块由VC开发;基于OPC协议配方浏览和传递程序也是由VC开发。图1为WinCC+VC程序协同工作效果图。
WinCC是工业组态软件的主流产品之一,引导组态软件发展潮流,提供知名协议的驱动支持,内置OPC驱动让WinCC可以与更多的支持OPC协议控制器进行通信[1]。
本系统的主控软件和数采软件分别使用WinCC+VC作为联合开发平台,其原因如下:
1) WinCC是目前所有组态软件中功能比较强大、稳定的一种。
2) 考虑到下位机PLC为西门子PLC,WinCC本身提供PLC的驱动软件,因此使PLC与WinCC的通信变得非常容易,原生驱动不论是稳定性还是执行效率都好于第三方开发的驱动。
3) WinCC内置的OPC协议完全支持基于OPC驱动扩展。
4) WinCC支持第三方开发的DLL,支持外部DLL让软件功能扩展和通信扩展变得几乎无所不能,VC提供DLL模式开发框架和向导,进行DLL开发方便、快捷。
5) VC是微软公司开发的一个集成开发工具,在Windows系统软件开发工具中具有类库强大、框架完善、用户庞大、资源丰富等优点,是目前使用最广泛的开发工具。
2 软件通信方法初步探讨
常规跨进程软件通信方法包括剪贴板、共享内存、管道、邮槽、SOCKET等[2],不论采用哪种方法,均需双方程序在代码一级支持此种操作,并且通信效率、占用资源及资源释放、稳定程度、开发进度等完全依赖于双方程序开发人员,不确定性大。采用某种公共协议,使双方或其中一方可以脱离繁琐的底层通信开发,把全部精力集中于逻辑和过程控制本身就显得十分必要,OPC协议就是基于这种要求发展而来的。 随着电子和计算机技术的发展,工业控制系统迫切要求在控制软件和控制器、智能设备之间采用统一的通信协议和标准以避免不同软件、硬件之间难以互联互通的问题,OPC技术和标准就是在这种背景下产生、发展起来,并逐渐推广和流行,现在已经成为一种事实上的工业标准。
工业控制系统采用OPC技术有以下优点[3]:
1) OPC规范以COM为技术基础,实现了代码在二进制级上的重用和代码的语言无关性,极大的提高了软件的重用性,提高了开发效率。
2) OPC封装了系统功能的实现,只将接口方法暴露在外面,客户以统一的方式去调用这个方法,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来。
3) OPC利用DCOM技术实现了远程调用,使得应用程序的分布与系统硬件的分布无关,便于系统硬件配置以及扩展,使得系统的应用范围更广。
4) 采用OPC规范,便于系统的组态化,将系统复杂性大大简化,可以缩短软件开发周期,提高软件运行的可靠性和稳定性,便于系统的升级与维护。
5) OPC规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而实现系统的开放性,易于实现与其他系统的接口。
基于OPC上述特点,WinCC也是最早支持OPC协议的软件之一,WinCC已经内置OPC协议驱动,实现WinCC程序和VC开发的支持OPC协议的程序交换数据变得容易实现。实现二者数据交换,WinCC程序作为服务端,VC开发程序作为客户端,实现VC开发程序读取WinCC中数据的功能;反之,把VC开发程序作为服务器端,WinCC程序作为客户端,实现WinCC读取VC程序中数据的功能。本系统OPC协议数据流图如图2。
OPC客户端采用CSV格式保存访问外部点表信息,CSV格式配置文件有如下特點:
1) CSV是一种通用的、相对简单的文件格式,在商业和科研领域广泛应用。CSV文件支持EXCEL对其进行编辑,同时保存为文本文件模式,也可以采用操作系统自带的写字板或其他第三方支持的文本编辑程序浏览或编辑。
2) CSV文件具有类似数据库表的特征,极易对数据行、列进行格式化读写操作。
3) CSV文件方便扩展,可以随时添加、删除、修改点表而不需要编缉代码,有助于实现代码和功能的分离。通过采用CSV文件格式,VC开发的程序可以轻松获取或读写WinCC开发程序的I/O数据、变量。
图3为本系统采用CSV格式的OPC点表配置文件列表。
WinCC已经内置OPC驱动,可以基于OPC协议访问任意OPC SERVER而无需手工编写代码,高可配置,随时使用随时添加支持OPC协议I/O点,方便、快捷、高效。
3 工艺配方文件优缺点
配方是满足生产工艺要求的某些生产、流程、控制等要素的相关组合。例如本系统接到一个生产任务,需要做五组重复高铁刹车试验,每一组有40个配置繁杂、工况各异的工艺配方,技术员依据试验规程,提前编好每一个工艺配方,保存好,例如机轮载荷、刹车介质、刹车压力等。生产工人根据预先编制好的工艺配方,依次执行。每一组配方,都可以在下组试验中重复使用,为提高配方使用效率,降低工人劳动强度的同时也减少出错。把工艺和操作分离,降低人为出错几率、提高抗干扰因素,保证工艺不受操作者主观因素的影响,保持生产工艺的稳定。
采用二进制文件保存,保证了生产工艺安全性,只有使用特定程序并了解文件存储结构,才可以打开配方,进行浏览、增、删、改、查等相关操作。如果不知道文件格式,则无法使用此配方,更不要说对配方进行相关操作。相对于文本,二进制模式可以节省更多磁盘空间,本次配方采用全生产要素进行保存,每一个配方文件为14KB大小,相对于动则上TB的硬盘来说,则小到可以忽略不计。
采用文件模式存储配方的好处是可以不依赖于数据库,灵活,随用随拷、随时转移、随时删除、不受是否据有数据库环境的限制,并且数据库不仅仅在经济上有庞大开销,如想用的效果好,还需专门的人员进行专业的维护,如一套ORACLE 11G标准版,不仅软件本身花销昂贵,还需专门技术人员进行维护,成本十分庞大。
二进制配方文件存储原则、结构。
1)定长原则:整形为4字节;单精度浮点4字节;双精度浮点8字节;布尔量转为整形保存;短字符串占60字节;长字符串120字节,不足用空格补齐;设计与配方相关数据结构,按4字节对齐原则,保证每种结构有一个固定的存储长度。
2)全员存储:全员存储一个好处是所有配方大小固定。与本配方有关要素,按配方工艺配置,无关要素采用缺省值、默认值、零值等不一而论,根据工艺要求做相应设置。
3)频度原则:使用频度高的数据放在前部,频度低的数据放在后面;数值类型放前,字符类型放在后面。
4)进度指示:由于每次保存数据需要读取大量I/O数据,特别是首次读取相关I/O数据,时间长(500多个I/O点约16秒),虽然组态软件对于脚本操作做了专门优化,不会阻塞界面消息响应、不会导致死锁,但开发者依然需要在操作界面或状态栏等处给出类似进度指示,以便直观显示配方读、写执行进度。
5)日志输出:调试过程中,有时需要随时掌握中间变量、过程值、计算结果、异常信息等,此时,灵活、高效的日志系统就十分必要,即便调试结束,在后期生产中,一旦有异常情况产生也需把异常相关信息输出,以便技术人员排故、维护。
4 配方传递触发机制
由于配方文件保存为二进制文件,当工作目录内有成百上千配方时,直观、准确浏览文件,呈现配方内容,就显得十分必要。采用VC开发的程序在浏览配方时左侧采用树状视图,右侧采用列表视图,这种方案即便于浏览和遍历,又能直观、准确显示程序配方内容。 当操作工人从配方列表选择合适的配方后,则需把当前配方相关要素传递给WinCC,此时,需要工程人员解决的一个重要问题就是跨进程通信问题。在本项目中采用OPC通信协议完美解决这一问题。
为了实现从外部程序把配方传递给WinCC程序,需要执行如下操作:
1)在组态软件内部添加两个变量。一个变量为字符串类型,包含当前正在使用配方完整文件存储路径和文件名称;一个用于传递配方的布尔类型标识,当此标识状态发生改变,按新配方刷新相关变量,达到更改配方工艺的目的。
2)当操作者在外部选择一个新的配方并执行传递,布尔类型状态值发生改变,配方文件文件名作为参数之一被传递进去,触发读配方文件事件,按文件存储内容刷新工艺值。监控软件采用WinCC,它支持事件触发,在事件触发脚本中读二进制配方文件,刷新WinCC内部变量,达到更改工艺条件的目的。
3)触发日志和执行结果有明确指示,日志中输出重要工艺参数,最终操作是否成功,执行过程中是否有异常状况等信息都需要在日志中有明确的描述,当前最新配方文件名称、关键控制信息等需要在界面准确、直观显示出来。图4为当前生产正在使用的工艺配方文件名称截图:
5 OPC客户端开发
OPC协议包括DA、AE、HAD等,本文客户端开发是基于DA协议的客户端开发,客户程序的关键部分是OPC接口部分的设计。客户程序可以包括程序初始化、数据采集、显示、存储、打印等功能,其中OPC相关数据需要通过OPC接口访问OPC服务器,对服务器数据进行存取。开发客户程序之前,需要了解服务器的大体情况,比如需要访问的服务器是否提供自动化接口、服务器的OPC的版本,配置好客户机和服务器DCOM环境,并且能用第三方工具浏览服务器数据,在调试过程中随时使用第三方工具配合调试。OPC 客户端开发主要步骤包括:
1)读取CSV格式配置信息,初始化相关对象。
2)创建服务器对象,建立与服务器的连接。
3)创建组,添加需要访问服务器标签到链表,在回调函数中刷新在服务器端值或状态发生改变的标签,完成标签读取和刷新。
4)通过OPC同步或异步接口写数据,完成在客户端对服务端数据改变或调整。
5)断开连接,释放资源,清理现场,保存数据。
注意事项:
设计时需要注意OPC对象的VARAINT结构类型、引用计数问题、内存管理问题、处理错误返回代码问题。由于一个OPC客户程序可能与多个OPC服务器相连,因此设计时也最好采用多线程,同时与多个OPC服务器程序进行交换以保证较高的通信效率。另外客户程序中OPC接口部分如何与其他功能模块进行数据交换需要根据实际情况仔细考虑。
直接使用COM库函数开发OPC客户端,是最基本也是最灵活的方式,这种开发方式难度和工作量都大,要求开发人员对OPC规范和COM技术原理有比较深入的了解。早些时候VisualC++编译器还不支持模板,因此,它们不得不借助非模板的其他手段来将COM功能掺入类中,现在,随着计算机技术的发展,实现的手段越来越多。现在,互联网上有一些免费、开源的OPC客户端开发工具包,利用这些工具包可以快速地开发OPC程序。本系统引入Wintech OPC Server Client Develop Kit (1.0)[4],依据VC面向对象开发的特点,考虑到开发的方便程度,把Wintech OPC Server Client Develop Kit的API函数封装到一个COPCClient类中,使此类具备完成OPC客户端相关操作的全部功能,主要功能包括:OPC服务器的连接;添加标签组;浏览标签;读取服务器状态;写标签(同步/异步);读配置文件;读CSV类型配置文件;读取字符串类型标签值;读取浮点类型标签值等功能。此处把封装类的成员变量和成员函数声明截图如图5。
6 配方文件读写实现
配方是生产的依据,也是工艺参数的数据表现。本系统采用二进制文件保存配方,就需要在两种不同的开发和运行环境中都能对其进行浏览、增、删、改、查等操作。在WinCC软件内部,利用组态软件提供的内置的标准C脚本,保存工艺员配置的工艺配方。需要注意的是:由于文件名称是WinCC程序、VC开发程序、甚至是系统自带的资源管理器进行浏览或操作的关键要素之一,其命名尽可能科学、合理、直观,如下图为生产过程试验配方浏览试验截图如图6。
用脚本编辑器部分贴图读函数如图7。
考虑到两种不同的开发环境,为方便配方功能的统一调试,特意编写一个统一的日志接收器,发送端和接收端采用Window平台支持消息传递的机制,把被调试程序作为消息的载体,把程序的中间變量、运算结果、异常信息等内容格式化输出到字节数组缓冲区,把此缓冲区内容作为信息传递的一个参数,发送给消息接收程序:日志接收器。日志接收器是一个单独程序,独立运行,每次需要接收其他程序发送的日志,则启动此程序进行接收,如对日志不感兴趣,则可不运行日志接收器。考虑到日志接收器作为全部开发环境的日志接收工作,在日志接收器中加入的判断程序是否创建运行实例的功能,保证日志接收器任意时刻只运行一个实例,全部程序的日志都输入到此接收器中,便于开发人员排查故障、优化性能、重构代码。优于加弹窗、下断点、写文件等常规调试方式,采用跨进程日志接收器做调试器的好处是不会中断程序的执行,阻塞消息的传递,输出信息在日志接收器实时刷新,并可手动保存日志信息。
WinCC进行功能扩充,加入对DLL(程序动态链接库)支持,此举极大扩充了WinCC这款组态软件的功能,把以前很多在组态软件内部难以实现的功能,交由第三方开发工具来实现,把实现好的功能统一封装到DLL中,在组态软件中进行调用,极其方便。利用组态软件这一功能,把好多后台服务、通信、日志发送等功能都封装到DLL中,极大拓展组态软件功能。图8为从WinCC内部使用自己开发的DLL模块截图,截图展现的是引用跨进程发送日志函数的用法,Dout开头的函数是发送日志函数。图8为WinCC引用DLL模块日志发送函数图。
7 结论
通过在多个项目控制系统实践,验证了工业组态软件和自主开发软件之间采用OPC协议交换数据的可行性;同时,基于二进制配方文件的存取为一种简便、高效的配方存储方式。系统目前通过验收,进入正常生产状态,不同开发工具合理使用,不同应用程序的无缝集成,保证了整个系统各个功能协调有效运转,为客户生产创造巨大的经济效益。
参考文献
西门子(中国)有限公司 自动化与驱动集团. 深入浅出西门子WinCC V6[M]. 北京航空航天大学出版社 2013.3.
梁伟. Visual C++网络编程案例实战[M]. 清华大学出版社 2013.9.
(德)马科,等. opc统一架构[M]. 机械工业出版社 2012.1.
WTclient DLL User’s Guide[J].
关键词:OPC;开发;二进制文件;配方;日志接收器
中图分类号:TP274.2 文献标识码: A 文章编号: 2095-8595(2017) 02-076-07
电子科学技术 URL: http://www.china-est.com.cn DOI: 10.16453/j.issn.2095-8595.2017.02.019
Abstract: This study focuses on the large system, different development environments, different operating system software program for data access methods. Support for OPC Protocol of HMI/SCADA, HMI/SCADA to communicate with other software, advanced language software OPC Protocol is used to implement the reading and writing function of the HMI/SCADA data. Using WinTech OPC Client library for development, OPC client implementation process. File storage method, using file mode, and using database schema compare, both advantages and disadvantages. Recipe transfer theory, trigger mechanism, server-side take measures to client browsing process, passing data considerations. Cross-process log receiver for the preparation of cross-process debugging, HMI/SCADA developing program using log receiver.
Key words: Object Linking and Embedding for Process Control; Develop; Binary File;Recipe;Log Receiver
引言
近些年隨着计算机技术快速发展,不同操作系统,不同开发环境,众多的子系统,整个系统最终达到网络和软件层面的完全融合,是许多大型项目中从事软件、测量、控制专业人员经常碰到并且十分棘手的问题。
在工业现场,工程人员常常使用组态软件做人机界面,完成过程控制或逻辑控制。组态软件具有丰富的图库、完善的内置驱动,可以和现场的硬件无缝连接,从而轻松进行逻辑操作及过程控制,是工厂自动化首选开发平台,组态软件位于MES、ERP下一层,为两者提供底层数据和信息,但如果对组态软件有某种特殊功能上的要求则需要对组态软件进行二次开发,对组态软件进行二次开发大多采用高级语言如C++等编程,但高级语言程序和组态软件之间在数据交换存在天然的鸿沟,如何解决好这个问题,是每一个做软件开发的工程人员必须面对的。
1 软件系统组成和功能划分
主控计算机系统采用的开发工具为WinCC和VC。WinCC开发软件主要完成系统人机界面和操作,重点是逻辑控制和过程控制;VC开发软件主要功能包括:传感器标定、通道编辑、界面编辑;WinCC后台用于能量控制、通信功能的DLL模块由VC开发;基于OPC协议配方浏览和传递程序也是由VC开发。图1为WinCC+VC程序协同工作效果图。
WinCC是工业组态软件的主流产品之一,引导组态软件发展潮流,提供知名协议的驱动支持,内置OPC驱动让WinCC可以与更多的支持OPC协议控制器进行通信[1]。
本系统的主控软件和数采软件分别使用WinCC+VC作为联合开发平台,其原因如下:
1) WinCC是目前所有组态软件中功能比较强大、稳定的一种。
2) 考虑到下位机PLC为西门子PLC,WinCC本身提供PLC的驱动软件,因此使PLC与WinCC的通信变得非常容易,原生驱动不论是稳定性还是执行效率都好于第三方开发的驱动。
3) WinCC内置的OPC协议完全支持基于OPC驱动扩展。
4) WinCC支持第三方开发的DLL,支持外部DLL让软件功能扩展和通信扩展变得几乎无所不能,VC提供DLL模式开发框架和向导,进行DLL开发方便、快捷。
5) VC是微软公司开发的一个集成开发工具,在Windows系统软件开发工具中具有类库强大、框架完善、用户庞大、资源丰富等优点,是目前使用最广泛的开发工具。
2 软件通信方法初步探讨
常规跨进程软件通信方法包括剪贴板、共享内存、管道、邮槽、SOCKET等[2],不论采用哪种方法,均需双方程序在代码一级支持此种操作,并且通信效率、占用资源及资源释放、稳定程度、开发进度等完全依赖于双方程序开发人员,不确定性大。采用某种公共协议,使双方或其中一方可以脱离繁琐的底层通信开发,把全部精力集中于逻辑和过程控制本身就显得十分必要,OPC协议就是基于这种要求发展而来的。 随着电子和计算机技术的发展,工业控制系统迫切要求在控制软件和控制器、智能设备之间采用统一的通信协议和标准以避免不同软件、硬件之间难以互联互通的问题,OPC技术和标准就是在这种背景下产生、发展起来,并逐渐推广和流行,现在已经成为一种事实上的工业标准。
工业控制系统采用OPC技术有以下优点[3]:
1) OPC规范以COM为技术基础,实现了代码在二进制级上的重用和代码的语言无关性,极大的提高了软件的重用性,提高了开发效率。
2) OPC封装了系统功能的实现,只将接口方法暴露在外面,客户以统一的方式去调用这个方法,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来。
3) OPC利用DCOM技术实现了远程调用,使得应用程序的分布与系统硬件的分布无关,便于系统硬件配置以及扩展,使得系统的应用范围更广。
4) 采用OPC规范,便于系统的组态化,将系统复杂性大大简化,可以缩短软件开发周期,提高软件运行的可靠性和稳定性,便于系统的升级与维护。
5) OPC规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而实现系统的开放性,易于实现与其他系统的接口。
基于OPC上述特点,WinCC也是最早支持OPC协议的软件之一,WinCC已经内置OPC协议驱动,实现WinCC程序和VC开发的支持OPC协议的程序交换数据变得容易实现。实现二者数据交换,WinCC程序作为服务端,VC开发程序作为客户端,实现VC开发程序读取WinCC中数据的功能;反之,把VC开发程序作为服务器端,WinCC程序作为客户端,实现WinCC读取VC程序中数据的功能。本系统OPC协议数据流图如图2。
OPC客户端采用CSV格式保存访问外部点表信息,CSV格式配置文件有如下特點:
1) CSV是一种通用的、相对简单的文件格式,在商业和科研领域广泛应用。CSV文件支持EXCEL对其进行编辑,同时保存为文本文件模式,也可以采用操作系统自带的写字板或其他第三方支持的文本编辑程序浏览或编辑。
2) CSV文件具有类似数据库表的特征,极易对数据行、列进行格式化读写操作。
3) CSV文件方便扩展,可以随时添加、删除、修改点表而不需要编缉代码,有助于实现代码和功能的分离。通过采用CSV文件格式,VC开发的程序可以轻松获取或读写WinCC开发程序的I/O数据、变量。
图3为本系统采用CSV格式的OPC点表配置文件列表。
WinCC已经内置OPC驱动,可以基于OPC协议访问任意OPC SERVER而无需手工编写代码,高可配置,随时使用随时添加支持OPC协议I/O点,方便、快捷、高效。
3 工艺配方文件优缺点
配方是满足生产工艺要求的某些生产、流程、控制等要素的相关组合。例如本系统接到一个生产任务,需要做五组重复高铁刹车试验,每一组有40个配置繁杂、工况各异的工艺配方,技术员依据试验规程,提前编好每一个工艺配方,保存好,例如机轮载荷、刹车介质、刹车压力等。生产工人根据预先编制好的工艺配方,依次执行。每一组配方,都可以在下组试验中重复使用,为提高配方使用效率,降低工人劳动强度的同时也减少出错。把工艺和操作分离,降低人为出错几率、提高抗干扰因素,保证工艺不受操作者主观因素的影响,保持生产工艺的稳定。
采用二进制文件保存,保证了生产工艺安全性,只有使用特定程序并了解文件存储结构,才可以打开配方,进行浏览、增、删、改、查等相关操作。如果不知道文件格式,则无法使用此配方,更不要说对配方进行相关操作。相对于文本,二进制模式可以节省更多磁盘空间,本次配方采用全生产要素进行保存,每一个配方文件为14KB大小,相对于动则上TB的硬盘来说,则小到可以忽略不计。
采用文件模式存储配方的好处是可以不依赖于数据库,灵活,随用随拷、随时转移、随时删除、不受是否据有数据库环境的限制,并且数据库不仅仅在经济上有庞大开销,如想用的效果好,还需专门的人员进行专业的维护,如一套ORACLE 11G标准版,不仅软件本身花销昂贵,还需专门技术人员进行维护,成本十分庞大。
二进制配方文件存储原则、结构。
1)定长原则:整形为4字节;单精度浮点4字节;双精度浮点8字节;布尔量转为整形保存;短字符串占60字节;长字符串120字节,不足用空格补齐;设计与配方相关数据结构,按4字节对齐原则,保证每种结构有一个固定的存储长度。
2)全员存储:全员存储一个好处是所有配方大小固定。与本配方有关要素,按配方工艺配置,无关要素采用缺省值、默认值、零值等不一而论,根据工艺要求做相应设置。
3)频度原则:使用频度高的数据放在前部,频度低的数据放在后面;数值类型放前,字符类型放在后面。
4)进度指示:由于每次保存数据需要读取大量I/O数据,特别是首次读取相关I/O数据,时间长(500多个I/O点约16秒),虽然组态软件对于脚本操作做了专门优化,不会阻塞界面消息响应、不会导致死锁,但开发者依然需要在操作界面或状态栏等处给出类似进度指示,以便直观显示配方读、写执行进度。
5)日志输出:调试过程中,有时需要随时掌握中间变量、过程值、计算结果、异常信息等,此时,灵活、高效的日志系统就十分必要,即便调试结束,在后期生产中,一旦有异常情况产生也需把异常相关信息输出,以便技术人员排故、维护。
4 配方传递触发机制
由于配方文件保存为二进制文件,当工作目录内有成百上千配方时,直观、准确浏览文件,呈现配方内容,就显得十分必要。采用VC开发的程序在浏览配方时左侧采用树状视图,右侧采用列表视图,这种方案即便于浏览和遍历,又能直观、准确显示程序配方内容。 当操作工人从配方列表选择合适的配方后,则需把当前配方相关要素传递给WinCC,此时,需要工程人员解决的一个重要问题就是跨进程通信问题。在本项目中采用OPC通信协议完美解决这一问题。
为了实现从外部程序把配方传递给WinCC程序,需要执行如下操作:
1)在组态软件内部添加两个变量。一个变量为字符串类型,包含当前正在使用配方完整文件存储路径和文件名称;一个用于传递配方的布尔类型标识,当此标识状态发生改变,按新配方刷新相关变量,达到更改配方工艺的目的。
2)当操作者在外部选择一个新的配方并执行传递,布尔类型状态值发生改变,配方文件文件名作为参数之一被传递进去,触发读配方文件事件,按文件存储内容刷新工艺值。监控软件采用WinCC,它支持事件触发,在事件触发脚本中读二进制配方文件,刷新WinCC内部变量,达到更改工艺条件的目的。
3)触发日志和执行结果有明确指示,日志中输出重要工艺参数,最终操作是否成功,执行过程中是否有异常状况等信息都需要在日志中有明确的描述,当前最新配方文件名称、关键控制信息等需要在界面准确、直观显示出来。图4为当前生产正在使用的工艺配方文件名称截图:
5 OPC客户端开发
OPC协议包括DA、AE、HAD等,本文客户端开发是基于DA协议的客户端开发,客户程序的关键部分是OPC接口部分的设计。客户程序可以包括程序初始化、数据采集、显示、存储、打印等功能,其中OPC相关数据需要通过OPC接口访问OPC服务器,对服务器数据进行存取。开发客户程序之前,需要了解服务器的大体情况,比如需要访问的服务器是否提供自动化接口、服务器的OPC的版本,配置好客户机和服务器DCOM环境,并且能用第三方工具浏览服务器数据,在调试过程中随时使用第三方工具配合调试。OPC 客户端开发主要步骤包括:
1)读取CSV格式配置信息,初始化相关对象。
2)创建服务器对象,建立与服务器的连接。
3)创建组,添加需要访问服务器标签到链表,在回调函数中刷新在服务器端值或状态发生改变的标签,完成标签读取和刷新。
4)通过OPC同步或异步接口写数据,完成在客户端对服务端数据改变或调整。
5)断开连接,释放资源,清理现场,保存数据。
注意事项:
设计时需要注意OPC对象的VARAINT结构类型、引用计数问题、内存管理问题、处理错误返回代码问题。由于一个OPC客户程序可能与多个OPC服务器相连,因此设计时也最好采用多线程,同时与多个OPC服务器程序进行交换以保证较高的通信效率。另外客户程序中OPC接口部分如何与其他功能模块进行数据交换需要根据实际情况仔细考虑。
直接使用COM库函数开发OPC客户端,是最基本也是最灵活的方式,这种开发方式难度和工作量都大,要求开发人员对OPC规范和COM技术原理有比较深入的了解。早些时候VisualC++编译器还不支持模板,因此,它们不得不借助非模板的其他手段来将COM功能掺入类中,现在,随着计算机技术的发展,实现的手段越来越多。现在,互联网上有一些免费、开源的OPC客户端开发工具包,利用这些工具包可以快速地开发OPC程序。本系统引入Wintech OPC Server Client Develop Kit (1.0)[4],依据VC面向对象开发的特点,考虑到开发的方便程度,把Wintech OPC Server Client Develop Kit的API函数封装到一个COPCClient类中,使此类具备完成OPC客户端相关操作的全部功能,主要功能包括:OPC服务器的连接;添加标签组;浏览标签;读取服务器状态;写标签(同步/异步);读配置文件;读CSV类型配置文件;读取字符串类型标签值;读取浮点类型标签值等功能。此处把封装类的成员变量和成员函数声明截图如图5。
6 配方文件读写实现
配方是生产的依据,也是工艺参数的数据表现。本系统采用二进制文件保存配方,就需要在两种不同的开发和运行环境中都能对其进行浏览、增、删、改、查等操作。在WinCC软件内部,利用组态软件提供的内置的标准C脚本,保存工艺员配置的工艺配方。需要注意的是:由于文件名称是WinCC程序、VC开发程序、甚至是系统自带的资源管理器进行浏览或操作的关键要素之一,其命名尽可能科学、合理、直观,如下图为生产过程试验配方浏览试验截图如图6。
用脚本编辑器部分贴图读函数如图7。
考虑到两种不同的开发环境,为方便配方功能的统一调试,特意编写一个统一的日志接收器,发送端和接收端采用Window平台支持消息传递的机制,把被调试程序作为消息的载体,把程序的中间變量、运算结果、异常信息等内容格式化输出到字节数组缓冲区,把此缓冲区内容作为信息传递的一个参数,发送给消息接收程序:日志接收器。日志接收器是一个单独程序,独立运行,每次需要接收其他程序发送的日志,则启动此程序进行接收,如对日志不感兴趣,则可不运行日志接收器。考虑到日志接收器作为全部开发环境的日志接收工作,在日志接收器中加入的判断程序是否创建运行实例的功能,保证日志接收器任意时刻只运行一个实例,全部程序的日志都输入到此接收器中,便于开发人员排查故障、优化性能、重构代码。优于加弹窗、下断点、写文件等常规调试方式,采用跨进程日志接收器做调试器的好处是不会中断程序的执行,阻塞消息的传递,输出信息在日志接收器实时刷新,并可手动保存日志信息。
WinCC进行功能扩充,加入对DLL(程序动态链接库)支持,此举极大扩充了WinCC这款组态软件的功能,把以前很多在组态软件内部难以实现的功能,交由第三方开发工具来实现,把实现好的功能统一封装到DLL中,在组态软件中进行调用,极其方便。利用组态软件这一功能,把好多后台服务、通信、日志发送等功能都封装到DLL中,极大拓展组态软件功能。图8为从WinCC内部使用自己开发的DLL模块截图,截图展现的是引用跨进程发送日志函数的用法,Dout开头的函数是发送日志函数。图8为WinCC引用DLL模块日志发送函数图。
7 结论
通过在多个项目控制系统实践,验证了工业组态软件和自主开发软件之间采用OPC协议交换数据的可行性;同时,基于二进制配方文件的存取为一种简便、高效的配方存储方式。系统目前通过验收,进入正常生产状态,不同开发工具合理使用,不同应用程序的无缝集成,保证了整个系统各个功能协调有效运转,为客户生产创造巨大的经济效益。
参考文献
西门子(中国)有限公司 自动化与驱动集团. 深入浅出西门子WinCC V6[M]. 北京航空航天大学出版社 2013.3.
梁伟. Visual C++网络编程案例实战[M]. 清华大学出版社 2013.9.
(德)马科,等. opc统一架构[M]. 机械工业出版社 2012.1.
WTclient DLL User’s Guide[J].