导图社区 西门子PLC-S1200
这是一篇关于S1200-PLC的思维导图,西门子PLC-S1200,也称为SIMATIC S7-1200,是一款紧凑型、模块化的可编程逻辑控制器(PLC),专为满足中小型自动化系统的需求而设计。
编辑于2024-05-28 19:30:53S1200-PLC
指令
基本
沿
在触点分配的 "IN" 位上检测到正跳变
在进入线圈的能流中检测到正负跳变
在 "CLK" 能流输入中检测到正负跳变
如果使用全局变量( DB 或者 M ),则该全局变量在程序中只能使用一次,即使一个变量判断多次检测边沿也是一样,每次检测边沿使用不同全局变量。 如果使用局部变量,则只能使用 FC 的 InOut,FB 的 InOut、Static ,不能使用 Temp。并且每个边沿位使用不同的局部变量。 R_TRIG、F_TRIG指令:因为边沿存储位位于背景数据块中,所以背景数据块、多重背景等不能重复使用,也就是每次使用都是一个新的背景数据块或者多重背景 对于—|P|—、—|N|—,检测的是触点上面操作数的输入变化 对于 —(P)— 、—(N)—,检测的是线圈前的逻辑计算结果 对于 P_TRIG、N_TRIG、R_TRIG、F_TRIG 检测是的 CLK 输入
定时器
生成脉冲定时器(TP)
时序图
接通延时定时器(TON)
时序图
关断延时定时器(TOF)
时序图
时间累加器(TONR)
时序图
分功能框+线圈型
复位定时器(RT)
指令前的运算结果为"1"时使得指定定时器的ET立即停止计时并回到0。 TP指令:激活RT至取消激活RT过程中,Q和IN保持一致。取消激活RT时,如果IN为"1", ET则立即开始计时。 TON指令:当ET=PT时激活RT,Q立即输出"0"。取消激活RT时,如果IN为"1", ET则立即开始计时。 TOF指令:激活RT至取消激活RT过程中,Q和IN保持一致。 TONR指令:R与RT或的结果取代之前的R。
加载持续时间(PT)
指令前的运算结果为"1"时使得指定定时器的新设定值立即生效。 (在定时器计时过程中,实时修改方框定时器的PT引脚的值在此次计时中不能生效)
计数器
计数器(CTU)
时序图
当CU从“0”变为“1”,CV增加1; 当CV=PV时,Q输出“1”,此后当CU从“0”变为“1”,Q保持输出“1”,CV继续增加1直到达到计数器指定的整数类型的最大值。; 在任意时刻,只要R为“1”时,Q输出“0”,CV立即停止计数并回到0;
减计数器(CTD)
时序图
当CD从“0”变为“1”,CV减少1; 当CV=0时,Q输出“1”,此后当CU从“0”变为“1”,Q保持输出“1”,CV继续减少1直到达到计数器指定的整数类型的最小值; 只要LD为“1”时,Q输出“0”,CV立即停止计数并回到PV值;
加减计数器(CTUD)
时序图
当CU从“0”变为“1”,CV增加1; 当CD从“0”变为“1”,CV减少1; 当CV>=PV时,QU输出“1”;当CV<PV时,QU输出“0”; 当CV<=0时,QD输出“1”;当CV>0时,QD输出“0”; CV的上下限取决于计数器指定的整数类型的最大值与最小值; 只要R为“1”时,QD输出“1”,CV立即停止计数并回到0; 只要LD为“1”时,QU输出“1”,CV立即停止计数并回到PV值。
高速计数器(HSC)
MOVE
MOVE的传送条件
单个基本类型变量的传送
数组的传送
UDT的传送
String中的字符的传送
DTL中的变量的传送
DB整体传送
注意点
支持通过一个MOVE指令将一个变量传送到多个变量,但是该功能不支持传送复杂数据类型(DTL、结构、数组等)或字符串中的字符。
传送数组时,要求元素数据类型以及元素个数必须完全一样,数组限值可以不同,例如Array[0..1] of Byte可以MOVE到Array[1..2] of Byte。
如果输入 IN 数据类型的位长度超出输出 OUT 数据类型的位长度,则源值的高位会丢失。如果输入 IN 数据类型的位长度低于输出 OUT 数据类型的位长度,则目标值的高位会被改写为 0。
REAL传送至DWORD时是按位传送,不是取整。如果需要取整,可以使用ROUND、CONVERT_REAL_TO_DINT等指令。
(不)进行IEC检查是指,在MOVE指令所在的OB/FC/FB属性中的"IEC检查"选项,仅在此块中生效。默认的"IEC检查"不激活。
(U)MOVE_BLK MOVE_BLK指令是当EN条件满足时,实现相同数组之间部分元素的传送
MOVE_BLK
使用举例:
程序:
结果:
UMOVE_BLK
区别:UMOVE_BLK不会被中断打断,并且最多16kB的数据量
MOVE_BLK_VARIANT
参数说明 将源数组SRC的部分元素传送至目的数组DEST的部分元素中 SRC与DEST数组元素必须完全相同 COUNT是传送的元素个数 SRC_INDEX是待传送的源数组的起始编号 DEST_INDEX是目的数组接收的起始编号
使用举例:
程序:
结果:
填充块
(U)FILL_BLK 实现用输入变量批量填充输出区域的功能
FILL_BLK
实现功能:清空图3的DB27和图4的Tag_2中的所有变量
程序:
UFILL_BLK
区别:UFILL_BLK不会被中断打断,并且最多16kB的数据量
解析和组合位序列
SCATTER(_BLK)
SCATTER 将位序列(Byte、Word、DWord)分解成若干Bool变量
LAD需要在下拉框“???”选择输入类型(Byte、Word、DWord),SCL无需选择。 IN是待分解的位序列变量,OUT是Bool数组名,元素数量必须正好符合要求
SCATTER_BLK 将数组分解成若干Bool变量
LAD需要在下拉框选择输入数组IN的类型(Byte、Word、DWord),COUNT_IN的类型(USInt、UInt、UDInt),SCL无需选择。 IN是待分解的位序列数组起始元素,COUNT_IN是待分解的位序列数组元素个数,OUT是接收的Bool数组起始元素
GATHER(_BLK)
GATHER GATHER是将若干Bool变量组合成位序列(Byte、Word、DWord) 8Bool元素的数组合并成Byte 16Bool元素的数组合并成Word 32Bool元素的数组合并成DWord
使用举例:
要求: 将Array[0..15] of Bool变量"DB68".Static_1合并成Word变量"DB68".Static_2,将UDT中的连续8个Bool变量Tag_4合并成Byte变量"DB68".Static_3
GATHER_BLK GATHER_BLK是将若干Bool变量组合成数组
使用举例:
要求: 1. 将"DB69".Static_2,从第1个Bool元素开始合并成"DB69".Static_1,从第3个元素开始的2个Byte变量 2. 将"DB69".Static_4,从Struct第1个元素开始合并成"DB69".Static_3,从第1个元素开始的2个Byte变量
读写Variant变量
VariantGet
VariantPut
CountOfElements
使用举例:
Array[0..1] of "UDT_1"是数组,元素个数是2; Array[0..1, 0..2] of Byte是数组,该二维数组元素总个数是2×3=6; P#M100.0 BYTE 2视作数组,元素个数是2.
操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,如果操作数对应的实参为数组或者P#指针格式,CountOfElements(操作数)为元素总个数
比较变量
比较操作数1对应的实参与操作数2的数据类型是否相等
比较操作数1对应的实参与操作数2的数据类型是否不相等
比较操作数1对应的实参数组类型其中的数组元素与操作数2的数据类型是否相等
比较操作数1对应的实参数组类型其中的数组元素与操作数2的数据类型是否不相等
如果操作数对应的实参有指向变量,返回逻辑运算结果 (RLO)“0”,否则返回 RLO“1”
如果操作数对应的实参有指向变量,返回逻辑运算结果 (RLO)“1”,否则返回 RLO“0”
比较操作数对应的实参为数组或者P#指针格式
序列和反序列化
Deserialize 反序列
Serialize 序列
移位和循环
SHR 右移
示例
SHL 左移
示例
ROR 循环右移
示例
ROL 循环左移指令
示例
获取错误
GetError
如果在块执行期间出现错误,则发生的第一个错误的详细信息将保存在输出 ERROR 中。消除第一个错误后,该指令会在Error 处输出下一个错误的信息。 仅当使能输入 EN 的信号状态为“1”且显示了错误信息时,才置位“获取本地错误信息”指令的使能输出 ENO。
定义Error变量的步骤
创建一个全局数据块并定义变量 例如变量名为Error,在DB 块中手动输入" Errorstruct "
定义完成后可以直接在引脚输入所创建的DB 块的名称 即可在下拉框中找到所定义的Error 变量
GetErrorID
如果在块执行过程中系统信号出错,会将发生的第一个错误的 ID 保存在输出 ID 的变量中。 ID 输出中只能指定 WORD 数据类型的操作数。消除第一个错误后,该指令才会输出发生的下一个错误的ID。 仅当“获取本地错误 ID”指令的输入的信号状态为“1”且显示了错误信息时,才置位该指令的输出。
错误类型
RUNTIME
测量某一程序块的运行时间,需要三个单独的程序段 首次调用 RUNTIME 指令前先初始化 MEM 变量,执行后得出时间测量的起始点。 然后在下一个程序段中调用所需的程序块。 最后再次调用 RUNTIME 指令并将相同的存储器分配给 MEM 参数,与第一次调用指令时参数分配完全一样。 第三个程序段中的 RUNTIME 指令将把第一个程序段中得出的内部计数器值与本次执行得出的内部计数值比较计算后得出两个指令执行的间隔时间,也就是中间程序块的执行时间
第一段:
第二段:
第三段:
用 "RUNTIME" 指令测量某一信号点的接通或间隔时间 分别在信号的上升沿和下降沿执行一 次 RUNTIME 指令,检测到上升沿后初始化 MEM 变量,得出起始测量点,检测下降沿后再次执行 RUNTIME 指令,通过两次执行指令得出内部计数器之间差值,进而得出信号的接通时间。两个信号间隔时间的测量也是同样原理,在两个信号处分别执行 RUNTIME 指令后得出间隔时间。如果担心 OB1 周期的影响,也可把程序放到硬件中断或是循环中断中执行
扩展
日期和时钟
字符串+字符
分布式I/O
PROFlenergy
中断
报警
诊断
脉冲
配方和数据记录
数据块控制
寻址
文件处理
安全扩展
数据日志
读取序列号
读取程序校验
练习题