三菱ST语言教学(1)——基本指令与标签
IF 条件判断
if单词翻译过来是“如果”,在程序中用于判断是否满足某种条件,当满足其中一个条件时在这个条件下面进行一些操作,在所有条件都不满足时不操作,举个例子:
假设现在有3个按钮控制电机正反转。按下按钮1(X1)电机正转(Y1),按下按钮2(X2)电机反转(Y2),按下X3停止。 使用梯形图编程如下:
梯形图编程
可以看到的是,由于输入为按钮,是一个脉冲信号,所以需要线圈并上输入形成自锁保持电机启动。同样的功能我们用ST来编程:
ST编程
当按下按钮X1的期间,位软元件Y1的值为true(理解为on,高电平,导通),Y2的值为false(理解为off,低电平,断开),X2与X3同理。三个按钮都没有动作时,输出Y1,Y2也不会有任何操作。
这里的:=是ST语言的赋值符号,它即可以给开关量赋值,也可以给数字量赋值;即可以赋值常数,也可以赋值变量,类似于梯形图里面的mov指令。一定要记住每个赋值语句后面和结束指令后面要加分号结束符“;”,程序里所有的符号要用英文的符号。
程序写成这样已经可以初步实现功能,可以看到在ST语言下,软元件赋值后如果没有其他的赋值操作,直接就是保持的,类似于梯形图的SET/RST指令。
IF语句的常用格式如下:
IF不仅可以判断开关量,同时可以判断数字量,或者是一个公式,例如:
IF判断数字量
标签(变量)
上面的程序我们都是用PLC自带的软元件(X,Y,M,D等)进行编程的,而想要发挥ST语言真正的实力还需要学会使用标签进行编程。
从使用范围标签分为局部标签和全局标签,局部标签只能在相应的一个程序段内使用,不同的程序段可以建立同名标签不会互相影响;而全局标签可以在工程下所有程序段内使用。
在三菱的结构化工程中,每建立一个程序段就会生成相应的局部标签,建立标签需要声明标签的数据类型,可以是bit(位),word(字),float(浮点),string(字符串),time(时间)等基本数据类型,也可以是FB(功能块),struct(结构体),本文只介绍基本数据类型,其他的以后再讲。
上面电机正反转控制的例子我们可以修改如下:
声明标签
声明标签
标签栏共有3项,“类”包含VAR,VAR_CONSTANT,VAR_RETAIN,其中VAR为中间变量,可以在任意时刻进行判断和赋值;VAR_CONSTANT为常数变量,设定常数后不能被程序赋值;VAR_RETAIN为保持变量,相比VAR多个掉电数据保持功能。“标签名”可以任意写,三菱还支持写中文,但要注意不要写一些PLC保留字,比如bit,int,word等相关的,这里建议尽量写英文,这样程序看起来整齐而且通用,可以复制到其他品牌PLC也能直接运行,还有中文的变量在编程时不能双击选中,也很麻烦。
程序编辑如下:
标签编程
标签所表示的含义是编程人员定义的,想要控制实际的设备还需要将标签与设备对应的软元件相连接:
程序与设备相连
这里要注意赋值的方向,:=后面的值传递给前面的标签。
从这个程序来看好像标签没有起到任何便利的作用,反而多此一举,那是因为程序太简单还体现不出标签的便捷,下面我们讲其他的基本指令。
CASE 条件判断
与IF相比,CASE判断更清晰,它常用于判断数字量 ,我们举个例子来说明他的格式,仍然采用标签的方式:
声明标签
CASE判断
其含义为:
当标签Number=0时,输出开关量OutputBool为true,输出整形量OutputInt=1;
当Number=1时,输出开关量OutputBool为true,输出整形量OutputInt=2;
当Number=2到11任意一个数时,输出开关量OutputBool为true,输出整形量OutputInt=3;
当Number=15或者20时,输出开关量OutputBool为true,输出整形量OutputInt=4;
当Number不等于以上任何值时,输出开关量OutputBool为false,输出整形量OutputInt=0;
这段程序基本体现了case语句的所有格式,可以看到相比IF,条件要清晰很多。
CASE指令除了用于条件判断,也用于顺序流程控制 的编程,再举个例子:
假设一个机构有3个气缸,3个气缸按照一个固定顺序依次进行伸出动作,完成后统一缩回。 我们可以使用case来构建整个流程:
声明标签
每个气缸有4个变量,分别为气缸伸出,伸出反馈,气缸缩回,缩回反馈。
流程控制
iStep的每一个值相当于一个步骤,每完成一个步骤,通过气缸到位信号 将步骤iStep置为下一个步骤,这样整个程序可以按照我们想要顺序执行。xBegin相当于一个开始按钮,触发整个流程。
从这个程序我们可以看出,case下面可以添加if,实际上不仅如此,所有基本指令的下面都可以多层套嵌,可以实现更为复杂的逻辑。
FOR循环
FOR循环为有限次的循环,循环根据设定的增量讲一个数字变量进行递增,直到变量等于设定值。举例说明:
FOR循环
这里建立了两个字变量“ii”“iCount”,这里ii作为循环的依据变量,设定的增量为by后面的数字2,由0数到100,意思为ii初始值为0,每次+2,直到ii的值=100本次扫描周期内 停止。要明确的是循环是在一个PLC扫描周期内完成的,所以如果FOR语句上面没有条件进行限制,每个扫描周期都要进行这个循环任务,例如上图的程序如果直接执行,那么每个扫描周期要进行50次循环,占用PLC的资源还是很大的,所以一般我们要用上升沿或者判断条件限制FOR循环在需要的时候执行。例如:
增加限制条件
这里对FOR循环做了条件限制,每循环一次iCount的值增加1,每个周期for循环50次,20个周期后iCount的值=1000,不再满足iCount<1000的条件了, 循环停止。
WHILE循环
WHILE循环为条件循环,只要满足设定的条件就一直循环,直到条件不满足才停止,循环也是在一个PLC扫描周期内完成的。这里要特别注意如果条件一直满足,PLC会陷入死循环,造成PLC报错,所以如果不是迫不得已,尽量不要使用while循环,举例说明其用法:
WHILE循环
这个程序的意思为,在一个扫描周期内,当变量iCount<1000时,始终执行iCount自身+1的操作,直到不满足iCount<1000的条件才停止,上面这个程序分析可知循环1000次后循环停止,程序是没问题的,但是如果由于马虎+号写成了-号,如果不考虑变量自身的容量问题,循环没有停止的时候,变为死循环,那这个程序一运行就会报错。
其他的基本符号
ST语言逻辑运算和数学运算都很方便,例如:
“与或非”和“加减乘除”都很简单,复杂的运算可以直接调用现成的公式(指令)。下一篇讲解指令和功能块的调用。
西门子PLC的STEP7 程序块的类型及区别
在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。
注:快捷菜单中的其它两项:数据类型和变量表。数据类型(UDT)用于指定程序中数据元素的大小与格式;
变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中会自动显示在符号表中定义的符号)。
这几种程序块的功能简要说明如下:调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块);被调用程序块:FB,FC,SFB,SFC。
1、组织块OBOB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。
在OB块中编写程序的最大容量,S7-300是16KB,S7-400是64KB。
除主程序循环OB1外,其它OB均是由事件触发的中断。2、函数FC 函数FC有两个作用:(1)作为子程序用;
(2)作为函数用,函数中通常带形参。
函数中程序的最大容量,S7-300是16KB,S7-400是64KB。
FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。
在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断)。可以在函数的开始,将字输出参数清0,位输出参数复位。
3、函数块FB FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运
算的中间数据。其它程序可以直接使用背景数据区中的数据。
FB中程序的最大容量,S7-300是16KB,S7-400是64KB。
FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。
程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。
由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。
4、数据块DB
DB用来存储用户数据及程序的中间变量,为全局变量。DB的最大容量,S7-300为32KB,S7-400为64KB。
DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据UDT)类型的数据块。
共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的最大容量为64KB。
默认条件下,共享数据块为掉电保持,在其属性菜单中选中"Non Retain"可以更改为掉电数据丢失。
如CPU中无足够的内部存储空间保存数据,可将指定的数据保存到共享数据块。存储在共享数据块中的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被指定的功能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。
背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。
有关多重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。
5、系统函数(SFC)和系统函数块(SFB) SFC和SFB集成在CPU中,相当于系统提供的可供用户程序调用的FC或FB,实现与CPU系统相关的一些功能,如读写CPU时钟等功能。调用SFB需要背景数据块。
相关问答
plc结构化编程格式?
PLC(可编程逻辑控制器)结构化编程格式主要包括以下几个部分:1.程序结构:PLC结构化编程格式通常采用类似于流程图的结构,包括主程序(Mainprogram)、子程...P...
plc程序文件格式?
西门子plc程序的后缀为:.mwp。一个MWP文件包含程序和说明SIMATICS7-200机器。它由西门子STEP7-Micro/WIN的程序中使用。西门子STEP7用于SIMATICS7...
plc编号格式?
你好,PLC编号格式可以根据具体的品牌和型号而有所不同,但通常包括以下几个方面:1.品牌标识:PLC厂商的名称或标识,例如西门子、欧姆龙、AB等。2.系列号:...
什么是安装plc各类模板的机架?
安装PLC各类模板的机架是指将PLC模板安装在机架上的过程。机架通常由金属材料制成,具有固定槽位和连接接口,用于安装和固定PLC模板。安装机架需要按照PLC模板...
西门子PLC程序文件格式?
西门子plc程序的后缀为:.mwp。一个MWP文件包含程序和说明SIMATICS7-200机器。它由西门子STEP7-Micro/WIN的程序中使用。西门子STEP7用于SIMATICS7...
西门子plc定时器输入规格?
时间长短与你用的定时器的精度有关。如果是100ms的定时器,你输入10就是1分钟,如果是10ms的你输入10就是100ms.2.如果是300系列的,在TV端输入。10秒输入S5T#10S...
plc中字节寻址的格式?
1.字节(Byte,B):由8个位(bit)组成,它是存储空间的基本计量单位。2.字节寻址由存储区标识符、字节标识符、字节地址组合而成。3.字节寻址的格式:[...1...
ab系列plc的变量地址格式?
AB系列PLC的变量地址格式分为两种:绝对地址格式和符号地址格式。1.绝对地址格式:绝对地址格式是基于内存字节的地址格式,包括内部保持寄存器、输入信号、输出...
西门子PLC中Word格式与INT格式区别?
word是无符号的,或者说都是正数int是有符号的,最高位为1表示负数,0表示正数word是无符号的,或者说都是正数int是有符号的,最高位为1表示负数,0表示正数
plc模板的作用?
CPU模块是plc的控制中枢。它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用...