# XDH-60T4-E 指令与 Modbus 要点 > 用途:本文件是综合平台编程器实现离线逻辑仿真和 XDH-60T4-E Modbus RTU 联机的开发速查资料。 > 本项目只实现简化梯形图仿真,不生成、编译或下载真实 PLC 程序。 ## 1. 本项目只使用的软元件范围 项目统一使用以下范围: | 区域 | 项目范围 | 含义 | 运行时类型 | | --- | --- | --- | | M 区 | `M0~M4000` | 普通辅助继电器,用于开关命令和状态。 | 布尔值 | | D 区 | `D0~D4000` | 普通数据寄存器,用于数值、参数和设备状态。 | 16 位字 | XDH 的实际软元件范围远大于项目范围:普通 M 区为 `M0~M199999`,普通 D 区为 `D0~D499999`。本项目固定使用较小的 `0~4000` 范围,足够演示,也便于变量管理和界面绑定。 M 是普通辅助继电器,不可直接驱动外部负载;真机设备是否动作由 PLC 内部程序决定。D 是数据寄存器,单个 D 默认按带符号 16 位数处理,范围为 `-32768~32767`。 32 位数据由两个相邻 D 寄存器组成:`D0` 为低字,`D1` 为高字,例如 `D1D0` 组成一个 32 位数。初版 HMI 数值控件默认处理单个 16 位 D;32 位和浮点显示作为后续扩展。 来源:基本指令篇印刷页 35、44。 ## 2. 简化梯形图仿真的实现范围 厂商手册包含完整指令集,但本项目只需要模拟常见设备控制逻辑。初版逻辑执行器支持以下元素即可: | 逻辑元素 | 语义 | 对应应用场景 | | --- | --- | --- | | 常开触点 | 绑定位为 `true` 时导通。 | 启动条件、运行条件。 | | 常闭触点 | 绑定位为 `false` 时导通。 | 停止、互锁、故障条件。 | | 普通线圈 | 网络导通时写入目标 M 位。 | 运行状态。 | | 置位/复位线圈 | 将目标 M 位锁存为开或关。 | 启动保持、故障复位。 | | 数值比较 | 比较 D 值与常量。 | 水位、温度、剩余量判断。 | 离线仿真按固定扫描周期执行:读取当前 M/D 值,计算每条网络,提交写入,再刷新 HMI。该语义用于验证项目示例逻辑,不承诺与 XDH 的全部指令、扫描细节和固件行为完全一致。 定时器以及 D 寄存器之间的比较属于可选扩展,不在当前原始需求范围内。后续只有在需求明确时才扩展领域模型、编辑器和逻辑执行器,不能因为厂商手册提供相关指令就默认纳入项目范围。 ## 3. XDH 的 Modbus 地址映射 ### 3.1 项目可直接使用的映射 对 XDH 系列 PLC,项目范围内的 M/D 地址与 Modbus 原始地址一一对应: | PLC 软元件 | Modbus 对象 | 原始 Modbus 地址 | 项目中的用法 | | --- | --- | --- | --- | | `M0~M4000` | 线圈(Coil) | `0~4000` | HMI 按钮写入、指示灯读取。 | | `D0~D4000` | 保持寄存器(Holding Register) | `0~4000` | HMI 数值显示、数值输入和参数读写。 | 代码内部必须使用上述 **从 0 开始的原始 Modbus 地址**。某些第三方上位机软件会以 `1` 或 `400001` 形式展示地址,这只是软件显示习惯,不应直接写进通信代码。 XDH 的 Modbus 可访问范围为 `M0~M20479` 和 `D0~D20479`,所以项目约定的 `0~4000` 全部在有效范围内。 来源:基本指令篇印刷页 255-256。 ### 3.2 本项目需要实现的功能码 | 功能码 | 名称 | 目标数据 | 本项目用途 | | --- | --- | --- | --- | | `0x01` | 读线圈 | M 区 | 读取启动、运行、报警等位状态。 | | `0x05` | 写单个线圈 | M 区 | HMI 按钮写一个 M 位。 | | `0x0F` | 写多个线圈 | M 区 | 后续批量写入使用,初版可不做 UI 入口。 | | `0x03` | 读保持寄存器 | D 区 | 读取数值、参数和状态。 | | `0x06` | 写单个保持寄存器 | D 区 | HMI 数值输入写一个 D。 | | `0x10` | 写多个保持寄存器 | D 区 | 后续批量参数下发使用。 | 本期联机不使用 X、Y、S、SM、HD 等其他软元件,也不需要实现 PLC 作为 Modbus 主站的编程指令。 来源:基本指令篇印刷页 259-261。 ## 4. Modbus RTU 报文与串口规则 ### 4.1 RTU 帧 每一帧格式如下: ```text 站号(1 字节) + 功能码(1 字节) + 数据(0~252 字节) + CRC 低字节 + CRC 高字节 ``` RTU 模式使用 CRC 校验。收到响应后必须校验站号、功能码、报文长度和 CRC;异常响应或校验失败不得更新 HMI 的寄存器缓存。 ### 4.2 串口配置规则 PLC 的 `COM2` 选择 Modbus RTU 模式,PC 与 PLC 的波特率、数据位、校验位、停止位必须完全一致。PLC 站号即 RTU 帧的第一个字节。 PLC 串口配置写入后需要断电重启。PC 轮询需要设置超时和间隔,不能在前一个请求还未完成时无限追加请求。 来源:基本指令篇印刷页 258、273-276。 ## 5. 联机模块实现约束 ### 5.1 数据流 ```text PC HMI 控件 <-> 联机寄存器缓存(M/D) <-> Modbus RTU 通信服务 <-> XDH-60T4-E COM2 RS-485 <-> PLC 内部控制程序 ``` HMI 控件不直接收发串口数据。通信服务更新联机寄存器缓存,HMI 订阅缓存变化并刷新。这样通信超时不会阻塞界面。 ### 5.2 读写策略 1. 收集当前 HMI 页面绑定的 M/D 地址。 2. 合并相邻地址,分别使用 `0x01` 批量读 M 区、`0x03` 批量读 D 区。 3. 用户点击按钮时使用 `0x05` 写 M 区;提交数值时使用 `0x06` 写 D 区。 4. 写入成功后等待下一次轮询确认实际值,不以本地点击状态代替 PLC 响应。 5. 超时、CRC 错误或 Modbus 异常响应时保留最后一次有效值,并在状态栏和日志中报告错误。 ### 5.3 与离线仿真的隔离 | 模式 | 变量来源 | 图形逻辑执行器 | | --- | --- | --- | | 离线仿真 | PC 内存中的 M/D | 运行。 | | 真机联机 | PLC 读回的 M/D 缓存 | 停止。 | 真机联机时,PLC 内部程序是唯一控制源。PC 端不执行仿真梯形图,避免同时写入同一批 M/D 地址。 ## 6. 首次真机验证步骤 当前软件已实现串口参数配置、异步连接、地址收集、相邻地址合并轮询、PLC 缓存、单点写入、首次读取约束和错误反馈。自动化测试使用替身网关和缓存仓库验证,不等同于真实串口与 PLC 验证。 1. 用官方工具把 PLC 的 COM2 配置为 Modbus RTU 从站,设置并记录站号与串口参数。 2. 使用 USB 转 RS-485 将 PC 与 COM2 的 A/B 正确连接。 3. PC 发送 `0x01` 读取 `M0`,确认能得到合法 RTU 响应。 4. PC 发送 `0x03` 读取 `D0`,确认寄存器解析正确。 5. 在安全的测试程序中使用 `0x05` 写 `M0` 和 `0x06` 写 `D0`,通过 PLC 监控或 HMI 页面确认写入结果。 6. 完成单点验证后,再开启页面轮询和完整 HMI 联动。 ## 7. 资料出处 1. 《XD、XL系列可编程控制器用户手册【基本指令篇】》,PD05 20260610 1.6.1。 2. 重点章节:第 2 章软元件、第 6-2 节 Modbus 通讯功能,印刷页 250-278。