西门子LOGO 6ED1055-1MA00-0BA2 扩展模块
- 供应商
- 上海工智达电气技术有限公司
- 认证
- 报价
- ¥380.00元每台
- 西门子
- LOGO扩展模块
- LOGO
- 6ED1055-1MA00-0BA2
- 中国
- 净重0.132KG
- 联系电话
- 15221760199
- 手机号
- 15221760199
- 联系人
- 田子龙
- 所在地
- 上海市松江区科技园区平原街880弄65号201
- 更新时间
- 2025-02-26 07:05
本文档将介绍几个常用 move 系列指令,链接如下:
move
(u)move_blk
move_blk_variant
lad为move指令,scl使用":="表达式可以完成move的功能(“:=”还可以有其他功能)。
move指令是当en条件满足时,实现相同数据类型(不包括位、字符串、variant类型)的变量间的传送。
图1 指令位置
注意:
(1)lad传送字符串需要使用s_move指令(scl使用“:=”),但是传送字符串中的字符需要使用move指令。
(2)支持通过一个move指令将一个变量传送到多个变量,但是该功能不支持传送复杂数据类型(dtl、结构、数组等)或字符串中的字符。
(3)传送数组时,要求元素数据类型以及元素个数必须完全一样,数组限值可以不同,例如array[0..1] ofbyte可以move到array[1..2] of byte。
(4)如果move两边是基本数据类型,则可以在满足以下兼容条件时传送,参见表1。
表1 move的传送条件
注意:
1.如果输入 in 数据类型的位长度超出输出 out 数据类型的位长度,则源值的高位会丢失。如果输入 in 数据类型的位长度低于输出out 数据类型的位长度,则目标值的高位会被改写为 0。
2.real传送至dword时是按位传送,不是取整。如果需要取整,可以使用round、convert_real_to_dint等指令。
3.(不)进行iec检查是指,在move指令所在的ob/fc/fb属性中的"iec检查"选项,仅在此块中生效。默认的"iec检查"不激活。设置如图2所示。
图2 iec检查的设置
move的使用图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整体传送程序
lad和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 运行结果
lad和scl均为move_blk_variant指令。
move_blk_variant的基本功能是数组之间部分元素的传送,并且是可以处理variant类型的变量的指令之一,适合处理variant指向的变长数组。
从tia v13sp1,s7-1200 v4.0开始支持该指令。
图16 指令位置
图17 指令详情
表2 参数说明
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#word8,p#dword 4等都可以,但是要注意count和元素数相同(p#byte 16,count=16;p#word8,count=8;p#dword 4,count=4),src和dest结构一致即可。
图19 程序详情
2. 实现变长数组的处理
功能:fc15处理mbv类型变量,该变量作为inout,fc14中输入mbv类型变量的变长数组,在其内部判断数组大小,然后数组元素逐个执行fc15指令,后送回变长数组。