《S5S7系列可编程控制器软件设计编程典型错误分析及预防措施》由会员分享,可在线阅读,更多相关《S5S7系列可编程控制器软件设计编程典型错误分析及预防措施(4页珍藏版)》请在金锄头文库上搜索。
1、S 5 S 7 系列可编程控制器软件设计编程 典型错误分析及预防措施2 0 试验训练基地发射测试站熊显潮谢玉玲4 摘要本文首先介绍了E S & S T 可编程控制器的工作原理,分析了可编程控制器应用软件在设计编程过程中容易出现的几种典型错误,在此基础上,提出了预防软件设计编程错误的措施,对提高S 5 & S 7 系列可编程控制器应用软件设计编程的正确性、可靠性和安全性具有较强的指导意义。主题词可编程控制器容错技术寻址中断冲突1 ,s 5 s 7 可编程控制器概述S I M A T I Cs 5 & S 7 系列可编程控制器( P L c ) 是S I M E N S 公司的新旧两代产品,属于中
2、大型的可编程控制器,具有灵活性好、功能强、编程容易等特点,并且具有很高的可靠性,在大中型企业的自动化控制系统中得到广泛应用,S 7 同s 5 比较,具有体积小、质量轻、硬件组态方便、语言功能强大、资源丰富、容量大及w i n d o w s 编程界面等优点。可编程控制器程序分为两个部分:系统程序和用户程序。系统程序集成在P I G 的C P U 模板上,相当于用,户程序运行时的工作平台。P L C 运行时,用户程序由系统程序循环调用执行。图l 为系统程序所处理的事件示意图。系统程序运行时要处理的事件有:执行启动事件( 冷启动热启动) ,刷新输入映象区( P l i ) ,刷新输出外设,循环调用
3、用户程序,处理时间事件、中断事件,内存管理,检测并处理错误事件,与编程器的通信等。系统程序通过不同的组织块( O B ) 调用循环程序和响应各种事件。循环程序是用户程序的主体,系统程序对循环程序的调用接口是O B l 。系统程序在启动O B l 中的用户程序之前,重置监视扫描时间的计时器,读出输入模板上的信号状态并传送到输入过程映象( P ) ,更新内部处理器通信标志。在O B l 中的程序循环扫描时,可在中断点插人中断处理程序。中断处理程序由中断事件而触发,中断服务例程结束后,系统程序从中断点恢复0 8 1 程序的执行。口口口口口口口口口口口口 k、口口口口口口口口口口口口 参一卜_广I口口
4、口口口口口口口口口口口口口昌昌吕黜媳l 咖一咖。口口图l 可编程控制器响应的事件2 典型故障本文中的软件故障是指由于软件设计错误或抗干扰能力差的软件缺陷。可编程控制器软件的运行方式与通用计算机程序有明显不同,因此软件错误模式也有其不同特点。,1 5 2 口I_亡I口lg口色向酽一n广llnr_,JU-1、口口口口口口口D口口口口口口口口口口口口口口口口口0l l I l AI | 2 1 周期时间错误 可编程控制器的主要任务是过程监控,其应用软件运行的特点是对程序中的每条语句进行周期性的循环扫描。扫描时间太长会延误信号采集和控制,导致控制错误。如果系统程序监视每一个扫描周期超过设定的允许值,就
5、会立即产生一个中断处理超时事件。如果中断服务程序没有定义,处理器停机。出现扫描超时错误的原因多是程序在某个环节进入死循环,或是不恰当的延时设计。例如:某贮藏燃料的贮罐需执行以下自动控制:“开阀门1 ,延时5 秒开阀门2 ”,下面的设计方法必然发生超时错误:Q Q Y V l打开阀门ILK T 0 5 0 1装载时间参数5 8s DT7 0启动定时器T T 0M o o l :标号A NT 7 0扫描定时器T 7 0、J C = M 0 0 1若定时时间未到则等待,造成超时错误Q Q Y V 2定时时间到后打开阀门2正确的源代码应该是:Q Q Y V l打开阀门1LK T 0 5 0 1装载时间
6、参数5 ss DT7 0启动定时器1 7 0A N T7 0扫描1 7 0B E C若定时时间未到则返回Q Q Y V 2定时时间到后打开阀门22 2 资源冲突可编程控制器软件开发的另一个特点是在有限资源下工作,不能期望像使用高级语言那样任意占用内存空间。在用户程序中,各种类型的软件块的使用、数据块分配、标志区的使用等,必须全部纳入软件设计的规划中。用户程序中使用最方便的存储空间是标志区,但标志区的大小只有2 5 6 字节,是最容易发生冲突的系统资源。必须避免对标志区的任何不受控制的重叠使用。遵循下面的原则可能有助于这种混乱局面的产生:( 1 ) 合理分配资源。尽可能使用数据区作为中间变量。S
7、 T E P5 和S T E P7 允许定义多达2 5 6 个数据区,每 个数据区都可以有最多2 5 6 个字( w 砌) ,如果设计一个与其他数据块没有数据交换的程序,使用数据块作为中间变量将节约大量标志区资源。( 2 ) 资源重用。经过保护设计后,标志区也是可以重叠使用的,方法是模块使用前先将其当前值保存到一 个数据块中,使用后从数据块中恢复。特别强调的是,程序必须把恢复标志区内容的代码,作为该模块的唯一出口。中途结束程序( 例如使用B E C 或B E U 语句) 将因为标志字无法恢复导致系统错误。( 3 ) 科学管理资源。随意性是软件质量的最大敌人。一个规模较大的过程控制软件可能包含数
8、百个模块和上万条语句,不受约束对资源的随意使用将付出巨大代价。在设计期,用表格的形式列出每个模块允许使用的资源是十分必要的。对于标志区,有时需要定义每一个b i t 的意义。2 3 容错性差,容错性差是指在软件运行过程中,由于某种原因产生了错误输入后,程序没有立即对该输入做出反应,而是暂存该错误输入,到某个时刻条件满足时被激活,产生非预期的控制输出。从根本上讲,这种错误记忆是软件设计缺陷造成的,没有对程序的输入进行细致的分析和有效性检查,对错误的输人无法屏蔽,造成软件抗干扰能力弱,无法保证软件的正确性。2 4 寻址错误本处所述的寻址错误主要是间接寻址参数的替换错误。间接寻址语句的寻址地址存储在
9、一个变量中,其越界错误比通常的直接寻址方式更难以被发现。间接寻址可能避开编程工具的检查,潜在危险是显而易见的。某燃料库房的P L C 控制软件在调试和工序演练过程中,多次出现误启动1 号泵的严重故障现象,原因就是间接寻址不当造成的,因为某种原因,P L C 需要完全复位,导致泵、贮罐数据块内参数全部清零,而操作手有时没有1 5 3对参数进行有效装订和检查,程序在运行以下程序时必然会误启动1 号泵。例如某工序需打开装订第1 贮罐出液阀,源代码如下:CD B1 3打开贮罐参数数据块D B l 3D OD W1D W l 中保存装订1 号贮罐出液阀地址SQO 0将D W l 中保存的输出地址处置l
10、,完成对装订出液阀的控制如果贮罐参数没有装订,数据块中的数据全部为零,造成1 # 贮罐的出液阀地址是Q o 0 ,而这个地址有刚好又是l 号泵的控制地址,导致程序直接启动1 号泵,可能造成严重的故障。出在P L C 控制软件程序中,间接寻址是实现某些设计目标的唯一手段,因此防止间接寻址错误是我们必须面对的一个问题。避免间接寻址参数替换错误的唯一方法是在进行替换之前进行合法性检查,并拒绝替换非法的间接参数。2 5 中断错误如图1 所示,可编程控制器程序的中断包括过程中断和定时中断两种类型。当来自过程的一个信号导致可编程控制器的处理器中断程序的循环扫描而转向一个指定的程序时,这种处理即是中断驱动,
11、也称过程中断,服务。S T E P5 语言的O B 2 到O B 5 专门用于过程中断服务,分别对应于、4 条中断输入线( I n t e r r u p tL i n e ) 。必须设定专用模板并编写相应的中断服务程序,过程中断才能够产生并正确处理。与中断有关的典型软件错误是断点破坏和中断冲突。断点破坏是指中断服务程序窜改了被中断程序的变量,导致中断程序执行完毕后程序运行出错。循环程序O B l 中的每一条S T E P 5 语句之后都可以被中断,因此,中断服务程序插入点一般是不可预测的。如果中断服务程序中使用了循环程序的变量,必须要保护现场,否则中断服务结束后循环程序可能无法继续正常运行。
12、安全的做法是在服务程序入口处将程序中使用的全部中间标志传人一个数据块,中断服务程序结束时,再将保存的信号状态传回标志。中断是有优先级的。过程中断优先级高于定时中断,因此定时中断服务程序也可能被过程中断所中断。当一个过程中断和一个定时中断同时到达时,过程中断服务程序首先被调用。只有此次过程中断以及在中断服务程序运行期间到达的其它过程中断的服务程序都被执行后,系统才会响应定时中断。过程中断数过多,或中断服务程序过长,会导致定时中断服务被严重延误,出现一个定时中断服务程序运行期间另一个定时中断到达,从而出现定时中断冲突。系统程序将中断冲突视为严重错误,会立即停止可编程控制器的工作,从而产生非正常停机
13、的严重后果。2 6 模块控制错误在S T E P 程序中,程序是以模块作为基本单元的,各模块间可以存在调用关系。在进行程序设计和编码过程中,应严格控制各模块问的调用关系,一旦放宽控制条件,就会造成程序工艺流程上的错误。解决此类故障的最好办法是严格控制模块的调用条件,使相关功能块在对应限制条件下被调用,此类问题就可以迎刃而解。3 预防错误措施以上列出的典型错误,多数与编码有关。透彻理解系统工艺流程,全面掌握编程语言,能够避免多数的编码错误。编码错误只是软件错误的一个方面,要进一步提高软件质量,还需从设计、测试等方面入手。此外特殊功能设计,例如引入容错技术和安全设计技术等,能够使程序在发生错误时自
14、动处并避免对系统产生危害。3 1 保证合理设计如果不考虑需求分析的偏差,软件设计缺陷就是软件错误的源头。在软件的生命周期中,软件错误具有累积和放大效应,因此纠正设计错误的开销要远远大于程序编码所消耗的时间,由此可见,软件的合理设计就显得尤为重要。从软件单元、软件部件到软件配置项的开发都必须通盘考虑,软件的开发过程应符合总装备部下发的总装备部软件工程技术规范中关于软件开发的各种要求。3 2 进行严格测试高质量的软件一方面需要软件设计人员要有良好的设计思想和编程思路,整个软件要有清晰合理的结构。另一方面,软件更需要进行严格的测试来验证和改进其质量,即使是再好的设计和编程人员,他也很难一次将 整个软
15、件单元或软件部件编写得一点漏洞也没有,他始终要有一个从设计到编写、测试、再设计、再修改、再测试的过程,直到整个软件测试单元满足所有测试用例的要求。如果测试单元被质量不高的测试用例通过,许多15 4 路径和语句都没有被测试到,整个软件的质量又如何得到保证呢? 从测试的角度来看,所有被测试单元除了应满足其基本功能、接白功能及通过重要路径测试外,还必须达到分支覆盖率1 0 0 、语句覆盖率达到1 0 0 的测试要求,只有这样,软件的质量才能够得到保证。当然,严格的回归测试也是必需的,当测试对象测试未通过或因其它原因进行更动之后,必须验证测试软件更动之后更动部分的正确性,和对原有功能和质量特性的不损害
16、性。3 3 使用容错技术一套软件不仅要在正常模式下工作正常,更应该对错误的输入信号或错误的命令采取“冷”处理,不使错误的输入信号或者命令干扰正常程序的运行。某贮藏燃料库房的P I E 应用软件就使用了大量的容错技术,如工序参数的有效性检查、无效命令的容错、计数器计数溢出时数据跳变的滤波处理等等,都是容错技术在该控制软件中的应用。前面2 3 节所提到的错误记忆就是由于软件的容错性不强而导致的不良后果。3 4 增加安全设计勿容置疑,安全设计是每一名设计人员首先应考虑的设计需求之一,对于安全性要求比较高的设备而言,其软件的安全设计必须做到慎之又慎,万无一失,不仅要从硬件上保证设备的质量和可靠性,更要从软件上加以保护。例如,某贮存有毒燃料库房的自动控制系统中,必须考虑对泵后压力、泵输出流量、贮罐液位、贮罐压力的安全设计。致谢本文总结了s 5 路7 系列可编程控制器软件设计编程的工作经验,对设计编程过程中容易出现的典型错误和预防措施进行了比较深人的分析和探讨,在实