三菱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语言逻辑运算和数学运算都很方便,例如:
“与或非”和“加减乘除”都很简单,复杂的运算可以直接调用现成的公式(指令)。下一篇讲解指令和功能块的调用。
通过示例学习三菱ST编程(条件语句及定时器的综合应用示例)
今天跟大家分享的是三菱结构化文本ST编程的条件语句和定时器的综合应用示例。
什么是条件语句?
在我前面的文章和西门子SCL专栏中都有明确的介绍,这里不做过多的介绍,简要就如下图所示:
那么定时器在三菱ST编程中怎么用?
指令格式:
BOOL_EN:定时器使能信号
BOOL_TCoil:定时器线圈(定时器编号)
TValue:定时时间设定
比如下面示例中会用到的:
OUT_T( ( B点 AND NOT B点记忆)OR (C点 AND NOT C点记忆)OR (D点 AND NOT D点记忆) OR E点, TC3 , K20 );
这条指令就是当(( B点 AND NOT B点记忆)OR (C点 AND NOT C点记忆)OR (D点 AND NOT D点记忆) OR E点)条件满足,则启动定时器T3,定时2s。
定时器的输出就是TS3。就如下面的用法:
下面就看看今天这个示例:
功能要求:一个小车在A、B、C、D、E五点间自动往返运动,流程示意图就上图所示,当按下启动按钮,小车前进到B点,当到达B点后,停止2s后,自动后退到A点,再前进到C点,停2s,再退回A点。如此循环。
编程说明:
1、首先考虑是小车的前进条件,第一次启动时通过按启动按钮,小车前进,第二次之后就是当A点的行程开关动作,小车前进。当第二次到达B点后,小车依然要前进,同理当第二次到达C点和D点,都是要前进。
其次考虑小车的停止条件:当第一次到达B点、C点、D点、E点,小车都是要停止的。因此,我们编写第一段条件语句:
IF 启动 OR A点 THEN 前进:=1;
ELSIF 前进 AND (B点 AND B点记忆) THEN 前进:=1;
ELSIF 前进 AND (C点 AND C点记忆) THEN 前进:=1;
ELSIF 前进 AND (D点 AND D点记忆) THEN 前进:=1;
ELSIF (B点 AND NOT B点记忆) OR (C点 AND NOT C点记忆) OR (D点 AND NOT D点记忆) OR E点 THEN
前进:=0;
END_IF;
注:在上面程序中,用局部标签来记录过程值,来用于判断。本例定义的标签如下图所示:
2、我们来编写后退程序:
首先就是当第一次到达B点、C点、D点、E点要停止2s,这时我们就用定时器指令来完成:
OUT_T( ( B点 AND NOT B点记忆)OR (C点 AND NOT C点记忆)OR (D点 AND NOT D点记忆) OR E点, TC3 , K20 );
其次就是后退程序,当定时时间到,则小车后退,后退的停止条件就是到达A点。程序如下:
IF TS3 THEN 后退:=1;
ELSIF A点 THEN 后退:=0;
END_IF;
3、过程记忆程序的编写。
对小车经过的点进行记忆,当到达E点后,则对记忆值进行清零。
IF B点 AND TS3 THEN B点记忆:=1;
ELSIF E点 THEN B点记忆:=0;
END_IF;
IF C点 AND TS3 THEN C点记忆:=1;
ELSIF E点 THEN C点记忆:=0;
END_IF;
IF D点 AND TS3 THEN D点记忆:=1;
ELSIF E点 THEN D点记忆:=0;
END_IF;
到此,一个完整的程序就编写完了。完整程序如下图所示:
仿真示例图:
小车前进:
第二次到达B点,小车依然前进:
第一次到达C点,小车停止:
定时时间到,小车自动后退:
相关问答
三菱PLC编程使用标签是什么意思,怎么使用啊,万分感谢?
标签和变量,可以认为是一个意思,都是PLC编程中的重要基础概念,一般美系和日系的称作标签,比如三菱和AB,而欧系的称为变量,比如西门子。PLC的实质就是计算机...标...
plc寻址编程方法?
1.PLC寻址编程方法有多种。2.首先,常见的一种方法是直接寻址编程,即通过指定PLC的输入输出点的地址来进行编程。这种方法简单直接,适用于简单的控制任务。另...
汇川plc的标签怎么导出?
在汇川plc中,标签导出可以通过以下步骤完成:首先,在PLC编程软件中选择需要导出标签的程序,然后点击“标签管理”按钮。接着,选择需要导出的标签,并点击“...
PLC的变量如何与Wincc连接?需要在PLC程序中编程吗?
使用脚本程序,调用内部函数SetTag(“PLC变量”,GetTag(“内部变量”))。SetTag和GetTag函数可详见Wincc帮助说明使用脚本程序,调用内部函数SetTag(“PLC变量....
三菱plc怎么用语句表编程?
回答如下:三菱PLC可以使用语句表编程,具体步骤如下:1.打开三菱PLC编程软件,创建一个新的程序。2.在程序中选择一个需要编写语句表的程序段,例如主程序段...
plc怎么用st语言?
三菱plc使用st语言的方法:在Q系列创建项目,使用标签方式编程,如果不使用该方式,你将不能使用ST语言。之后,你可以使用ST语言来编辑程序。在GXWorks2中,...
三菱plc程序如何有标签改为无标题?
1.可以通过修改程序中的标签来实现将有标签的程序改为无标题的程序。2.在三菱PLC编程软件中,程序的标签是用来标识程序的名称和作用的。如果要将有标签的程...
谁知道欧姆龙CJ1MCPU12的PLC怎么联接电脑编程啊-ZOL问答
兄弟,必须有装驱动程序才行的啊有用(0)回复dsadadasdfddf肯定不能用USB转啊,直接连电脑串口才行,你USB转一遍又没有驱动,哪里可以用。自己焊的和原装的效果...
西门子PLCS7-200模拟量输入怎样编程?
西门子PLCS7-200系列控制器的模拟量输入编程步骤如下:1.打开SimaticManager软件,并创建一个新的工程文件。2.在SimaticManager的硬件配置中添加S7-200...
三菱plc编程语言的种类有哪些?
感谢邀请!三菱FX系列的主要是3系包括(FX3S、FX3G、FX3GC、FX3U、FX3UC)可编程控制器支持一下6中编程语言:指令表编程、梯形图编程、SFC步进图编程、ST结构文本...