在三菱 PLC(以 FX3U/FX5U 为例)中,将一个多位数数据(如字 / 双字数据)拆分为单个数字 / 字节 / 位并分别存储,是工业编程中常见的需求(如拆分工艺参数、显示单数字、解析通讯数据)。以下按「拆分场景」分类,给出具体实现方法(梯形图 + 指令说明),覆盖最常用的拆分逻辑:
核心前提:数据存储格式
三菱 PLC 中,常用数据存储单元为:
场景 1:拆分 “十进制整数” 为单个数字(最常用)
需求
将 D0 中的十进制数(如 1234)拆分为个位、十位、百位、千位,分别存入 D1(个位 = 4)、D2(十位 = 3)、D3(百位 = 2)、D4(千位 = 1)。
核心指令
梯形图程序(以 D0=1234 为例)
ladder
// 步骤1:拆分个位(1234 ÷ 10 取余 = 4) LD M8000 MOV D0 D10 // 临时存储原始数据到D10 MOD D10 K10 D1 // D1 = 1234 % 10 = 4(个位) // 步骤2:拆分十位(1234 ÷ 10 = 123 → 123 % 10 = 3) LD M8000 DIV D10 K10 D10 // D10 = 1234 ÷ 10 = 123 MOD D10 K10 D2 // D2 = 123 % 10 = 3(十位) // 步骤3:拆分百位(123 ÷ 10 = 12 → 12 % 10 = 2) LD M8000 DIV D10 K10 D10 // D10 = 123 ÷ 10 = 12 MOD D10 K10 D3 // D3 = 12 % 10 = 2(百位) // 步骤4:拆分千位(12 ÷ 10 = 1 → 1 % 10 = 1) LD M8000 DIV D10 K10 D10 // D10 = 12 ÷ 10 = 1 MOD D10 K10 D4 // D4 = 1 % 10 = 1(千位)
通用扩展(拆分 N 位数)
若需拆分更多位数(如万位),重复「DIV÷10 → MOD%10」逻辑即可;若数据为负数,先通过ABS指令取绝对值再拆分。
场景 2:拆分 “字寄存器(16 位)” 为高低字节 / 单个位
子场景 2.1:拆分为高 8 位和低 8 位
需求
将 D0(16 位,如 H1234)拆分为低 8 位(H34)存入 D1,高 8 位(H12)存入 D2。
核心指令
方法 1:MOVB 指令(简洁,FX3U/FX5U)
ladder
LD M8000 MOVB D0 K0 D1 K0 // D0的低8位(K0)→ D1的低8位 MOVB D0 K1 D2 K0 // D0的高8位(K1)→ D2的低8位
方法 2:AND 指令(兼容 FX1N/FX2N)
ladder
子场景 2.2:拆分为单个位(16 位拆分为 M0~M15)
需求
将 D0 的 16 个位分别存入 M0(bit0)~M15(bit15)。
核心指令
方法:直接位寻址(FX 系列通用)
ladder
// D0的bit0 → M0,bit1 → M1,…,bit15 → M15 LD M8000 MOV D0.0 M0 // D0的第0位 → M0 MOV D0.1 M1 // D0的第1位 → M1 // ... 依次类推到 MOV D0.15 M15 // D0的第15位 → M15
场景 3:拆分 “双字(32 位)” 为两个字
需求
将双字寄存器(D100/D101,32 位,如 D100 = 低 16 位,D101 = 高 16 位)拆分为单个字,或反向拆分。
核心指令
梯形图程序
ladder
// 拆分32位数据(D100/D101)为低16位(D200)、高16位(D201) LD M8000 MOV D100 D200 // 低16位直接存入D200 MOV D101 D201 // 高16位直接存入D201 // 扩展:32位十进制数拆分为单个数字(如12345678 → 个位8、十位7…千万位1) LD M8000 DMOV D100 D300 // 32位数据存入D300/D301 DMOD D300 K10 D30 // 个位=12345678%10=8 → D30 DDIV D300 K10 D300 // 12345678÷10=1234567 → D300/D301 DMOD D300 K10 D31 // 十位=1234567%10=7 → D31 // 重复DDIV+DMOD,直到拆分所有位数
场景 4:拆分 ASCII 字符串为单个字符
需求
将 D0~D2 中存储的 ASCII 字符串(如 D0=H4142,D1=H4344,D2=H4500 → “ABCDE”)拆分为单个字符,存入 D10(A)、D11(B)、D12(C)…
核心指令
梯形图程序
ladder
LD M8000 // 拆分D0(H4142):低8位=H42(B)→ D11,高8位=H41(A)→ D10 MOVB D0 K0 D11 K0 MOVB D0 K1 D10 K0 // 拆分D1(H4344):低8位=H44(D)→ D13,高8位=H43(C)→ D12 MOVB D1 K0 D13 K0 MOVB D1 K1 D12 K0 // 拆分D2(H4500):低8位=00(空),高8位=H45(E)→ D14 MOVB D2 K1 D14 K0

