loveplc

 找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 127|回复: 0

S71200位序列的组合与分解指令

[复制链接]

284

主题

317

帖子

986

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
986
发表于 2019-9-30 16:31:42 | 显示全部楼层 |阅读模式
位序列的组合与分解(LAD和SCL)包括如图1所示4个指令:
图1 指令位置
其中SCATTER(_BLK)是将位序列(数组)分解成若干Bool变量,GATHER(_BLK)是将若干Bool变量组合成位序列(数组)。
版本:
1. TIA 博途 V14SP1开始,S7-1200 V4.2支持V1.0版本
2. TIA 博途 V15开始,S7-1200 V4.2支持V1.1版本
SCATTER
图2 SCATTER指令详情
V1.0版本:SCATTER指令是将位序列(Byte、Word、DWord)分解成Bool数组,其中Byte分解成8Bool元素的数组,Word分解成16Bool元素的数组,DWord分解成32Bool元素的数组。LAD需要在下拉框“???”选择输入类型(Byte、Word、DWord),SCL无需选择。IN是待分解的位序列变量,OUT是Bool数组名,元素数量必须正好符合要求。
V1.1版本:OUT除Bool数组之外,可以是Struct、UDT类型的变量,变量内是连续的8Bool、16Bool、32Bool,OUT处填写Struct、UDT类型的变量名。
注:LAD版本的SCATTER,如果调用该块的OB\FB\FC如果没有激活IEC检查,IN变量支持整数、字符、TIME、DATE、TOD类型。
使用举例,如图3-5所示:
1. 将Word变量"DB66".Static_1分解成Array[0..15] of Bool变量"DB66".Static_2,将Byte变量"DB66".Static_3分解成UDT中的连续8个Bool变量Tag_3
图3 DB66的定义
图4 Q点在PLC变量表的定义
图5 程序详情
SCATTER_BLK
图6 SCATTER_BLK指令详情
V1.0版本:SCATTER_BLK指令是将位序列(Byte、Word、DWord)数组分解成Bool数组。LAD需要在下拉框选择输入数组IN的类型(Byte、Word、DWord),COUNT_IN的类型(USInt、UInt、UDInt),SCL无需选择。IN是待分解的位序列数组起始元素,COUNT_IN是待分解的位序列数组元素个数,OUT是接收的Bool数组起始元素。
V1.1版本:OUT除Bool数组之外,可以是Struct、UDT类型的变量,变量内是连续的Bool变量,OUT处填写Struct、UDT类型内的接收的Bool起始变量。
注意:
1. 当COUNT_IN超过了位序列数组元素个数,将不执行指令。如果激活指令的ENO功能,则ENO=False。
2. 当所需的Boo数量超过了已有的Bool数量,指令正常执行,多余部分被舍弃。
3. 当Bool数组起始
使用举例,如图7-8所示:
1. 将"DB67".Static_1,从第3个元素开始的2个Byte变量分解成"DB67".Static_2,从第1个元素开始
2. 将"DB67".Static_3,从第1个元素开始的2个Byte变量变量分解成"DB67".Static_4,从这个Struct第一个变量开始
图7 DB67中的定义
图8 程序详情
GATHER
图9 GATHER指令详情
V1.0版本:GATHER指令是将Bool数组合并成位序列(Byte、Word、DWord),其中8Bool元素的数组合并成Byte,16Bool元素的数组合并成Word,32Bool元素的数组合并成DWord。LAD需要在下拉框选择输出类型(Byte、Word、DWord),SCL无需选择。IN是Bool数组名,元素数量必须正好符合要求,OUT是合并后的位序列变量。
V1.1版本:IN除Bool数组之外,可以是Struct、UDT类型的变量,变量内是连续的8Bool、16Bool、32Bool,OUT处填写Struct、UDT类型的变量名。
使用举例,如图10-12所示:
1. 将Array[0..15] of Bool变量"DB68".Static_1合并成Word变量"DB68".Static_2,将UDT中的连续8个Bool变量Tag_4合并成Byte变量"DB68".Static_3
图10 DB68中的定义
图11 I点在PLC变量表的定义
图12 程序详情
GATHER_BLK
图13 GATHER_BLK指令详情
V1.0版本:GATHER_BLK指令是将Bool数组合并成位序列(Byte、Word、DWord)数组。LAD需要在下拉框选择输出数组OUT的类型(Byte、Word、DWord),COUNT_IN的类型(USInt、UInt、UDInt),SCL无需选择。IN是待合并的Bool数组起始元素,COUNT_IN是合并后的位序列数组元素个数,OUT是位序列数组起始元素。
V1.1版本:IN除Bool数组之外,可以是Struct、UDT类型的变量,变量内是连续的Bool变量,IN处填写Struct、UDT类型内的接收的Bool起始变量。
注意:
1. 当COUNT_IN超过了位序列数组元素个数,将不执行指令。如果激活指令的ENO功能,则ENO=False。
2. 当所需的Boo数量超过了已有的Bool数量,将不执行指令,如果激活指令的ENO功能,则ENO=False。
使用举例,如图14-15所示:
1. 将"DB69".Static_2,从第1个Bool元素开始合并成"DB69".Static_1,从第3个元素开始的2个Byte变量
2. 将"DB69".Static_4,从Struct第1个元素开始合并成"DB69".Static_3,从第1个元素开始的2个Byte变量
图14 DB69中的定义
图15 程序详情

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

京ICP备17066637号-1|京公网安备|手机版|Archiver|小黑屋|loveplc

GMT+8, 2025-12-6 13:52 , Processed in 0.020710 second(s), 18 queries .

Powered by Discuz! Comsenz Inc.

© 2019 技高志远.

快速回复 返回顶部 返回列表