ARTICLE DETAIL

资讯详情

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

西门子S7-1200与UR机器人通过Profinet通讯配置与调试指南

西门子S7-1200与UR机器人通过Profinet通讯配置与调试指南 最近在产线改造里做了一台上下料机器人的接入PLC 用的是西门子 S7-1200机器人是优傲 UR10e两者之间需要实时交换信号工件到位、夹具夹紧、机器人空闲、请求上料这些状态位还要把启动、停止、复位等控制命令发过去。本来这种应用用 IO 硬接线也能做但现场要传的信号有十几个中间还要经过滑环布线成本和故障点都不少所以最后选了 Profinet 通讯。这篇内容主要写给做电气设计、PLC 调试、机器人集成的同行尤其是第一次把博途TIA Portal和 UR 机器人打通的人。我会按照“为什么选 Profinet → 硬件与版本准备 → 博途侧配置 → UR 侧配置 → 联调与排故”的顺序来复盘整个过程尽量把我在现场踩过的坑和排查思路都说清楚。1. 为什么在 PLC 与 UR 机器人之间选择 Profinet1.1 Profinet 的本质角色Profinet 是 PROFIBUS 的以太网演进版底层走标准以太网但通过实时通道保证了工业控制需要的确定性和低延迟。在一个 Profinet 系统里PLC 通常作为 IO 控制器IO ControllerUR 机器人作为 IO 设备IO Device。它们的交互模型跟传统的 Profibus DP 很类似控制器循环发送输出数据给设备设备循环把输入数据返回给控制器。UR 机器人选配 Profinet 支持后在通讯上扮演的就是从站角色它不主动发起数据交换而是在每个通讯周期把机器人侧的信号状态上传同时接收 PLC 下发的控制字。很多人第一次接触 UR 机器人的 Profinet 时还以为它和上位机走 Ethernet/IP 或 Modbus TCP 一样需要自己写 Socket 报文来解析数据。实际不是这样。Profinet IO 的交互是组态好的PLC 侧分配好 I/O 地址后你直接读 I/Q 地址就能拿到机器人状态完全不需要像串口那样拼报文。1.2 和 Modbus TCP、数字 IO 的对比我在做选型时把几种常用方案放在一起对比过通讯方式实时性接线复杂度支持性适用场景数字量 IO 硬接线最快高信号多时线缆多任何设备都支持安全信号、点位很少、距离近Modbus TCP一般低一根网线PLC 和机器人基本都支持数据量较大实时性要求不高Profinet IO高循环周期可到毫秒级低一根网线西门子 PLC 原生协议UR 需选配需要总线集成、数据点位多、响应要求高我这次选 Profinet 还有一个很直接的理由这台 S7-1200 本身就以 Profinet 为第一语言博途里组态原生设备很顺手不需要额外买通讯模块。相比之下Modbus TCP 在 S7-1200 上不是不能用但要调用 MB_CLIENT/MB_SERVER 功能块程序结构要复杂一些而且数据刷新时间取决于你调用块的周期不如 Profinet IO 那种循环 IO 方式来得“原汁原味”。1.3 安全信号不能走总线有一点必须单独强调不管 Profinet 传多少信号机器人的急停、门锁、安全围栏这类安全相关信号规规矩矩走硬接线不要放到总线通讯里。UR 机器人本身有专门的安全 IO 接口把急停回路串进外部门锁回路这是标准做法。总线里的机器人状态字、程序运行状态这些只用于逻辑互锁不承担安全功能。2. 硬件准备与版本匹配2.1 硬件清单这次项目用的硬件如下你可以作为参考西门子 S7-1200 CPU 1214C DC/DC/DC固件版本 V4.5优傲 UR10e 机器人控制器软件版本 5.10 以上普通工业以太网交换机千兆带 VLAN 功能但不启用超五类屏蔽网线若干如果现场没有用的交换机PLC 和 UR 控制器用一根网线直连也可以。Profinet 通讯在直连模式下没问题RT实时通讯完全支持。但建议用质量和屏蔽性能好的网线毕竟工业现场干扰源多网线太差会出现偶发掉线。2.2 博途与 GSDML 文件UR 机器人在 Profinet 里属于第三方设备博途默认的设备库中不会带它的 GSDML 文件所以第一步是去优傲官网下载对应机器人型号和控制器软件版本的 GSDML 文件包。我下载到的文件包里有几个 XML 文件分别对应不同的模块组合比如输入输出各 32 字节、各 64 字节等还有带 IO 扩展模块的类型。还有一个容易搞混的事UR 的 Profinet 功能需要软件授权。e 系列机器人在出厂时一般已经包含了这一项CB3 老款控制器则需要在“关于”界面里查看选项如果没看到 Profinet要联系代理商购买并导入许可。项目在选型阶段最好确认好免得硬件都接好了UR 界面里却根本没有 Profinet 这个选项可配置。2.3 版本一致性决定一半的故障率我做过的第三方 Profinet 设备接入里很大一部分问题不是硬件坏了而是 GSDML 版本和设备固件版本不匹配。UR 机器人的 Profinet GSDML 文件必须跟控制器软件版本对应。比如 UR Software 5.10 版本对应的 GSDML 可能是 2.3 或 2.4如果你手头是以前下载的老版本在博途里组态可能没问题但设备上电后会出现“设备不兼容”或“组态错误”的报警。建议做法先把 UR 控制器的软件版本查清楚再到官网按这个版本去下载 GSDML。博途版本一般 V15.1 及以上都没问题V16、V17、V18 都可以导入。博途 V20 我也试过导入 UR 的老文件也能识别只是个别设备描述符会提示版本旧但实测不影响使用。3. 博途侧配置从 GSDML 导入到 IO 设备组态3.1 导入 GSDML 文件的具体步骤在博途里菜单找到“选项”→“管理全局数据源文件”不同博途版本翻译略有差异V16 以后叫“管理 GSD 文件”弹出对话框里选择本地路径也就是存放 GSDML 文件的文件夹。安装完成后右侧硬件目录的“其他现场设备”里就能看到 UR 机器人对应的条目。这里有个细节导入后博途不会马上刷新最稳妥的做法是关闭并重新打开博途项目。我刚开始不知道一直找不到设备关掉重新打开才出现浪费了半小时。还有一点博途安装 GSD 文件时如果提示“未找到受支持的语言”或者“版本无效”多半是文件路径中存在中文或空格把 GSDML 文件夹放到纯英文路径再重试。3.2 网络视图组态新建项目后在“设备与网络”界面把 PLC 拖到网络视图。然后再打开硬件目录里的“其他现场设备”找到优傲的 UR 条目把它拖到网络视图里。此时博途会自动或手动建立 Profinet 系统PLC 作为 IO 控制器UR 作为 IO 设备。组态完成后双击 UR 设备在“属性”→“PROFINET 接口”→“以太网地址”里设置 IP 地址。建议 IP 规划固定下来比如 PLC 是 192.168.0.1UR 是 192.168.0.10。同时要设置“PROFINET 设备名称”这个名字非常关键UR 侧必须设置成完全一样不能有大小写和字符差异。我习惯用 ur_laser_robot 这种短名字不用中文也不用空格。3.3 选择 IO 模块与地址分配UR 的 GSDML 文件导入后在设备视图里会看到几个可插入的子模块。常见的有UR IO 32/32输入 32 字节输出 32 字节UR IO 64/64输入 64 字节输出 64 字节只读/只写类型我从项目实际需求出发选了 32/32。这里大家不要一味追求大数据量因为每增加一个字节通讯报文就长一点虽然 Profinet 对 32 字节几乎无压力但 UR 端做点位映射时也会更繁琐。把地址表规划好32 字节通常够用了。插入模块后博途会自动分配 IO 地址。但我建议手动调整一下让输入地址和输出地址有明确的区间方便后续维护。比如分配PLC 输出Q 区给 URQW100 到 QW115共 16 字PLC 输入I 区来自 URIW120 到 IW135共 16 字这种分配方式在博途里直接改起始地址即可。3.4 通讯周期与实时性设置S7-1200 和 UR 之间走 Profinet RT默认更新周期可以选 8ms、16ms、32ms 等。对于机器人握手、工位互锁这类应用16ms 绰绰有余。我不建议追求最极端的 1ms 或 2ms因为那会显著增加 CPU 通讯负载而现场受益并不明显。如果 CPU 是 S7-1500博途允许设置 IRT 同步域但 UR 端对 IRT 的支持有限实际上用 RT 就好。硬要在 PROFINET 设置里开 IRT反而可能导致同步域配置失败得不偿失。4. UR 机器人侧配置Profinet 从站与信号映射4.1 控制器网络设置UR 控制器的液晶屏或示教器里进入“设置”→“网络”把网口 IP 改成和 PLC 同一网段。注意 UR 控制器有多个网口比如有“标准网络”和“其他网络”接口Profinet 要用的那个网口必须设成静态 IP不要开 DHCP。设置完需要重启控制器这个注册 I/O 才会生效。4.2 启用 Profinet 并设置设备名在安装了 Profinet 许可后UR 的设置界面会出现“Profinet”条目。进入后启用 Profinet然后把“设备名称”改成跟博途里一致的名字例如 ur_laser_robot。同时设置 IP 地址、子网掩码保证和 PLC 互通。UR 的 Profinet 配置里通常还可以选择传送的模块类型例如“32 bytes input / 32 bytes output”这必须和博途侧组态一致。如果两侧模块长度不一致通讯不会建立PLC 的 IO 设备会一直报“不可用”。4.3 创建信号映射关系UR 的 Profinet 数据从一个角度说本质是一块连续的内存区你想让某个机器人信号出现在 PLC 输入区就必须在 UR 中建立映射。我的做法是规划一张信号表比如方向字节/位信号含义UR→PLCByte 0.0机器人急停状态UR→PLCByte 0.1程序运行中UR→PLCByte 0.2请求上料PLC→URByte 0.0允许启动PLC→URByte 0.1复位报警PLC→URByte 8目标位置编号UR 端的 I/O 配置里有些是图形化界面有些需要把 Profinet 区域映射到标准数字 IO 或 UR 的内部变量。具体操作路径会因为软件版本不同略有差异但核心思想不变你要定义的是“Profinet 输入字节区域的第几位”对应到机器人的哪个动作或状态。我在 e 系列上习惯使用脚本方式在程序里读取“Profinet IO”数据然后用 UR 的位操作指令解析。如果你更习惯用 PolyScope 图形化编程UR 也提供对应的 I/O 节点可以把通讯数据看成一组寄存器读取对应位就行。4.4 在机器人程序里如何使用通讯信号实际机器人程序里比如等待 PLC 给出“允许启动”信号就可以在 UR 程序里添加一个条件循环检查映射过来的启动位是否变为 True。如果为 False 就一直等待或者进入暂停状态并在示教器上显示“等待 PLC 启动”。反过来当机器人完成一次取料并放置到位后就把“请求上料”位置成 TruePLC 读到后开始发送下一个工件。这种互锁关系写起来不难但需要注意一个常见问题UR 程序里若使用“set_standard_digital_out”去控制 Profinet 映射的“输出”有时会发现字节位置不对。原因是“标准数字 IO”和“Profinet IO”是两个不同的数据源必须在映射里弄清楚谁对应谁。我建议直接在 UR 的 Profinet 变量上操作不要绕道标准数字 IO除非你的软件版本明确支持自动映射。5. 联调、故障排查与避坑心得5.1 上电前的自检顺序上电之前先把最容易出错的三件事核对一遍PLC 和 UR 是否在同一网段能互相 ping 通。UR 控制器允许 pingS7-1200 需要用编程软件在线诊断去测或者用电脑临时接同一个交换机分别 ping 两个 IP。博途里 UR 设备的“PROFINET 设备名称”和 UR 界面里的“设备名称”是否完全一致大小写、下划线都必须一致。博途组态的模块类型和 UR 侧选择的模块类型是否一致。如果这三点都正确上电后通讯大概率能在几秒内建立。我遇到过一种情况设备名称完全正确但 UR 侧有两处都要填名字一处填了另一处留空结果 PLC 一直报设备名称错误。UR 软件某些版本在“Profinet”设置页里除了主设备名外还有一个“Station Name”字段两个都要填。5.2 Profinet 通讯建立的关键指标通讯正常建立后在博途的项目树里打开“在线和诊断”进入 UR 设备的诊断页面可以看到“PROFINET IO 状态已连接”并且通讯错误计数不增加。如果通讯没建立最常见的诊断信息是设备名称错误PLC 要求设备响应这个名字但设备没有应答。IP 地址无效设备不在同一网段或者设备 IP 为 0.0.0.0。模块不一致两侧组态的模块数量和长度不一致。设备不可用线缆断了或者设备根本没上电。UR 示教器上也会有 Profinet 状态显示比如 LED 状态或文字提示。我一般先在 UR 侧看“Profinet 已启用”和“主站连接状态”如果 UR 侧显示未连接再去查 PLC 侧。5.3 字节序与位号对齐的坑这是最容易坑人的地方。Profinet 传输数据时按字节排列但同一个“字”里高低字节的顺序需要两边一致。西门子 PLC 默认高字节在前Big EndianUR 侧某些映射功能可能按低字节在前这时你会发现信号值对不上号。比如 PLC 发送一个字 16#0102UR 侧接收后可能显示为 16#0201。解决方法是在博途或 UR 侧固定一个字节序方向然后把数据“倒过来”读取或者干脆避免使用多字节数值信号尽量用位信号和单字节信号。我这次就是所有握手信号都用布尔位数值信号只用单字节表示完美避开字节序问题。另一个位号对齐问题是PLC 读写布尔位时要清楚它在字节中的索引。博途里 I0.0、I0.1、I0.7 对应一个字节的 8 个位而 UR 侧如果按“bit0~bit7”表示顺序是一致的。但如果在 UR 中用整数值移位解析位切记 bit 顺序不要搞反。5.4 通讯偶发掉线怎么查现场最烦的不是通讯完全不通而是运行一段时间后偶发掉线、自动恢复。我遇到过一次检查了所有 IP、名称、模块都是对的最后发现是现场有一根网线从线槽里走过被重物压过网线内部的绞距已经破坏导致链路不稳定。排查这种问题我的建议顺序是先看 PLC 诊断缓冲区记录掉线时间点。到现场看看掉线时间点附近有没有大功率变频器或伺服启停。若有多半是电磁干扰换屏蔽网线并把屏蔽层可靠接地。用一根已知完好的短网线把 PLC 和 UR 直接连起来测试如果长时间不掉线问题就在现场布线——这是最笨但也最有效的隔离法。UR 控制器和 PLC 都建议接到同一个工业交换机上交换机用支持 PROFINET 的型号更好。普通商用交换机虽然很多情况下也能用但遇到广播风暴或大流量时实时性会受影响。5.5 多机器人或后续扩展如果以后要接多台 UR甚至混接其他品牌的 Profinet 设备建议在规划 IP 和 IO 地址时就留出余量。比如这一期只接一台 UR我用 192.168.0.10下一台就用 192.168.0.11。IO 地址规划方面输入区从 IW120 开始下一台机器人预留 IW140 以后区间。每台设备命名按照工位或用途来比如 ur_load、ur_unload千万不要用 ur1、ur2 这种毫无辨识度的名字。UR 的 GSDML 里如果支持多个模块实例可以直接拖多个 UR 设备到网络视图各自分配设备名操作逻辑和单台一样。但要注意每台 UR 的 Profinet 数据长度尽量统一否则程序里处理报警和状态字时要写多套逻辑非常累。我现在的习惯是统一 32/32虽然浪费一点地址但程序通用性极好。5.6 状态字与心跳信号的推荐做法联调通过后我强烈建议在通讯数据里增加一个“心跳位”或“心跳字节”。做法很简单UR 侧每 100ms 或 250ms 翻转一次这个位PLC 侧监视这个位的变化如果在规定时间内没有翻转就判断机器人通讯中断程序进入安全暂停状态。如果没有心跳有时候 Profinet 连接已经断了PLC 却因为“IO 设备故障”而把所有输入清零程序里如果没有判断可能误以为机器人没信号而触发误动作。加了心跳后能明显区分“通讯断开”和“真实信号为 0”。UR 端的翻转逻辑可以用一个小线程或固定频率的程序节点在 UR 脚本中写一个循环即可。PLC 端则用一个定时中断 OB 或普通 OB1 里的定时器逻辑去检查。前期调试时把翻转周期设为 500ms方便肉眼观察稳定后再改成 100ms。6. 整个调试过程里我最想提醒的三件事第一UR 的 Profinet 许可必须在项目开始前确认。不要等到现场发现没有这个选项再订货那样很可能停工几天。CB3 和 e 系列的许可获取方式不一样采购下单时把型号和软件版本写清楚。第二所有配置都以“设备名称”为锚点。博途和 UR 两侧的名称不一致是故障率最高的原因。在调试时先在 UR 端配置好再到博途组态全部完成后做一次名称复核。我在项目收尾时会在示教器上给现场人员留一张配置表避免后续别人误改。第三通讯数据和硬 IO 要分开看待。Profinet 只是把信号变成“看得见摸不着”的字节它不是万能的。重要联锁信号可以走总线但最终执行机构的安全回路永远用硬线。这是我做了多年自动化项目后最深的体会也是我这次完成 UR 与 PLC 通讯后最想对同行说的经验和教训。
返回列表