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

三菱电机服务商    

PLC、变频器、伺服驱动、触摸屏,机器人

联系方式
  • 联系人:吴经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 使用三菱L系列,子程序里数据寄存器的值和主程序的不一样,为什么?
新闻中心
使用三菱L系列,子程序里数据寄存器的值和主程序的不一样,为什么?
发布时间:2026-03-15        浏览次数:0        返回列表

三菱 L 系列 PLC:子程序里 D 寄存器值和主程序不一样 ——99% 是这个原因:局部变量(L 区)/ 软元件复用 / 刷新机制


一、最核心、最常见原因(L 系列专用)

子程序用了【局部软元件】,主程序用了【全局软元件】

三菱 L 系列、Q 系列、iQ-R 系列 子程序(子程序调用) 有一个关键特性:

子程序可以使用【局部数据寄存器】(LDxxx)

  • 主程序用:D0、D10、D100(全局,所有程序共享)

  • 子程序用:LD0、LD10、LD100(局部,只在子程序内有效)

结果:

名字看起来一样(D/LD),但根本不是同一个地址!

  • 主程序 D0 = 100

  • 子程序 D0(实际是 LD0)= 200→ 完全不一样


二、第二个常见原因:子程序用了【暂存器】被自动覆盖

L 系列在子程序、中断、脉冲指令中会自动使用:

  • V0~V7

  • Z0~Z7这些是索引寄存器,如果主程序和子程序都用,会互相覆盖

表现:

  • 主程序 D100 = 50

  • 进子程序 D100 突然变了→ 因为索引寄存器改变了偏移地址


三、第三个原因:软元件被多重使用(重复赋值)

例如:

  • 主程序:MOV K10 D0

  • 子程序:MOV K20 D0→ 执行子程序时,D0 被改写,所以值不一样


四、第四个原因:子程序带了【输入输出参数】,值被传递改写

L 系列子程序可以设置:

  • 输入参数

  • 输出参数

调用时,PLC 会自动把主程序的值传到子程序,再传回来。如果你参数映射错了,值就会乱。


五、最快判断方法(10 秒找到问题)

看子程序开头:

如果看到:

plaintext

LOCAL D D0 D100

plaintext

局部软元件 LD0~LD100

100% 是局部变量问题!

你看到的 D 寄存器,其实是 LD(局部),不是全局 D!


六、怎么解决?(3 种方法)

方法 1:子程序不要用局部软元件

子程序内全部使用全局 D 寄存器

  • D0~D9999 全部程序共享

  • 主程序和子程序值一定一样

方法 2:不要混用 D 和 LD

  • 全局 = D

  • 局部 = LD不要名字相同!

方法 3:检查子程序是否自动赋值了 D 寄存器

搜索子程序里的:

plaintext

MOV ... D
ADD ... D.
收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服