PLC:梯形图基本语法看这一篇就够了

前言

可编程逻辑控制器(Programmable Logic Controller,PLC),是一种通过控制指令实现自动化控制的控制器,由CPU、内存、输入/输出接口等功能单元组成。本文是对PLC梯形图编程的总结,希望能够以一篇文章的篇幅,让读者掌握PLC梯形图语法。本文是基于三菱PLC《MELSEC iQ-F FX5编程手册(指令/通用FUN/FB篇)》、《MELSEC iQ-F FX5编程手册(程序设计篇)》的总结与实战。

一、PLC编程语言

1、多种编程语言

下面5种PLC语言可以进行混合编程,如梯形图做骨架,结构化文本做区块等等,而本文采用的是梯形图编程。其实不止有5种语言,只是相对主流而已,而不同语言各有优势,如某些数据存储转换可能ST就10行搞定,梯形图要写一大段还没考虑全就很难搞。

(1)、梯形图语言(LD)

(2)、指令表语言(IL)

(3)、功能模块图语言(FBD)

(4)、顺序功能流程图语言(SFC)

(5)、结构化文本语言(ST)

2、不同编程语言的特点

二、PLC类型

1、根据品牌划分

PLC品牌有很多,不同品牌的开发环境也不一样,哪怕是同一品牌的PLC不同型号的开发环境,也会不一样。因此,根据品牌划分PLC类型有利于针对性的学习。虽然品牌不一样,开发环境的交互不相同,指令也不一样,但掌握梯形图编程原理,可以以不变应万变。

(1)、三菱PLC

(2)、西门子PLC

(3)、欧姆龙PLC

(4)、其它

2、本文采用的PLC

本文采用的PLC为三菱FX5U,程序也是基于此来编写,因此FX5U的一些指令集可能会让不了解FX5U的读者感到疑惑。

三、PLC开发环境

上面说到,不同品牌的PLC使用的开发环境是不一样的。这里补充一点,就是同一品牌的开发环境也可以有多种,以适配不同的PLC。当然,开发环境也尽可能兼容多种型号的PLC,如三菱的GxWork 3和GxWork 2,看起来是同个软件不同版本,实际就是不同的软件,变成交互方面也会有差异。而本文采用的开发环境为Work 3。

1、不同厂家的开发环境对比

如下两图所示,只是对比了新建程序、梯形图的展示,可以了解到PLC程序的工作方式不一样,梯形图的组成方式不一样,而实际命令集也不一样。因此,虽说掌握基础万变不离其中,但不同的开发环境还是需要花时间去学习的。在编程方面,三菱的看起来像是梯形图与指令的结合,而西门子的看起来像是梯形图与模块的结合。而欧姆龙的开发环境,有些基本标签是其它2者没有的,还有就是设置变量的时候,欧姆龙提供全局变量表来对变量进行设置。

2、指令集对比

如下两图,一些觉得比较通用的指令,都是不一样的。

 

3、语言名称对比

品牌 西门子 三菱
梯形图 LAD LD
指令表 STL IL
结构文本 SCL ST
图形编程 GRAPH SFC
高级图形编程 HIGRAPH
连续功能编程 CFC

四、FX5编程手册阅读方法

1、对应官方文档

 2、定时控灯程序编写

这里根据官方文档是以“特殊功能定时器”做为示例。这里想做一个定时亮灯的程序,来学习阅读手册的方法。业务逻辑如下:

使能M65寄存器 -》启动定时器-》定时闪烁一次,然后灭掉

(1)在不看文档的情况下直接根据提示设计程序,有个错误

 (2)官方指令解释

 

在设置数据里,该指令的表述是:s1表示定时器编号(作为100ms定时器动作),s2表示定时器的设置值,d表示输出的起始位编号。但是,咋一看,对小白来说并不清楚什么意思。

 在控制数据里,可能还是看不出这些意思。

 在这个功能里,貌似也看不出什么。好在功能里有个例子,我们尝试一下:

①3模式:

 这个代码的功能是启动M65后,M3一开始通10秒,接着断10秒,然后再通10秒...,则Y0亮10秒,灭10秒,如此循环下去。

这里的10秒起始时K100的原因,即T10计数1,表示100ms,计数100表示10秒。这是模式3的情况,即d中的M0+3=M3,刚好是M3,因此能控制M3的通断。

模式3的逻辑是:

ON延迟+OFF延迟定时器输出: 
通过定时器线圈的下降沿变为ON,STMR指令的命令的下降沿后,经过(s2)中指定的时间时将变为OFF。

即上述代码导通M65后,灯立刻亮,直到经过STMR命令指令s2的指定时间变为OFF,即M3断开,灯灭。这里面,STMR指令内部有个线圈,当这个线圈出现下降沿时,可以将M3导通为ON,当执行完指令后,这个M3变为OFF。因此,这个模式为ON延迟+OFF延迟定时器输出。

此时,我们应该理解,使用(d)软件开始的4点,代表着4种模式的定时器,即4种类型的定时器。咋们现在还有模式0、1、2没有试,咋们尝试之后发现:

②0模式:

OFF延迟定时器输出: 
通过STMR指令的命令的上升沿变为ON,命令的下降沿后经过(s2)中指定的时间时将变为OFF。

0模式的逻辑是,导通命令M65之后,给到STMR一个上升沿,因此(d)直接为ON(即图中的M35),Y0亮。如果命令M65一直为ON的状态,那么(d)将一直不变。直到M65再次改变状态,即关闭后,给到STMR一个下降沿,此时 (d)经过10秒后为OFF状态,Y0灭。因此,这个模式为OFF延迟定时器输出。 

 ③1模式:

OFF后单次触发定时器输出: 
通过STMR指令的命令的下降沿变为ON,经过(s2)中指定的时间时变为OFF。

 1模式的逻辑是,导通命令M65之后,给到STMR一个上升沿,因此(d)直接为ON(即图中的M35),Y0灭,因为M36还没导通。如果命令M65一直为ON的状态,那么(d)将一直不变。直到M65再次改变状态,即关闭后,给到STMR一个下降沿,此时M36导通,Y0立即亮。直到10秒后,M36断开,Y0灭。因此,这个模式为OFF后单次触发定时器输出。

2模式:

ON后单次触发定时器输出: 
通过STMR指令的命令的上升沿变为ON,经过(s2)中指定的时间或STMR指令的命令为OFF时将变为OFF。

2模式的逻辑是,导通命令M65之后,给到STMR一个上升沿,因此(d)直接为ON(即图中的M35),M37立即导通,然后Y0亮,亮10秒。接着断开M65,Y0一直不亮,而M35在10秒后才断开。接着导通命令M65,Y0继续亮10秒,如此循环。因此,这个模式为ON后单次触发定时器输出。

(3)初步了解STMR的工作模式之后,我们再来写定时控灯程序

我们之前的逻辑:使能M65寄存器 -》启动定时器-》定时闪烁一次,然后灭掉

分析:定时5秒闪烁一次,一次闪烁时间持续为1秒,其中闪烁瞬间则进入下一个周期,即周期中不包含1秒的时间

(4)我们再返回来看时序图功能描述

这里对应的时序图应该是这样子:

 举个例子,对于(d)+1来说,表示当M65置为高并且一直保持时,(d)+1不输出;当M65置为低的瞬间,并保持较长置地的情况,(d)+1最多输出10秒;当M65短暂置为高,然后立马短暂置为低,接着拉高,这时(d)+1在M65置为低的瞬间,最多输出时间为M65被置为低的时间。这就是(d)+1的输出时序,其它可以类似这样看。

五、指令概要

1、对应官方文档

2、指令的构成

 3、截取数据程序编写

(1)方式一

 

这里的程序逻辑是“从存储单元中截取指定数据”,即将s中的地址作为起始地址,并将n中的数值作为长度,传给d。d在接收后,会以d中的地址作为起始地址,进行数据存储,长度为d所能存储的长度(数值大于存储长度时)或实际长度(数值小于或等于存储长度时)。

(2)方式二

 (s)、(d)两方均指定了位软元件的位数时,必须将(s)、(d)的位数设置为相同。如这里表示将K2的2点(因为是16进制,因此将每四个寄存器作为1点,2点则是8个寄存器)进行赋值,赋值时以1点为1组进行赋值。

(3)赋值方式比较

上述2种赋值方式表明,当(s)、(d)两方均指定了位软元件的位数时,它的赋值方式将不再是单个寄存器的连续赋值,而是多个寄存器的连续赋值。

4、数据的指定方法

(1)指定位数据

在上述的例子中,我们使用了D150.0指定了位数据,而D150其实是字数据,也就是说有些字数据可以指定位数据,因为字数据本身由位数据组成。

(2)指定字数据

在上述的例子中,位数据可以用于表示字数据,如 MOV D151 K2M100 这个指令,可以把D151中的字数据表示为K2M100,其中K2表示以M100~M107的8点为对象,详细见如下官方文档。

(3)指定数据方式的比较

由上述例子可以知道,位数据是组成字数据、双字数据等数据类型的基础单元。在数据的指定方法上,可以通过“作为软元件处理的数据”这张表的方式进行指定。除了上述数据,还有如下“作为标签处理的数据”,即指定标签后就定义了数据类型,而不需要通过软件件进行定义:

 (4)有符号数与无符号数

在上述数据类型中,数据的容量决定了能表示的数值大小。而有符号数与无符号数通常成对出现,如带符号16位数据、无符号16位数据,下面以8进制来描述有符号与无符号能表述的数值范围:

无符号: 000~111  (0~7)

有符号: 111~011  (-4~3)

5、执行条件

 对于指令条件,我们通过如下例子解释:

这里表示导通D150.0这个位数据(即置为1),可以使得MOV指令直接执行。即MOV指令会在控制条件D150.0为ON时执行,不同指令要求的执行条件不一样,详见上述官方文档。

6、指令处理时间的高速化

高速化指令可以理解为对程序的加速,需要满足官方条件才会使得指令处理变得高速化,从而提高PLC的反应速度,以适应高速控制的场景。

六、编程时的注意事项

1、对应官方文档

2、指令通用的出错

在编程过程中,需要注意执行指令在一些情况下给出的报错,如下是官方给出的错误码,可以通过这些错误码的原因来修改代码。

3、执行指令时的软元件、标签的范围检查

即需要开发人员注意寄存器的使用,这个前提是充分了解PLC上的资源,避免出现资源不够用时,不报错,但得到的结果不是预期的情况。

 4、使用同一软元件的OUT指令、SET/RST指令、PLS/PLF指令时的动作

这里表述的是在使用这些指令时,如果指令在程序中多次出现,即多次被不同执行条件控制时,将会导致一些逻辑上的错误,而且这些错误可能是不可控的。除非有业务逻辑上的需要,否则不要使用这些指令在程序的各个位置对同一元件进行控制。

 5、一般标志位的处理

如图表述,这里的SM8000是特殊寄存器,状态始终为ON;SM8029也是特殊寄存器,表示上一条指令DSW执行完成后,才会执行后续语句。SM8029指令要求前面需要带执行条件,而且需要放在上一条指令的下方,以此来识别上一条指令。

 6、关于通用功能/功能块的返回值

有些功能模块需要指定输出的寄存器,如下图所示,在没有指定输出位置时,可能会出现错误。 

七、CPU模块用指令

1、对应官方文档

2、 顺控程序指令

相关概念:

顺控,即顺序控制,表示条件满足时执行相应的动作,如:在过程控制中,开关量的阀门需要一定条件触发其开关,而这些条件之间又有先后顺序的关系,所以就需要统一的管理,一个一个地执行,因此称为顺序控制。

程控,即程序控制,也就是通过事先编制好的固定程序实现的自动控制,即现有程序,后有控制过程,控制过程地搭建过程完全按照程序进行搭建。

触点指令,其功能与实际的继电器电路中的触点功能相似。触点指令在FX5U中包含包运算开始、串联连接、并联连接、脉冲运算开始、脉冲串联连接、脉冲并联连接、脉冲否定运算开始、脉冲否定串联连接、脉冲否定并联连接。

合并指令,其功能有多种解释,对于梯形图块串联连接、并联连接,可以理解为逻辑块之间的串联或并联;对于运算结果推入、读取、弹出、取反、脉冲化,可以理解为对运算结果的进一步处理;

输出指令,即控制线圈动作的指令,如:OUT指令是对输出继电器、辅助继电器、状态定时器、计数器的线圈驱动指令,对输入继电器不能使用。

移位指令,即按位移动的指令,这个就像是计算机中二进制的移位运算,只不过在PLC中的对象可以是位元件。

主控制指令,即控制程序是否进入某个程序段中,包含主站控制开始(MC)、主站控制解除(MCR),如:当MC指令执行时,MC和MCR之间的梯形图会被执行。当MC没有执行时,MC和MCR之间的梯形图会被忽略,不占用PLC周期。

结束指令,即用于结束主程序或顺控程序的指令,如:主程序结束后可以进入子程序或中断程序中,而顺控程序的结束代表着整个程序的结束,这是二者的区别。

停止指令,即作用于顺控程序,使其暂时停止,直到开关被置为RUN后才继续运行。

3、 基本指令

相关概念:

基本指令,即比较常用的一些指令,如:编写梯形图或语句表、SFC图等指令。

比较运算指令,即用于运算比较的指令,可理解为条件判断的指令之一,是基本指令的一种。

算数运算指令,即用于加减乘除的指令。

逻辑运算指令,即用于逻辑与或非的指令。

位处理指令,即对位的处理指令。

数据转换指令,即用于转换数据的指令。

数字开关指令,即用于输入BCD码开关数据的专用指令,可用来读入1组或2组4位数字开关的设置值。

数据传输指令,即用于将数据赋值给寄存器。

4、应用指令

相关概念:

应用指令,即一些特殊功能用的指令,如:运算、比较、转换以及通信等指令

旋转指令,即对数据进行旋转的指令,可理解为数据处理的一种,是应用指令的一种。

程序分支指令,即用于处理程序分支的指令。

程序执行控制指令,即用于中断程序、恢复程序的指令。

结构化指令,即用于处理子程序的指令,可调用子程序。结构化指令能够模块化程序,而程序分支指令用于处理程序分支,二者不一样。

数据表操作指令,即可以通过操作表格的方式对表格的数据进行读写操作。

数据读取/写入指令,即可以操作存储的数据。

文件操作指令,即对文件进行读写操作。

扩展文件寄存器操作指令,即操作扩展文件寄存器的指令。

字符串处理指令,即可对字符串进行合并、切割、比较、传输、转换等操作的指令。

随机数指令,即生成随机数的指令。

变址寄存器操作指令,即用于操作变址寄存器的指令。

数据控制指令,即可以对数据进行范围等限制,以限制数据,避免错误。

(其它指令还有很多,这里不再列举)

5、步梯形图指令

相关概念:

步梯形图指令,即步进梯形图指令,其实就是状态步的前进,即状态步的顺序执行,一步一步地往下走,直到整个顺序控制程序执行完毕,包含步梯形图开始(STL)、步梯形图结束(RETSTL)。

6、PID控制指令

相关概念:

PID控制指令,即继承了PID控制算法的指令,能够根据输入变化量,进行用于改变输出值的PID控制。

7、SFC程序用指令

相关概念:

SFC程序用指令,即顺序功能图(Sequeential Function Chart),简称“SFC”,是一种新颖的、按照工艺流程图进行编程的图形编程语言。这是一种IEC标准推荐的首选编程语言。也就是这些指令只能在顺序功能图上使用。

八、关于《MELSEC iQ-F FX5编程手册(指令/通用FUN/FB篇)》的使用

通过上述“四”到“七”章的阅读,我们知道《MELSEC iQ-F FX5编程手册(指令/通用FUN/FB篇)》主要是对指令的解析。因为指令很多,我们应该按需查阅,并不一定要一下子全部了解或理解。我们应该以如下方式去使用该手册:

1、正确理解PLC的相关概念

只有正确理解PLC的相关概念,才能更好地阅读手册,更好地理解命令地使用。

2、按需查阅命令

如果能够全部了解PLC命令的使用,将是再好不过了,至少熟练掌握了PLC的相关命令,使用起来肯定得心应手,即使不能完全了解也没问题,只要会查阅手册即可。

3、理解手册的使用

在第“四”章中,我们详细描述了手册的使用,要想更清晰的理解手册的描述,应该结合实际代码去理解,这样才能更好地了解命令地使用。

九、关于《MELSEC iQ-F FX5编程手册(程序设计篇)》的使用

后续章节的学习,主要是对《MELSEC iQ-F FX5编程手册(程序设计篇)》的学习,在该文档中,我们将学会一些编程思想、程序组织等。在学习该文档前,最好先阅读《MELSEC iQ-F FX5编程手册(指令/通用FUN/FB篇)》,这样能更好理解程序设计的逻辑。我们应该以如下方式去使用该手册:

1、了解PLC能够使用的语言

本文使用的是梯形图语言,编程思想也是基于此。如果使用其他语言,编程思想是有所差异的。

2、了解PLC的程序配置

如下图描述的是程序的组织,使用不同文件去组织程序,能够提供代码的可读性。掌握i不同文件的使用,能够灵活组织程序,以达到编程目的,避免杂乱无章,逻辑混乱。

十、程序部件

1、程序部件的交互逻辑

如图,描述的是程序的交互逻辑,即程序块是一个包含梯形图程序的文件,可理解为模块文件,它可以引用程序部件FB或函数。

程序块可以有多个文件,在这些文件中,程序块的优先级本身是平级的,它可以通过GX Work3进行编排,以确定其运行的优先级。

函数可以嵌入程序块或FB中,可以是系统内置的函数(如PLC命令),也可以是自定义的函数(如多个命令的组合)。

FB与函数不同,不能保持返回值。但FB能将值保存在变量中,因此也能保持输入状态及处理结果。在下一次处理中使用保持后的值,因此即使为相同的输入值也不一定每次都输出相同的结果。

 2、使用程序部件搭建工程,并运行程序

(1)新建函数与调用

 

 

 (2)新建功能块与调用

 

 

 

 (3)新建程序块与调用

通过上面的(1)、(2),我们实际上将函数、功能块分别放到了不同的程序块中,执行顺序也为默认的ProgPou2 -> ProgPou3,而顺序的修改方式如下:

(4) 函数与功能块的区别

函数不占用额外的存储资源,对于非多次调用的程序更易理解;而功能块有独立的存储区,再多次被调用时,参数修改方便,易于移植。某种意义上,功能块能实现的功能,函数也能实现,反之亦然。

十一、标签

十二、梯形图语言

 十三、总结

官方文档已经详细说明了PLC的编程方式,但是对小白并不算友好。而且,网上的编程资源不像python、C++等语言容易找到。加上不同厂家的PLC不同,就更不容易找到指定资源了。要精通PLC,其实很有挑战性,若要精通各厂家的PLC,那属实不易。不过,万变不离其中,只要建立了编程思想,就会知道某种意义上,其实它们是相通的。不管怎样,读懂官方文档,再加上一些实战项目,开发PLC程序才能得心应手!

猜你喜欢

转载自blog.csdn.net/weixin_43431593/article/details/128210840