『7x24小时有问必答』
2018年东莞某电子厂,升级一条老产线,旧PLC是Melsec A系列(A2USHCPU),服役15年,系统跑的是温控+位置控制+数据采集。原计划三天完成——结果第一个电机上电就开始低频振动,像在“唱歌”。老板站我身后看了半小时,说:“我给你三天,已经过去一天了。”
这三年下来,我踩过七个坑,今天只讲三个最狠的——如果你也准备把A系列/Q系列换成iQ-R系列,先把这篇文章看完,至少省你两天加班费。

第一章 硬件适配:你以为“兼容”就是插上就能跑

你以为是换一张卡,实际上是重配整个框架

很多工程师拿到iQ-R系列第一反应:模块位置和A系列一样,插上去直接认。
错。
我现场验证过:A系列模块的基板是A1S/B系列,iQ-R系列基板是R3XX系列。结构不一样,脚位定义也不同。我们当时有块A1SJ71UC24-R2(串口模块)在老系统里跑了十年,以为搬过来就能用。
结果上电后,CPU R04(固件版本11)直接报“98”错误(模块配置异常)。
查手册才知道
:A1S系列模块不支持热插拔到iQ-R基板上,型号不兼容。改用了R系列的同功能模块R60AD8(8通道模拟量输入)后,问题解决。
项目旧方案(A系列)新方案(iQ-R系列)
基板型号A1S/B系列R3XX系列
电源模块A1S61PR61P
CPU型号A2USHCPUR04CPU
串口模块A1SJ71UC24-R2需要R系列对应型号
程序卡A系列专用存储卡支持SD卡+程序卡(如RCPU用SD卡/CF卡)
知识点1
:iQ-R系列模块不是“向下兼容”旧系列硬件。型号、基板、电源、模块必须全部重新选型,不能贪方便。

第二个坑:程序卡型号不匹配

旧A系列程序卡是A9JG系列(比如A9JG-3A),容量64KB。我们现在改造的这条产线,程序+配方数据写了约300KB——根本放不下。
当时我们拿着旧程序卡,试图直接用iQ-R的CF卡口读——不支持。iQ-R系列CPU程序卡是SD卡或者CF卡(型号对应R系列),容量至少2GB起步。
解决办法
:备份旧程序(通过GX Developer导出为.GXW文件),用GX Works3重新编译,再写入新的SD卡。注意:GX Developer导出的程序,部分指令(比如SPD转速检测指令)在iQ-R里语法有变化,需要手动检查。

实战代码:硬件配置确认

以下是用GX Works3编写硬件配置的代码块:
// 硬件配置块(GX Works3 工程项目设置)
// 基板:R38B,插槽1-8
// CPU插槽 = 0
// 电源模块: R61P (AC220V → 5V/3A)
// 插槽1: R60AD8 (8CH模拟量输入, 0~10V, 分辨率1/32000)
// 插槽2: R60DA8 (8CH模拟量输出, 0~10V, 分辨率1/32000)
// 插槽3: RD75P4 (4轴定位模块, 脉冲+方向)
// 注意:模块安装顺序必须与基板实际位置一致,否则CPU报组态错误
// 每个模块的参数要在“网络构建-模块参数”中手动分配起始地址
// 例如R60AD8,起始地址默认设为W100(16位字),通道1-4模拟量输入存储到D100-D103
// 在“模拟量输入模块参数”中配置:
// 通道1: 量程0~10V, 输入信号类型=电压, 数字输出范围=0~4000
// 通道2: 量程4~20mA, 输入信号类型=电流, 数字输出范围=0~4000
// 采样次数: 64次(平均值滤波)
// 高速计数模块参数(如果使用Q6TA-R2)
// 通道A: 编码器类型=差分, 计数模式=4倍频, 复位模式=Z相信号复位
// 循环时间: 0.5ms(卡点:不能低于0.3ms,否则CPU负载过重)
注意
:模块启动地址是GPT(组号+插槽号)决定的,比如插槽1模块地址= W1(如果是32位模块则地址= W1.0)。不手动分配,CPU自动分配——但如果你有多个同类型模块,自动分配容易错位,建议手动指定。

第二章 程序移植:你以为GX Works3能“一键翻译”

“直接导入.GXW文件”——那是骗自己的

我的经验:100%的旧程序直接导进去,第一遍编译报错超过10个。
核心原因是指令差异。A系列用MELDAS系统指令集,iQ-R系列用的是IEC 61131-3标准扩展指令集。最典型的是:
MOV指令:A系列里MOV D0 D100是把D0内容传到D100;iQ-R里语法一样,但数据类型必须匹配。如果D0是16位整数,D100是32位整数,编译直接报“类型不匹配”。
SPD指令(速度检测):A系列支持SPD D0 D1 D2;iQ-R里对应指令是SPD1(单相速度检测)或SPD2(双相速度检测),输入寄存器是X0-X7,格式也不一样。
PWM指令:A系列里PLSY(脉冲输出)不带S曲线加速;iQ-R推荐使用DDRVA或DDRVI指令,支持S曲线。
我的踩坑
:旧程序里大量使用SPD指令检测旋转编码器脉冲频率。移植后发现,GX Works3编译报错“指令未定义”,SPD在iQ-R里对应SPD1,但语法参数列表完全变了——旧程序是SPD D0 X0 D1,新程序要写成SPD1 #0 X0 D0 D1。
改了7个SPD指令,又漏改了3个。

第二个知识点:数据类型转换是隐形杀手

A系列是典型的老式PLC,所有寄存器默认16位(D0-D7999是16位字)。iQ-R系列支持32位/64位数据,而且很多指令默认输出32位——比如DINT_TO_REAL(32位整数转浮点数)。
如果你把A系列的程序直接搬过来,没有对数据类型做显式转换,系统会自动把16位整数扩展为32位——但不会报错,只是结果乱码。
案例
:某个温度控制模块,旧程序用D500存储PID设定值(16位)。移植后,新系统R60AD8输出是32位,结果PID指令(PID指令在iQ-R里默认16位输入32位输出)读到D500的是32位数据——高位是乱码,导致PID超调。
解决方案
:在程序开头必须声明所有数据的类型,用
VAR
VAR_DATA
块强制指定。例如:
// 数据类型声明(GX Works3 全局变量表)
VAR_GLOBAL
// 旧PLC数据:16位整数转32位整数
g_SetTemp_16bit: WORD;       // 原A系列的D500设定值(16位无符号整数)
g_SetTemp_32bit: DINT;       // iQ-R的PID设定值(32位有符号整数)
g_PID_Output: INT;           // PID输出(16位整数)
g_PID_SetPoint: REAL;        // PID设定值(浮点数)
g_Alarm_Word: WORD;          // 报警状态字(16位)
END_VAR
// 在主程序OB1中写显式转换逻辑
// “你以为”旧数据不需要转换,“实际上”不转换就乱码
// 转换逻辑:把A系列的16位设定值转为32位
g_SetTemp_32bit := WORD_TO_DINT(g_SetTemp_16bit);  // 显式转换,安全可靠
// 然后转成浮点数给PID块
g_PID_SetPoint := DINT_TO_REAL(g_SetTemp_32bit);    // 16位整数→32位整数→浮点数
// 注意:PID块输入输出引脚默认类型为REAL,必须保证数据类型一致
// PID功能块调用
FB_PID_1(In := g_PID_SetPoint, Out => g_PID_Output);  // Out是16位INT,注意范围-32768~32767

第三个知识点:结构体映射是刚需

旧程序大量用M8020、M8021之类的特殊继电器(顺序控制标志)。iQ-R系列没有这些继电器了——对应功能被“结构化编程”的SFC块替代。
解决方案
:建立一张“旧特殊继电器 → 新功能块”映射表,提前写好。
// SFC功能块:替代A系列的M8020-M8022
// M8021 = 进位标志 → 在iQ-R里对应SM400(运算进位状态)
// M8022 = 零标志 → 在iQ-R里对应SM401(运算结果为零)
// 在程序中写条件判断,不再依赖M8021
IF SM400 THEN
// 代表进位标志为ON,执行进位处理逻辑
// 旧程序写法:M8021 SET Y100
// 新程序写法:
IF SM400 THEN
Y100 := TRUE;  // 置位输出,替代M8021的SET指令
END_IF;
END_IF;
注意
:SM400/SM401在iQ-R中也有扫描周期限制——如果你是边沿触发,得配合ENO/ENO检测。

第三章 排查优化:你以为“写完了”其实还没过一半

那个“唱歌”的电机——最后排查三天

第一个电机振动,我怀疑是模拟量输出模块线性度不好。换了三次模块,甚至换了品牌(跳过,不能换)。最后用示波器测了R60DA8的电流环——发现模块电压输出是0~10V,但电机驱动器要求是0~5V。原因是模块配置里没改量程范围。
但更深层的坑:iQ-R的模拟量模块输出精度比A系列高了一个数量级。A系列输出分辨率是1/4000(10位),R系列是1/32000(15位)。旧程序里给驱动器写的参考电压是200(十进制),对应旧系统是200/4000 10V = 0.5V。移植后,新系统200/32000 10V = 0.0625V——相当于直接降了八倍输出。
电机自然“没劲”,低频振动。
解决方案
:重新校准模拟量输出缩放系数。具体做法:
// 模拟量输出缩放计算
// 旧系统:D100 = 200 对应 0.5V (10V满量程/4000精度)
// 新系统:D100 = 200 对应 0.0625V(严重不足)
// 新方案:重新计算
// 需求电压:0.5V → 新精度下数值 = 0.5 / 10 * 32000 = 1600
// 所以旧程序里的D100=200必须改为D100=1600
// 在程序起始处加入自动缩放逻辑(供调试使用)
// 注意:以下逻辑只在手动调试模式开启
IF Manual_Scaling_Flag THEN
// 读取旧系统的A系列模拟量输出值(假设存在D2000中)
g_Old_Data := D2000;  // 旧数据范围0~4000
// 缩放到新系统范围0~32000
g_New_Data := g_Old_Data * 8;   // 800%放大,对应4~20mA情况需调整
// 注意:如果旧系统用的是4~20mA,公式不同:
// g_New_Data := (g_Old_Data - 6400) * 8 + 6400;  // 4~20mA换算
// 6400旧值对应4mA,32000新值对应20mA
// 写入R60DA8输出寄存器
DOUT_D100 := g_New_Data;
ELSE
// 正常模式:自动缩放关闭,直接写原值(默认5000对应1.5625V)
DOUT_D100 := D100 * 8;  // 快速补偿,但可能有0.1%误差
END_IF;
知识点4
:模拟量缩放不是简单乘以固定系数。旧系统分辨率低(4000),新系统分辨率高(32000),你必须重新计算每个通道的对应关系。我后期直接生成了一张“旧值 → 新值”对照表,贴在机柜柜门上。

第二个排查:CPU扫描周期从3ms变到12ms

移植完成后,发现系统响应变慢。A系列CPU A2USHCPU循环扫描约3ms,iQ-R R04CPU(运行速度更快)理论上应该更快——但实际测了12ms。
问题出在
:旧程序是“顺序扫描”型(从上往下刷),iQ-R默认是“事件型扫描”(根据中断任务刷新)。我们没有配置中断任务优先级,导致CPU把模拟量输入、定位控制、PID计算全部放在一个普通扫描周期里,互相拖累。
解决方案
:使用多任务配置。
// 多任务设置(GX Works3 - 系统参数 - 任务设置)
// 任务1:高速任务(周期0.5ms)
//   - 物理量采集(模拟量输入),用于高速伺服控制
//   - 中断优先级最高
// 任务2:中速任务(周期5ms)
//   - 位置控制模块(RD75P4)执行定位轴移动
//   - 数据采集存储
// 任务3:低速任务(周期20ms)
//   - 数据记录、HMI通信、配方向导逻辑
// 任务4:启动任务(ONCE)
//   - 初始化模拟量模块参数、清除报警
配置完成后,扫描周期恢复到约3.4ms,接近旧系统水平。

总结与行动清单

这次改造用了一个半月(计划一周),翻车三个大坑:硬件不兼容、程序指令差异模拟量缩放偏差。最终效果还行——改了15年没动过的产线,振动消失,温控精度从±1.5°C降到±0.3°C。
你可以带走的 5 个知识点:
1.硬件层面: iQ-R系列模块和A系列不兼容,基板、电源、模块、程序卡全部重新选型,不能偷懒。2.程序层面: 旧程序的SPD、PWM指令必须手动替换,IEC 61131-3语法不同;注意数据类型转换(16位→32位→浮点数)。3.模拟量缩放: 旧系统4000分辨率 vs 新系统32000分辨率,输出数值必须重新计算,不是简单乘以8。4.中断优化: 使用多任务配置(高速/中速/低速任务)分离不同实时性要求的逻辑,避免CPU负载不均。5.排查习惯: 上电后先测模拟量输出波形,查CPU扫描周期,这两个坑最隐蔽。

行动指令

如果你今天正在做A系列→iQ-R的改造,先做两件事:
1.打开GX Developer,导出旧程序的所有模块配置表(型号、基板槽位、模拟量通道设置)。这不是废话——你以后会感谢现在做的笔记。2.用Excel建一张“旧特殊继电器/指令 → 新功能块/指令”映射表,提前60%的排查时间。
最后留个问题:你在PLC改造中遇到最隐蔽的坑是什么? 欢迎在评论区留言,我每条都看。
(如需文中涉及的GX Works3项目示例文件,评论区回复“改造清单”可领取PDF版配置表)
推荐阅读
8个层次搞懂三菱机械手编程,最后一个是终极境界
发布于 2026-06-27
三菱机械手轨迹规划与编程:从直线到复杂曲线
发布于 2026-06-21
6步搞定三菱iQ-R FB封装+3套实战代码,PLC编程效率直接翻倍
发布于 2026-06-18
KEYWORDS
PLC, GX Works, GX Developer
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码