您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > PLC梯形图编程规范的制定(白银杨鹏)
正所谓“思维是发散的,但是行为必须是规范的”本文已经发表,在这里免费提供给大家参考,可以以任何形式(包括印刷)随意传播,在转载的过程中请注明作者,不可直接复制进行抄袭引用举例:《冶金自动化》2015年Vol.35增刊1之585页~590页【分类号】TP273;TP311.1【主办单位】全国冶金自动化信息网、《冶金自动化》杂志社PLC梯形图编程规范的制定杨鹏(白银有色集团股份有限公司装备与自动化控制研究所,甘肃白银730900)摘要:在当今的工业控制领域,可编程控制器得到了普遍应用,梯形图是可编程控制器最常用的编程语言,本文分析了梯形图语言的弊端,介绍了制定梯形图编程规范的必要性,通过论述面向对象编程,举例论述了梯形图编程规范的内容,探讨了编程规范与发散思维的辩证关系,实践证明,规程规范有助于改善PLC组态过程中的混乱状况。关键词:可编程控制器;梯形图;编程规范;面向对象程序设计;发散思维TheformulationofPLCLADprogrammingspecificationYANGPeng(Instituteofequipmentandautomatedcontrol,BaiyinNonferrousMetalGroupCo.Ltd.,Baiyin730900,China)Abstract:Intoday'sindustrycontrolfield,PLChavebeenwidelyused,LADisthemostpopularprogramminglanguageforPLC.Inthispaper,thecorruptpracticeofLADlanguageisanalyzed,theneedforLADprogrammingspecificationisdiscussed,thecontentofLADprogrammingspecificationisintroducedbyobjectorientedprogramming,thedialecticalrelationbetweenLADprogrammingspecificationanddivergentthinking,throughthepractice,LADprogrammingspecificationcanhelptoavoidconfusionwhileprogramming.KeyWords:PLC;LAD;standardofprogramming;Object-OrientedProgramming;divergentthinking中图分类号:TP311文献标识码:B1引言在当今的工业控制领域,可编程控制器(PLC)得到了普遍应用,所以工业控制系统的开发,呈现为“软件化”的特征,即自动化工程师可以通过“编程”的方式实现控制逻辑。针对PLC的编程,最常用的编程语言为梯形图(LAD),梯形图能满足常见的工业控制的需求,容易入门,使用普遍。在控制系统的组态过程中,源代码由基本语句组成,自动工程师可以自由地组合基本语句,实现控制逻辑,PLC厂商追求最大的灵活性,然而过度自由,必然会带来诸多弊端。在生产实践中我们发现,当程序规模较大时,工程师虽然完成了控制系统的功能,但是却对代码的质量没有信心,甚至若干天之后,无法修改自己编写的代码,实现团队合作编程也很困难。所以有必要编写相关的编程规范,以体现编程的专业化和标准化。2梯形图编程规范综述2.1梯形图语言的弊端IEC61131-3是关于PLC开发语言的重要标准(非强制性),目前规定了包括梯形图在内的5种编程语言。梯形图是一种图形化语言,根据“继电器控制”的符号和思想设计而来,造就了梯形图既不像数学体系那样简约、规整、完备,又不贴近人类的自然语言,所以梯形图具很多天然缺陷,例如:可读性很差,复杂逻辑难以编程和分析;能流与逻辑运算存在概念重叠,容易引起混乱;数据结构(例如:数组)支持不足,所以很多算法实现困难,等等。加之,市场上的主流PLC产品,以所谓“扫描周期”的方式工作,即在一个扫描周期内,将所有指令执行完毕之后,再一次性输出,PLC不断重复扫描周期。所以具有某种特征的分支逻辑(在计算机高级语言中常用if关键字来实现)无法实现,增加了编程的难度。下面的代码,是使用类似C语言的计算机高级语言(如:Java、C#)编写的伪代码:boolflag=true;if(flag==true){输出;flag=false;}else{输出;flag=true;}这段伪代码表示的逻辑可以描述为“自定义变量控制的分支逻辑”,如果使用梯形图语言直接表达这样的逻辑,则在一个扫描周期有输出,下一个扫描周期没有输出,如此反复,解决的办法见图4所示的“单按钮控制”。2.2梯形图编程规范的内容简单地说,尽可能多地将有益的编程方式进行整理汇编,就形成了“编程规范”,除此之外,为了让编程规范更具有参考价值,还包括了其它内容:建议的编程流程,容易犯的编程错误,不提倡的编程方法,编程陷阱(逻辑分析正确,而实际运行效果不同),仿真差异(仿真的结果与实际运行的结果不同),软件或硬件的bug,甚至某次试验情形也可以写入编程规范,等等。2.3编程规范的使用为了便于翻阅,将同一类型的条款编为一组,例如:将所有框架设计的条款归为一组,将所有有关电机控制的条款归为一组。工程师在编程时,参考规范,符合规范中描述的情景,则严格按照规范进行编程。更重要的是,理解编程规范的内涵,灵活参考。2.4编程规范“具体条款”的模板编程规范由具体的条款组成。采用表格组织具体条款的内容,这样,增加了查阅的便利性,也可以提醒编写者表述全面,图1所示为编程规范条款的模版。图1编程规范具体条款的模版参照图1,说明如下:(1)名称【级别】:每条具体的条款都应有一个简洁明了的名称;其中“类别”则可为:必须、提倡、不提倡、禁止等,例如:当“类别”为“必须”时,表示当条件符合时,必须使用。也可填写编程陷阱、仿真差异、硬件能力试验、对比试验等。举例:单按钮控制【必须】。(2)代码举例及说明:这是该条规范的核心内容,在填写时,要求使用业界常用的习惯的表达方式及术语,特别是提倡通过简单案例进行举例说明,这样更受工程师的欢迎。不提倡使用晦涩的教条式的表达方式。(3)适用条件:往往大多数的条款,都有一定的适用条件。如果有些条款的适用条件非常重要时,则需要使用醒目方式(例如:使用加粗的红色字体)进行提醒。(4)错误使用的情形:罗列部分使用不当的情况,从反面理解该条款。(5)目的:使用该条款能达到什么样的效果,也就是目的是什么。可填写:怎么增强了代码的可扩充性;怎么提高了运行效率;怎么减少了误差,等等,建议通过对比的方式说明。(6)链接:链接到其它相关条款。(7)其它:需要说明的其它内容。3梯形图编程规范的制定不同厂商的PLC存在差异性,所以编程规范的制定必须针对具体产品。本文则以西门子S7-1500系列PLC[1]为例进行论述,采用的开发软件为博图V13。3.1西门子PLC梯形图编程规范概述西门子PLC很好地实现了IEC61131-3标准的要件,当然了,在具体实现该标准时,不可避免地会有其自身的理解和特点,例如:定时器是通过独立的硬件模块实现的,所以定时器时钟与主程序扫描时钟不同步,往往会出现“实际运行效果与程序逻辑不一致”的现象。西门子PLC梯形图编程规范大致包括以下内容:(1)规定了如何书写需求分析的文档,如何书写源代码中的注释,如何书写产品说明书,以及变量、参数的命名规则、常用单词的缩写表等。(2)归纳了很多实用的编程小技巧,梯形图可读性很差,所以这部分内容也很重要。限于篇幅有限,不能全面罗列。图2为自定义永真永假常数;图3(a)是出现在很多教科书中的电机控制的“启、保、停电路”,但是不提倡使用该代码,提倡使用图3(b)所示的程序,该程序可读性强,易于扩展,其中,Strt表示启动按钮,Clse表示停止按钮,M表示电机;图4为“单按钮控制”的程序,按钮(btn表示)按一下,灯(L表示)亮了,再按一下,灯灭了,tmp为辅助的中间变量,按钮不同于开关,按钮按下之后会弹起。图2自定义永真永假常数图3启、保、停电路图4单按钮控制(3)如何定义和使用FC(译为“功能”),FC类似于计算机高级语言中“函数”的概念,是模块化程序设计的重要概念之一。在定义FC时,要求其完成的功能明确单一,参数的意义也要明确单一。在规范中,也定义了一些我单位常用的FC。(4)如何定义和使用FB(译为“功能块”),详见3.2。在规范中,也定义了一些我单位常用的FB,例如:我单位某产品的电磁阀需要“占空比可调的周期性方波”控制[2],必须使用规范中规定的FB。(5)如何进行初始化,在PLC加电工作之后,第一扫描周期将执行OB100中的代码,根据实际情况,考虑周全,确保PLC的初始化合理。(6)如何进行错误处理及操作日志。当PLC出现软硬件错误时,PLC会跳转到特定的组织块(OB)并试图执行其中的代码。例如:出现程序错误,会试图执行OB121中的程序;出现CUP硬件故障,会试图执行OB84(高档型号的PLC支持)中的程序。错误处理,除了报警、记录之外,还要做出最后努力,试图让被控对象处于安全状态。为了便于排错,至少要记录最后一次操作的相关信息。(7)输入输出模拟量的处理。(8)常见问题的处理,例如:大数问题(数值过大会造成溢出),除零问题(包括接近零的数作为除数),恶意输入(也许无意为之,例如:将时间输入为负数),定时器周期与扫描周期不同步的规避办法,等等。(9)有关PID控制[3]和变频器控制的规范。在大多数情况下,必须实现“带死区的PID控制”,以抑制执行机构的频繁动作,造成执行机构的损坏。(10)解耦原则及举例,为了降低开发风险和运行风险,尽量使控制系统各部分相对独立,则要进行解耦。(11)其它内容:推荐的开发流程、代码简化技巧、编程陷阱、硬件测试标准代码、最小控制系统(满足项目的基本的要求,在调试和紧急情况下使用)的特征、我单位常用的标准代码、我单位内部使用的术语解释,等等。(12)禁止常闭输出、禁止软校正,“软校正”指的是,一次仪表的误差,通过在PLC上编程进行消除,容易引起极大隐患。3.2梯形图编程规范举例——实现面向对象编程3.2.1面向对象思想人类认识世界时,总是具有这样朴素的思维习惯:世界由一个个独立的事物(对象)组成,事物与外界存在可识别的界限,事物与其它事物之间必然存在关联(或关系)。正是根据这个观点,出现了“面向对象思想”,面向对象思想符合人类思维习惯,简单易懂,尤其在编程领域,涌现了很多面向对象语言。大多数面向对象语言认为,对象至少应该具备属性和行为等特征[4]。同一个事物,在不同的软件系统中,具有不同的属性和行为。产生对象,必须定义“类”,“类”是一类相似事物的模板。在工业控制这个特定领域,很容易识别出对象,将独立的设备(或部件)抽象成对象即可。3.2.2使用FB实现面向对象编程FB具有明显的面向对象特征,并且符合IEC61131-3标准,译为“功能块”。PLC厂商也推荐使用FB编程,所以FB在编程体系中扮演着重要的角色,属于核心概念之一。参考图1所示的编程规范条款的模版,填写有关FB的规范条款,由于篇幅有限,简略叙述如下:(1)名称【级别】:FB编程及面向对象编程方法【必须】(2)代码举例及说明:使用FB编程,需要采用面向对象思维方式。巧妙的是,在定义FB时,没有提出额外的语法,仅仅从语法的角度来说,定义和调用FB的语法,与FC(类似于计算机高级语言中的“函数”概念)一样,只是在调用FB时,会根据参数生成了所谓的背景数据,当多次调用FB时,会生成不同的背景数据。假设控制某电机,根据设定的参数,电机可进行启停,正反旋转,调节转速操作。针对该电机定义FB,此处为FB10。FB10内部由梯形图基本语句组成,图5所示为调用FB10的情形,图6所示为调用FB10时自动生成的背景数据。图5FB10的调用图6背景数据DB10参照图5和图6,FB10参数的意义为:Strt表示启停按钮,Rate表示转
本文标题:PLC梯形图编程规范的制定(白银杨鹏)
链接地址:https://www.777doc.com/doc-2887362 .html