• {{item.name}}
{{item.name}}
{{item2.name}}
更多

SCATTERGATHER 指令

star star star star star
0 分
  • 使用操作
发布时间:2024年01月15日
  • 0
  • 7
位序列的组合与分解 SCATTERGATHER 指令

位序列的组合与分解

位序列的组合与分解(LAD和SCL)包括如图1所示4个指令:

图1 指令位置

其中SCATTER(_BLK)是将位序列(数组)分解成若干Bool变量,GATHER(_BLK)是将若干Bool变量组合成位序列(数组)。

版本:

  • TIA 博途 V14SP1开始,S7-1200 V4.2支持V1.0版本
  • 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起始变量。

注意:

  • 当COUNT_IN超过了位序列数组元素个数,将不执行指令。如果激活指令的ENO功能,则ENO=False。
  • 当所需的Bool数量超过了已有的Bool数量,指令正常执行,多余部分被舍弃。
  • 当Bool数组起始不是0,出于性能原因,索引必须始终以 Byte、Word 或 Dword 边界限值开始。这就意味着数组索引必须从数组的下限处开始计算。

使用举例,如图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_OUT是合并后的位序列数组元素个数,OUT是位序列数组起始元素。
  • V1.1版本:IN除Bool数组之外,可以是Struct、UDT类型的变量,变量内是连续的Bool变量,IN处填写Struct、UDT类型内的接收的Bool起始变量。

注意:

  • 当COUNT_OUT超过了位序列数组元素个数,将不执行指令。如果激活指令的ENO功能,则ENO=False。
  • 当所需的Boo数量超过了已有的Bool数量,将不执行指令,如果激活指令的ENO功能,则ENO=False。

使用举例,如图14-15所示:

  • 将"DB69".Static_2,从第1个Bool元素开始合并成"DB69".Static_1,从第3个元素开始的2个Byte变量
  • 将"DB69".Static_4,从Struct第1个元素开始合并成"DB69".Static_3,从第1个元素开始的2个Byte变量

图14 DB69中的定义

图15 程序详情

剩余80%未阅读,请登录查看大全章节内容

  • 评论
更多
  • 分享

    扫码分享

扫码进入移动端

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。