三菱FX系列PLC数据处理指令

发布时间:2025-09-11
来源:
点击:58

在三菱 FX 系列 PLC 编程中,数据处理指令是整个控制系统的 “数据中枢”, 从 HMI 参数传入,到定位、计数等环节的运算,再到设备状态判断,几乎都依赖这类指令实现。结合车间现场调试经验,我把常用指令按功能拆成几类,每个指令都标注实际应用中的注意点,避免大家踩常见的坑。

1757580560075.png

一、数据处理基础:存储载体说明
数据处理指令需依托 PLC 内部存储单元完成数据交互,核心载体及特性如下:
数据寄存器(D):用于存储二进制(BIN)数据。16 位寄存器(如 D0)取值范围为 - 32768~32767;32 位数据需占用 2 个连续寄存器(如 D1D0,D1 为高 16 位、D0 为低 16 位),取值范围扩展至 - 2147483648~2147483647,满足大数值存储需求。
常数格式:十进制常数以 “K” 为前缀(如 K123),十六进制常数以 “H” 为前缀(如 HFF),指令执行时自动转换为二进制数据参与运算。
变址寄存器(V/Z):主要用于数据地址偏移修正,常与数据寄存器配合实现批量数据的灵活调用与处理。
二、核心指令分类解析
(一)数据传送指令:实现数据迁移与赋值
数据传送指令的核心作用是将源数据(常数或寄存器数据)复制至目标寄存器,是程序中数据交互的基础,主要包括以下类型:
1. MOV(16 位数据传送指令)功能定义:将源数据(S)写入目标寄存器(D),覆盖 D 中原存储数据;支持直接将常数写入寄存器,无需中间转换环节。
编程格式:MOV S D
示例:MOV K500 D0(将十进制常数 500 写入 D0)、MOV D1 D2(将 D1 中存储的数据复制至 D2)。
应用场景:HMI 设定的控制参数(如电机运行速度、定位位置阈值)向 PLC 内部寄存器的赋值,定位指令(DRVA/DRVI)的基础参数预设。
注意事项:仅支持 16 位数据处理,数值超出 16 位范围时需选用 32 位指令;持续触发该指令会重复覆盖目标寄存器数据,需根据控制需求选择触发方式。
2. DMOV(32 位数据传送指令)
功能定义:针对 32 位大数值数据进行传送,源数据(S)需占用 2 个连续寄存器(如 D1D0),目标地址(D)同样需预留 2 个连续寄存器(如 D3D2)存储数据。
编程格式:DMOV S D
示例:DMOV K100000 D0(将 32 位十进制常数 100000 写入 D1D0,D1 存储高 16 位、D0 存储低 16 位)。
应用场景:定位控制中超过 65535 的脉冲数设定(如 200000 脉冲)、大数值累计参数(如生产线月度产量统计)的传递。
3. MOVP(脉冲型 16 位数据传送指令)
功能定义:仅在触发信号上升沿执行一次数据传送操作,避免因触发信号持续有效导致的数据重复写入问题。
编程格式:MOVP S D
示例:MOVP X0 K500 D0(当 X0 触发信号上升沿到来时,将十进制常数 500 写入 D0)。
应用场景:手动参数确认(如操作人员按下 “参数确认” 按钮后,将 HMI 设定值传入 PLC)、设备启动前的一次性参数配置。
4. CMP(数据比较指令)
功能定义:对两个源数据(S1、S2)进行比较,根据比较结果对应置位状态继电器(M):
当 S1>S2 时,起始继电器 M 置 1;
当 S1=S2 时,继电器 M+1 置 1;
当 S1<S2 时,继电器 M+2 置 1。
编程格式:CMP S1 S2 M
示例:CMP D0 K50 M0(比较 D0 中存储的实际值与十进制常数 50,比较结果分别对应 M0、M1、M2 的状态)。
应用场景:工业控制中的阈值判断(如温度、压力等过程量实际值与设定值的比较)、工序切换条件判定(如计数器数值达到设定值时触发下一工序)。
注意事项:需为该指令预留 3 个连续的继电器地址;处理 32 位数据比较时,需选用 DCMP 指令。
(二)算术运算指令:实现数值计算
算术运算指令支持二进制数据的加减乘除运算,运算结果存储于目标寄存器,应用中需重点关注运算范围与溢出问题。
1. ADD(16 位加法指令)
功能定义:计算源数据 S1 与 S2 的和,将结果存入目标寄存器 D;若运算结果超出 16 位数据范围(-32768~32767),溢出标志 M8022 置 1,提示运算异常。
编程格式:ADD S1 S2 D
示例:ADD D0 K10 D2(计算 D0 中数据与十进制常数 10 的和,结果存入 D2)。
应用场景:生产线产品数量的累计计数、设备运行时间的累加统计、控制参数的增量调整(如速度微调)。
2. SUB(16 位减法指令)
功能定义:计算源数据 S1 与 S2 的差值,将结果存入目标寄存器 D;当结果为负数时,以二进制补码形式存储,同时借位标志 M8021 置 1。
编程格式:SUB S1 S2 D
示例:SUB D0 K5 D2(计算 D0 中数据与十进制常数 5 的差值,结果存入 D2)。
应用场景:设备运行倒计时控制(如定时工作时长的递减)、定位控制中实际位置与目标位置的偏差计算。
3. MUL(16 位乘法指令)
功能定义:实现 16 位数据 S1 与 16 位数据 S2 的乘法运算,运算结果为 32 位,存入目标地址对应的 2 个连续寄存器(D1D0,D1 存储高 16 位、D0 存储低 16 位)。
编程格式:MUL S1 S2 D
示例:MUL K100 K5 D0(计算 100 与 5 的乘积,结果 500 分别存储于 D1(高 16 位,值为 0)和 D0(低 16 位,值为 500))。
注意事项:无论运算结果数值大小,均需占用 2 个连续寄存器;处理 32 位数据乘法时,需选用 DMUL 指令(32 位 ×32 位,结果为 64 位)。
4. DIV(16 位除法指令)
功能定义:实现 16 位被除数 S1 与 16 位除数 S2 的除法运算,运算结果分为商和余数,商存入目标寄存器 D,余数存入寄存器 D+1;若除数 S2 为 0,错误标志 M8067 置 1,提示运算错误。
编程格式:DIV S1 S2 D
示例:DIV K100 K3 D0(计算 100 与 3 的商和余数,商 33 存入 D0,余数 1 存入 D1)。
应用场景:工业控制中的比例系数计算(如流量、转速的单位换算)、多组数据的平均值统计。
(三)数据转换指令:实现格式兼容
    工业场景中,HMI 输入、串口通信等环节常涉及非二进制数据(如 BCD 码、ASCII 码),转换指令用于解决不同数据格式间的兼容问题,确保数据有效交互。
1. BIN(BCD→二进制转换指令)
功能定义:将源数据(S)中存储的 BCD 码(十进制编码)转换为二进制数据,存入目标寄存器 D;BCD 码取值范围为 0~9999,超出该范围时指令报错。
编程格式:BIN S D
示例:BIN D0 D2(将 D0 中存储的 BCD 码转换为二进制数据,结果存入 D2)。应用场景
:HMI 输入的十进制控制参数(如设定温度、压力阈值)向 PLC 运算数据的转换,确保参数可参与后续二进制运算
2. BCD(二进制→BCD 转换指令)
功能定义:将源数据(S)中存储的二进制数据转换为 BCD 码,存入目标寄存器 D;若二进制数据超出 9999,错误标志置 1,提示转换异常。
编程格式:BCD S D
示例:BCD D0 D2(将 D0 中存储的二进制数据转换为 BCD 码,结果存入 D2)。
应用场景:PLC 运算结果(如计数器累计值、设备运行时长)向 HMI 显示数据的转换,确保显示数值符合十进制读数习惯。
3. ASCII(十六进制→ASCII 码转换指令)
功能定义:将源数据(S)中存储的十六进制数(0~F)转换为对应的 ASCII 码,存入指定的目标寄存器区域,转换位数由参数 m 设定。
编程格式:ASCII S m D
示例:ASCII H3 1 D0(将十六进制数 3 转换为对应的 ASCII 码 0x33,结果存入 D0)。
应用场景:串口通信中的数据预处理(如与扫码枪、打印机等外设交互时,将 PLC 内部十六进制数据转换为 ASCII 码字符数据)。
(四)数据移位指令:实现位操作与状态迁移
    数据移位指令用于对寄存器中的二进制位进行左移、右移或循环移位,适用于串行数据传输、多状态监测等场景。
1. SFTL(左移位指令)
功能定义:将移位输入位(S)的状态,依次移入指定的移位寄存器组(D1~D2),每次触发指令执行时,寄存器组中所有位左移 1 位,最高位状态溢出。
编程格式:SFTL S D1 D2 n(n 为单次移位位数,工程中通常设为 1)
示例:SFTL X0 M0 M3 K1(将 X0 的状态移入 M0~M3 组成的寄存器组,每次触发时左移 1 位)。
应用场景:流水灯控制、生产线多工位状态的依次监测(如从左至右判断各工位是否有工件)。
2. SFTR(右移位指令)
功能定义:与 SFTL 指令逻辑一致,移位方向为右移,移位输入位(S)的状态从寄存器组最高位(D2)移入,每次触发时寄存器组中所有位右移 1 位,最低位状态溢出。
编程格式:SFTR S D1 D2 n
示例:SFTR X0 M0 M3 K1(将 X0 的状态移入 M0~M3 组成的寄存器组,每次触发时右移 1 位)。
应用场景:生产线逆向工位状态监测、串行数据的接收与解析(如从右至左处理传感器输出的串行数据)。
3. ROL(循环左移指令)
功能定义:将目标寄存器(D)中存储数据的二进制位循环左移 n 位,移位过程中溢出的最高位状态补入最低位,实现数据循环复用。
编程格式:ROL D n
示例:ROL D0 1(将 D0 中数据的二进制位左移 1 位,溢出的最高位补入最低位)。
应用场景:多台设备的轮询控制(如 3 台电机循环启动)、二进制位状态的周期性切换。
(五)其他常用指令:特定场景数据处理
1. ZRST(批量复位指令)
功能定义:对指定地址范围内的寄存器或继电器进行批量清零操作,无需逐一复位,提升程序效率。
编程格式:ZRST D1 D2(用于寄存器批量复位)、ZRST M1 M2(用于继电器批量复位)
示例:ZRST D0 D10(对 D0 至 D10 的寄存器进行批量清零)、ZRST M0 M20(对 M0 至 M20 的继电器进行批量复位)。
应用场景:设备上电初始化(如清除历史计数数据、复位状态标志继电器)、程序紧急停止后的参数与状态重置。
2. INC/DEC(加 1 / 减 1 指令)
功能定义:INC 指令将目标寄存器(D)中存储的数据加 1,DEC 指令将数据减 1,操作逻辑简洁,无需额外源数据参与。
编程格式:INC D、DEC D
示例:INC D0(将 D0 中存储的数据加 1)、DEC D0(将 D0 中存储的数据减 1)。
应用场景:手动计数(如通过按钮触发实现产品数量统计)、简单倒计时控制(如设备单次工作时长的递减)。
3. 浮点数运算指令(FX3U 及以上型号支持)
功能定义:包括 FADD(浮点数加法)、FSUB(浮点数减法)、FMUL(浮点数乘法)、FDIV(浮点数除法),适用于高精度数值计算,支持小数运算。
编程格式:FADD S1 S2 D、FSUB S1 S2 D等
示例:FADD D0 D2 D4(计算 D0 与 D2 中存储的浮点数之和,结果存入 D4)。
应用场景:高精度过程控制(如温度、流量的精确调节)、小数参数运算(如比例系数、修正系数的计算)。
三、写设备程序关于数据处理的 4 个关键原则
数据长度别搞错:16 位指令处理不了超过 32767 的数,比如 K40000 一定要用 32 位指令,不然溢出了设备会乱动作,之前就有同事因为这个撞了机。触发方式选对:单次操作(比如确认参数)用脉冲型(MOVP、ADDP),持续操作(比如实时计数)用连续型(MOV、ADD),别搞反了。
错误标志要监控:M8022(溢出)、M8067(除数为 0)这些标志亮了,一定要加报警,不然出了问题都不知道在哪。
寄存器提前规划:哪个区域存设定值,哪个存运算结果,提前画个表,别来回用同一个 D 寄存器,上次有个项目就是因为地址重复,数据乱了查了半天。
    这些指令在现场用多了就熟了,关键是结合实际设备调几次,比如用 MOV 传参数,用 CMP 做温度判断,遇到问题记下来,下次就不会再错。要是调机时卡壳,比如指令写了没反应,先查寄存器地址对不对,触发信号有没有,基本都能解决。
免责声明:本站所提供信息均来源于网友提供或网络搜集,由本站编辑整理,如涉及版权问题,请联系本站管理员予以更改或删除
旗下服务
在线课程 现场培训
微信公众号
© 2019-现在 版权所有,并保留所有权利。ICP备案证书号:沪ICP备18011190号-4

沪公网安备 31011202007493号