FX5U PLC 与仪表进行 Modbus 通信(通常为 Modbus RTU 或 Modbus TCP)需通过特定模块或网口功能实现,以下是详细的实现方法(以最常用的 Modbus RTU 为例,通过 FX5-485ADP-MB 模块):
一、硬件配置
二、软件参数设置(GX Works3)
三、Modbus 通信程序编写(使用功能块)
FX5U 通过专用功能块MB_MASTER(Modbus 主站指令)实现与仪表的通信,以下是读写示例:
1. 读取仪表数据(如读取仪表的温度值,功能码 0x03)
st
// 定义变量 VAR MB_Read : MB_MASTER; // Modbus主站功能块 Read_Trigger : BOOL; // 读取触发信号(上升沿) Read_Done : BOOL; // 读取完成标志 Read_Error : WORD; // 错误代码 // 通信参数 SlaveAddr : BYTE := 1; // 仪表站号 FuncCode : BYTE := 3; // 读保持寄存器功能码 StartAddr : WORD := 0; // 仪表起始地址(按仪表手册) DataLen : WORD := 2; // 读取长度(2个寄存器) DataPtr : POINTER TO WORD := ADR(D100); // 数据存储地址(D100开始) END_VAR // 上升沿触发读取 Read_Trigger := X0 AND NOT X0_EDGE; X0_EDGE := X0; // 调用Modbus读功能块 MB_Read( EN := TRUE, REQ := Read_Trigger, SLAVE := SlaveAddr, FUNC := FuncCode, ADDRESS := StartAddr, LENGTH := DataLen, DATA := DataPtr, DONE => Read_Done, ERROR => Read_Error, BUSY => , COM_PORT := 1 // 对应FX5-485ADP-MB模块的端口号 ); // 读取完成处理(如将仪表数据转换为实际温度) IF Read_Done THEN D102 := D100; // 存储读取结果 Read_Done := FALSE; // 复位完成标志 END_IF;
2. 写入仪表参数(如设置仪表的目标值,功能码 0x06)
st
// 定义变量 VAR MB_Write : MB_MASTER; // Modbus主站功能块 Write_Trigger : BOOL; // 写入触发信号(上升沿) Write_Done : BOOL; // 写入完成标志 Write_Error : WORD; // 错误代码 // 通信参数 Write_SlaveAddr : BYTE := 1; // 仪表站号 Write_FuncCode : BYTE := 6; // 写单个寄存器功能码 Write_Addr : WORD := 10; // 仪表写入地址(按仪表手册) Write_Data : WORD := 500; // 写入数据(如目标值50.0℃,需按仪表倍率转换) Write_DataPtr : POINTER TO WORD := ADR(Write_Data); END_VAR // 上升沿触发写入 Write_Trigger := X1 AND NOT X1_EDGE; X1_EDGE := X1; // 调用Modbus写功能块 MB_Write( EN := TRUE, REQ := Write_Trigger, SLAVE := Write_SlaveAddr, FUNC := Write_FuncCode, ADDRESS := Write_Addr, LENGTH := 1, // 写入长度1个寄存器 DATA := Write_DataPtr, DONE => Write_Done, ERROR => Write_Error, BUSY => , COM_PORT := 1 ); // 写入完成处理 IF Write_Done THEN Y0 := TRUE; // 点亮成功指示灯 T0 := K100; // 延时1秒后熄灭 ELSIF T0.Q THEN Y0 := FALSE; END_IF;
四、关键注意事项
五、调试步骤
总结
FX5U 与仪表的 Modbus 通信核心是:正确配置模块参数 + 调用MB_MASTER功能块 + 匹配仪表的地址和功能码。实际开发中需重点关注数据格式转换和通信错误处理,确保数据交互准确可靠。

