在整套 S7-1200 初级课程里,传送指令是所有逻辑、运算、通讯程序的基础:传感器采集数据、配方批量复制、寄存器清零、设备参数同步,全都离不开移动指令。
很多新手编程只会简单 MOVE,遇到数组批量复制、数据缓冲区初始化就无从下手,今天一文吃透 S7-1200 全部传送类指令,附带现场实操场景,看完直接套用在项目里!
一、什么是数据传送指令?核心作用
数据传送指令本质:复制源地址数据到目标存储区,源数据保持不变,不做加减乘除运算,只完成数据搬运,是 PLC 最基础、调用频率最高的指令组。 在 TIA 博途软件「基本指令 - 移动」分类下,包含全套传送指令:
1.MOVE:单数据移动(基础款)
2.MOVE_BLK / UMOVE_BLK:批量数组块移动
3.FILL_BLK / UFILL_BLK:批量填充清零
4.SWAP:高低字节交换
5.序列化 / 反序列化、分散聚集指令(进阶通讯用)
二、基础必学:MOVE 单数据传送指令
1. 指令功能
EN 触发导通时,把 IN 输入变量完整复制到 OUT,支持 1 对多输出,同一个数值同时传给多个寄存器。
·IN:数据源(传感器、中间寄存器、常数)
·OUT:目标存储区(M 区、DB 块、IO 寄存器)
·ENO:执行完成输出,可串联后续逻辑
2. 使用规则 & 避坑要点
1.数据类型兼容 基础类型(INT/REAL/BYTE/BOOL)可隐式兼容;字符串不能直接 MOVE,需专用 S_MOVE;数组、结构体不能直接单条 MOVE 批量复制.。
2.一对多输出优势比如温控采集温度 MD10,需要同步送到人机界面 MD20、报警判断 MD30,只放 1 条 MOVE 指令扩展多个 OUT 引脚即可,简化程序。
3.典型现场应用
·模拟量采集转换后,搬运到 DB 块归档;
·按钮信号复制到中间标志位;
·给定转速、压力参数写入控制寄存器。
实操小案例
将压力传感器实时数值DB1.DBD0 同步复制至画面显示地址DB2.DBD10: EN 接常开触点 M0.0,IN 填 DB1.DBD0,OUT1 填 DB2.DBD10,程序简洁高效。
三、批量处理神器:块移动MOVE_BLK & UMOVE_BLK
1. 适用场景
当需要一次性复制连续数组、配方多组参数、批量采集数据,单条 MOVE 反复写几十行太繁琐,块移动一条指令搞定批量搬运。
核心参数说明
·IN:源数组起始元素
·OUT:目标数组起始元素
·COUNT:复制元素数量(UINT 无符号整数)
2. MOVE_BLK(可中断块移动)
复制过程中如果触发中断 OB(故障、高速计数、定时中断),PLC 会暂停搬运,优先执行中断程序。
适合普通配方复制、非关键批量数据,程序响应速度优先。
3. UMOVE_BLK(不可中断块移动)
全程禁止任何中断打断,数据复制完整、不会出现半截残缺数据。
关键场景必用:伺服定位参数、通讯收发缓冲区、安全设备批量设定,保证数据一致性。
四、快速清零初始化:FILL_BLK / UFILL_BLK 填充指令
调试、设备复位、批次结束时,需要把整片数组、缓冲区全部置 0 / 置默认值,填充指令是最优解,比循环 MOVE 效率高数倍。
·FILL_BLK:可中断填充,普通缓存清零
·UFILL_BLK:无中断填充,安全缓冲区复位
参数:IN = 填充数值(0、设定上限值等),OUT = 数组起始地址,COUNT = 填充元素个数。
实操场景
设备停机复位按钮 M0.2 按下,把 100 个采集数据数组全部清零:UFILL_BLK,IN=0,OUT=DB3 [0],COUNT=100。
<b>
五、字节交换SWAP 指令(通讯常用)
西门子 PLC 为大端存储,部分仪表、变频器、第三方设备是小端格式,读取上来高低字节颠倒,数值错乱,SWAP 一键交换单字(WORD)高低字节。 举例:仪表上传数值 160102,PLC 读取显示 160201,调用 SWAP 交换 MW10 高低字节,数值恢复正常。 六、进阶传送指令(通讯/ 数据打包)
1.SERIALIZE 序列化:结构体、UDT 自定义数据打包成字节数组,用于 TCP、Profinet 通讯发送;
2.DESERIALIZE 反序列化:接收字节流还原成自定义结构;
3.GATHER/SCATTER:多零散变量打包、数组拆分,多用于多设备数据交互。
七、新手高频易错点总结
1.MOVE 不能直接复制完整数组,数组批量必须用 MOVE_BLK; 2 批量移动源数组、目标数组元素类型必须完全一致,INT 不能复制到 REAL 数组;
2.涉及安全、伺服、通讯关键数据,优先用 UMOVE/UFILL 无中断指令,防止数据断裂;
3.优化访问 DB 块无法使用块移动指令,批量操作数据块需取消「优化的块访问」;
4.MOVE 传送长字符串报错,改用 S_MOVE 专用字符串传送指令。
结尾互动
你在调试项目时有没有遇到过数组复制、字节颠倒、批量清零踩坑?评论区留言分享你的问题。关注我们,每天分享实用 S7-1200 编程干货,零基础也能轻松上手工控项目!