步科 Kinco HMI 与 PLC 通过 Modbus TCP 通信时,变量地址类型(M/D/V)混淆是现场调试中最常导致“读不到值”“写入失败”“数值跳变”“HMI 重启”等问题的根源。这不是硬件故障,也不是网络问题,而是地址映射逻辑被错误理解所致。本文不讲理论堆砌,只聚焦一个目标:让你在 10 分钟内看懂 M、D、V 三类地址的真实含义,精准对应 PLC 寄存器,一次性填对 HMI 变量表。
一、先破除三个致命误解
-
“M 地址就是 PLC 的 M 继电器” —— 错
Kinco HMI 中的M类型变量不直接对应西门子/三菱/汇川 PLC 的 M 区。它实际映射的是 Modbus 功能码0x01(读线圈)和0x05(写单个线圈)访问的 0x00001–0x65536 范围内的离散输出(Coil)。PLC 侧必须将该地址段配置为“Modbus 线圈映射区”,而非简单启用“M 区透传”。 -
“D 地址就是 PLC 的 D 寄存器” —— 错
D类型变量对应 Modbus 功能码0x03(读保持寄存器)和0x06(写单个保持寄存器),访问的是 4x00001–4x65536 范围的 16 位保持寄存器(Holding Register)。但注意:PLC 的 D100 在 Modbus 地址中不是40100,而是40101(起始编号从 1 开始,且 D 区起始偏移需查手册)。 -
“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 → “地址”栏填写数字(如 101、200)→ “数据类型”选 Bit/Word/Float。此处填写的数字,是 Modbus 协议层的寄存器号,不是 PLC 编程地址。 |
右键变量 → “查看地址映射详情” → 确认生成的 Modbus 请求报文中的寄存器地址是否匹配 PLC 手册 |
| Modbus 功能码与数据类型绑定关系 | M 类型强制使用功能码 0x01/0x05,只能读写 Bit;D 类型强制使用 0x03/0x06,默认按 Word(16 位)处理;V 类型根据“数据类型”自动选择功能码和字节数(如 Float 用 0x03 读 2 个连续寄存器)。 |
禁用“自动适配功能码”选项(ISP 软件 → 工程设置 → 通信 → 取消勾选“智能功能码切换”) |
三、手把手修正变量表:四步定位法
假设你在 HMI 上新建变量 Motor_Run,希望读取 PLC 中“启停状态”,PLC 使用汇川 H3U,实际控制位是 M100(线圈)。
-
第一步:查 PLC 手册,确认 M100 对应的 Modbus 线圈地址
翻开《汇川 H3U Modbus TCP 通讯协议 V2.8》第 15 页表格:M0–M255 → 映射至线圈地址
00001–00256(即0x00001–0x00100)
所以M100= 第 101 个线圈 =00101 -
第二步:在 HMI 变量表中创建变量,地址类型选
M,地址填101- 名称:
Motor_Run - 类型:
M - 地址:
101 - 数据类型:
Bit - 不填
M100,不填00101,就填纯数字101
- 名称:
-
第三步:验证 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。 -
第四步:若需读取 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。
六、终极自检清单(调试前必做)
- 物理层:网线直连 HMI 与 PLC,IP 地址在同一网段(如 HMI
192.168.1.10,PLC192.168.1.20),子网掩码255.255.255.0 - PLC 层:确认 Modbus TCP 服务已启用,端口为
502,最大连接数 ≥ 1 - HMI 层:ISP 工程 → “通信设置” → IP 填 PLC 地址,端口
502,超时时间1000ms - 变量层:每个变量检查三项——类型(M/D/V)✔、地址(纯数字,无前缀)✔、数据类型(Bit/Word/Float 与 PLC 实际存储一致)✔
- 验证层:用 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 中快速批量修正技巧
- 导出变量表为 Excel:ISP → “工程” → “变量管理” → “导出为 CSV”
- 在 Excel 中用公式批量修正地址:
- 原地址列
A2为D200,类型列B2为D - 新地址列
C2输入公式:=IF(B2="D",RIGHT(A2,LEN(A2)-1)+1,IF(B2="M",RIGHT(A2,LEN(A2)-1)+1,A2)) - 结果:
D200→201,M100→101
- 原地址列
- 复制修正后地址列,粘贴回 ISP 变量表“地址”栏(右键 → “粘贴地址”)
此法可 10 秒修正上百变量,杜绝人工笔误。

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