ARTICLE DETAIL

资讯详情

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

KUKA机器人EtherNet/IP与PLC通讯:从站配置、RPI调优与排错

KUKA机器人EtherNet/IP与PLC通讯:从站配置、RPI调优与排错 简介这份PDF文档面向从事KUKA机器人调试与工业自动化集成的技术人员围绕机器人通过Ethernet/IP与PLC建立通讯时的参数配置方法展开可用于产线调试准备、现场排错以及技能培训中的案例参考。资料以单个PDF文件提供压缩包约652KB篇幅紧凑便于随时查阅。内容从WorkVisual上载原始程序后的项目结构讲起依次说明扫描器IP地址与IP来源地址的选取、Local slave命名及输入输出字节数的设定并给出添加CPX-FB32 Remote IO把阀岛挂入网络、在监控画面确认通讯状态等关键环节。界面上各参数与下拉选项的对应说明有助于理解机器人与PLC的数据交换机理减少反复试错。目前已有1124人学习下载适合初、中级自动化从业者参照使用。1. KUKA机器人接EtherNet/IP先分清谁主谁从现场最常遇到的场景是产线上若干台 KUKA 机器人上位一条 Allen-Bradley 或欧姆龙 PLC要把机器人侧的 I/O 数据周期性送进 PLC 标签同时接收 PLC 下发的启动、复位、程序号指令。EtherNet/IP 是 CIP 在以太网上的实现Rockwell 体系原生支持KUKA 也有对应技术包把协议接进控制器于是它成了这类集成的默认选项。真正卡人的地方不在网线而在角色判断。EtherNet/IP 是生产者消费者模型谁做 Scanner主站、谁做 Adapter从站必须在方案阶段定死。KUKA 侧 KUKA.EthernetIP FS 走 Adapter 角色MS 走 Scanner 角色技术包不同WorkVisual 里的配置入口也不同选反了 PLC 侧根本建不起隐式连接。这篇围绕一个典型任务展开让一台 KUKA 机器人通过 EtherNet/IP 和 PLC 交换固定长度的过程数据。适合手上有机器人、有 PLC、却卡在“参数都填了就是连不上”这一步的人。硬件前置条件、参数落地、数据映射和排错下面都会给到可直接抄的字段、命令和判断依据。2. KUKA机器人EtherNet/IP的角色定位与前置条件2.1 Scanner 与 AdapterKUKA 站在哪一侧决定技术包EtherNet/IP 的通讯分显式报文和隐式报文两类。显式报文走 TCP/44818 端口用来读属性、下发配置、做诊断隐式报文走 UDP/2222 端口是周期性的 I/O 数据交换也就是常说的 Class 1 连接。机器人换工位信号、PLC 下发程序号这类实时性要求高的数据全走 Class 1。Class 1 是生产者消费者关系。生产者按 RPIRequested Packet Interval周期发数据消费者订阅这份数据。谁发起连接、谁定义数据布局就是 Scanner谁被连接、对外提供数据程序集就是 Adapter。对 KUKA 来说两种角色的技术包不同KUKA.EthernetIP FS机器人做 AdapterPLC 做 Scanner。绝大多数产线都是这个组合。KUKA.EthernetIP MS机器人做 Scanner去连别的 Adapter 设备。少数场景才用得到。选型的经验判断只要机器人是执行机构、PLC 是调度大脑就装 FS只有机器人要直接带远程 I/O 站、不经过 PLC 时才考虑 MS。场景KUKA 角色技术包对端角色常规产线PLC 调度机器人AdapterEthernetIP FSPLC 做 Scanner机器人直带远程 I/OScannerEthernetIP MS无 PLC 或仅监控机器人之间直接互连一侧 Scanner 一侧 Adapter两者都需对端相反提示同一控制器上 FS 和 MS 可以共存但两者要使用不同的网络接口或不同 IP不能混在同一张网卡上做双角色。2.2 控制器网口、技术包与 WorkVisual 的匹配关系KUKA 控制器一般有多个网口KLIKUKA Line Interface走控制器内部网络KLI2 或 X66/X67 走外部设备网络。EtherNet/IP 通常挂在外部网口上和 PLC、交换机同网段。基础检查清单控制器型号与操作系统版本。KR C4 用 WorkVisual 5.x/6.xKR C5 用更新的 WorkVisual 版本两者的工程文件不能互开。是否已安装 KUKA.EthernetIP 技术包。示教器主菜单 → 投入运行 → 附加软件 里能看到选项名称和版本。WorkVisual 中是否已把该技术包导入工程。没导入的话总线配置树里不会出现 EtherNet/IP 节点。# 在外部网口确认链路状态KUKA 控制器底层是 Linux ip -br addr show # 期望输出类似eth1 UP 192.168.1.20/24 ethtool eth1 | grep -E Speed|Duplex|Link detected # Link detected: yes Speed: 1000Mb/s Duplex: Fullip -br addr里的-br是 brief只输出接口、状态和地址三列看 IP 有没有生效最快。ethtool里Link detected: no说明物理链路没起来这一层不解决后面所有参数都无意义Speed显示 100Mb/s 而交换机是千兆口多半是网线只压了 4 芯换线再谈参数。2.3 IP 规划网段、子网掩码与网关的现场习惯EtherNet/IP 对 IP 有两条硬要求机器人和 PLC 必须在同一子网内且不能和控制器内部网络KLI 侧 172.31.x.x 段冲突。现场常用的规划如下项目建议值说明机器人 IP192.168.1.20末位按工位号固定避免漂移PLC IP192.168.1.10Scanner 侧地址子网掩码255.255.255.0/24网关留空或指向交换机管理地址纯本地通讯不需要网关交换机非管理型千兆需要端口镜像时选管理型网关这一项经常被填错。EtherNet/IP 的隐式报文是二层多播加三层单播的混合同一子网内通讯时网关不参与转发。填一个不存在的网关地址反而可能让控制器尝试走默认路由把本该走本网段的数据包丢出去。注意机器人和 PLC 的 IP 不要用 .1、.255 这类边界地址某些交换机固件对边界地址的处理方式和普通地址不同。3. KUKA机器人EtherNet/IP通讯参数配置方法3.1 示教器端配置 IP 与网络基础参数这是整个流程里最容易被跳过、又最容易出问题的一步。示教器上的网络配置改的是控制器操作系统层面的网卡参数WorkVisual 里改的是总线协议参数作用点不同缺一不可。操作路径示教器主菜单 → 启动 → 网络配置 → 显示/编辑接口。选中外部网口对应的那一行一般是eth1或标注为KLI2/X66的接口。把地址模式从 DHCP 改为静态填入规划好的 IP、子网掩码、网关。保存后重启控制器协议栈在启动时读网卡参数不重启可能读到旧值。接口名eth1 地址模式静态 IP 地址192.168.1.20 子网掩码255.255.255.0 网关0.0.0.0 DNS0.0.0.0改完后别急着配总线先用 ping 确认。有些版本的应用界面不提供 ping就找一台 PC 接到同一交换机上从 PC 侧 ping 机器人 IP。PC 侧能通、机器人侧 ping 不通 PLC说明是控制器出口方向的路由或防火墙问题常见做法是在服务模式里检查 iptables 规则是否把外部网口挡住了。# 从 PC 侧验证机器人网口 ping -c 4 192.168.1.20 # 再验证 PLC ping -c 4 192.168.1.10 # 看 ARP 表里两边是不是都学到了对方 MAC arp -a | grep 192.168.1-c 4明确发 4 个包就退出不然后台一直跑。arp -a能看到 IP 与 MAC 的对应关系如果 ping 通了但 ARP 里没有对应条目说明走的是三层转发而不是同网段直连网段规划有问题。3.2 WorkVisual 中 EtherNet/IP 从站参数的逐项填写装好技术包、导好工程之后WorkVisual 的总线配置树里会出现 EtherNet/IP 节点。展开后是几个必填块通用设备名称、IP 地址IP 必须和示教器里配的一致。连接输入程序集、输出程序集、RPI、连接类型。输入/输出程序集输入长度、输出长度单位是字节。输入输出方向的记忆方法以机器人视角为准输入InputPLC 写到机器人机器人读到的是 Input。输出Output机器人写到 PLC机器人发出的是 Output。这个方向和 PLC 侧是镜像的现场最容易在这里搞反。WorkVisual 里填 64 字节输入、64 字节输出PLC 侧建模块时 Input 和 Output 长度要对调着填否则连接能建立但数据全是 0。!-- WorkVisual 导出的 EtherNetIP 从站配置片段字段名示意 -- EtherNetIPAdapter DeviceNameKRC_Station01/DeviceName IPAddress192.168.1.20/IPAddress InputAssembly Length64/Length !-- PLC 到机器人 字节数 -- /InputAssembly OutputAssembly Length64/Length !-- 机器人到 PLC 字节数 -- /OutputAssembly Connection RPI10/RPI !-- 单位 ms -- TypeExclusiveOwner/Type /Connection /EtherNetIPAdapterLength决定了 PLC 侧能看到的标签数组长度64 字节等于 32 个 INT 或 512 个 BOOL 位。RPI是生产者发包间隔10 意味着 10ms越小实时性越高、网络负载越大5 到 20 是常见区间。Type选ExclusiveOwner表示 PLC 独占控制这台设备如果同时有另一台设备只读监控得改用带ListenOnly的多播组合。3.3 输入输出长度与连接参数的取值方法长度怎么定取决于要交换多少信号。一个实用的估算方式信号类型数量占用位占用字节向上取整状态位就绪、运行、报警16162程序号/配方号1162位置数值mm 整数69612预留扩展——16加起来不到 40 字节按 64 配置留了六成余量够后续加信号不用重新下装。不要按当前需求卡着 8 字节、16 字节配后面加一个报警位就要重做整个工程的 EDS 并重新导入 PLC产线停机时间远比多配几十字节的带宽成本高。连接类型常见三种ExclusiveOwner独占控制PLC 能读能写最常见的产线用法。InputOnly仅输入只接收机器人数据不向机器人写。ListenOnly旁路监听不占用连接用于第二台设备只读监控。连接建立时Scanner 先发ForwardOpen请求Adapter 返回成功后才开始周期通讯。RPI 不匹配、程序集长度不匹配、连接类型不兼容都会让ForwardOpen失败PLC 侧模块状态显示为Faulted而不是Running。3.4 生成 EDS 文件并交付 PLC 侧EDSElectronic Data Sheet是 Adapter 的自描述文件PLC 侧靠它知道有多少输入输出、支持哪些连接类型。KUKA 侧在 WorkVisual 里配好之后从工程导出 EDS 文件交给 PLC 工程师导入 Studio 5000 或其它组态软件。# 导出后的 EDS 文件通常长这样检查关键段 grep -n -E Connection1|Input|Output|RPI KRC_Station01.eds # [Connection1] # Param10,0,4,0,2,1000,0,0 ; 目标设备从站配置 # Param221,2,4,0,2,1000,0,0 ; 输入程序集长度 210x15Param2里的数字段前几项分别代表连接类型、程序集类型、长度和 RPI 上下限。确认输入输出长度和机器人侧填的一致后再交付。EDS 文件一旦导入 PLC 工程并建了模块后续改动机器人侧长度会导致 PLC 侧校验失败、模块直接Faulted所以 EDS 交付前一定要和 PLC 工程师核对长度和 RPI 两项。4. 机器人侧信号映射与数据一致性验证4.1 Studio 5000 侧导入 EDS 与新建模块拿到 EDS 文件后在 Studio 5000 里的操作菜单 Tools → EDS Hardware Installation Tool注册 EDS 文件。在 I/O Configuration 树里右键 Ethernet 节点 → New Module选择刚注册的设备。填写 IP 地址勾选Open Module Properties进入连接参数页。在 Connection 标签页选择连接类型核对 Input/Output 长度填写 RPI。确定后模块状态应从Faulted变为Running。新建模块时有一个勾选项是Use Unicast Connection。机器人网口如果是普通商用以太网口不勾选会走多播交换机需要处理 IGMP非管理型交换机会把多播当广播泛洪勾选后走单播链路更干净。现场经验是单台 PLC 对单台机器人勾选一拖多或需要监听时才考虑多播。4.2 KRL 侧 $IN/$OUT 与过程数据的映射写法机器人侧的数据映射落在 KRL 里。EtherNet/IP 从站的输入程序集映射到 KRL 的 $IN 区输出程序集映射到 $OUT 区。映射关系在 WorkVisual 的 I/O 映射表里定好后KRL 里直接引用 $IN 和 $OUT。现场常用做法是在config.dat里声明命名信号把裸的 $IN[x] 包一层语义后面读程序时不用对着地址表数位。PLC 侧标签方向KUKA KRL 信号位区间Local:1:I.Data[0].0PLC 到机器人GI_BusReady$IN[1]Local:1:I.Data[0].1PLC 到机器人GI_StartReq$IN[2]Local:1:O.Data[0].0机器人到 PLCGO_CycleDone$OUT[1]; config.dat —— 外部信号声明 SIGNAL GI_BusReady $IN[1] ; PLC 总线就绪 SIGNAL GI_StartReq $IN[2] ; 启动请求 SIGNAL GI_ResetReq $IN[3] ; 复位请求 SIGNAL GI_ProgNo $IN[4] TO $IN[11] ; 程序号 8 位 SIGNAL GI_PosCmd_A $IN[12] TO $IN[27] ; A 轴目标位置 16 位 SIGNAL GO_CycleDone $OUT[1] ; 节拍完成 SIGNAL GO_BusAlarm $OUT[2] ; 总线报警 SIGNAL GO_CurProgNo $OUT[3] TO $OUT[10] ; 当前程序号回传 SIGNAL GO_CurPos_A $OUT[11] TO $OUT[26]; A 轴当前位置SIGNAL语句把一个名字绑定到一个连续位区间上TO表示区间起止。声明之后程序里可以直接写IF GI_StartReq THEN比$IN[2]可读得多。区间长度必须和 WorkVisual 里输入输出长度对齐8 位输入只映射了 4 位剩下 4 位读出来恒为 0这是数据不一致最常见的来源。配合使用的一段主程序DEF main_bus_io() ; 等待 PLC 总线就绪信号未就绪则报警返回 IF NOT GI_BusReady THEN GO_BusAlarm TRUE RETURN ENDIF ; 使用 PLC 下发的程序号做分支 SWITCH GI_ProgNo CASE 1 PTP P_Pick CASE 2 PTP P_Place DEFAULT ; 未定义程序号挂起等人处理 WAIT FOR FALSE ENDSWITCH GO_CurProgNo GI_ProgNo GO_CycleDone TRUE ENDSWITCH分支里DEFAULT用WAIT FOR FALSE挂住避免收到未定义程序号时机器人继续动作。GO_CycleDone TRUE是节拍握手信号PLC 侧收到后才会确认这一次交互完成。4.3 分层验证从 ping 到 CIP 连接状态验证不要一步跳到业务逻辑按物理层、网络层、协议层、数据层四步走出问题时能直接定位在哪一层。# 第 1 层物理层 ethtool eth1 | grep Link detected # 期望 yes # 第 2 层网络层 ping -c 3 192.168.1.10 # 期望 0% packet loss # 第 3 层协议层用 CIP 显式报文读设备标识 # 通过 PLC 侧模块状态或诊断工具读 Identity Object # 期望 State: RunningAssembly 长度与配置一致 # 第 4 层数据层 # 在 PLC 侧强制一个输入位看机器人侧对应 $IN 是否翻转第 3 层的Identity Object是 CIP 的 0x01 类包含厂商 ID、设备类型、序列号。PLC 侧如果读到Vendor ID不符合预期说明连到的是别的设备或者 EDS 不匹配。第 4 层验证最直观PLC 侧把输出位强制为 1机器人侧$IN对应位应该立刻翻转强制改为 0再翻转回来。来回两轮没问题数据链路才算真正通了。5. 通讯故障定位与 RPI 调优5.1 连接建立失败的扩展错误码对照ForwardOpen失败和连接建起来后周期性掉线是两个问题排查方向完全不同。前者看 PLC 侧模块状态里的扩展错误码错误码含义常见原因0x0107连接目标不响应IP 错、网线断、机器人侧协议栈没启动0x0113连接长度不匹配输入输出字节数与 EDS 不一致0x0114连接类型不支持PLC 选了机器人不支持的类型0x0201资源不足机器人侧连接数已达上限周期性断连则优先怀疑 RPI 和网络负载。RPI 设 5ms、长度 256 字节时单台机器人每秒产生约 10.2 万包多台叠加后非管理型交换机的缓冲区扛不住表现为几十秒掉一次、自动恢复。把 RPI 放宽到 10ms 或 20ms通常一次就好。另一个坑是拖链电缆机器人本体到控制柜那段如果换成普通屏蔽网线、弯折半径过小长时间动作后芯线阻抗变化也会引起偶发断连。5.2 RPI 与数据长度的负载估算RPI 和长度要一起考虑单看一个容易调偏。估算方式是长度字节 × 8 ÷ RPI再乘以连接数。# 单台机器人、单方向 256 字节、RPI10ms 的带宽 echo 256 * 8 / 0.01 | bc # 204800单位 bit/s约 0.20 Mbps # 20 台同配置机器人总占用约 4.1 Mbps千兆网占用率不到 1%千兆全双工理论 1000Mbps但同一广播域内还在跑其它流量建议总占用不超过 20%。需要收紧 RPI 的是把位置指令周期送到机器人的场景外部轴联动、在线纠偏这类应用RPI 大于 20ms 会让运动看起来一顿一顿工艺节拍要求不高的场合放宽 RPI 是降低故障率最省事的办法比换交换机、换线缆容易得多。抓包定位用端口镜像tcpdump -i eth0 -w enip.pcap tcp port 44818 or udp port 2222 -c 5000抓 5000 个包就停再用tshark -r enip.pcap -Y enip.command 0x0054只看ForwardOpen请求和响应。连续多次请求没有响应问题在链路或对端协议栈响应带着状态码直接对 5.1 的表格定位。收尾动作一定是把现场临时改过的 RPI、长度同步回 WorkVisual 工程和 PLC 工程并导出一次 EDS 存档产线上换一次控制器或者重装一次工程这些临时值如果没落进工程文件下一次故障又要从头查。本文还有配套的精品资源点击获取
返回列表