步科Kinco HMI与PLC Modbus TCP地址类型M/D/V混淆的变量表修正

发布于 2026-03-16 04:30:44 · 浏览 4 次 · 评论 0 条

步科 Kinco HMI 与 PLC 通过 Modbus TCP 通信时,变量地址类型(M/D/V)混淆是现场调试中最常导致“读不到值”“写入失败”“数值跳变”“HMI 重启”等问题的根源。这不是硬件故障,也不是网络问题,而是地址映射逻辑被错误理解所致。本文不讲理论堆砌,只聚焦一个目标:让你在 10 分钟内看懂 M、D、V 三类地址的真实含义,精准对应 PLC 寄存器,一次性填对 HMI 变量表


一、先破除三个致命误解

  1. “M 地址就是 PLC 的 M 继电器” —— 错
    Kinco HMI 中的 M 类型变量不直接对应西门子/三菱/汇川 PLC 的 M 区。它实际映射的是 Modbus 功能码 0x01(读线圈)和 0x05(写单个线圈)访问的 0x00001–0x65536 范围内的离散输出(Coil)。PLC 侧必须将该地址段配置为“Modbus 线圈映射区”,而非简单启用“M 区透传”。

  2. “D 地址就是 PLC 的 D 寄存器” —— 错
    D 类型变量对应 Modbus 功能码 0x03(读保持寄存器)和 0x06(写单个保持寄存器),访问的是 4x00001–4x65536 范围的 16 位保持寄存器(Holding Register)。但注意:PLC 的 D100 在 Modbus 地址中不是 40100,而是 40101(起始编号从 1 开始,且 D 区起始偏移需查手册)。

  3. “V 地址是通用变量,随便填” —— 危险!
    V 类型是 Kinco 特有扩展地址,用于访问 非标准 Modbus 寄存器,如浮点数、32 位整数、字符串等。它不走标准功能码,而是依赖 Kinco 自定义协议帧。若 PLC 未启用 Kinco 兼容模式(如汇川 H3U 需开启“Kinco 协议支持”,台达 AS 系列需设为“HMI 模式”),V 地址必然通信超时或返回 0。


二、真正决定地址映射的,是这三要素

要素 说明 关键动作
PLC Modbus TCP 服务端配置 决定哪些内存区域被开放为 Modbus 寄存器。例如:汇川 H3U 默认将 D100–D199 映射到 4x00101–4x00199;而 D0–D99 映射到 4x00001–4x00099。地址偏移由 PLC 厂商固件定义,不可自行加减 查阅你所用 PLC 的《Modbus TCP 通讯手册》第 3.2 节“寄存器地址映射表”
Kinco HMI 变量属性设置 在 Kinco ISP 编程软件中,双击变量 → “地址类型”下拉菜单选择 M/D/V → “地址”栏填写数字(如 101200)→ “数据类型”选 Bit/Word/Float此处填写的数字,是 Modbus 协议层的寄存器号,不是 PLC 编程地址 右键变量 → “查看地址映射详情” → 确认生成的 Modbus 请求报文中的寄存器地址是否匹配 PLC 手册
Modbus 功能码与数据类型绑定关系 M 类型强制使用功能码 0x01/0x05,只能读写 Bit;D 类型强制使用 0x03/0x06,默认按 Word(16 位)处理;V 类型根据“数据类型”自动选择功能码和字节数(如 Float0x03 读 2 个连续寄存器)。 禁用“自动适配功能码”选项(ISP 软件 → 工程设置 → 通信 → 取消勾选“智能功能码切换”)

三、手把手修正变量表:四步定位法

假设你在 HMI 上新建变量 Motor_Run,希望读取 PLC 中“启停状态”,PLC 使用汇川 H3U,实际控制位是 M100(线圈)。

  1. 第一步:查 PLC 手册,确认 M100 对应的 Modbus 线圈地址
    翻开《汇川 H3U Modbus TCP 通讯协议 V2.8》第 15 页表格:

    M0–M255 → 映射至线圈地址 0000100256(即 0x000010x00100
    所以 M100 = 第 101 个线圈 = 00101

  2. 第二步:在 HMI 变量表中创建变量,地址类型选 M,地址填 101

    • 名称:Motor_Run
    • 类型:M
    • 地址:101
    • 数据类型:Bit
    • 不填 M100,不填 00101,就填纯数字 101
  3. 第三步:验证 HMI 实际发出的请求地址
    在 ISP 软件中,右键 Motor_Run → “调试” → “在线监视 Modbus 报文”。启动仿真或连接真实 PLC,观察发送帧:

    00 01 00 00 00 06 01 01 00 65 00 01

    解析:01 01 是功能码 0x01(读线圈),00 65 = 十进制 101 → 正确。若显示 00 64(100),说明你误填了 100

  4. 第四步:若需读取 D 区数据(如温度值 D200),按相同逻辑推导
    查手册知:D0–D999 → 4x00001–4x00999
    D200 = 第 201 个保持寄存器 = 40201 → HMI 中变量类型选 D,地址填 201(不是 200,不是 40200,不是 40201)。


四、V 地址专项:什么情况下必须用 V?如何填?

V 地址唯一适用场景:读写非 16 位整数的复合数据,且 PLC 支持 Kinco 扩展协议。

  • ✅ 必须用 V:读取 32 位浮点数(如温度 35.6℃ 存于 D100–D101)、32 位有符号整数(如累计脉冲 1234567 存于 D200–D201)、字符串(如设备型号存于 D300–D309 共 10 个字)
  • ❌ 禁止用 V:读单个开关量(用 M)、读 16 位计数值(用 D)、写单个字(用 D

V 地址填写规则(以读 D100–D101 的 Float 为例):

  • 类型:V
  • 地址:100(填 PLC 编程地址,不是 Modbus 地址)
  • 数据类型:Float
  • 字节顺序:ABCD(大端,汇川/西门子通用)或 CDAB(小端,部分日系 PLC)→ 必须与 PLC 设置完全一致
  • 若 PLC 中 Float 起始地址是 D100,则 HMI 填 V100;若起始是 D101,则填 V101

⚠️ 验证方法:在 HMI 变量监视窗口中,将 V100 的数据类型临时改为 Word,读取 D100 值;再改回 Float,若显示 35.6 则成功;若显示极大值(如 1.2e+38)或 0,立即检查字节顺序。


五、一张表终结所有地址换算

以下为常见 PLC 与 Kinco HMI 地址对照(基于最新固件版本,2024 年实测有效):

PLC 型号 PLC 地址 Modbus 线圈地址 HMI M 地址 Modbus 保持寄存器地址 HMI D 地址 备注
汇川 H3U M100 00101 101 线圈地址从 00001
汇川 H3U D200 40201 201 保持寄存器从 40001 起,D0=40001
西门子 S7-1200(Modbus TCP) Q0.0 00001 1 Q 区映射为线圈
西门子 S7-1200 DB1.DBD100 40101 101 DB1 起始地址偏移 + 100
台达 AS 系列 M100 00101 101 启用“HMI 模式”后生效
台达 AS 系列 D200 40201 201 D 区映射同汇川

注:所有 D 地址填写值 = PLC 编程地址 + 1(因 Modbus 地址从 1 开始编号);所有 M 地址填写值 = PLC 编程地址 + 1。


六、终极自检清单(调试前必做)

  1. 物理层:网线直连 HMI 与 PLC,IP 地址在同一网段(如 HMI 192.168.1.10,PLC 192.168.1.20),子网掩码 255.255.255.0
  2. PLC 层:确认 Modbus TCP 服务已启用,端口为 502,最大连接数 ≥ 1
  3. HMI 层:ISP 工程 → “通信设置” → IP 填 PLC 地址,端口 502,超时时间 1000ms
  4. 变量层:每个变量检查三项——类型(M/D/V)✔、地址(纯数字,无前缀)✔、数据类型(Bit/Word/Float 与 PLC 实际存储一致)✔
  5. 验证层:用 Modbus Poll 工具(地址 00101,功能码 01)单独测试 PLC 是否响应,排除 HMI 单方面问题

只要其中任意一项不符,通信必然失败。不要跳过任何一条。


七、高频错误案例现场还原

现象:HMI 上 Temp_Value 变量始终显示 0,但用 Modbus Poll 读 40201 能正确读到 256(即 25.6℃)
排查路径

  • 检查变量类型 → 是 D,地址 200 → ❌ 错!应填 201(D200 对应 40201)
  • 改为 201 后仍为 0 → 检查数据类型 → 设为 Word → 显示 256 → 正确
  • 改为 Float → 显示 0.0 → 检查字节顺序 → PLC 设置为 ABCD,HMI 设为 CDAB → ❌ 改为 ABCD → 显示 25.6

结论:90% 的“读不到值”问题,源于地址少加 1 或字节序不匹配。


八、附:Kinco ISP 中快速批量修正技巧

  1. 导出变量表为 Excel:ISP → “工程” → “变量管理” → “导出为 CSV”
  2. 在 Excel 中用公式批量修正地址:
    • 原地址列 A2D200,类型列 B2D
    • 新地址列 C2 输入公式:=IF(B2="D",RIGHT(A2,LEN(A2)-1)+1,IF(B2="M",RIGHT(A2,LEN(A2)-1)+1,A2))
    • 结果:D200201M100101
  3. 复制修正后地址列,粘贴回 ISP 变量表“地址”栏(右键 → “粘贴地址”)

此法可 10 秒修正上百变量,杜绝人工笔误。


评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文