ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

KUKA机器人EtherNet/IP通讯参数配置与PLC联调排错

KUKA机器人EtherNet/IP通讯参数配置与PLC联调排错 简介围绕 KUKA 机器人 Ethernet/IP 通讯参数配置的实操型 PDF 文档面向从事工业自动化现场调试的电气工程师、机器人编程人员以及需要打通机器人—PLC 数据链路的初学者重点解决扫描器 IP、从站命名、IO 字节映射与阀岛接入等配置环节中容易出错的参数设定问题。文档共 1 个 PDF 文件压缩包约 652KB体量轻便适合随取随查。内容以 WorkVisual 软件界面截图与参数填写说明为主线依次演示项目结构查看、Scanner IP address 与 IP source address 的填写方式、Local slave1 中机器人命名如 rob以及 8 字节输出、12 字节输入的数据交换字节数设定并给出添加 CPX-FB32 Remote IO 阀岛的操作路径与通讯状态监控画面的判读方法。已有 1124 人学习下载可帮助读者对照界面完成参数核对减少反复试错快速建立机器人与 PLC 之间的稳定数据交换。1. 机器人程序没错但 PLC 读不到数EtherNet/IP 参数配置的位置感在 KUKA 联调现场最常见的返工不是 KRL 逻辑写错而是 EtherNet/IP 那几个字节数填反。PLC 侧组态好的 8 字节输入、12 字节输出一旦和机器人侧对不上梯形图里一排点全是 0示教器上 $IN[1] 到 $IN[8] 也毫无反应查两小时程序毫无收获。这份 KUKA 机器人 EtherNet/IP 通讯参数配置方法把整条链路讲得比较直白用 WorkVisual 上载控制器项目、建立 Scanner 并填入机器人 IP示例 192.168.7.27、配置 Local slave1 的站名 rob 与 8 字节输入 / 12 字节输出、再挂一个 CPX-FB32 Remote IO 阀岛最后从监控画面确认连接状态。文档给的是界面截图和取值适合刚接手 KUKA 与 PLC 联调的电控工程师也适合照文档复现一套离线配置的人。下面把每一步拆到参数级别把截图里没写清的方向约定和地址偏移补齐。2. WorkVisual 上载与 EtherNet/IP Scanner 参数对齐2.1 上载前的准备与项目结构认读WorkVisual 的版本要和控制器上的 KSS 大版本对得上V4.x / V5.x / V6.x 各对应不同的 WorkVisual 版本版本错配时上载会卡在读取项目阶段或者报出不支持的设备。上载入口在「在线 → 上载」前提是工程师站与控制器在同一网段且 KRC 的网络配置里已经给 EtherNet/IP 接口分配了 IP。上载完成后项目树里能看到 Controller、Busstructure 这一类节点展开后能找到 EtherNet/IP。双击它打开总线配置窗口默认通常是一个空的扫描器配置说明控制器当前还没有作为 EtherNet/IP 主站组态。这一步的意义在于拿到的是控制器里真实运行的组态而不是硬盘上某个不知道谁改过的旧文件。上载完立刻另存一份原始项目文件名带上日期比如KRC_20240612_original.wvs。后面所有改动都要下载回控制器一旦下载失败或者现场需要回退手上有原始项目就等于有回退路径。控制器的 KSS 完整备份也建议同步做一次两者作用不一样WorkVisual 项目管总线组态KSS 备份管程序和系统设置。提示上载过程中不要执行机器人程序把示教器切到 T1 或 EXT 并让程序停住避免上载到一半组态被运行状态改写。2.2 Scanner IP address 与 IP source address 的取值规则双击 EtherNet/IP 后新建扫描器窗口里有两个最容易混的地址栏它们的含义完全不同。Scanner IP address 填的是控制器在 EtherNet/IP 网段里的地址文档给的是 192.168.7.27。这个值必须和 KRC 的「Start-up → Network configuration」里给 EtherNet/IP 接口配的地址一致两处不一致时下载后通讯状态会报地址冲突或者连接根本建立不起来。IP source address 不要手动输入点下拉框选中工程师站当前那张网卡的 IP 即可。它的作用是在配置阶段把组态送到控制器选错网卡会出现能 ping 通控制器但下载组态失败的情况因为组态是往另一个源地址回传的。参数项文档取值含义填错的典型表现Scanner IP address192.168.7.27控制器在 EtherNet/IP 网段的地址连接建立失败、地址冲突告警IP source address下拉选工程师站网卡 IP配置阶段使用的本机源地址能 ping 通但下载组态失败网段/掩码与 PLC 同网段255.255.255.0与 PLC、工程师站保持三层可达扫描不到设备、连接超时网关一般不设纯本地总线不跨网段设了无用网关导致路由异常工程师站那张网卡建议关掉自动获取 IP手工设成固定地址避免笔记本换个地方办公后回现场地址变了导致 IP source address 的下拉项失效。2.3 上载前后用命令核对网段与端口配置前先用命令行把网络这层确认掉比在 WorkVisual 里反复点「下载」省时间。EtherNet/IP 的显式报文走 TCP 44818隐式 IO 报文走 UDP 2222这两个端口能通后面的连接才有意义。# 查看本机与机器人同网段网卡的 IPv4 地址确认和 IP source address 一致 Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -like 192.168.7.* } # 确认控制器在线4 个包不丢说明链路和地址都没问题 Test-Connection -ComputerName 192.168.7.27 -Count 4 # 确认 EtherNet/IP 显式报文端口开放能通说明 CIP 服务已经起来 Test-NetConnection -ComputerName 192.168.7.27 -Port 44818第一段用来锁定工程师站参与通讯的那张网卡输出里出现的地址就是要在下拉框里选的值第二段验证三层可达丢包说明网线、交换机口或者 IP 规划有问题此时再怎么改组态都没用第三段验证 TCP 44818 是否监听端口关闭通常意味着控制器侧 EtherNet/IP 服务没启用或者组态还没下载进去。三步都能过再进 WorkVisual 里做组态效率会高很多。3. Local slave1 实例站名 rob、8 字节输入与 12 字节输出的方向约定3.1 机器人做从站还是做扫描器KRC 在 EtherNet/IP 上可以扮演两种角色。做扫描器是机器人主动去读写阀岛、远程 IO做从站也就是 Local slave是外部 PLC 来读写机器人。文档里的配置两件事都做了Local slave1 让机器人被 PLC 扫描同时添加 CPX-FB32 又让机器人当扫描器去管阀岛。这种「既是扫描器又是从站」的拓扑在 KRC 上很常见好处是 PLC 只管和机器人换数据阀岛不用再单独拉一根总线回 PLC 柜代价是机器人一旦掉电阀岛的动作状态在 PLC 侧就不可见。如果项目里 PLC 已经有一路 EtherNet/IP 专门带阀岛就没必要在机器人上再挂一次重复组态会出现同一段地址被两个扫描器访问表现是阀岛动作时好时坏很难查。3.2 站名与字节数怎么填点击 Local slave1 进入实例配置窗口需要填两类东西一个站名一组字节数。站名文档里填的是 rob。只能用字母和数字不要用中文、空格长度控制在 15 个字符以内更省事。这个名字会作为从站标识出现在 PLC 侧的组态里改名字等于改接口双方必须同步改否则 PLC 侧会认不到设备或者连到错误的目标上。字节数文档给的是输入 8 字节、输出 12 字节。这里有个方向约定问题一部分 WorkVisual 版本按控制器视角命名Input 是机器人接收、Output 是机器人发送另一部分版本按 EtherNet/IP 规范命名Input 指从站产生的数据。两种命名正好差 180 度。字段文档取值控制器视角PLC 扫描器视角Input8 Byte机器人接收 PLC 发来的数据组态为输入 assemblyPLC 侧读Output12 Byte机器人发给 PLC 的数据扫描器写、从站接收注意填完之后一定要拿 PLC 侧组态的 assembly 大小反查一遍把「输入对输出」交叉核对不要只看字段名。8 和 12 填反了现场表现就是两侧都能连上但数据全是 0。3.3 字节到 $IN/$OUT 位的映射与 KRL 声明KRC 把 EtherNet/IP 的字节按位铺到 $IN/$OUT 上8 字节输入对应 $IN[1] 到 $IN[64]12 字节输出对应 $OUT[1] 到 $OUT[96]字节序是低字节在前。字节序号输入位区间输出位区间0$IN[1] ~ $IN[8]$OUT[1] ~ $OUT[8]1$IN[9] ~ $IN[16]$OUT[9] ~ $OUT[16]2$IN[17] ~ $IN[24]$OUT[17] ~ $OUT[24]3$IN[25] ~ $IN[32]$OUT[25] ~ $OUT[32]4$IN[33] ~ $IN[40]$OUT[33] ~ $OUT[40]………改字节数时位区间会整体平移手算容易错用一段小脚本生成对照表更快# 按 WorkVisual 里填的字节数算出每个字节在 $IN/$OUT 上的位区间 in_bytes, out_bytes 8, 12 def mapping(byte_count, prefix): for b in range(byte_count): start b * 8 1 print(f{prefix} 字节 {b:2} - {prefix}[{start}..{start 7}]) mapping(in_bytes, $IN) print(- * 28) mapping(out_bytes, $OUT)in_bytes和out_bytes直接改成 WorkVisual 里填的值脚本按「字节序号 × 8 1」计算起始位输出的区间可以直接抄进电气图纸。换版本、改配置后重跑一次比翻截图核对可靠。在 KRL 里声明跨字节信号时把信号放在 DAT 文件的声明区; 放在 R1/Program 下对应 DAT 文件的声明区 SIGNAL RobotToPlc $OUT[1] TO $OUT[32] ; 输出字节 0..332 位整数 SIGNAL PlcToRobot $IN[1] TO $IN[32] ; 输入字节 0..332 位整数 SIGNAL GripperCmd $OUT[33] TO $OUT[40] ; 输出字节 48 位SIGNAL声明一段连续位赋值时 KRL 按二进制补码处理所以RobotToPlc 12345这种写法可以直接用。常有人问能不能把 32 个输入位直接定义成浮点数KUKA 的 $IN 不区分数据类型官方做法是在 KRL 里声明成整型再乘比例因子转成 REAL例如把 0.01 毫米当单位、PLC 侧按整数发过来接收端乘 0.01。真要传 IEEE754 浮点只能在 KRL 里自己做位拼接工程上很少这么干。4. 挂载 CPX-FB32 阀岛EDS、Remote IO 添加与 I/O 地址排布4.1 添加 Remote IO 与 EDS 匹配在 EtherNet/IP 节点上右击选择添加设备在设备列表里找到 CPX-FB32 Remote IO选中后确认。CPX-FB32 是 Festo CPX 阀岛的总线节点负责把阀岛上的电磁阀和输入模块挂到 EtherNet/IP 上。设备列表里找不到这个型号是常事不同现场装的 WorkVisual 版本和可选包不一样。处理方式是从厂商那里拿到对应的 EDS 文件通过设备库的导入功能加进去重新打开添加对话框就能看到。EDS 里声明了默认连接尺寸它必须和阀岛实际配置的 I/O 数量一致否则连接能建立但数据长度对不上。导入 EDS 之后先核对尺寸用脚本读一遍比在文本编辑器里翻找快import re with open(CPX-FB32.eds, encodinglatin-1) as f: text f.read() # EDS 中与连接尺寸相关的键值即字节数 for key in (DefaultInSize, DefaultOutSize, Connection1InSize, Connection1OutSize): m re.search(rf^\s*{key}\s*\s*?(\d)?, text, re.I | re.M) print(f{key:22} {m.group(1) if m else 未声明})脚本按行匹配 EDS 里的键值对DefaultInSize是从站默认产生的字节数Connection1InSize是第一个显式连接的实际尺寸两者不一致说明阀岛本体配置和 EDS 默认值对不上需要按阀岛上的 DIL 开关或组态软件里的设置修正。4.2 地址排布别假设阀岛从 $IN[1] 开始机器人侧的 $IN/$OUT 是整块空间Local slave1 和阀岛都往里面占位添加顺序决定排布顺序。常见排法是 Local slave1 先占掉自己的 8 字节输入和 12 字节输出阀岛排在后面。设备方向占用字节机器人侧位区间Local slave1机器人输入8$IN[1] ~ $IN[64]Local slave1机器人输出12$OUT[1] ~ $OUT[96]CPX-FB32 阀岛输入视配置$IN[65] 起CPX-FB32 阀岛输出视配置$OUT[97] 起上表是按添加顺序推出来的实际起始位要在 WorkVisual 的 I/O 映射或信号编辑器里核对不同版本对本地从站是否占用 $IN/$OUT 空间的处理方式不一样。有的项目里本地从站只出现在 PLC 侧的扫描器组态里不占机器人自己的 $IN/$OUT阀岛还是从 $IN[1] 开始这时候按上面的表去写 KRL 就会错位。核对方法是组态编译通过之后打开 I/O 映射看每个设备的起始地址再和 KRL 里已经写好的信号声明逐一对照。阀岛动作时好时坏、或者某个电磁阀总是跟着另一个动基本都是地址偏移差了一位或一个字节。4.3 编译、下载与项目比对组态完成后先编译编译能过再下载。下载前把机器人切到 EXT确认没有程序在运行下载完成后按提示做一次冷启动让总线组态生效。下载失败最常见的原因有三个WorkVisual 版本与控制器不匹配、控制器处于 T1 且程序在运行、Ethernet 口被别的工具占用。第二种情况现场最多示教器上退到主界面再下载就行。第三种情况通常是调试用的抓包工具或者另一个 WorkVisual 实例占了连接。下载完成后用项目比对功能把控制器里的实际组态和当前工程比一次比对的差异列表里如果只剩下注释和格式差异说明组态同步成功。比对不一致时不要直接再下一次先确认是不是连到了另一台控制器产线上多台 KRC 共用网段的情况并不少见。5. 监控画面之外的验证从 44818 报文到现场排错清单监控画面显示连接状态正常但数据不动是联调阶段的高频场景。除了看画面里的连接数和 Owned/Idle 状态还有两种更直接的验证手段。第一种是用 UDP 44818 发一个 ListIdentity 请求看设备是否应答以及应答里带的产品标识。EtherNet/IP 的封装头固定 24 字节ListIdentity 的命令码是 0x0063长度字段填 0import re import socket # 24 字节封装头命令 0x0063 长度 0 会话句柄/状态/上下文/选项全 0 LIST_IDENTITY b\x63\x00 b\x00\x02 b\x00 * 20 s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.settimeout(2.0) s.sendto(LIST_IDENTITY, (192.168.7.27, 44818)) try: data, addr s.recvfrom(1024) print(reply from, addr, len(data), bytes) for item in re.findall(rb[\x20-\x7e]{4,}, data): print( , item.decode()) except socket.timeout: print(无应答查网段、防火墙或控制器 EtherNet/IP 服务未启用)socket.AF_INET加SOCK_DGRAM走 UDP端口 44818 是 EtherNet/IP 的标准端口settimeout(2.0)两秒无应答就判定为不通。脚本把应答里的可打印 ASCII 串全部捞出来通常能看到设备标识和产品名。这一步能区分「设备不在线」和「连接建立失败」两类问题比反复点监控画面刷新快。第二种是抓包在现场交换机上做端口镜像或者直接串在工程师站和控制器之间# 只看 EtherNet/IP 的显式报文和隐式 IO 报文 tshark -i 以太网 2 -f tcp port 44818 or udp port 2222 -w kuka_enip.pcap-f后面是抓包过滤器只留 44818 和 2222 两个端口抓下来的包体积可控-w落盘成 pcap方便回放分析。如果只有 TCP 44818 的建连和断开、没有 UDP 2222 的周期报文说明显式连接建立但隐式 IO 没有跑起来问题通常在组态的方向和字节数上而不是网络。现场排错按下面这张表走能覆盖大部分情况现象优先检查处理PLC 侧输入全 0两侧字节数是否交叉一致核对 assembly 大小必要时对调 8/12连接建立后立刻掉Scanner IP 与控制器网络设置是否一致两处改成同一地址后重新下载阀岛无动作$IN/$OUT 起始位是否错位打开 I/O 映射核对实际地址能 ping 通但下载失败IP source address 选的网卡下拉框改选现场那张网卡数据偶尔跳变是否两个扫描器访问同一地址去掉重复组态明确唯一主站最后一个实用技巧把接口定义固化下来。在 WorkVisual 里导出 I/O 映射清单把设备名、方向、字节数、起始位写进去同时把同一份定义作为注释写进机器人侧的 DAT 文件头。下次有人改站名或者加一个字节两份对照一眼就能看出差异省掉现场重新推地址的时间。本文还有配套的精品资源点击获取
返回列表