课程中心
HOME
课程中心
正文内容
西门子plc编程左移整数 在PLC编程使用结构文本ST语言编程中使用CASE语句实现移位功能
发布时间 : 2024-10-09
作者 : 小编
访问数量 : 23
扫码分享至微信

在PLC编程使用结构文本ST语言编程中使用CASE语句实现移位功能

在PLC进行编程中常常会用到移位指令,大家也都是很熟悉,今天要跟大家聊聊的就是如何使用case语句来实现移位指令的功能。

一、首先条件语句CASE的语法结构和功能

CASE语句 :用来选择几个分支程序部分之一。选择是基于选择表达式当前值的。

语法:

CASE语句按下列规则执行:

选择表达式必须返回一个整数类型的值。当CASE语句被处理时,程序检查是否选择表达式的值包含在指定的值表之中。如果找到匹配项,列表指定的语句部分将被执行。如果没有发现匹配项,程序选择ELSE后面的语句,或者如果ELSE分支不存在则无语句可执行。

下表列出了case语句的参数:

值表 :包含允许的选择表达式的值。如下面的语句表达:

二、通过一个示例来看看如何通过CASE语句来实现移位的功能

功能要求,当按下启动按钮,六盏灯每隔2s,从左到右依次点亮;当按下停止按钮,灯全部熄灭。

看到本例,相信大家首先想到的就是移位指令,可以很容易实现此功能,今天我们主要要练习的就是CASE语句的使用,所以,看看如何通过CASE语句来实现本例的功能。

编程过程:

1、使用条件语句IF,当按下启动按钮来对灯赋值1(点亮第一盏灯),当按下停止按钮,则对灯赋值0(熄灭所有灯)

IF #START THEN

#LIGHT_TEMP := 1;

ELSIF #STOP THEN

#LIGHT_TEMP := 0;

END_IF;

2、设定时间,间隔2s

#TIME.TON(IN := (#LIGHT_TEMP = 1),

PT := T#2S);

#TIME_1.TON(IN := (#LIGHT_TEMP = 2),

PT := T#2S);

#TIME_2.TON(IN := (#LIGHT_TEMP =4),

PT := T#2S);

#TIME_3.TON(IN := (#LIGHT_TEMP = 8),

PT := T#2S);

#TIME_4.TON(IN := (#LIGHT_TEMP = 16),

PT := T#2S);

#TIME_5.TON(IN := (#LIGHT_TEMP = 32),

PT := T#2S);

3、使用CASE语句来进行选择赋值

CASE #LIGHT_TEMP OF

1:IF #TIME.Q AND #LIGHT_TEMP=1 THEN

#LIGHT_TEMP := 2;

END_IF;

2:IF #TIME_1.Q AND #LIGHT_TEMP=2 THEN

#LIGHT_TEMP := 4;

END_IF;

4:IF #TIME_2.Q AND #LIGHT_TEMP=4 THEN

#LIGHT_TEMP := 8;

END_IF;

8:IF #TIME_3.Q AND #LIGHT_TEMP=8 THEN

#LIGHT_TEMP := 16;

END_IF;

16:IF #TIME_4.Q AND #LIGHT_TEMP=16 THEN

#LIGHT_TEMP := 32;

END_IF;

32:IF #TIME_5.Q AND #LIGHT_TEMP = 32 THEN

#LIGHT_TEMP := 1;

END_IF;

END_CASE;

4、赋值输出

#LIGHT := #LIGHT_TEMP;

5、完整程序如下图所示:

6、仿真运行:

注:通过本示例,主要是跟大家看看case语句的使用,同时,也是通过本示例来看看使用结构文本ST编程的多种方法。

西门子、三菱指令大全,集齐了才知道PLC编程这么容易

西门子PLC编程指令

1、位逻辑指令

1.1 -||- 常开接点(地址)1.2 -|/|- 常闭接点(地址)1.3 XOR 位异或1.4 -|NOT|- 信号流反向1.5 -( ) 输出线圈1.6 -(#)- 中间输出1.7 -(R) 线圈复位1.8 -(S) 线圈置位1.9 RS 复位置位(置位复位)触发器1.10 -(N)- RLO下降沿检测1.11 -(P)- PLO上升沿检测1.12 -(SAVE) 将RLO存入BR存储器1.13 MEG 地址下降沿检测1.14 POS 地址上升沿检测

2、比较指令

2.1 CMP?I 整数比较2.2 CMP?D 双整数比较2.3 CMP?R 实数比较

3、转换指令

3.1 BCD_IBCD码转换为整数3.2 I_BCD 整数转换为BCD码3.3 I_DINT 整数转换为双整数3.4 BCD_DIBCD码转换为双整数3.5 DI_BCD 双整数转换为BCD码3.6 DI_REAL 双整数转换为浮点数3.7 INV_I 整数的二进制反码3.8 INV_DI 双整数的二进制反码3.9 NEG_I 整数的二进制补码3.10 NEG_DI 双整数的二进制补码3.11 NEG_R 浮点数求反3.12 ROUND 舍入为双整数3.13 TRUNC 舍去小数取整为双整数3.14 CEIL 上取整3.15 FLOOR 下取整

4、计数器指令

4.1 S_CUD 加减计数4.2 S_CU 加计数器4.3 S_CD 减计数器4.4 -(SC) 计数器置初值4.5 -(CU) 加计数器线圈4.6 -(CD) 减计数器线圈

5、数据块指令

5.1 -(OPN) 打开数据块:DB或DI

6、逻辑控制指令6.1 -(JMP) 无条件跳转6.2 -(JMP) 条件跳转6.3 -(JMPN) 若非则跳转6.4 LABEL 标号

7、整数算术运算指令

7.1 ADD_I 整数加法7.2 SUB_I 整数减法7.3 MUL_I 整数乘法7.4 DIV_I 整数除法7.5 ADD_DI 双整数加法7.6 SUB_DI 双整数减法7.7 MUL_DI 双整数乘法7.8 DIV_DI 双整数除法 7.9 MOD_DI 回送余数的双整数

8、浮点算术运算指令

8.1 基础指令8.1.1 ADD_R 实数加法8.1.2 SUB_R 实数减法8.1.3 MUL_R 实数乘法8.1.4 DIV_R 实数除法8.1.5 ABS 浮点数绝对值运算

8.2 扩展指令

8.2.1 SQR 浮点数平方8.2.2 SQRT 浮点数平方根8.2.3 EXP 浮点数指数运算8.2.4 LN 浮点数自然对数运算8.2.5 SIN 浮点数正弦运算8.4.6 COS 浮点数余弦运算8.2.7 TAN 浮点数正切运算8.2.8 ASIN 浮点数反正弦运算8.2.9 ACOS 浮点数反余弦运算8.2.10ATAN 浮点数反正切运算

9、赋值指令

9.1 MOVE 赋值

10、程序控制指令

10.1 -(Call) 从线圈调用FC/SFC(无参数)10.2 CALL_FB 从方块调用FB10.3 CALL_FC 从方块调用FC10.4 CALL_SFB 从方块调用SFB10.5 CALL_SFC 从方块调用SFC10.6 -(MCR<) 主控继电器接通10.7 -(MCR>) 主控继电器断开10.8 -(MCRA) 主控继电器启动10.9 -(MCRD) 主控继电器停止10.10 -(RET) 返回

11、移位和循环指令

11.1 移位指令11.1.1 SHR_I 整数右移11.1.2 SHR_DI 双整数右移11.1.3 SHL_W 字左移11.1.4 SHR_W 字右移11.1.5 SHL_DW 双字左移11.1.6 SHR_DW 双字右移

11.2 循环指令

11.2.1 ROL_DW 双字左循环11.2.2 ROR_DW 双字右循环

12、状态位指令

12.1 OV -||- 溢出异常位12.2 OS -||- 存储溢出异常位12.3 UO -||- 无序异常位12.4 BR -||- 异常位二进制结果12.5 ==0-||- 结果位等于"0"12.6 <>0-||- 结果位不等于"0"12.7 >0-||- 结果位大于"0"12.8 <0-||- 结果位小于"0"12.9 >=0-||- 结果位大于等于"0"12.10 <=0-||- 结果位小于等于"0"

13、定时器指令

13.1 S_PULSE 脉冲S5定时器13.2 S_PEXT 扩展脉冲S5定时器13.3 S_ODT 接通延时S5定时器13.4 S_ODTS 保持型接通延时S5定时器13.5 S_OFFDT 断电延时S5定时器13.6 -(SP) 脉冲定时器线圈13.7 -(SE) 扩展脉冲定时器线圈13.8 -(SD) 接通延时定时器线圈13.9 -(SS) 保持型接通延时定时器线圈13.10 -(SF) 断开延时定时器线圈

14、字逻辑指令

14.1 WAND_W 字和字相"与"14.2 WOR_W 字和字相"或"14.3 WAND_DW 双字和双字相"与"14.4 WOR_DW 双字和双字相"或"14.5 WXOR_W 字和字相"异或"14.6 WXOR_DW 双字和双字相"异或“

三菱 FX 系列PLC的基本逻辑指令

取指令与输出指令(LD/LDI/LDP/LDF/OUT)

(1)LD(取指令) 一个常开触点与左母线连接的指令,每一个以常开触点开始的逻辑行都用此指令。

(2)LDI(取反指令) 一个常闭触点与左母线连接指令,每一个以常闭触点开始的逻辑行都用此指令。

(3)LDP(取上升沿指令) 与左母线连接的常开触点的上升沿检测指令,仅在指定位元件的上升沿(由OFF→ON)时接通一个扫描周期。

(4)LDF(取下降沿指令) 与左母线连接的常闭触点的下降沿检测指令。

(5)OUT(输出指令) 对线圈进行驱动的指令,也称为输出指令。

取指令与输出指令的使用说明:

1)LD、LDI指令既可用于输入左母线相连的触点,也可与ANB、ORB指令配合实现块逻辑运算;

2)LDP、LDF指令仅在对应元件有效时维持一个扫描周期的接通。

3)LD、LDI、LDP、LDF指令的目标元件为X 、Y 、M 、T、C、S;4)OUT指令可以连续使用若干次(相当于线圈并联),对于定时器和计数器,在OUT指令之后应设置常数K或数据寄存器。

5)OUT指令目标元件为Y、M、T、C和S,但不能用于X。

触点串联指令(AND/ANI/ANDP/ANDF)

(1)AND(与指令) 一个常开触点串联连接指令,完成逻辑“与”运算。

(2)ANI(与反指令) 一个常闭触点串联连接指令,完成逻辑“与非”运算。

(3)ANDP 上升沿检测串联连接指令。

(4)ANDF 下降沿检测串联连接指令。

触点串联指令的使用的使用说明:

1)AND、ANI、ANDP、ANDF都只是单个触点串联连接的指令,串联次数没有限制,可反复使用。

2)AND、ANI、ANDP、ANDF的目标元元件为X、Y、M、T、C和S。

3)OUT M101指令之后通过T1的触点去驱动Y4称为连续输出。

触点并联指令(OR/ORI/ORP/ORF)

(1)OR(或指令) 用于单个常开触点的并联,实现逻辑“或”运算。

(2)ORI(或非指令) 用于单个常闭触点的并联,实现逻辑“或非”运算。

(3)ORP 上升沿检测并联连接指令。

(4)ORF 下降沿检测并联连接指令。

触点并联指令的使用说明:

1)OR、ORI、ORP、ORF指令都是指单个触点的并联,并联触点的左端接到LD、LDI、LDP或LPF处,右端与前一条指令对应触点的右端相连。触点并联指令连续使用的次数不限;

2)OR、ORI、ORP、ORF指令的目标元件为X、Y、M、T、C、S。

块操作指令(ORB / ANB)

(1)ORB(块或指令) 用于两个或两个以上的触点串联连接的电路之间的并联。

ORB指令的使用说明:

1)几个串联电路块并联连接时,每个串联电路块开始时应该用LD或LDI指令;

2)有多个电路块并联回路,如对每个电路块使用ORB指令,则并联的电路块数量没有限制;

3)ORB指令也可以连续使用,但这种程序写法不推荐使用,LD或LDI指令的使用次数不得超过8次,也就是ORB只能连续使用8次以下。

(2)ANB(块与指令) 用于两个或两个以上触点并联连接的电路之间的串联。

ANB指令的使用说明:

1)并联电路块串联连接时,并联电路块的开始均用LD或LDI指令;

2)多个并联回路块连接按顺序和前面的回路串联时,ANB指令的使用次数没有限制。也可连续使用ANB,但与ORB一样,使用次数在8次以下。

置位与复位指令(SET/RST)

(1)SET(置位指令) 它的作用是使被操作的目标元件置位并保持。

(2)RST(复位指令) 使被操作的目标元件复位并保持清零状态。SET、RST指令的使用,当X0常开接通时,Y0变为ON状态并一直保持该状态,即使X0断开Y0的ON状态仍维持不变;只有当X1的常开闭合时,Y0才变为OFF状态并保持,即使X1常开断开,Y0也仍为OFF状态。

SET 、RST指令的使用说明:

1)SET指令的目标元件为Y、M、S,RST指令的目标元件为Y、M、S、T、C、D、V 、Z。RST指令常被用来对D、Z、V的内容清零,还用来复位积算定时器和计数器。

2)对于同一目标元件,SET、RST可多次使用,顺序也可随意,但最后执行者有效。

微分指令(PLS/PLF)

(1)PLS(上升沿微分指令) 在输入信号上升沿产生一个扫描周期的脉冲输出;

(2)PLF(下降沿微分指令) 在输入信号下降沿产生一个扫描周期的脉冲输出。

利用微分指令检测到信号的边沿,通过置位和复位命令控制Y0的状态。

PLS、PLF指令的使用说明:

1)PLS、PLF指令的目标元件为Y和M;

2)使用PLS时,仅在驱动输入为ON后的一个扫描周期内目标元件ON,M0仅在X0的常开触点由断到通时的一个扫描周期内为ON;使用PLF指令时只是利用输入信号的下降沿驱动,其它与PLS相同。

主控指令(MC/MCR)

1)MC(主控指令) 用于公共串联触点的连接。执行MC后,左母线移到MC触点的后面。

2)MCR(主控复位指令) 它是MC指令的复位指令,即利用MCR指令恢复原左母线的位置。

在编程时常会出现这样的情况,多个线圈同时受一个或一组触点控制,如果在每个线圈的控制电路中都串入同样的触点,将占用很多存储单元,使用主控指令就可以解决这一问题。

MC、MCR指令利用MC N0 M100实现左母线右移,使Y0、Y1都在X0的控制之下,其中N0表示嵌套等级,在无嵌套结构中N0的使用次数无限制;利用MCR N0恢复到原左母线状态。如果X0断开则会跳过MC、MCR之间的指令向下执行。

MC、MCR指令的使用说明:

1)MC、MCR指令的目标元件为Y和M,但不能用特殊辅助继电器。MC占3个程序步,MCR占2个程序步;

2)主控触点在梯形图中与一般触点垂直。主控触点是与左母线相连的常开触点,是控制一组电路的总开关。与主控触点相连的触点必须用LD或LDI指令。

3)MC指令的输入触点断开时,在MC和MCR之内的积算定时器、计数器、用复位/置位指令驱动的元件保持其之前的状态不变。非积算定时器和计数器,用OUT指令驱动的元件将复位,22中当X0断开,Y0和Y1即变为OFF。

4)在一个MC指令区内若再使用MC指令称为嵌套。嵌套级数最多为8级,编号按N0→N1→N2→N3→N4→N5→N6→N7顺序增大,每级的返回用对应的MCR指令,从编号大的嵌套级开始复位。

堆栈指令(MPS/MRD/MPP)

堆栈指令是FX系列中新增的基本指令,用于多种输出电路,为编程带来便利。在FX系列PLC中有11个存储单元,它们专门用来存储程序运算的中间结果,被称为栈存储器。

(1)MPS(进栈指令) 将运算结果送入栈存储器的第一段,同时将先前送入的数据依次移到栈的下一段。

(2)MRD(读栈指令) 将栈存储器的第一段数据(最后进栈的数据)读出且该数据继续保存在栈存储器的第一段,栈内的数据不发生移动。

(3)MPP(出栈指令) 将栈存储器的第一段数据(最后进栈的数据)读出且该数据从栈中消失,同时将栈中其它数据依次上移。

堆栈指令的使用说明:

1)堆栈指令没有目标元件;

2)MPS和MPP必须配对使用;

3)由于栈存储单元只有11个,所以栈的层次最多11层。

逻辑反、空操作与结束指令(INV/NOP/END)

1)INV(反指令) 执行该指令后将原来的运算结果取反。反指令的使用如图10所示,如果X0断开,则Y0为ON,否则Y0为OFF。使用时应注意INV不能象指令表的LD、LDI、LDP、LDF那样与母线连接,也不能象指令表中的OR、ORI、ORP、ORF指令那样单独使用。

2)NOP(空操作指令) 不执行操作,但占一个程序步。执行NOP时并不做任何事,有时可用NOP指令短接某些触点或用NOP指令将不要的指令覆盖。当PLC执行了清除用户存储器操作后,用户存储器的内容全部变为空操作指令。

3)END(结束指令) 表示程序结束。若程序的最后不写END指令,则PLC不管实际用户程序多长,都从用户程序存储器的第一步执行到最后一步;若有END指令,当扫描到END时,则结束执行程序,这样可以缩短扫描周期。在程序调试时,可在程序中插入若干END指令,将程序划分若干段,在确定前面程序段无误后,依次删除END指令,直至调试结束。

FX系列PLC的步进指令

1.步进指令(STL/RET)

步进指令是专为顺序控制而设计的指令。在工业控制领域许多的控制过程都可用顺序控制的方式来实现,使用步进指令实现顺序控制既方便实现又便于阅读修改。

FX2N中有两条步进指令:STL(步进触点指令)和RET(步进返回指令)。

STL和RET指令只有与状态器S配合才能具有步进功能。如STL S200表示状态常开触点,称为STL触点,它在梯形图中的符号为-|| ||- ,它没有常闭触点。我们用每个状态器S记录一个工步,例STL S200有效(为ON),则进入S200表示的一步(类似于本步的总开关),开始执行本阶段该做的工作,并判断进入下一步的条件是否满足。一旦结束本步信号为ON,则关断S200进入下一步,如S201步。RET指令是用来复位STL指令的。执行RET后将重回母线,退出步进状态。

2.状态转移图

一个顺序控制过程可分为若干个阶段,也称为步或状态,每个状态都有不同的动作。当相邻两状态之间的转换条件得到满足时,就将实现转换,即由上一个状态转换到下一个状态执行。我们常用状态转移图(功能表图)描述这种顺序控制过程。用状态器S记录每个状态,X为转换条件。如当X1为ON时,则系统由S20状态转为S21状态。

状态转移图中的每一步包含三个内容:本步驱动的内容,转移条件及指令的转换目标。

步驱动Y0,当X1有效为ON时,则系统由S20状态转为S21状态,X1即为转换条件,转换的目标为S21步。

3.步进指令的使用说明

1)STL触点是与左侧母线相连的常开触点,某STL触点接通,则对应的状态为活动步;

2)与STL触点相连的触点应用LD或LDI指令,只有执行完RET后才返回左侧母线;

3)STL触点可直接驱动或通过别的触点驱动Y、M、S、T等元件的线圈;

4)由于PLC只执行活动步对应的电路块,所以使用STL指令时允许双线圈输出(顺控程序在不同的步可多次驱动同一线圈);

5)STL触点驱动的电路块中不能使用MC和MCR指令,但可以用CJ指令;

6)在中断程序和子程序内,不能使用STL指令。

(来源:网络,版权归原作者)

相关问答

plc中的左移位指令是什么?

SIEMENSS7-200:字节左移:SLB\SLW\SLD(字节、字、双字)字节循环左移:RLB\RLW\RLDOMRONCPM*:1位左移:ASL...SIEMENSS7...

关于单片机中addc的运算?

它的含义是:做加法时,如果上文留下来有进位标志,则要多加1。在多字长的运算中,这是一个很常用的指令。例如,您要计算两个双倍字长的整数的和,可以如下:...

LEFTSHIFT是什么意思?

leftshift【释义】向左移位左移位【发音】英[leftʃift]美[lɛftʃɪft]left:adj.1.左的,左边的,左侧的。2.左翼的;shift:vt.1.......

html文字向左移动?

1、这里的hspace指水平方向与其他元素的间隔,填个你想要的整数就行了,如果是竖直方向就用vspace,简单吧。2、在图片代码里面加上margin属性。往右移就margin...

如果一个三位整数是37的倍数,则这个整数循环左移后得到的...

[最佳回答]第一题使用穷举,从100穷举到最大值,如果三个情况都符合整除,则输出这个数第二题使用for循环for(i=1;i第一题使用穷举,从100穷举到最大值,如果三个...

原说明中是这样说的,10000.84,整数部分转换为长整形16进制...

[最佳回答]参见IEEE754编码标准0.84这个来说0.84×2=1.68那么二进制小数部分第一位为10.68×2=1.36那么二进制小数部分第二位为10.36×2=0.72那么二...

用c++编写一个程序,输入两个实数和一个四则运算符(+,-,*,/),根据运算符执行相应的运算并输出结果?

运算符算术运算符运算符举例+加a+b-减a-b*乘a*b/除a/b%求余a%b加减和乘法运算符不必多说,我们来看看除法运算符和求余运算...表达式1:表达式2//...

金额有小数点怎么转换成整数?

金额有小数点时,可以采用以下方法将其转换为整数:1.乘以10的相应次方:根据小数点后移位的位数,将金额乘以10的相应次方。例如,如果小数点后有两位,就...

plc的位和节什么意思?

在PLC(可编程逻辑控制器)中,位(bit)和节(byte)是计量存储容量的单位。下面我将详细解释一下它们的含义和用途。1.位(bit):位是计算机中最小的存储单...通过...

用8位补码表示整数-126的机器码算术右移一位后的结果是多少?...

[最佳回答]126的二进制是01111110,所以-126的补码是126的二进制码“取反加1”,为10000010.算术右移一位,因为左边的符号位为1,所以左边补上1,得到11000001,符...

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

QQ

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

热线

188-0000-0000
专属服务热线

微信

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