西门子有类似三菱的批量传送功能吗,我看了几个MOV相关的指令都不符合要求啊,我需要传送连续的12个整数给12个局部变量,我现在既没办法将连续的12个整数简便的表达出来也没办法批量传送,请问是西门子的LAD没这个功能吗?S7-1200 SCL PEEK 和 POKE 指令使用使用S7-1200 SCL 编程语言的 PEEK 和 POKE 指令,可以实现对 I/O、M 存储器和数据块的读取或写入。 而通过 POKE_BLK 指令,还可以实现数据区域的复制或移动。指令适用条件:只用于 SCL 编程语言;软件从TIA PORTAL V11 SP2起;S7-1200 CPU 固件从 V2.2起;适用操作数,I、Q、M、DB;DB必须是非优化访问的块。本文生成环境:硬件: CPU1214C V4.4软件:Windows 10 Pro 1903和 TIA PORTAL 版 V16一、项目生成与指令位置:(1)创建 S7-1200 项目文件在TIA PORTAL 创建新项目,双击“添加新设备”在项目中添加 S7-1200 PLC_1,CPU 1214C DC/DC/DC。图1 添加新设备(2)添加 SCL 逻辑块展开 PLC_1,双击“程序块”中的“添加新块”,选择语言“SCL”,添加 FC 块,名称为 FC1 。图2 添加新块(3)添加 PEEK、POKE指令双击 FC1 打开 SCL 逻辑块,将指令的“基本指令>移动操作>读写存储器”中 PEEK、POKE指令拖入程序编辑区。图3 添加指令二、PEEK 指令1、指令格式PEEK 指令用来读取输入(I)、输出(Q)、存储器(M)或数据块(DB)变量,支持位、字节、字、双字操作。PEEK指令将获取的数据值以返回值的方式赋值给对应的变量。PEEK_BOOL,读位变量,指令格式。图4 PEEK_BOOLPEEK (_BYTE) ,读字节变量,指令中BYTE 类型可省略,指令格式。图5 PEEK_BYTEPEEK_WORD,读字变量,指令格式。图6 PEEK_WORDPEEK_DWORD,读双字变量,指令格式。图7 PEEK_DWORD需要注意的是,在指令列表中只有PEEK和PEEK_BOOL两个指令,而PEEK相当于PEEK_BYTE,当需要使用PEEK_WORD或者PEEK_DWORD,可以在将指令拖拽到程序编辑区后手动添加后缀,或者在程序中直接输入指令然后通过选择的方式选定,如图8所示。图8 输入PEEK参数area,根据数据所在区域的不同有四种取值。area值类型说明16#81I输入区变量16#82Q输出区变量16#83MM区变量16#84DB数据块变量2、示例程序(1) PEEK_BOOL 指令将 M0.1 的状态值读取到 M0_7(M0.7),执行结果如图9 所示:图9 PEEK_BOOL(2) PEEK(_BYTE)指令将 IB20 的值读取到 DB1的Byte类型变量,执行结果如图10 所示:图10 PEEK(_BYTE)(3) PEEK_WORD指令如图11 所示, FC2 是字寻址,执行 FC2,将 QW30 的值读取到 DB1的Word类型变量:图11 PEEK_WORD(4) PEEK_DWORD指令如图12 所示, FC3 是双字寻址,执行 FC3,将变量 DB2.DBD0 的值读取到 DB1的DWord类型变量:图12 PEEK_DWORD3. 应用案例将CPU1214C本体的起始地址I0.0的14个I点的值,分别送入DB1的14个Bool的数组的每一个元素,对应方式:I0.0 -- > 元素0I0.1 -- > 元素1I0.7 -- > 元素7I1.0 -- > 元素8I1.1 -- > 元素9I1.5 -- > 元素13通过上述对应关系,可以发现规律,数组元素下标从0开始逐个加1,对应的I点输入地址的位变量是从0到7再往复,而字节地址是先是8个0,然后是1,所以总结是字节地址是下标整除8的商,位地址是下标整除8的余数,换成编程语言就是字节地址是下标/8,位地址是下标MOD8。然后就可以利用FOR循环来快速实现逐个位的赋值,如图13所示。结果如图14所示。