返回主站|会员中心|保存桌面

软件定制开发公司    

软件定制开发公司,承接各类工控软件,上位机软件,plc程序开发,编程,调试,电气...

联系方式
  • 联系人:吴经理
  • 电话:18576370666
新闻分类
  • 暂无分类
站内搜索
 
友情链接
首页 > 新闻中心 > 如何在三菱PLC中把一个数据分成单个数据储存!
新闻中心
如何在三菱PLC中把一个数据分成单个数据储存!
发布时间:2025-12-10        浏览次数:11        返回列表

在三菱 PLC(以 FX3U/FX5U 为例)中,将一个多位数数据(如字 / 双字数据)拆分为单个数字 / 字节 / 位并分别存储,是工业编程中常见的需求(如拆分工艺参数、显示单数字、解析通讯数据)。以下按「拆分场景」分类,给出具体实现方法(梯形图 + 指令说明),覆盖最常用的拆分逻辑:

核心前提:数据存储格式

三菱 PLC 中,常用数据存储单元为:

  • 字(Word):D 寄存器(16 位,可存 0~65535 的整数,如 D0=1234);

  • 位(Bit):M/X/Y 寄存器(1 位,0/1);

  • 字节(Byte):通过字寄存器的高 8 位 / 低 8 位拆分(如 D0 的低 8 位 = D0 K0,高 8 位 = D0 K1)。

场景 1:拆分 “十进制整数” 为单个数字(最常用)

需求

将 D0 中的十进制数(如 1234)拆分为个位、十位、百位、千位,分别存入 D1(个位 = 4)、D2(十位 = 3)、D3(百位 = 2)、D4(千位 = 1)。

核心指令

  • DIV:除法指令(拆分高位);

  • MOD:取余指令(拆分低位);

  • MOV:数据传送指令。

梯形图程序(以 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。

核心指令

  • MOVB:字节传送指令(FX3U/FX5U 支持);

  • AND:逻辑与指令(兼容所有 FX 系列)。

方法 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)。

核心指令

  • SMOV:位移动指令;

  • BTI:位转整数(辅助);

  • 直接位寻址(最简)。

方法:直接位寻址(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 位)拆分为单个字,或反向拆分。

核心指令

  • DMOV:双字传送指令;

  • DDIV/DMOD:双字除法 / 取余指令。

梯形图程序

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)…

核心指令

  • ASCI:整数转 ASCII;

  • MOVB:字节拆分。

梯形图程序

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

关键注意事项

  1. 数据类型兼容

    • FX1N/FX2N 无MOVB指令,需用AND+DIV实现字节拆分;

    • 32 位指令(DMOV/DDIV)仅 FX3U/FX5U 支持。

  2. 临时寄存器复用:拆分过程中建议用临时 D 寄存器(如 D10~D19)存储中间值,避免覆盖业务数据。

  3. 负数处理:若拆分带符号数,先通过ABS D0 D0取绝对值,拆分完成后单独存储符号位(D0.15,1 = 负,0 = 正)。

调试技巧

  1. 用 GX Works2 的「软元件监控」实时查看 D/M 寄存器值,验证拆分结果;

  2. 复杂拆分逻辑可先在仿真软件中测试,再下载到 PLC;

  3. 拆分十进制数时,若数据长度不固定(如 123/1234),可先通过LEN指令(FX5U)判断位数,再动态拆分。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服