基于升船机控制系统的PLC软件设计
2014-06-25郭维礼黄建平
郭维礼,黄建平
(西安航天自动化股份有限公司,陕西 西安710065)
1 引言
虽然系统论的概念是近代才提出的,但用系统的方法来分析事物和解决问题,在中国古代就有记载,象易经、黄帝内经等。
再如我国至今为止,年代最久、唯一留存、以无坝引水为特征的都江堰水利工程,实现江水自动比例分流、自动比例排沙、控制进水流量(宝瓶口与飞沙堰),就是系统在实际工程中的应用。
本文以已经完成的某升船机主提升控制系统的设计为例,进行整理和具体阐述自动化软件设计在较大型自动化控制系统中的应用。升船机控制系统作为一个较大型的控制系统,由多个子系统组成,各子系统之间需要紧密的、准确的配合,才能完成升船机安全可靠运船过坝通航的功能。
2 系统结构
本升船机控制系统主要由上位操作计算机、主提升子站、传动子站、承船箱子站组成,每个子站各设有人机界面。控制系统通讯的物理拓扑采用光纤以太网环网。主提升子站与其它子站间通过电缆连接进行开关量信息交换。
3 主提升子系统的软件架构设计
用系统的概念来考虑问题,要求我们设计时应考虑到整体→局部→具体细节,还应考虑到具体细节→局部→整体。主提升子站的软件架构也是按照这个思路来设计的,即系统→子系统→功能和功能→子系统→系统。软件架构是控制系统软件的框架,它对软件的程序流程、测试和维护有很大影响。良好的架构能使程序结构条理清晰、可读性强,在做维护和修改时能较容易找到需要查找的部分,还能有效减少维护和修改的时间,也能降低工作人员的出错率[1~2]。
较大型控制系统的软件设计人员必须非常清楚系统设备的特征及设备的正确使用、各设备之间的准确关系及控制系统设备的整体流程,其流程主要包括运行流程和事故处理流程(图1),并应形成文档。
控制系统的软件架构设计如图2所示,按照信号的先后处理顺序分为输入、处理、输出和执行四列。按照信号输入的类型粗分为I/O 输入、通信读入、硬连接输入三类,每一类里面根据信号的作用不同,可以细分更多的小类。处理过程分为故障判定及处理、指令处理、程序流程处理三大类。输出分为三个汇总类。执行再次对输出汇总,按照固定的接口输出。这种架构设计实际上形成了一个网状结构,把复杂问题简单化,使结构层次更清晰。处理好每一列每一个网格的功能后,整个系统的功能也就基本实现了。整体和部分的有机结合,很好地实现了复杂控制系统的控制功能。相关文档的建立对于软件架构设计也是很重要的,首先可以有效发现架构设计中存在的功能缺陷,利于随时补充完善。其次可供自己以后查阅或方便接手后续工作的第三人了解项目[3]。
图1 示意流程图
图2 功能逻辑图
4 主提升子系统软件设计
基于系统的安全性、可靠性、健壮性、可测试性、可复用性、可扩展性、可维护性等的综合考虑,主提升子站软件结构人为地分成了主提升子站子系统、上闸首站子系统、中控室上位计算机功能、传动子站功能、承船箱子站功能。主提升子站子系统分制动器控制功能、检测功能、与人机界面的交互功能等。上闸首站子系统分上闸首闸门控制功能、充泄水蝶阀的控制功能、充压水封装置的控制功能、检测功能等(图3)。
对于编程语言的选择,要依据设计者本人的知识特点和要实现的功能的复杂性考虑,选择用梯形图(LD)、功能块图(FBD)、结构化文本(ST)或指令表(IL)。也可以几种语言混用,梯形图(LD)、功能块图(FBD)直观易读,结构化文本(ST)更适合复杂的运算、消息处理等。
图3 主提升子站通讯功能拓扑图
4.1 功能变量定义
为了系统结构的清晰明了,对主提升子站的变量按子站、通讯、设备和功能进行变量名的定义,并建立相应的文档。变量的定义和具体程序段的编写,实现设计思路中局部→具体细节的分解。变量的定义和具体程序段编写的合理与否,直接关系到软件局部的质量,并会影响整个系统的软件质量。
变量名结构:aa_bb_cc_dd
aa:变量定义的最高一级,主要定义信号的来源,即来自哪个子站或信息交换的方式。
M:主提升子站(main),主提升子站自己的变量和外送的变量,省略不写;
DR:传动子站(drive);
UP:上闸首站(upper lock);
T:承船箱子站(tank);
IO:主提升子站接收的其它站的电缆连接信号(i/o connection),又分为IO_dr,IO_t。
HMI:与人机界面的通讯信息;
ST:送往船厢子站的信息(send to tank);
SD:送往传动子站的信息(send to drive);
RT:送往船厢子站的信息(receive tank);
Step:上位计算机发单步指令;
Auto:上位计算机发自动指令。
bb:主要针对本站I/O 量的变量定义。对于通讯交换变量,略去bb。
I:开关量输入;
O:开关量输出;
Is:上闸首开关量输入;
Os:上闸首开关量输出;
AI:模拟量输入;
AO:模拟量输出。
cc:
具体设备名称的命名,要与其文字意义一致,便于识别。如充压水封:airvalve;充泄水蝶阀:watervalve1,watervalve2;制动器:braker 等。内部中间变量,直接命名。对于非具体设备,可以省略,如上升、下降等。
dd:
具体功能名称的命名,要与其文字意义一致,便于识别。如闸门的开启:open;闸门的关闭:close;闸门的停止:stop;全开:fullo;全关:fullc;水位:waterlevel;备用点:backup 等等。
4.2 程序段的划分
按照程序处理的逻辑功能的不同,划分多个程序段,不同的程序段执行不同的功能,且在功能的处理上是基本独立的。具体实现设计思路中整体→局部的分解。程序段的划分要做到软件结构清晰。各程序段功能的划分和程序段间的逻辑连接如图2所示。
①输入按照来源和功能的不同分为I/O 输入、通信读入、硬连接输入。I/O 输入是采集现地各设备的状态、故障信号或测量数据,通信读入是通过以太网读入的上位机指令或其它子站的交换信息,硬连接输入是本升船机控制系统特别设置的安全保护信号,用于紧急事故的处理。
②按照信号输入的不同,对信号进行故障判定、指令处理、数据处理、流程程序等的处理。
在本控制系统的实施中设计有报警程序段,实现对故障信号的判定,以在流程处理程序段中使用故障报警功能。故障分停机故障(第一类故障、第二类故障等)和报警故障两大类,停机故障发生时按照预定的停机流程停机并报警,报警信号发生时只报警。硬连接输入的停机信号进行I/O 采集的同时直接送到执行原件,执行停机动作。
指令处理程序段:对本控制系统人机界面的短操作指令和上位机操作员站的短指令做一个变换处理,以便于流程的执行。
数据处理:对于采集的压力、水位、行程、速度、转矩等数据,用结构化文本(ST)来计算、处理,这样,程序便于编写、直观易读。
流程程序程序段:实现流程处理功能,使程序按照预定的设计流程执行动作,完成控制升船机设备运送船只过坝通航的任务。
③输出程序段:对按照程序流程处理的各种中间结果进行汇总,输出到执行元器件。
④执行程序段通过硬件来实现,执行元器件按照流程判定的结果执行对各设备的动作和报警。
4.3 自定义功能块
在做多个数据处理或执行某类相同的动作时,尽可能考虑使用用户自定义的功能块。这样,有利于保持功能的一致性,避免重复劳动和编程失误。在做某些功能变更时,只要修改定义的功能块就能解决问题[4]。
4.4 程序内部功能接口
在PLC 编程应用中,内部功能的软件接口其实是一个模糊的概念,暂且就叫“程序内部功能接口”吧。这里主要是指故障和事故功能的转接或连接接口。正确的思维才能导致正确的结果,而错误的思维可能导致结果的不确定。每一种功能的处理都应确保有确定的结果,而且与其它的功能结果没有冲突。程序内部功能接口要做得尽量简单,数量要做到最少,最好是同一种类型的事故信号只有一个出口,这样才能保证流程设备动作的一致性。如果不这样做,可能会出现特定情况下,设备动作与流程中预期的不一致,而且,这种不一致很难用模拟的方法来重现。
4.5 注释
所有的自定义变量,都做相应的中文注释。在软件中查找时,就能直接知道变量的用途。在程序段中相应的位置也做一些中文标注,如上游水位值的处理、判定,船厢行程的计算,船厢高程的校正等。必要中文信息的添加,会使软件阅读变得更加容易。
4.6 与人机界面的交互
人机界面用于设备状态监视、故障信息查看和必要的界面操作功能。友好人机界面在设计实现功能的同时,还应考虑用户操作的便利性和实时性。本文设有菜单画面、主画面、流程操作和参数设置画面(密码登陆)、I/O 显示画面、帮助画面等等,画面分工简洁明确。本文选用以太网通讯方式,要交互的数据放在连续的数据块中,能有效减少人机界面读写数据的次数,增强数据交换的速度。本文选用RISC 400MHz 处理器10″TFT 人机界面,保证了画面的速度和色彩。
当然,设计在实现功能的同时,还要考虑画面的美观性。用户的每一次操作都是一个愉悦的过程或是用户在操作时想不起人机界面的存在,这样的设计才是好的设计,也应是设计者追求的方向。
5 软件调试
软件调试是软件设计的一部分,是软件设计的延伸。软件设计的质量相当大一部分工作是在软件调试过程中得到验证和保证的。软件调试按时间大致可分为编程过程中的模拟调试、厂内联机调试和现场调试。
现在的PLC 软件好多带有离线模拟功能,在编程过程中随时可以进行软件的错误检查和功能的模拟检查。通过模拟运行程序,可以有效地发现和排除能在编程阶段发现的错误,以提高软件质量,缩短联机调试时间。
联机调试(厂内调试),不仅是验证软件编写的正确与否和流程功能正确与否的关键过程,也是进一步完善软件架构、功能和优化局部功能的过程,要特别注意对各个边界条件和数据的调试。
“第一次就把事情做对”。调试只是一个发现问题和解决存在问题的必要手段。调试过程中没有发现问题,并不能说明软件就没有任何问题,所以我们要有从源头上杜绝问题的思想,这也是为什么要做软件架构设计的原由。笔者以为,如果一个软件的调试比软件编写花费同样时间,甚至更长时间,那么这个软件的编写基本上是失败的,除非存在难以解决的设备间接口或通讯问题。本文使用软件架构设计方法编写的软件调试包含场地准备、硬件检查在内只用了一个多月时间,其中对于软件部分的调试主要集中在检查闭锁条件的正确性和通讯功能,显著缩短了调试时间,改变了以前升船机控制系统厂内调试用时长达数月的状况。
软件调试过程中过多的更改和功能补丁,会使得软件的结构支离破碎,会增加后续维护时的工作量,也会使得功能的可扩展性变得困难。
控制系统经过厂内调试,在现场安装后还要进行现场调试。现场调试主要是标定实际运行参数、检查和调试现场条件与原设计条件的变更,进一步检查验证和完善流程功能,并根据现场实际情况增加软件的保安措施,增强系统的安全可靠性。
6 结束语
本文研究了用系统的方法来做较大型控制系统的软件设计和架构设计,其软件结构紧凑、条理清晰、整体性强,能有效缩短调试时间。本文采用适当的中文注释和技术文档,使得软件便于阅读、调试、维护和扩展,增强了软件的功能和质量,也便于在以后类似工程中参考应用。
[1]李伟,吴庆海.软件架构的艺术(架构之美)[M].北京:电子工业出版社,2009.
[2][美]Jared R,Richardson William A,Gwaltney Jr.软件项目成功之道[M].苏金国,王少轩 等译.北京:人民邮电出版社,2011.
[3][美]普雷斯曼(Pressman,R.S.).软件工程:实践者的研究方法(第7 版)[M].郑人杰,马素霞 等译.北京:机械工业出版社,2011.
[4]郭维礼.漫湾水电厂机组进水口事故闸门控制系统改造应用[J].水电厂自动化,2012,33(1):52-54.