线下实训
HOME
线下实训
正文内容
plc建模编程 对于PLC编程,哪种IEC 61131-3编程语言最适合?
发布时间 : 2025-02-23
作者 : 小编
访问数量 : 23
扫码分享至微信

对于PLC编程,哪种IEC 61131-3编程语言最适合?

图片来源:ControlSphere Engineering

作者 | Gary L. Pratt

有这么多可编程逻辑控制器(PLC)编程语言和标准可供选择,对于自动化和控制应用而言,最适合的选择是什么?

可编程逻辑控制器(PLC)有很多编程语言可供选择。有种说法,标准的伟大之处在于有很多选择!尽管这很讽刺,但在IEC 61131-3编程语言中,有多种语言标准可供选择确实是一个优势。

在参加我的培训班时,很多学生抱着这样一种心态:选择最适合自己的语言,然后专门学习该语言。上课伊始,他们经常会问我会推荐适用哪种语言。或者,“最好的语言是哪个?”

我没有回答,问他们一个问题:“在阿拉伯数字中,哪个数字最好?”或“英语中,哪个词最好?” 再比如:办公室软件中,哪个工具最好?是文档编辑器、演示文稿编辑器,还是电子表格编辑器?虽然可以使用文档编辑器创建演示文稿和电子表格,但这是正确的方法吗?

使用一种工具实现多种目的,需要学习各种技巧,这是否值得付出?仅学习该工具对工作有用的主要功能,是不是更有效?与办公软件一样,为应用选择最佳编程语言是最有效的,可以避免很多麻烦。当使用的IEC 61131-3编程语言能够充分发挥其语言的优势时,PLC的编程和维护功能就会得到加强。

图1:IEC 61131-3编程语言提供了适合特定需求的语言。图片来源:ControlSphere Engineering

梯形图编程

梯形图(LD)编程的历史,可以追溯到大约100年前的继电器梯形逻辑(RLL),它主要用于描述电气元件系统(如继电器、计时器和电动机)。在自动化时代初期PLC逐步替换继电器和计时器时,创建一种用户熟悉并与被替换的工具相似的编程语言非常重要。

不幸的是,控制器变得越来越强大,能够实现的功能也已经远远超过继电器和计时器,LD语言被用于各种新的场景,而这并不是LD所擅长的,因此效果也不是特别理想。

PLC供应商提供新的、更适合PLC和可编程自动化控制器(PAC)应用的语言的速度比较缓慢,使这种情况进一步恶化。对于源自北美的控制器而言尤其如此,这可以解释在全球范围内,LD持久受欢迎的程度为什么会有所差异。

LD编程的优势是什么?为什么它能持久受欢迎?关键就是图形化。而通常来说工程师是更倾向于图形化思维的。

起初,大多数LD编程的替代方法都是基于文本的语言,这些语言与工程师的图形化思维不会产生共鸣,其结果就是不愿从LD转向其它语言。幸运的是,这种情况正在发生变化。

LD仍然是一门伟大的语言,它的初衷是执行复杂的布尔逻辑。在这个领域内,LD逻辑易于设计且易于调试。要确定为什么结果与预期不符,有多容易?在LD语言中,只需要观察蓝色实心触点的路径在何处中断就可以快速获得答案。

图 2 :该图比较了在 Codesys 中实现复杂布 尔逻辑的不同语言

顺序功能图编程

顺序功能图(SFC)是一种图形语言,非常适合表示状态机(state machine),并且像LD语言一样,它吸引了工程师的图形化思维天性。

状态机的历史可以追溯到很多年前,但是直到最近才被用于工业编程。状态机是表示系统行为的一种非常强大的方法,可用于表达行为取决于过去历史记录的系统逻辑,例如:

1.设置线圈或复位线圈;

2.封装逻辑(布尔反馈);

3.由代码设置的内部标志,用于决定未来的行为。

实际上,即使是简单的TON On-Timer和R-Trig one-shot都是状态机。它们的下一个行为取决于先前的输入和行为。与其它编码技术相比,状态机具有许多优势:

1.它们易于设计,因为它清楚地描述了系统可能的状态,系统如何在这些状态之间转换,系统在这些状态下应采取的行动。

2.在运行时,可以很容易地确定系统处于什么状态,在该状态下正在做什么,以及在什么条件下系统会切换到下一个状态(或者过程中出了什么问题,导致无法切换到下一个状态)。

3.促进构思周密且组织良好的设计。这样可以确保所有可能的事件都已得到妥善处理(就不会有人半夜三更把你从床上叫起来,去修复无法正确处理异常工况的代码)。

4.易于确定是否已经测试了所有可能事件。只需打印出SFC,并在执检查时划掉每个状态和切换条件即可。完成所有工作后,测试就完成了(程序员的置信度为100%)。

图3:该图显示了顺序功能图的编程组件

如何实现状态机?

几乎任何语言都可以实现状态机,但它们都需要特定的编码技术,包括步(step)、转换(transition)、分支/跳转(branch/jump)和动作(action)。

步描述了系统可以驻留的状态;转换指示系统何时应从上一步转移至下一步;分支和跳转指示下一步应该是什么;动作指定在该步期间(进入或退出该步)应执行的操作。

由于其图形化属性和工作的专业性,SFC语言是状态机最自然的选择。对于那些需求异常复杂或要求特别灵活的系统,状态机也可以用基于文本的语言来实现。对于只能使用LD的企业,状态机甚至可以在LD中实现,方法是为每个状态使用一个线圈,转移逻辑为每个线圈通电/断电,将系统从一个状态转移到下一个状态,以及利用使用状态线圈的独立逻辑来执行动作。

一些供应商还可以用统一建模语言(UML)来实现状态图,作为SFC的更强大、更灵活的替代方法,但这需要更长的学习曲线,而且在工业控制领域中的接受度有限。

对于状态机,语言的选择是次要的,所用技术的选择更重要。在SFC中,该语言强制使用状态机技术。在其它语言中,使用的技术取决于工程师制定的规则。

图4:基于Codesys连续功能图语言,展示了一个基于块的编程设计 示例

功能块图编程

功能块图(FBD)是一种图形语言,符合工程师的图形化思维。来自Codesys(以前被称为3S-Smart Software Solutions)的集成开发环境提供了两种FBD,即传统的IEC 61131-3 FBD和类似但更灵活的连续功能块图(CFC),CFC还没有正式成为IEC 61131-3的一部分。CFC是FBD的超集,具有两大优势:

1.基于块的功能编程(执行布尔和数学运算);

2.分层设计(调用其它功能和功能块)。

1 基于块的编程

基于块的设计由预定义功能组件组成,这些组件连接在一起执行布尔逻辑、数学计算或二者兼而有之。当输出是输入的函数时(换句话说,当没有状态变量,例如布尔反馈、设置/复位线圈或标志时),CFC块编程非常出色。当同时使用无状态功能和基于状态的功能时,请结合使用CFC和SFC。

因为连接性是用功能块之间的线来表示的,所以很容易理解信息流以及信息是如何沿着其路径进行修改的。如果功能开始变得复杂,则应将其分为较小的、更易于管理的子块。如果块之间存在大量连接,则可以将这些线连接至数据结构类型的引脚。

结构引脚(structure pin)具有3个优点:

1.在层次化结构设计中,每个层次都消除了不必要的细节,更清晰易于理解;

2.保持较小的功能块,可以在一页上查看整个信息流;

3.允许信息流向上游和下游,以进一步减少不必要的细节。

对于以前采用LD实施基于块或分层功能的PLC程序员来讲,CFC提供了一种更为简洁和灵活的方法。CFC的开发速度更快,而且对于将来负责维护或改进代码的工程师来说,也更容易理解。

图5:结构引脚可以减少不必要的细节和混乱,从而增强了图表的可 读性。

2 分层设计

分层设计是一种从很多简单的构建块层层设计的实践。与传统的扁平化设计相比,分层设计具有许多优点:

1.定制;

2.创建;

3.测试与完善;

4.理解和维护;

5.易于复用。

构建块技术支持并鼓励在层次结构的每个级别上,展现同等程度的细节,这就使块技术更易于设计和理解。这样,在较高层次的设计中,不必因为展现细节而被弄得杂乱无章,这些细节只在较低层的设计中很重要。在层次结构的每个级别上,分层CFC设计应都具有统一的细节展示。

使用LD作为构建块语言的传统方法会存在2个弊端:

1.信息的低密度导致LD设计可能会分布到数10页上,很难或不可能看到和理解全局;

2.不同层次的细节混杂在同一层次上会十分混乱,这使设计难以理解和维护。

而使用结构化文本的CFC分层设计可以解决这两个问题,同时保持了LD的图形特性。这是个两全其美的解决方案。

分层设计是面向对象的工业编程(OOIP)的关键功能。在部署和配置用户自定义的功能块以后,CFC编程开始与分布式控制系统(DCS)的编程/组态有点类似,但使用IEC 61131-3程序员可以控制底层的块。如果某个块需要较小的改进,程序员就可以执行此操作,而无需费时费力的请DCS供应商介入。

完整的分层PLC设计,可以看作是一棵由分层CFC构成主干和分支的树。基于块的CFC、SFC、LD和ST填充树叶所处位置的详细功能设计。IEC 61131-3语言共同构成了一个团队,该团队比其各个部分的功能更强大。

图6:此处的分层设计是在连续功能图编程中实现的。

结构化文本编程

尽管LD、SFC和FBD/CFC语言可以出色的完成其任务,但有些运算并不适合使用图形化语言。

一些支持使用结构化文本(ST)语言编程的运算包括:

1.迭代运算,例如For、While和Repeat;

2.复杂条件和选择,例如IF-THEN和CASE;

3.位运算,例如按位与、移位、旋转;

4.文本字符串运算;

5.具有特殊要求或特别复杂的状态机;

6.纯粹的面向对象编程(调用方法,设置属性等)。

有许多很好的教程,可指导工程师从其它基于文本的语言过渡到ST。对于那些完全不熟悉基于文本的语言的人来说,Visual Basic教程是一个很好的起点。尽管结构化文本基于Pascal编程语言,但它与VB有非常相似,因此可以参考应用更广泛的VB教程。

使用最合适的语言编程

要创建有效的工业控制程序,掌握合适的编程语言并知道如何有效使用这些语言非常重要。有很多语言可供PLC选择,IEC 61131-3编程语言标准也提供了多种选择。充分利用每种语言的优势效率会更高,而不是学习一种语言的各种技巧和变通方法来使其适用于所有应用。程序员应为应用选择最佳语言。

PLC编程入门,先来认识6种编程语言

传统的PLC编程语言只有两种,指令表(IL)及梯形图(LD),有的称梯形逻辑图(LLD)。而今为便于各类型的工程技术人员都能使用PLC,PLC厂商都增加了它的编程语言。国际电工组织也制定与几次修订了PLC编程语言国际标准。并在1993年做了全面修订后称之为IEC 61131-3 的修订版。我国在1995年11月发布了GB/T 15969-1/2/3/4 标准,与IEC 61131-1/2/3/4等同。该标准推荐了6种编程语言,除了指令表及结构化文本(ST)为文字语言 ,还有梯形图、功能块图(FBD)、连续功能图(CFC)及顺序功能图(SFC) 等图形语言。

目前,IEC 61131-3编程语言不仅用于PLC,而且还用于集散型控制系统、工业控制计算机、数控系统和远程终端单元。

由于这个标准的建立是在PLC已广泛使用之后,加上它不是强制性标准,所以,有些老的PLC厂商还是在原来语言的基础上做了扩展,并没有完全采用这个标准。再就是,即使语言相同,但细节还是有不少差异。

倒是国产PLC,如和利时公司的LM、LK系列机,是在有了标准之后才开发的,能全面采用这个标准。再就是ABB公司的PLC也使用标准规定的6中语言编程。

下面就给大家简要介绍一番:

指令表(IL)

指令表语言是PLC编程最基本的语言。但是,用它编的程序,可读性较差,目前已不常用。故不在此做介绍。

结构化文本语言(ST)

ST语言与BASIC语言、PASCAL语言或C语言等类似。它没有单一的指令,只有由一组指令构成的含义完整的各种语句。具体语句有赋值语句、条件语句、选择语句、循环语句及其他语句(EXIT语句、RETURN语句、功能块调用语句等)。

不同品牌PLC的ST语言所提供的函数、运算符可能略有不同。

ST语言功能比图形语言强,但不如图形语言直观,目前用的还不大普及。如欧姆龙PLC只是在自编功能块的程序中才可使用它。

同样为ST语言,各PLC厂商的细节不完全一样。

梯形图(LD)

梯形图来源于美国,是一种基于梯级的图形符号布尔语言。

梯形图语言与电气原理图相对应,与原有继电器逻辑控制技术相一致。与原有的继电器逻辑控制技术不同的是,梯形图中的功率流不是实际意义的电流,内部的继电器也不是实际存在的继电器。

梯形图的左母线好像电气原理图的电源线一样,一般不直接与输出类指令(相当于电气原理图的负载)相连,中间总要有能建立逻辑条件的一些指令(相当于电气原理图的控制元件)。但有的PLC也允许这么做。

用梯形图符号编的PLC程序,很像电气原理图。如上图所示。图b为施耐德公司Naza PLC用的梯形图。

下图所示为与IL语言程序对应的梯形图程序

关于梯形图的文章有很多,在此不再赘述,本公众号以前也发过几篇文章,大家可以去看一看:

关于PLC梯形图,你想知道都在这里!

想短时间内掌握西门子PLC梯形图的编程方法就一定要看这篇文章!

学PLC必看:看懂电动机控制系统中PLC梯形图和语句表

PLC常用的基本控制电路及梯形图

功能块图(FBD)

FBD语言(一种对应于逻辑电路的图形语言),与电子线路图中的信号流图非常相似。FBD广泛地用于过程控制。

FBD语言是以功能模块为单位,描述控制功能。特别是控制规模较大、控制关系较复杂的系统,用它表达将更为方便。

目前,PLC厂商推出一些高功能及高性能的硬件模块的同时,多提供与其有关的功能块图程序,这为用户使用这些硬件及进行编程提供了很大方便。

FBD语言占用内存较大,执行时间较长,因此,这种语言多只在大、中型可编程序控制器和集散控制系统的编程和组态中采用。

连续功能图(CFC)

CFC与FBD类似,也是按需要选用种种功能块。所不同的是,它更灵活,块的位置可任意摆放,特别有信号反馈时,画起来更方便。

为了块的执行有明确的顺序,它的每个块的右上角都标有序号。但在实际表达时,这个标号也可选择不显示。

FBD及CFC语言在DCS系统编程中用得较多。此外,由于这两种语言差别不大,有时,仅使用FBD语言。因而,有的也把IEC 61131-3自动化编程语言说成5种。

顺序功能图(SFC)

SFC语言以描述控制程序的顺序为特征,以图形方式,简单、清楚地描述系统的所有现象,并能对系统中存有的像死锁、不安全等反常现象进行分析和建模,并可在此基础上编程。所以,得到了广泛的应用。

其实,SFC语言仅仅是一种组织程序的图形化方式。其实际使用要与其它语言配合,否则无法实现其功能。所以,严格地讲,它不能算是完整的编程语言。

1.组成

步(Step)

用方框表示,分有初始步、活动步、不活动(休止)步三种。一个步是否为活动步,即是否处于激活状态,则取决于上一步及与其相应的转移。

动作(Action)

动作是步的组成部分,一个步含有一个或多个动作,用一个附加在步上的矩形框来表示。每一动作中的程序代码都可以用IEC的任一语言如ST、FBD、LD或IL来编写。每一动作还有一个修饰词(Qualifier),用来确定步激活时其动作什么时候执行或终止。

有向连线

从上到下、从左到右的步间连线。也可用加箭头做非上下、左右的步间连线。

转移

在有向连线上的垂直短线。与转移相关的逻辑条件,用文字、布尔代数表达式、图形符号标注在转移短线旁。

2.SFC转移规则

步的转移指的是有向连线相连的前后步激活状态的转换。

步间转移的规则是:

①步间的转移逻辑条件为真;

②被转移步的前一步是活动的。

不满足此两条件,将不转移。

为了启动顺序功能流程图程序的执行,总是要指定一个初始步,其标志为S0,是程序运行开始时被激活的那个步。有个这个初始步,则随着相应转移逻辑条件满足,流程图中步的激活状态将逐步转换,直至最后一步被激活,或根据有向线指定路线不停地循环转换。

3.SFC主要形式

根据结构的不同,可分为以下几种形式:单序列控制、并行序列控制、分支结构序列、转移序列等。

下图所示为一段SFC语言编写的程序。

同样称SFC语言,但有的是合乎标准的,如欧姆龙CJ2所用的,其Action有以上修饰词。有的没有,使用时要看具体软件的说明。

本文选自《PLC实用编程指南 第3版》

编后语

相关问答

PLc输入一般输入是什么控制的?

plc输入是AI、DI,输出是AO、DO,程序的原理是输出点是由输入点的来控制,你强制了DI输入点双字,影响了两个字节的输入点位,相应的输出点肯定会有动作。1、...

大学学的是自动化,现在有plc三级证书,可以从事什么工作?

你可以从事的工作太多了,说都说不完,主要是不知你可以做多久。plc有等级证好像在一个技校听过,但我可以告诉你这证屁用都没有,所有单位都不会看你这个证,外...如...

自动化专业毕业生最好掌握哪些编程技能?

本人是从事计算机软件研发行业的,对计算机编程的市场应用情况比较清楚,开发过大大小小的软件几十个。对于自动化专业的毕业生来说,如果想学编程,以下3种编程...

主要为渲染。。。动画设计(三维)。。。建模用的笔记本推荐。...

建模用的笔记本推荐。。。。。价格不限品牌不限。。。。。。举报内...proface触摸屏肿么和三菱的PLC穿越通讯?1万浏览3回答要移动WORD中表格中...

你好,我想买个三千左右的的电脑,主要就是做3D图跟数控编程...

至于编程,那就没什么问题了,一般的PLC编程软件都没问题,我安装西门子S7-300的软件后,运行都很快,除非你编程要用西门子的触摸屏软件winccflexible软件,那就不行...

什么工作会用到MATLAB编程?

MATLAB是一款主要用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的软件。Matlab优点:1.高效的数值计算功能。目前其他编程...

智能制造作为今年新一批设立的交叉学科,到底是做什么的?求介...

[回答]新一代信息技术和新一代人工智能与制造业的深度融合,正在引发深远的变革。为了在世界制造业格局变化中占据有利地位,德国提出“工业4.0”,美国提出...

做一名程序员是一种什么感觉?

曾经做过十多年的程序员,还是女程序员,说说我的感受吧。一、不知道怎么跟别人描述你的职业我刚出来工作的时候还是90年代,那是也算是一个比较热门的专业,我...

电气工程师自我定位怎么写..._电气工程师_帮考网

备团队合作能力,能够与其他工程师、技术人员和客户合作,共同完成项目。我的专业领域包括电力系统、控制系统、电子系统和通信系统。我熟练...我的...

机械设计好学吗?

7.CAD/CAM集成技术。8.机械加工工艺学。9.掌握SW或CATIA或PROE或UG建模。10.掌握ANSYS分析技能。11.机电系统设计理论。12.经典控制理论。13.数控编程技术....

 力杰  GrandBlue 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部