重点:库卡原生没有像 ABB 那样直接在 I/O 系统里勾选 Modbus TCP 总线,分两种方案: 方案 A:KUKA 官方 Modbus TCP 软件包(可选授权,推荐,直接映射 I/O,不用写 KRL 底层 Socket),机器人可做 Slave(从站,PLC 做主站,现场最常用) 方案 B:EthernetKRL(免费,纯 KRL 编程,自己写 Modbus 报文,机器人做 Client/Server,适合自定义寄存器读写) 网口:KRC4 用X66(KLI) 对外通讯;X43 是调试口,不要用来跑 PLC 总线。 默认 Modbus TCP 端口:502
前置准备
网线:X66 → 交换机,PLC 和机器人同网段
机器人 IP:示例
192.168.1.100,PLC:192.168.1.1,掩码 255.255.255.0登录权限:管理员 / 专家(密码
KUKA)网络测试:CMD
ping 192.168.1.100,必须通
方案 A:官方 Modbus TCP 软件包(KSS8.2+/KRC5,推荐,I/O 映射)
软件包名称:
KUKA.ModbusTCP,需要购买授权,WorkVisual 里安装,支持 Modbus TCP Slave(机器人从站),寄存器直接映射机器人 \(IN/\)OUT / \(GI/\)GO,不用写 KRL 收发报文。
Step1 WorkVisual 添加 ModbusTCP 总线
打开项目 → 控制器拓扑,添加
Modbus TCP Slave设置:
监听端口:502
从站 ID(Unit ID):1(Modbus TCP 一般默认 1)
寄存器映射(核心)
Modbus 寄存器定义(标准)
0xxxx:线圈(Bit,读写) → 映射机器人输出 $OUT
1xxxx:离散输入(Bit,只读) → 映射机器人输入 $IN
4xxxx:保持寄存器(Word,读写) → 映射 $GO(组输出,16 位)
3xxxx:输入寄存器(Word,只读) → 映射 $GI(组输入,16 位)
示例映射:
40001 → $GO [1](PLC 写保持寄存器,下发给机器人)
30001 → $GI [1](PLC 读输入寄存器,读取机器人数据)
寄存器编号注意:有些 PLC 软件是 0 基,有些是 1 基,这里坑最多!
把工程下载到机器人控制柜,重启机器人。
Step2 示教器侧检查
菜单 → 投入运行 → I/O 系统 → 现场总线,看到 ModbusTCP 状态为运行
打开 I/O 监视器,查看 \(IN/\)OUT/\(GI/\)GO。
Step3 PLC 侧(AB / 西门子等)配置 Modbus TCP Client(主站)
PLC 建立 Modbus TCP 客户端,目标 IP:机器人 IP,端口 502,从站 ID=1
读写寄存器:
写保持寄存器 40001 → 机器人 $GO [1]
读输入寄存器 30001 → 机器人 $GI [1]
测试:PLC 写寄存器,机器人组信号同步变化。
方案 B:EthernetKRL(免费,无授权,KRL 代码实现 ModbusTCP Client/Server)
老 KRC4(KSS8.2 以下)没有 ModbusTCP 授权包,用这个方案,机器人自己跑 KRL 程序收发 Modbus 报文。 机器人既可以做 Client(机器人主动去读 / 写 PLC / 仪表 Modbus 从站),也可以做 Server。
Step1 安装 EthernetKRL 包
WorkVisual 安装 EthernetKRL 软件包,下载到机器人。
Step2 配置 ETHERNETKRL.XML
路径:C:\KRC\ROBOTER\CONFIG\USER\COMMON\ETHERNETKRL\ETHERNETKRL.XML
文件名固定,不能改。XML 里定义连接类型、IP、端口,KRL 程序调用这个连接。
示例:机器人作为 Modbus TCP Client(机器人去读写 PLC Modbus 从站)
<ETHERNETKRL>
<CONNECTION>
<IP>192.168.1.1</IP> <!-- PLC IP -->
<PORT>502</PORT>
<TYPE>Client</TYPE>
<RECONNECT>TRUE</RECONNECT>
</CONNECTION>
</ETHERNETKRL>
Step3 KRL 程序编写 Modbus 读写
KRL 调用 EthernetKRL 函数,组装 Modbus TCP 报文:
读保持寄存器报文、写保持寄存器报文
接收返回报文,解析数据,存入机器人变量(INT/REAL)
缺点:需要自己处理报文拼接、CRC、字节序、断线重连;优点:不用买授权,灵活。 适合少量数据交互,大量 IO 不推荐(报文不稳定,占用机器人解释器)
Step4 示教器运行 KRL 程序,用 Modbus 调试助手测试通讯
寄存器映射规则 & 坑点
Modbus TCP Unit ID(从站号):TCP 协议本身不依赖从站 ID,但很多 PLC / 上位机工具必须填,一般写 1。
寄存器地址偏移:Modbus 标准文档 40001 = 寄存器地址 0,很多软件直接写 0,很多写 40001,很容易错位。
浮点数 REAL:2 个连续寄存器(32bit),注意高低字 / 高低字节顺序(大端 / 小端,调试最容易踩坑)。
机器人 X66 网口不要和 KUKA 内部 192.168.0.x 网段冲突!KRC 内部子网占用 192.168.0.x,外部通讯不要用这个网段。
常见故障排查
无法建立连接 ✅ ping 机器人 IP;防火墙关闭;网线交换机;确认 X66 网口,不是 X43 调试口;端口 502 是否被占用
连上但是寄存器读不到数据 ✅ 寄存器地址偏移是否搞错;Unit ID;映射是否下载并重启机器人
通讯不稳定,偶尔断 ✅ 降低读写轮询周期(200ms 以上);屏蔽网线,交换机端口 100M 全双工
EthernetKRL 程序报错 ✅ XML 文件名、路径大小写严格;机器人权限;程序循环不要太快。
选型建议
现场大量 DI/DO、组信号,稳定对接 PLC:方案 A,官方 ModbusTCP 授权包
少量数据读取仪表、上位机,不想买授权:方案 B EthernetKRL KRL 编程。


