西门子LOGO 6ED1055-1MA00-0BA2 扩展模块

|
送源 (IN) |
传送目标 (OUT1) |
|
|---|---|---|
|
进行 IEC 检查 |
不进行 IEC 检查 |
|
| BYTE | BYTE、WORD、DWORD | BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、TIME、DATE、TOD、CHAR |
| WORD | WORD、DWORD | BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、TIME、DATE、TOD、CHAR |
|
DWORD |
DWORD |
BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、TIME、DATE、TOD、CHAR |
|
SINT |
SINT |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD |
|
USINT |
USINT, UINT, UDINT |
|
|
INT |
INT |
|
|
UINT |
USINT, UINT |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD |
| DINT | DINT |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD |
| UDINT | UDINT |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD |
|
REAL |
REAL |
DWORD, REAL |
|
LREAL |
LREAL |
LREAL |
|
TIME |
TIME |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME |
|
DATE |
DATE |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, DATE |
|
TOD |
TOD |
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TOD |
|
CHAR |
CHAR, String中的字符 |
BYTE, WORD, DWORD,CHAR,String中的字符 |
|
WCHAR |
WCHAR, WString中的字符 |
BYTE,WORD,DWORD,CHAR,WCHAR,WString中的字符 |
| String中的字符 | CHAR, String中的字符 | CHAR, String中的字符 |
|
WString中的字符 |
WCHAR, WString中的字符 |
WCHAR, WString中的字符 |
图2 IEC检查的设置
图3 DB25
1. 单个基本类型变量的传送

图4 单个基本类型变量的传送
2. 数组的传送

图5 数组的传送
3. UDT的传送

图6 UDT的传送
4. String中的字符的传送

图7 String中的字符的传送
5. DTL中的变量的传送

图8 DTL中的变量的传送
6. DB整体之间的传送
条件:DB块为非优化块,或者将优化DB块的存储器预留区域与预留可保持性存储器设置为0字节(如图9所示),并且两个DB块结构完全相同。

1. IN和OUT的DB必须同时为优化DB或者非优化DB。
2. 不允许同时输出到多个DB,即图4的形式。

图9 存储器预留区域设置

图10 DB整体传送

图11 DB整体传送程序
(U)MOVE_BLKLAD和SCL均为(U)MOVE_BLK指令。
(U)MOVE_BLK指令是当EN条件满足时,实现相同数组之间部分元素的传送。MOVE_BLK和UMOVE_BLK的区别是UMOVE_BLK不会被中断打断,并且多16kB的数据量。

图12 程序位置

图13 指令详情
注意:
1. IN和OUT必须是数组的一个元素,例如"DB26".Static_1[0],不能是常数、常量、普通变量,也不能是数组名。
2. IN和OUT类型必须完全相同,并且必须是基本数据类型,不能是UDT、Struct等的数组。
3. IN是源数组中传送的起始元素,OUT是目的数组中接收的起始元素。
4. COUNT是传输个数,可以是正整数的常数,如果是变量,数据类型支持USINT、UINT、UDINT。
5. 如果目的数组接收区域小于源数组的传送区域,则只传送目的数组可接收的区域的数据。如果激活指令的ENO功能,则ENO=False。
(U)MOVE_BLK的使用实现功能:将"DB26".Static_1[0]开始的4个元素传送至"DB26".Static_2[4]开始的数组中。

图14 程序使用

图15 运行结果
MOVE_BLK_VARIANT
LAD和SCL均为MOVE_BLK_VARIANT指令。
MOVE_BLK_VARIANT的基本功能是数组之间部分元素的传送,并且是可以处理Variant类型的变量的指令之一,适合处理Variant指向的变长数组。
从TIA V13SP1,S7-1200 V4.0开始支持该指令。

图16 指令位置

图17 指令详情
表2 参数说明
| 参数 | 声明 | 数据类型 |
|---|---|---|
| SRC | Input | Variant、Array、其他(不包括Bool,Array of Bool) |
| COUNT | Input | UDINT |
| SRC_INDEX | Input | DINT |
| DEST_INDEX | Input | DINT |
| DEST | Output | Variant、Array、其他(不包括Bool,Array of Bool) |
| RET_VAL | Return | INT |
MOVE_BLK_VARIANT指令通常用于将源数组SRC的部分元素传送至目的数组DEST的部分元素中,SRC与DEST数组元素必须完全相同。COUNT是传送的元素个数,SRC_INDEX是待传送的源数组的起始编号,DEST_INDEX是目的数组接收的起始编号,此处用编号不是下标的意思是,SRC_INDEX和DEST_INDEX都从0开始,对应SRC和DEST的个元素。
同样是传送部分数组元素的指令,MOVE_BLK_VARIANT相对MOVE_BLK有以下优点:
1. SRC和DEST不可以是Bool数组,但可以是Struct、UDT等复杂数据类型数组
2. SRC和DEST都可以是普通的单个变量,例如SRC为一个INT变量,DEST作为一个INT数组,此时需要设置COUNT=1,SRC_INDEX=0,然后根据DEST_INDEX的值,传入DEST的指定位置。
3. SRC和DEST填写的通常是数组名,也可以是普通的单个变量,或者数组的一个元素,后两种情况都需要像(2)一样处理。
4. SRC和DEST可以是参数类型Variant的变量,也就是可以直接填写P#指针的格式,指令将会把P#指针看做数组处理(原因)。即使是SRC和DEST都指向Variant类型,其指向的形参的数组元素数据类型也需要相同,所以通常需要在使用指令之前用E检查其中元素的数据类型。
使用MOVE_BLK_VARIANT指令的注意:
(1)COUNT>=1,否则报错并且不传送任何数据。
(2) COUNT+SRC_INDEX与COUNT+DEST_INDEX决定了SRC与DEST数组元素编号上限,超出范围将报错并且不传送任何数据。
使用举例:
1. 实现功能将结构完全一样的M区数据送入DB区

图18 运行结果
需要注意的是将DB块改为非优化,M区和DB区均是16Byte,SRC和DEST可以是P#BYTE 16,P#WORD 8,P#DWORD 4等都可以,但是要注意COUNT和元素数相同(P#BYTE 16,COUNT=16;P#WORD 8,COUNT=8;P#DWORD 4,COUNT=4),SRC和DEST结构一致即可。

图19 程序详情
2. 实现变长数组的处理
功能:FC15处理MBV类型变量,该变量作为InOut,FC14中输入MBV类型变量的变长数组,在其内部判断数组大小,然后数组元素逐个执行FC15指令,后送回变长数组。

| 单位名称: |
|
详细地址:
上海市松江区科技园区平原街880弄65号201
|
|
qq:
|
| 联系电话: |
| Email: |