综合平台编程器项目的远程存储
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

8.3 KiB

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 寄存器组成,64 位数据由四个相邻 D 寄存器组成。起始 D 保存最低 16 位,后续地址依次保存更高的 16 位。例如 Int32/Float32 的 D10~D11 顺序是“低字、高字”,Double 的 D10~D13 组合顺序是 (D13,D12,D11,D10)。HMI 数值控件和自由监控可选择 Int16Int32Float32Double (Float64);Double 使用偶数首地址且最大为 D3996。梯形图普通比较、MOVE、ADD、SUB 仍只按 16 位整数执行。

来源:基本指令篇印刷页 35、44。

2. 简化梯形图仿真的实现范围

厂商手册包含完整指令集,但本项目只模拟当前交付需要的常见设备控制逻辑。逻辑执行器支持以下元素:

逻辑元素 语义 对应应用场景
常开触点 绑定位为 true 时导通。 启动条件、运行条件。
常闭触点 绑定位为 false 时导通。 停止、互锁、故障条件。
上升沿/下降沿触点 M 位变化时产生一次扫描脉冲。 单次触发、变化检测。
数值比较 将 D 值与有符号 16 位常量比较。 水位、温度、剩余量判断。
普通线圈 网络导通时写入目标 M 位。 运行状态。
置位/复位线圈 将目标 M 位锁存为开或关。 启动保持、故障复位。
MOVE 将常量或 D 值写入目标 D。 参数传送、状态赋值。
ADD/SUB 对常量或 D 值做饱和加减并写入目标 D。 简单数值计算。

离线仿真按固定扫描周期和工程顺序执行,前面网络的 M/D 写入在同一扫描周期对后面网络可见,完成一轮后刷新运行投影。该语义用于验证项目示例逻辑,不承诺与 XDH 的全部指令、扫描细节和固件行为完全一致。

当前不支持 T/C 触点、TON、CTU 或 CTD。后续只有在需求明确时才扩展领域模型、编辑器、JSON、逻辑执行器和测试,不能因为厂商手册提供相关指令就默认纳入项目范围。

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 地址。某些第三方上位机软件会以 1400001 形式展示地址,这只是软件显示习惯,不应直接写进通信代码。

XDH 的 Modbus 可访问范围为 M0~M20479D0~D20479,所以项目约定的 0~4000 全部在有效范围内。

来源:基本指令篇印刷页 255-256。

3.2 本项目需要实现的功能码

功能码 名称 目标数据 本项目用途
0x01 读线圈 M 区 读取启动、运行、报警等位状态。
0x05 写单个线圈 M 区 HMI 按钮写一个 M 位。
0x0F 写多个线圈 M 区 后续批量写入使用,初版可不做 UI 入口。
0x03 读保持寄存器 D 区 读取数值、参数和状态。
0x06 写单个保持寄存器 D 区 Int16 数值输入写一个 D。
0x10 写多个保持寄存器 D 区 Int32/Float32 一次写入连续两个 D,Double 一次写入连续四个 D。

本期联机不使用 X、Y、S、SM、HD 等其他软元件,也不需要实现 PLC 作为 Modbus 主站的编程指令。

来源:基本指令篇印刷页 259-261。

4. Modbus RTU 报文与串口规则

4.1 RTU 帧

每一帧格式如下:

站号(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 数据流

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 区。单个 D 读块最多 120 字,拆块时不得切开 Int32、Float32 或 Double 的连续占用范围。
  3. 用户点击按钮时使用 0x05 写 M 区;提交 Int16 数值时使用 0x06 写一个 D,提交 Int32/Float32 时使用一次 0x10 写两个连续 D,提交 Double 时使用一次 0x10 写四个连续 D。
  4. 写入成功后等待下一次轮询确认实际值,不以本地点击状态代替 PLC 响应。
  5. 超时、CRC 错误或 Modbus 异常响应时保留最后一次有效值,并在状态栏和日志中报告错误。

5.3 与离线仿真的隔离

模式 变量来源 图形逻辑执行器
离线仿真 PC 内存中的 M/D 运行。
真机联机 每轮完整读回后的 PLC M/D 缓存副本 在临时仓库中只读推算轨迹。

真机联机时,PLC 内部程序仍是唯一设备控制源。HMI 按钮和数值输入继续按现有规则写 PLC;本地梯形图的线圈、MOVE、ADD 和 SUB 只修改本轮临时仓库,供后续本地网络计算和轨迹显示,不会写入 PLC。下一轮完整轮询后重新从最新 PLC 缓存开始,因此轨迹是带通信延迟的本地推算结果,不是 PLC 内部真实轨迹。

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. 在安全的测试程序中使用 0x05M00x06D0,通过 PLC 监控或 HMI 页面确认写入结果。
  6. PLC 保持 STOP,先读取一组连续 D 原值,再分别验证 Int32、Float32 和 Double 的单次 0x10 写入与读回;测试结束后恢复所有原值并再次读回确认。
  7. 完成单点和多字验证后,再开启页面轮询和完整 HMI 联动。

7. 资料出处

  1. 《XD、XL系列可编程控制器用户手册【基本指令篇】》,PD05 20260610 1.6.1。
  2. 重点章节:第 2 章软元件、第 6-2 节 Modbus 通讯功能,印刷页 250-278。