网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月10日漏签0天
plc吧 关注:169,482贴子:832,375
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回plc吧
>0< 加载中...

【精】PLC编程的本质《PLC梯形图编程规范的制定》

  • 只看楼主
  • 收藏

  • 回复
  • 新世界语官方
  • 只是听说
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原文下载:https://wenku.baidu.com/view/ec3069575fbfc77da369b16a.html
《PLC梯形图编程规范的制定》
杨鹏
(白银有色集团股份有限公司装备与自动化控制研究所,甘肃白银 730900)
摘要:在当今的工业控制领域,可编程控制器得到了普遍应用,梯形图是可编程控制器最常用的编程语言,本文分析了梯形图语言的弊端,介绍了制定梯形图编程规范的必要性,通过论述面向对象编程,举例论述了梯形图编程规范的内容,探讨了编程规范与发散思维的辩证关系,实践证明,规程规范有助于改善PLC组态过程中的混乱状况。
关键词:可编程控制器;梯形图;编程规范;面向对象程序设计;发散思维
1 引言
在当今的工业控制领域,可编程控制器(PLC)得到了普遍应用,所以工业控制系统的开发,呈现为“软件化”的特征,即自动化工程师可以通过“编程”的方式实现控制逻辑。针对PLC的编程,最常用的编程语言为梯形图(LAD),梯形图能满足常见的工业控制的需求,容易入门,使用普遍。
在控制系统的组态过程中,源代码由基本语句组成,自动工程师可以自由地组合基本语句,实现控制逻辑,PLC厂商追求最大的灵活性,然而过度自由,必然会带来诸多弊端。在生产实践中我们发现,当程序规模较大时,工程师虽然完成了控制系统的功能,但是却对代码的质量没有信心,甚至若干天之后,无法修改自己编写的代码,实现团队合作编程也很困难。所以有必要编写相关的编程规范,以体现编程的专业化和标准化。 2 梯形图编程规范综述
2.1 梯形图语言的弊端
IEC 61131-3是关于PLC开发语言的重要标准(非强制性),目前规定了包括梯形图在内的5种编程语言。梯形图是一种图形化语言,根据“继电器控制”的符号和思想设计而来,造就了梯形图既不像数学体系那样简约、规整、完备,又不贴近人类的自然语言,所以梯形图具很多天然缺陷,例如:可读性很差,复杂逻辑难以编程和分析;能流与逻辑运算存在概念重叠,容易引起混乱;数据结构(例如:数组)支持不足,所以很多算法实现困难,等等。
加之,市场上的主流PLC产品,以所谓“扫描周期”的方式工作,即在一个扫描周期内,将所有指令执行完毕之后,再一次性输出,PLC不断重复扫描周期。所以具有某种特征的分支逻辑(在计算机高级语言中常用if关键字来实现)无法实现,增加了编程的难度。下面的代码,是使用类似C语言的计算机高级语言(如:Java、C#)编写的伪代码: bool flag = true;
if(flag == true){ 输出; flag = false; }
else { 输出; flag = true; }
这段伪代码表示的逻辑可以描述为“自定义变量控制的分支逻辑”,如果使用梯形图语言直接表达这样的逻辑,则在一个扫描周期有输出,下一个扫描周期没有输出,如此反复,解决的办法见图4所示的“单按钮控制”。
2.2 梯形图编程规范的内容
简单地说,尽可能多地将有益的编程方式进行整理汇编,就形成了“编程规范”,除此之外,为了让编程规范更具有参考价值,还包括了其它内容:建议的编程流程,容易犯的编程错误,不提倡的编程方法,编程陷阱(逻辑分析正确,而实际运行效果不同),仿真差异(仿真的结果与实际运行的结果不同),软件或硬件的bug,甚至某次试验情形也可以写入编程规范,等等。
2.3编程规范的使用
为了便于翻阅,将同一类型的条款编为一组,例如:将所有框架设计的条款归为一组,将所有有关电机控制的条款归为一组。工程师在编程时,参考规范,符合规范中描述的情景,则严格按照规范进行编程。更重要的是,理解编程规范的内涵,灵活参考。 2.4 编程规范“具体条款”的模板
编程规范由具体的条款组成。采用表格组织具体条款的内容,这样,增加了查阅的便利性,也可以提醒编写者表述全面,图1所示为编程规范条款的模版。

参照图1,说明如下:
(1)名称【级别】:每条具体的条款都应有一个简洁明了的名称;其中“类别”则可为:必须、提倡、不提倡、禁止等,例如:当“类别”为“必须”时,表示当条件符合时,必须使用。也可填写编程陷阱、仿真差异、硬件能力试验、对比试验等。举例:单按钮控制【必须】。
(2)代码举例及说明:这是该条规范的核心内容,在填写时,要求使用业界常用的习惯的表达方式及术语,特别是提倡通过简单案例进行举例说明,这样更受工程师的欢迎。不提倡使用晦涩的教条式的表达方式。
(3)适用条件:往往大多数的条款,都有一定的适用条件。如果有些条款的适用条件非常重要时,则需要使用醒目方式(例如:使用加粗的红色字体)进行提醒。
(4)错误使用的情形:罗列部分使用不当的情况,从反面理解该条款。
(5)目的:使用该条款能达到什么样的效果,也就是目的是什么。可填写:怎么增强了代码的可扩充性;怎么提高了运行效率;怎么减少了误差,等等,建议通过对比的方式说明。
(6)链接:链接到其它相关条款。
(7)其它:需要说明的其它内容。
3梯形图编程规范的制定
不同厂商的PLC存在差异性,所以编程规范的制定必须针对具体产品。本文则以西门子S7-1500系列PLC[1]为例进行论述,采用的开发软件为博图V13。
3.1西门子PLC梯形图编程规范概述
西门子PLC很好地实现了IEC 61131-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时自动生成的背景数据。

图5 FB10的调用

图6背景数据DB10
参照图5和图6,FB10参数的意义为:Strt表示启停按钮,Rate表示转速,Direction表示旋转方向,Forward表示顺时钟输出,Backward表示逆时钟输出,About用于描述电机(如编号等),About在FB内部的梯形图中不使用,但是上位机(一般为触摸屏或PC)可以访问。
(3)适用条件:在工厂级、车间级等大规模控制系统中,为了更好的组织代码,必须使用FB编程;容易识别出对象时,必须使用FB编程;在代码量很大时,必须使用FB编程;应该说,在绝大多数情况下,FB都能使用。
(4)错误使用的情形:略。
(5)目的:实现面向对象编程,更好地组织代码。
(6)链接:略。
(7)其它:FB具有明显的面向对象特征,但是FB不具有“继承”等特征,也没有专门的属性和行为的语法,而是通过背景数据来体现属性,通过输出来体现行为,然而FB可以满足工业控制领域的需求。
4编程规范与发散思维
梯形图(包括其它编程语言)追求最大的灵活性,以适应各种控制需求,编程规范却在限制编程过程中的各种行为,诚然,设计控制系统需要发散思维,然而编程规范并不会妨碍发散思维,阻碍创新,在使用过程中,有以下观点和注意事项:
(1)发散思维体现在多个方面,算法设计属于发散思维的主要方面,克服语法的局限性,实现算法,也属于发散思维的内容。
(2)规范中绝大多数的规定,只是起到了“引导、提醒”的作用,与是否“妨碍发散思维”根本没有关系,例如:变量命名规则、错误处理,初始化处理等。
(3)任何控制需求,必须通过编程语言的固有语法来实现,所以必然受编程语言的语法的约束,进而无法逾越语言的设计初衷,有些规定,只是顺应了编程语言的设计初衷,没有妨碍发散思维,即使妨碍了发散思维,也不是这些规定所为,而是编程语言所为。例如:必须使用FB实现面向对象编程,以及有关FC的规定,更多的时候,这样的语法服务于程序的框架设计,没有限制算法设计(算法设计属于发散思维的主要方面)。当然了,提倡对编程语言进行批判,并提出改进意见,提交IEC组织,事实上,对“编程语言”进行标准化,是一个颇受争议的行为,梯形图是少数得到重要组织标准化的编程语言之一。
(4)开发一套控制系统,需要做很多工作,组态编程只是最后一步工作,更多的发散思维体现在前期。
(5)在使用编程规范时,需要强调的是:思维是灵活的,行为是规范的。
(6)任何知识都必须要有自己的理解,必须对编程规范有自己的理解,不领悟其内涵,根本无法使用。编程规范是很好的学习材料,给予使用者很大启迪,可以说,编程规范不但没有妨碍发散思维,反而助长了发散思维。例如:单按钮控制,见图4,这段代码只用了梯形图两种最基本的元素——触点和线圈,经过实践反复验证,很可靠,其中的变量tmp的初始值无论是ture或者false,都不会影响控制效果。
(7)编程规范需要不断的充实和完善,如果得到了更好的条款,替换规范中的相应的条款,所以编程规范没有限制新想法,参与编程规范的制定过程,是提高自身技术水平的很好的方式。
5结语
编程规范的制定,限制了编程的随意性、避免错误、提倡优秀编码习惯、增强了代码的健壮性、增强了代码的可读性、变个人智慧为集体智慧、保存了实践经验、形成了重要学习材料。实践证明,编程规范的制定,明显改善了我单位PLC组态编程的混乱状况,编程规范来源于具体的项目经验,尤其对于我单位的相关项目,更具有借鉴作用,编程规范也具有普遍的适用性。“编程”在很多行业(例如:IT领域)是重要的常见活动,梯形图编程规范的制定,对其它行业的企业制定自己的编程规范,也具有借鉴作用。


  • 新世界语官方
  • 只是听说
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
发这个文章,系统不让发,必须等待审核,终于审核通过了


2025-05-10 22:57:49
广告
  • 猫猫粉ivy
  • 似懂非懂
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感谢楼主分享,思维是灵活的,行为是规范的~


  • 每天有奇迹
  • 只是听说
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
人才啊,


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回plc吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示