1. 项目概述:双通道通信架构设计
三菱FX3U系列PLC在工业自动化领域一直以稳定可靠著称,其双通道通信能力尤其适合需要同时处理多种协议的场景。这次我们构建的系统采用通道1实现N:N网络通信,通道2通过Modbus协议与称重仪表交互,形成典型的混合通信架构。
这种设计最大的优势在于资源利用率最大化——N:N网络适合PLC之间的高速数据交换(如生产线上多个工位的数据同步),而Modbus通道则专注于设备级通信(如采集传感器数据)。两个通道独立运行,通过PLC内部存储器实现数据交互,既避免了协议冲突,又保证了系统响应速度。
2. 硬件配置要点
2.1 核心模块选型
实现该方案需要以下硬件支持:
- FX3U系列PLC本体(建议FX3U-32MT以上型号)
- FX3U-485ADP-MB通信模块(必须型号,普通485模块不支持ADPRW指令)
- 称重仪表(需支持Modbus RTU协议)
- 终端电阻(120Ω,用于Modbus网络两端)
特别注意:市面上存在普通485ADP模块与485ADP-MB模块两种型号,只有后者支持Modbus专用指令。我曾见过有工程师误购普通模块导致指令无法执行的情况。
2.2 硬件连接示意图
N:N网络连接(通道1):
code复制主站PLC ---+--- 从站PLC1
|
+--- 从站PLC2
使用屏蔽双绞线连接,接线时注意A/B线序一致。
Modbus网络连接(通道2):
code复制FX3U-485ADP-MB模块 --- 称重仪表
必须在网络最远端的仪表端加装120Ω终端电阻。
3. N:N网络配置详解
3.1 主站参数设置
N:N网络的配置主要通过特殊数据寄存器实现,主站需要设置三个关键参数:
assembly复制MOV K0 D8176 // 设为主站(0=主站,1~7=从站号)
MOV K2 D8177 // 设置从站数量(本例为2个从站)
MOV K3 D8178 // 设置通信模式(3=32位数据交换模式)
模式选择说明:
- 模式0:共享8个数据寄存器(位单位)
- 模式1:共享32个数据寄存器(位单位)
- 模式2:共享4个数据寄存器(字单位)
- 模式3:共享8个数据寄存器(字单位,推荐使用)
3.2 从站配置
从站配置更为简单,只需设置站号即可:
1号从站配置:
assembly复制MOV K1 D8176 // 设为1号从站
2号从站配置:
assembly复制MOV K2 D8176 // 设为2号从站
3.3 数据交换机制
在模式3下,主从站之间通过以下寄存器自动交换数据:
- 主站写入从站1的数据:D0~D3
- 主站写入从站2的数据:D10~D13
- 从站1返回主站的数据:D20~D23
- 从站2返回主站的数据:D30~D33
实际项目中,建议在程序开头添加注释说明各寄存器的用途,例如:
// D0-D3:发送给1号从站的工艺参数
// D20-D23:接收1号从站的生产计数
4. Modbus通信实现
4.1 通信参数初始化
通道2的Modbus通信需要先设置通信参数:
assembly复制MOV H0C96 D8400 // 通信格式设置
// H0C96 = 9600bps,8位数据,无校验,1停止位
MOV K3 D8420 // 超时设置(单位×100ms)
通信格式详解:
- 第一位'0':固定头
- 'C':波特率选择(C=9600,E=19200)
- '9':数据长度与校验(9=8位无校验,8=8位偶校验)
- '6':停止位(6=1位,7=2位)
4.2 ADPRW指令详解
ADPRW指令是本次方案的核心,其完整格式为:
assembly复制ADPRW S1 S2 S3 S4 S5 D S7
参数说明表格:
| 参数 | 说明 | 示例值 |
|---|---|---|
| S1 | 从站地址 | K1(站号1) |
| S2 | 功能码 | K3(读保持寄存器) |
| S3 | 寄存器地址高16位 | H0(通常为0) |
| S4 | 寄存器地址低16位 | H8(地址0008H) |
| S5 | 读写数量 | K1(读取1个字) |
| D | 数据存储地址 | D100(存储读取结果) |
| S7 | 通信超时重试次数 | K0(不重试) |
4.3 典型功能实现
4.3.1 读取重量数据
读取称重仪表地址1的0008H寄存器(假设为当前重量值):
assembly复制ADPRW K1 K3 H0 H8 K1 D100 K0
执行后,重量值将存储在D100中。如果仪表数据为32位浮点数,需要连续读取2个字(D100-D101)。
4.3.2 清零操作
向地址1的0000H寄存器写入0(假设该寄存器控制清零):
assembly复制MOV K0 D200 // 准备写入值
ADPRW K1 K6 H0 H0 D200 K1 K0
注意功能码变为K6(06H-写单个寄存器)。
4.3.3 修改仪表地址
将地址1的仪表改为地址2(假设2000H为地址配置寄存器):
assembly复制MOV K2 D300 // 新地址值
ADPRW K1 K6 H20 H0 D300 K1 K0
5. 程序架构设计
5.1 程序段划分建议
assembly复制// 程序段0:系统初始化
// - 通信参数设置
// - 安全检测
// 程序段1:N:N网络通信
// - 主从站数据交换
// - 状态监控
// 程序段2:Modbus操作
// - 重量读取
// - 设备控制
// 程序段3:数据处理
// - 单位转换
// - 报警判断
5.2 状态监控设计
建议添加以下状态检测逻辑:
- 通信超时检测(利用ADPRW指令的完成标志位)
- 数据有效性检查(如重量值范围判断)
- 模块指示灯状态监测(通过特殊继电器)
6. 调试与故障排查
6.1 常见问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| ADPRW指令不执行 | 模块型号错误 | 确认使用FX3U-485ADP-MB模块 |
| 通信超时 | 波特率不匹配 | 检查D8400设置与仪表一致 |
| 数据错误 | 寄存器地址错误 | 核对仪表Modbus映射表 |
| 通信不稳定 | 终端电阻未接 | 在总线两端加120Ω电阻 |
| 指示灯常亮 | 接线反相 | 调换A/B线序 |
6.2 调试技巧
-
分步测试法:
- 先单独测试N:N网络
- 再单独测试Modbus通道
- 最后整合测试
-
利用LED指示灯:
- POWER灯:常亮表示供电正常
- SD/RD灯:闪烁表示数据收发
- ERROR灯:亮起表示通信故障
-
数据监视技巧:
assembly复制// 在程序中插入测试代码 MOV D100 D500 // 备份原始数据 MOV K1234 D100 // 写入测试值
7. 进阶应用扩展
7.1 多设备轮询
通过循环修改S1参数,实现多仪表轮流读取:
assembly复制// 站号轮询计数器
INC D800
CMP K3 D800 // 假设3个设备
MOV D800 D801 // 当前站号
AND K3 D801 // 限制在1-3范围
ADPRW D801 K3 H0 H8 K1 D100 K0
7.2 数据预处理
在读取后添加数据处理逻辑:
assembly复制// 重量单位转换(kg→吨)
DEDIV D100 K1000 D110
// 重量限值判断
CMP K5 D110 // 5吨上限
7.3 通信安全
添加通信异常处理机制:
assembly复制// 超时处理
LD M8029 // ADPRW完成标志
OUT Y0 // 正常指示灯
LDI M8029
OUT Y1 // 异常报警
在实际项目中,这套双通道方案已经稳定运行超过2000小时。最深的体会是:通信系统的可靠性=正确的硬件配置×严谨的参数设置×完善的错误处理。特别是在干扰较强的工业现场,一定要做好接地和屏蔽,那个终端电阻的问题让我记忆犹新——看似简单的120Ω电阻,却是保证信号完整性的关键。