从入门到精通:西门子 PLC 基本指令全解析
发布时间:2025-06-14来源: 点击:28

-
一、西门子 PLC 基本指令分类
-
西门子 PLC 的基本指令主要分为以下几类:
-
-
-
-
-
-
-
-
-
-
-
二、位逻辑指令
-
位逻辑指令是 PLC 编程中最基本的指令,用于处理二进制位信号(0 或 1)常见的位逻辑指令包括:
-
LD(Load)指令
-
示例:= Q0.0(将堆栈顶部的值赋给输出点 Q0.0)
-
A(And)指令
-
功能:逻辑或非操作,将堆栈顶部的值与指定地址的值的反码进行或运算。
示例:ON M0.1(将堆栈顶部的值与 M0.1 的反码进行或运算)
-
O(Or)指令
-
功能:逻辑与非操作,将堆栈顶部的值与指定地址的值的反码进行与运算。
示例:AN I0.1(将堆栈顶部的值与 I0.1 的反码进行与运算)
-
AN(And Not)指令
-
功能:逻辑或操作,将堆栈顶部的值与指定地址的值进行或运算。
示例:O Q0.0(将堆栈顶部的值与 Q0.0 的值进行或运算)
-
ON(Or Not)指令
-
功能:逻辑与操作,将堆栈顶部的值与指定地址的值进行与运算。
示例:A M0.0(将堆栈顶部的值与 M0.0 的值进行与运算)
-
=(Assign)指令
-
示例:LD I0.0(将输入点 I0.0 的状态加载到堆栈)
-
-
三、定时器指令
-
定时器指令用于实现时间控制功能,西门子 PLC 提供了多种类型的定时器,如接通延时定时器(TON)、断开延时定时器(TOF)和保持型接通延时定时器(TONR)。
-
TON(Timer On-Delay)指令
-
功能:保持型接通延时定时器,与 TON 类似,但在计时过程中即使输入信号断开,已累计的时间也不会丢失。
示例:TONR T35, 200(T35 为定时器编号,200 为设定值)
-
TOF(Timer Off-Delay)指令
-
功能:当输入信号断开时,定时器开始计时,达到设定时间后输出信号断开。
示例:TOF T34, 50(T34 为定时器编号,50 为设定值)
-
TONR(Retentive Timer On-Delay)指令
-
功能:当输入信号接通时,定时器开始计时,达到设定时间后输出信号接通。
示例:TON T33, 100(T33 为定时器编号,100 为设定值,单位取决于定时器的分辨率)
-
-
四、计数器指令
-
计数器指令用于对输入脉冲进行计数,西门子 PLC 提供了增计数器(CTU)、减计数器(CTD)和增减计数器(CTUD)。
-
CTU(Counter Up)指令
-
功能:增减计数器,可根据增计数输入(CU)和减计数输入(CD)的信号进行增计数或减计数。
示例:CTUD C22, PV=100(C22 为计数器编号,PV 为设定值 100)
-
CTD(Counter Down)指令
-
功能:减计数器,在装载输入信号(LD)接通时,将设定值装入计数值,每收到一个下降沿脉冲,计数值减 1,当计数值减到 0 时,输出信号接通。
示例:CTD C21, PV=50(C21 为计数器编号,PV 为设定值 50)
-
CTUD(Counter Up/Down)指令
-
功能:增计数器,每收到一个上升沿脉冲,计数值加 1,当计数值达到设定值时,输出信号接通。
示例:CTU C20, PV=100(C20 为计数器编号,PV 为设定值 100)
-
-
五、数据传送指令
-
数据传送指令用于在不同存储区之间传输数据,常见的数据传送指令有:
-
MOVB(Move Byte)指令
-
功能:双字传送,将一个双字(32 位)的数据从源地址传送到目标地址。
示例:MOVD MD30, LD10(将位存储器 MD30 的数据传送到局部数据寄存器 LD10)
-
MOVW(Move Word)指令
-
功能:字传送,将一个字(16 位)的数据从源地址传送到目标地址。
示例:MOVW VW100, MW20(将数据寄存器 VW100 的数据传送到位存储器 MW20)
-
MOVD(Move Double Word)指令
-
功能:字节传送,将一个字节的数据从源地址传送到目标地址。
示例:MOVB IB0, QB0(将输入字节 IB0 的数据传送到输出字节 QB0)
-
-
六、算术运算指令
-
算术运算指令用于对数据进行数学运算,常见的算术运算指令有:
-
ADD(Addition)指令
-
功能:除法运算,将两个数相除,结果存放在目标地址。
示例:DIV VW50, AC1(将数据寄存器 VW50 的值除以累加器 AC1 的值,结果存放在 AC1)
-
-
功能:乘法运算,将两个数相乘,结果存放在目标地址。
示例:MUL DBD20, MD40(将双字 DBD20 的值与位存储器 MD40 的值相乘,结果存放在 MD40)
-
-
功能:减法运算,将两个数相减,结果存放在目标地址。
示例:SUB MW10, AC0(将位存储器 MW10 的值减去累加器 AC0 的值,结果存放在 AC0)
-
-
功能:加法运算,将两个数相加,结果存放在目标地址。
示例:ADD IW2, VW40(将输入字 IW2 的值与数据寄存器 VW40 的值相加,结果存放在 VW40)
-
-
七、比较指令
-
比较指令用于比较两个值的大小关系,常见的比较指令有:
-
==(Equal)指令
-
功能:不等于比较,如果两个值不相等,则输出为 1,否则为 0。
示例:<>R AC1, 3.14(比较累加器 AC1 的值是否不等于 3.14)
-
-
功能:小于等于比较,如果左边的值小于或等于右边的值,则输出为 1,否则为 0。
示例:<=D MD30, 1000(比较位存储器 MD30 的值是否小于或等于 1000)
-
-
功能:大于等于比较,如果左边的值大于或等于右边的值,则输出为 1,否则为 0。
示例:>=I C20, 50(比较计数器 C20 的当前值是否大于或等于 50)
-
>=(Greater Than or Equal)指令
-
功能:小于比较,如果左边的值小于右边的值,则输出为 1,否则为 0。
-
-
功能:大于比较,如果左边的值大于右边的值,则输出为 1,否则为 0。
示例:>D MD100, LD20(比较位存储器 MD100 的值是否大于局部数据寄存器 LD20 的值)
-
-
功能:等于比较,如果两个值相等,则输出为 1,否则为 0。
示例:==I IW10, VW20(比较输入字 IW10 的值与数据寄存器 VW20 的值是否相等)
-
==(Equal)指令
-
>(Greater Than)指令
-
<(Less Than)指令
-
>=(Greater Than or Equal)指令
-
<=(Less Than or Equal)指令
-
<>(Not Equal)指令
-
-
八、移位指令
-
移位指令用于对数据进行位移操作,常见的移位指令有:
-
SHL(Shift Left)指令
-
功能:循环右移,将数据向右移动指定的位数,右边移出的位补到左边。
示例:ROR VW30, 4(将数据寄存器 VW30 的值循环右移 4 位)
-
-
功能:循环左移,将数据向左移动指定的位数,左边移出的位补到右边。
示例:ROL MB5, 1(将位存储器 MB5 的值循环左移 1 位)
-
-
功能:逻辑右移,将数据向右移动指定的位数,左边空出的位补 0。
示例:SHR MD20, 3(将位存储器 MD20 的值向右移动 3 位)
-
-
功能:逻辑左移,将数据向左移动指定的位数,右边空出的位补 0。
示例:SHL VW100, 2(将数据寄存器 VW100 的值向左移动 2 位)
-
SHL(Shift Left)指令
-
SHR(Shift Right)指令
-
ROL(Rotate Left)指令
-
ROR(Rotate Right)指令
-
-
九、程序控制指令
-
程序控制指令用于控制程序的执行流程,常见的程序控制指令有:
JMP(Jump)指令
功能:无条件跳转,程序执行到该指令时,将跳转到指定的标号处继续执行。
示例:JMP Label1(跳转到标号 Label1 处)
JC(Jump on Carry)指令
功能:进位跳转,如果进位标志位为 1,则跳转到指定的标号处。
示例:JC Error(如果进位标志位为 1,则跳转到标号 Error 处)
JZ(Jump on Zero)指令
功能:零跳转,如果结果为 0,则跳转到指定的标号处。
示例:JZ Finish(如果结果为 0,则跳转到标号 Finish 处)
CALL(Call)指令
功能:调用子程序,程序执行到该指令时,将跳转到指定的子程序处执行。
示例:CALL SBR_1(调用子程序 SBR_1)
RET(Return)指令
功能:从子程序返回,子程序执行到该指令时,将返回到调用该子程序的下一条指令处继续执行。
免责声明:本站所提供信息均来源于网友提供或网络搜集,由本站编辑整理,如涉及版权问题,请联系本站管理员予以更改或删除