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

尼得科(nidec)服务商    

尼得科变频器,电机

新闻分类
  • 暂无分类
站内搜索
 
友情链接
  • 暂无链接
首页 > 新闻中心 > FX5U跟仪表MODBUS通讯!
新闻中心
FX5U跟仪表MODBUS通讯!
发布时间:2025-09-18        浏览次数:7        返回列表

FX5U PLC 与仪表进行 Modbus 通信(通常为 Modbus RTU 或 Modbus TCP)需通过特定模块或网口功能实现,以下是详细的实现方法(以最常用的 Modbus RTU 为例,通过 FX5-485ADP-MB 模块):

一、硬件配置

  1. 所需模块

    • 主模块:FX5U PLC(如 FX5U-32MT/ES);

    • 通信模块:FX5-485ADP-MB(支持 Modbus RTU 主 / 从模式的 RS485 模块);

    • 连接线缆:屏蔽双绞线(连接模块与仪表的 RS485 接口,A-A、B-B、GND-GND)。

  2. 模块安装
    将 FX5-485ADP-MB 模块插在 FX5U 的扩展总线上,确保安装牢固,模块电源正常。

二、软件参数设置(GX Works3)

  1. 模块参数配置
    打开 GX Works3,创建项目并添加 FX5U CPU 及 FX5-485ADP-MB 模块:

    • 模式:Modbus 主站(Master);

    • 波特率:与仪表一致(如 9600bps);

    • 数据格式:8 位数据位,1 位停止位,无奇偶校验(或按仪表要求设置);

    • 超时时间:500ms(可根据通信距离调整);

    • 站号范围:根据仪表实际站号设置(如 1~31)。

    • 右键 “模块配置”→“添加模块”→选择 “FX5-485ADP-MB”;

    • 双击模块进入参数设置:

  2. 软元件分配
    模块会占用特定的缓冲寄存器(BFM)用于发送 / 接收数据,可在参数中查看默认分配(如 BFM#100~#299)。

三、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;

四、关键注意事项

  1. 地址与功能码对应
    需严格按照仪表的 Modbus 手册确定:

    • 数据地址(如温度值可能存于寄存器 0x0000);

    • 功能码(读用 0x03/0x04,写用 0x06/0x10);

    • 数据格式(如高低字节顺序、是否有符号、倍率转换)。

  2. 抗干扰措施

    • 通信线缆使用双绞屏蔽线,屏蔽层单端接地(接 PLC 侧接地端子);

    • 模块与仪表之间距离较远时(>50 米),需在 RS485 总线两端加 120Ω 终端电阻。

  3. 错误处理
    通过ERROR输出判断故障类型(如 16#03 表示从站无响应,需检查接线或站号),必要时添加重试逻辑。

  4. Modbus TCP 通信(备选)
    若仪表支持 Modbus TCP,FX5U 可直接通过网口通信,使用MODBUS_TCP_MASTER功能块,配置 IP 地址和端口(默认 502)即可。

五、调试步骤

  1. 用 Modbus 调试工具(如 Modscan32)连接仪表,确认仪表通信正常;

  2. 在 GX Works3 中监控DONEERROR标志,判断 PLC 与模块的通信状态;

  3. 若读取数据异常,检查地址映射和数据转换是否正确(如仪表数据 ×0.1 才是实际温度)。

总结

FX5U 与仪表的 Modbus 通信核心是:正确配置模块参数 + 调用MB_MASTER功能块 + 匹配仪表的地址和功能码。实际开发中需重点关注数据格式转换和通信错误处理,确保数据交互准确可靠。

收缩
  • QQ咨询

  • 电话咨询

  • 18520143666
  • 添加微信客服