提高程序稳定可靠性的方法V1.0
浅析提高程序稳定可靠性的方法
编号:
kj2015-3B-6-V1.0
2015-10-20
目录
目录 .................................................................................................................................................. 2 更改记录........................................................................................................................................... 3 前 言 .............................................................................................................................................. 4 第一章 程序质量的评价标准......................................................................................................... 5 第二章 如何提升程序员的“性能” ............................................................................................. 8
1.提高文档编写能力............................................................................................................... 8 2.广泛阅读............................................................................................................................... 8 3.养成好的编程习惯............................................................................................................... 8 4.提高对软件需求的理解....................................................................................................... 9 5.复用性和模块化思想........................................................................................................... 9 6.锻炼自己的测试能力........................................................................................................... 9 7.问题是最好的学习机会....................................................................................................... 9 第三章 程序编制的步骤............................................................................................................... 10
1.熟悉工艺需求及控制要求................................................................................................. 10 2.元器件的使用方法............................................................................................................. 10 3.硬件组态和网络配置......................................................................................................... 10 4.制作符号表......................................................................................................................... 10 5.编制程序............................................................................................................................. 11 6.调试程序............................................................................................................................. 11 7.保存完善............................................................................................................................. 11 第四章 提高程序稳定性的方法技巧 ........................................................................................... 12
1.自锁与互锁......................................................................................................................... 12 2.置位与复位......................................................................................................................... 12 3.滤波防抖............................................................................................................................. 12 4.信号握手............................................................................................................................. 13 5.冗余回路............................................................................................................................. 13 6.自行诊断............................................................................................................................. 13 7. 使用NC信号..................................................................................................................... 14 8.模块化编程......................................................................................................................... 14 9.合理选用安全产品............................................................................................................. 14 9.1 控制等级的要求............................................................................................................. 14 9.2 控制等级的选择............................................................................................................. 16 第五章 附录................................................................................................................................... 16
更改记录
版本号 kj2015-3B-6-V1.0
更改日期
更改内容
修改人
完成V1.0版本的编制。
前 言
PLC是80年代发展起来的新一代工业控制装置,它是集自动控制" 计算机和通信技术于一体的产物, 因其具有通用性好,可靠性高,维修方便,性价比高,编程方法容易等优点, 在90年代便广泛应用于工业控制领域;但是,如果PLC程序的稳定性不高, 工厂的生产效率将得不到提高,甚至会产生人员伤亡和设备损坏安全事故,因此提高控制系统的稳定性具有十分重要的意义。现在,控制程序的稳定性和可靠性是衡量一个工程项目质量的关键因素,直接影响到客户使用的满意度。
而控制系统的稳定与否,受制于多方面因素:控制方案的合理性,产品选型,安装接线的规范,程序编制的质量等等。本文从控制程序编制的角度出发来阐述编程的注意事项和技巧,以提供给编程人员特别是初入人员一些编程思路和帮助。
由于编者水平有限,虽经修改,仍有缺点和错误,望各位同事不吝批评指正,以便今后对本文进一步调整和完善。
第一章 程序质量的评价标准
PLC程序最好的检验方法是实践,看程序能否达到预期的目的。但这还不够。因为能达到目的的程序也有好与不好之分。到底什么样的程序才算好的程序呢?大体的评价原则有如下几个方面:
1.正确性
PLC的程序一定要正确,并要经过实际工作验证,证明其能够正确工作。这是对PLC程序的最根本的要求,若这一点做不到,其它的再好也没有用。
要使程序正确,一定要正确地理解PLC的硬件结构及其工作原理,准确的使用程序指令。准确的使用指令与准确理解指令相联系,为此对指令含义和使用条件一定要弄清楚。必要时,可编些小程序对一些不清楚的指令作些测试。
同一指令,由于PLC的出厂批次不同或是PLC的系列型号的不同,一些指令细节有可能不一样,应仔细查阅编程手册。
2.可靠性
程序不仅要正确,还要可靠。可靠反映着PLC程序的稳定性,这也是对PLC程序的基本要求。
有的PLC程序,在正常的工作条件下或合法操作时能正确工作,而出现非正常工作条件(如临时停电,又很快再通电)或进行非法操作(如一些按钮不按顺序按,或同时按若干按钮)后,程序就不能正常工作了。这种程序,就不大可靠,或说不稳定,也是不好的程序。
好的PLC程序对非正常工作条件出现,能予以识别,并能使其与正常条件衔接,可使程序适应于多种情况;而对非法操作能予以拒绝,给予报警提示,且不留下任何“痕迹”。联锁是拒绝非法操作常用的手段,继电电路常用这个方法,PLC也可继承这个方法。
3.简短性
使PLC程序尽可能简短,也是应追求的目标。
简短的程序可以节省用户存储区;多数情况下也可节省执行时间,提高对输入的响应速度,还可提高程序的可读性。
程序是否简短,一般可用程序所用的指令条数衡量,用的条数少,程序自然就简短。要想程序简短,从大的方面讲,要优化程序结构,用流程控制指令简化程序,从小的方面讲还要用功能强的指令取代功能单一的指令,以及注意指令的安排顺序等。
4.省时性
程序简短可以节省程序运行时间,但简短与省时并不完全是一回事, 因为运行程序时间虽与程序所拥有指令条数有关,而且还与所使用的是什么指令有关。 PLC指令不同,执行的时间也不同。而且,有的指令,在逻辑条件ON时执行与在OFF时执行其时间也不同。
另外,由于使用了流程控制指令,在程序中,不是所有指令都要执行等。所以,运行程序的时间计算是较复杂的。但要求其平均时间少,最大时间也不太长是必要的。这样可提高PLC的响应速度。
省时的关键是用好流程控制指令。按情况确定一些必须执行的指令,作必备部分,其余的可依程序进行,有选择地执行,或作些分时工作的设计,避免最大时间太长等。
5.可读性
要求所设计的程序可读性要好。这不仅便于程序设计者加深对程序的理解,便地调试;而且,还要便于别人读懂你的程序,便于使用者维护;必要时,也可使程序推广。 要使程序可读性好,所设计的程序就要尽可能清晰。要注意层次,实现模块化,以至于用面向对象的方法进行设计。要多用一些标准的设计。
再就是I/O分配要有规律性,便于记忆与理解。必要时,还要做一些注释工作。内部器件的使用也要讲规律性,不要随便地拿来就用。
可读性在程序设计开始时就要注意。这不易完全做到。因为在程序调试的过程中,指令的增减,内部器件的使用变化,可能使原较清晰的程序,变的有些乱。所以在设计时就对调试增减留有一定的余地,然后调试完毕后再做一下整理,这样所设计的程序具有更高的质量。这里向大家推荐EISENMANN,DURR, PENTANOVA的程序,可借鉴其程序框架结构,符号命名方式等。
6.易改性
要使程序易改,也就是要便于修改。
PLC的特点之一就是方便,可灵活地适用于各种情况,其办法就是靠修改或重新设计程序。
重新设计程序用于改变PLC工艺的用途要求的情况,不仅程序重编,而且I/O也要重新分配。多数情况下不需要重编程序,作一些修改就可以了,这就要求程序具有易性,便于修改。
易改也就是弹性,要求只要作很少的改动,即可达到改变参数或理改动作的目的。
在设计PLC程序的过程中,能够满足以上6方面的要求的就能称的上是一个好程序了。
七.容错性
程序在不规范的操作下要有完整的保护功能。
不规范的操作不会引起设备发生事故,而造成人员伤亡和设备损坏,能及时准确给予响应和报警提示;有完整的自我诊断功能和故障信息提示。
第二章 如何提升程序员的“性能”
程序员经常痴迷于优化程序的性能,我们始终会围绕一些让人绞尽脑汁的优化建议,比如:如何简化代码、如何提升软件运行速度、如何提高软件稳定性等等。然而程序是由程序员编制的,程序员的“性能”提高,自然会提高程序得水平。接下来讨论一下程序员优化自身“性能”的一些建议。
1.提高文档编写能力
缺乏文档,对软件开发是致命的,一方面是软件无追溯能力,无法找到软件开发的起源,思想;另一方面,则是为后续软件查错,软件升级带来麻烦。作为早期的程序员,技术文档占用的工作时间应该为30%,而高级程序员、系统架构师等则需更多的时间。一般的软件文档要求,本篇不多说,可以回顾入职前手头上的软件文档要求和样式。
2.广泛阅读
大部分程序员都缺乏阅读,也许是平时工作没时间,但这不是借口,在程序员自我提高的历程中,阅读时必不可少的。我们可以阅读大量的书籍、期刊以及优秀的源代码,甚至可以是微博。这里向大家推荐由码农网整理编辑的程序员期刊《快乐码农》,西门子工控论坛,西门子找答案等。
3.养成好的编程习惯
我们的程序员一般常会出现全局变量滥用,注释语言表达不到位,变量名采用拼音等,虽不影响开发,但却影响了后续程序交接和分享成果。
作为一些国外知名软件公司,如微软、IBM、甲骨文等,都会对程序员开发的程序进行代码要求,代码的变量名要规范,关键代码段需要注释,注释格式统一,甚至嵌套中行缩进的长度和函数间的空行数字有明确的要求,作者及修改时间都有详细说明。 在编写代码前先做好设计流程图,清晰化整个设计意图。 我公司也在陆续出台程序编制的相关标准,希望大家及时查阅。
4.提高对软件需求的理解
误区:入门的程序员一般不会对项目的需求进行刨根问底的分析和询问需求人员,拿到文档,即开始进行开发;在B/S架构(Browser/Server,浏览器/服务器模式)中,更经常出现前台需求与后台衔接的问题;
因此,在编制程序之前,我们应该弄清每一项工艺需求和控制要求;同时加强与协作专业和客户沟通,了解深层次需求内容,比如详细的控制参数;而对需求的把握不能从感性角度理解。
5.复用性和模块化思想
每个程序员在开发一个功能模块或函数的时候,应该多思考,不要局限在完成当前任务的简单思路上,思考一下,该设计的模块能否脱离这个系统存在,是否能够通过最简单的修改方式在其他系统或应用环境直接引用,这也是目前越来越推崇的模块化编程思维。
通过工作的实践与观察,发现我们团队一些同事在起步阶段,经常自己编写所有程序的事情,是很没有必要的,一方面自己思想需重新确立,另一方面是浪费了提升程序质量的时间去做重复的事情。
6.锻炼自己的测试能力
程序编制过程中问题发现的越早,解决的代价就越低。测试工作实际上也不麻烦,一是做正常调用的测试,看软件的基本功能能否实现,这也是许多公司常见的,也是唯一的测试,但这是不够的。除了常规测试之外,还需要进行异常测试,例如常见的传感器失灵测试、断电测试、错误逻辑测试等,只有全方位的掌握好测试办法,才能提高软件开发的质量。
在对程序的关键点进行测试的时候,一定要做好测试记录,以备将来查阅,避免再出现同样的问题。
7.问题是最好的学习机会
日本经营之神松下幸之助曾说过:“工作就是不断发现问题、分析问题、最终解决问题的过程,晋升之门将永远为那些随时解决问题的人敞开着。”可见,工作过程中有
问题是正常,没有问题才是真正的问题。在发生问题时,能勇于面对问题、解决问题的人,才能不断进步和提高。
第三章 程序编制的步骤
程序编制的过程一般按如下步骤进行: 1.熟悉工艺需求及控制要求
需求是程序编制的根本,只有准确把握了用户的需求,才能编制出理想的控制程序,才不至于后期进行大刀阔斧的修改程序,能有效降低项目风险。 这就需要勤于和用户及相关专业人员进行沟通确认,并形成必要的记录文件。
2.元器件的使用方法
一个控制系统大多会用到很多厂家或品牌的控制产品,编程人员不可能对每一款产品都了解。因此,在进行程序编制前要先从产品的供应商或者官方网站获取必要的技术资料和GSD文件,从而能快速准确对该元器件进行控制和使用。
3.硬件组态和网络配置
1) 通过GSD文件的导入将其它品牌的产品加入到产品选型目录中; 2) 设置包括CPU在内的各个模块参数; 3) 进行网络配置; 4) 地址分配;
4.制作符号表
根据电控图纸的要求,建立完善的符号表,以便程序编制时使用。如果控制系统的变量较多,为了提高速度,可将变量表导出成EXCEL文件,然后在该文件中进行编辑和添加,完成后再导入到符号表中。
5.编制程序
1) FC/FB/DB使用规划;
2) 程序架构的规划和建立(基本参数设定,初始化程序,网络诊断程序,用户程
序);
3) 制作和获取典型设备的模块化控制程序 (包含手动和自动控制功能,故障报警),
设备的控制程序一般要包含以下信息:
A. 过程或状态的描述(相当于继电、接触控制中的中间继电器); B. 人机操作控制(手动操作,参数修改等); C. 设备控制输出(电机、阀等);
D. 通信(各控制设备间的互锁和数据交换); E. 报警输出和故障位置等信息显示; F. 生产过程报表(产、质量等);
4) 调用功能和功能块,并完善调用参数;
6.调试程序 1) 系统上电; 2) 网络调试; 3) I/O测试; 4) 安全调试; 5) 手动调试; 6) 自动调试; 7) 接口调试; 7.保存完善
完善程序符号名称及注释,段落注释,并归档保存成不同的版本文件。
第四章 提高程序稳定性的方法技巧
1.自锁与互锁
可以通过自锁的方式将瞬时信号有条件地保持住;但是PLC断电,或者0003闭点断开,自锁便释放:
互锁回路可以避免两个动作同时发生而导致危险:
2.置位与复位
可以通过置位的方式获得更为长久的信号,但要注意及时予以复位;如果对掉电保持的地址区域进行置位,则断电后该地址位仍然为ON,直至复位信号的出现:
3.滤波防抖
由于传感器的触点抖动,会导致PLC程序的误动作。通过增加滤波防抖程序可以避免误动作的产生。
4.信号握手
与其它系统有连锁信号时,为避免对方接收不到本系统给出的信号,可通过对方的
回执信号来复位本系统的给出信号,避免联锁信号的的丢失。 5.冗余回路
对于设备的同一状态,可以通过2个以上的检测方法进行判断评估,当2种方法判断的结果一致,才认为结果有效,如果不一致时可进行报警提示,以增加检测的可靠性。
6.自行诊断
当设备从A点向C点运行时,正常
的运行时间为T,此时可以设置一个监视时间Tm(略大于T),t为设备从A到C的实际时间。当设备从A点出发时开始计时监控,然后可以通过以下逻辑来判断设备的运行是否存在打滑,阻碍的状况:
t=Tm,设备异常,可进行报警提示;
同时可通过自行诊断来判断传感器的状态,如果将AC段看做成一个滚床,当设备从A点进入到达C点时,C开关为ON,而B减速开关却为OFF,此时可判断B开关位置异常或者断线。
7. 使用NC信号
在一些安全保护的开关中,一般使用闭点信号,只有线路接通,有信号反馈才认为是正常状态,否则即报警或断电,这样可避免由于断线而导致的误动作发生,如下图中的“非常停止”按钮使用的是NC信号:
8.模块化编程
遵守模块化编程习惯,对于电机设备,编
制一个标准的程序块FC/FB,当系统中有多台电机时,可重复调用该程序块,只是在管脚上连接不同的变量和参数。这样可避免每次为不同电机重复编写程序而引起的书写错误,同时也便于程序调整和阅读。
9.合理选用安全产品
控制系统的安全回路,必须满足整体机械设备和单独装置单元危险等级所要求的安全级别。这个安全级别是以“控制等级”分类,以“危险度”来选择。 9.1 控制等级的要求
机械设备控制系统的安全回路必须参照ISO13849-1:1999(JI5 B9705-1:2000)的规定来选择控制等级,进行设计。表一内容如下:
控制
等级 B
要求事项概要
控制系统的安全关联部必须依据相关标准规定设计,制造,选
系统的举措 不具合(故障)发生时,也会使安全机能丧失;
举例
一般的设备控制;
择,组装;能起到预期的保护作用;
范围B要求的事项也适用; 必须使用经过充分考虑过的控制装置和安全原则;
不具合(故障)发生时,也会使安全机能丧失,但发生概率较低;
检查间不具合(故障)发生的时候,也会产生安全机能的丧失失;
安全机能的丧失能够由检查检出。
单一不具合(故障)发生时,安全机能不会丧失;
并不是所有的不具合都能被检出;
检不出的不具合经过积累,也会造成安全机能丧失;
1 安全确认型回路;
2
范围1要求的事项也适用; 控制系统的安全机能需要做适当的间隔检查;
认证装置(比如有强制分断机构的装置等等);
后部检查(OFF检查)回路;
3
范围1要求的事项也适用; 安全关联部必须按照下面的样子来设计:
A.控制系统的安全相关部件应当设计成一个单个错误不会导致安全功能的丧失;
B.在任何合理可行的时候该单个错误会被检测出来;
范围1要求的事项也适用; 安全关联部必须按照下面的样子来设计:
A.安全相关部件应当设计成一个单个的错误不会导致安全功能的丧失,并且在安全功能的下一个请求或者之前能够探测到此错误;
B.累积的错误不会导致安全功能的丧失;
多重化回路;
4
不具合发生时,安全机能一般正常; 不具合很快被检出,防止安全机能的丧失;
多重化回路+自动(常时监视); 多样化回路;
表1 各控制等级的要求
关于表1的内容的说明,在附图2中有所表示。以表1为基准,每个范围具体的电气控制回路例子如附图3。
9.2 控制等级的选择
a).控制范围根据下面的危险评估来决定。(参照图3)
被控制的设备需要按照以下图表的规定进行风险评估,然后确定相应的控制类别。
图3 控制范围的选择方法
注:这个规定不是仅仅推荐高的控制等级,首先推荐的是:在实现机械设备本质安全化的低控制等级设计。
b).用国际规格的C规格来规定控制范围的机械设备,遵循这个要求。
注:EN692[Mechanical presses-safety],EN201[Rubber and plastics machines-Injection molding machines-safety requirements]等。
c).关于“非常停止”和“保护停止”的控制等级在2级以上。
d).选择机械中存在的各个危险的相应的控制等级。控制部必须使用能够与该机械中最高的控制等级对应的装置。
e).没有与所选控制等级对应的机器时,必须使用超出所选控制等级的机器。 注:比如灯罩,由于控制范围只设定了2和4,如果控制等级3必要的时候,则使用控制等级4的灯罩。
f).所选控制范围在控制柜和图纸中要有所表示和记载。
第五章 附录
附录中提供了一些编程常用文档,以供编程时查阅。