三菱ST语言教学(1) | 您所在的位置:网站首页 › 三菱支持st语言的plc › 三菱ST语言教学(1) |
程序写成这样已经可以初步实现功能,可以看到在ST语言下,软元件赋值后如果没有其他的赋值操作,直接就是保持的,类似于梯形图的SET/RST指令。 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判断更清晰,它常用于判断数字量,我们举个例子来说明他的格式,仍然采用标签的方式: 其含义为: 当标签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个变量,分别为气缸伸出,伸出反馈,气缸缩回,缩回反馈。 2019-10-10 00:52·PLC程序猿 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判断更清晰,它常用于判断数字量,我们举个例子来说明他的格式,仍然采用标签的方式: 声明标签 这里建立了两个字变量“ii”“iCount”,这里ii作为循环的依据变量,设定的增量为by后面的数字2,由0数到100,意思为ii初始值为0,每次+2,直到ii的值=100本次扫描周期内停止。要明确的是循环是在一个PLC扫描周期内完成的,所以如果FOR语句上面没有条件进行限制,每个扫描周期都要进行这个循环任务,例如上图的程序如果直接执行,那么每个扫描周期要进行50次循环,占用PLC的资源还是很大的,所以一般我们要用上升沿或者判断条件限制FOR循环在需要的时候执行。例如: 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循环为有限次的循环,循环根据设定的增量讲一个数字变量进行递增,直到变量等于设定值。举例说明: 这里建立了两个字变量“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 |
CopyRight 2018-2019 实验室设备网 版权所有 |