ARTICLE DETAIL

资讯详情

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

KUKA机器人组输入输出配置与PLC对接实战指南

KUKA机器人组输入输出配置与PLC对接实战指南 1. 组输入与组输出到底在解决什么问题1.1 从一个现场场景说起前阵子帮一个做汽车零部件焊接产线的朋友处理KUKA机器人和西门子PLC的对接问题。现场情况是这样的机器人需要从PLC那边一次性拿到6个信号——启动、停止、复位、模式选择、程序号高字节、程序号低字节然后机器人也要一次性回给PLC 4个信号——运行中、报警、到位、循环结束。如果按单个位来配光是机器人这边的输入输出映射就要做10个PLC那边还要对应写10个地址改一个信号就得两边翻来覆去地查。后来我让他改用组输入和组输出机器人这边只配2个组输入一个6位、一个4位和2个组输出PLC那边也只需要2个字节的地址整个对接时间从原来的大半天压缩到了不到半小时。这就是组信号配置的核心价值——把多个布尔量打包成一个整型或字节来传输减少映射点降低出错概率。1.2 组输入和组输出的本质KUKA机器人的组输入Group Input和组输出Group Output本质上就是把多个物理或总线信号位组合成一个整数值。你可以把它理解成一个多位的拨码开关每一位代表一个状态合在一起就是一个十进制数。比如6个输入位可以表示0到63之间的任意整数每一位对应一个具体的信号含义。和单点输入输出相比组信号的优势非常明显减少映射数量10个单点信号需要10次映射2个组信号只需要2次传输效率高在Profinet、EtherCAT这类总线通讯中组信号占用的通讯资源更少程序可读性好在机器人程序里可以直接用整数比较来判断状态不用写一长串AND/OR逻辑PLC侧编程简单PLC那边只需要处理一个字节或一个字梯形图逻辑更清爽但组信号也有它的代价调试的时候没法直观看到每一位的状态必须借助示教器上的监控画面或者PLC的变量表来逐位分析。所以我在实际项目里通常会做一个折中——关键的安全信号比如急停、安全门还是走单点状态类和命令类的信号走组信号。1.3 什么场景适合用组信号不是所有场合都适合用组输入输出。根据我这些年的经验以下几种情况用组信号收益最大程序号选择用4到8位组输入来表示程序编号机器人根据整数值调用对应子程序多工位状态汇总一条产线有多个工位每个工位的就绪、运行、完成状态打包成一个组信号传给机器人配方参数传递需要从PLC下发一组参数如速度档位、焊接电流档位给机器人模式切换手动/自动/维护等多种模式的组合选择反过来如果是急停、安全门、使能这类安全相关信号我强烈建议走单点硬线或安全总线不要图省事塞进组信号里。安全信号一旦因为组信号某一位翻转而误判后果不是闹着玩的。2. KUKA侧组信号的配置全流程2.1 准备工作确认软件版本和通讯方式在动手配置之前有几件事必须先确认清楚否则后面会反复返工。第一确认KUKA机器人的KSS版本。KSS 8.3、8.5、8.6在WorkVisual里的操作界面略有差异尤其是组信号的映射入口位置。我一般会在示教器上依次点“主菜单→诊断→版本信息”来确认。第二确认通讯方式。KUKA机器人跟PLC对接常见的有三种方式Profinet、EtherCAT和Devicenet。目前新项目基本都是Profinet为主因为西门子PLC生态里Profinet最顺手。如果是老设备改造遇到Devicenet配置逻辑类似但映射地址的计算方式不同需要额外注意。第三确认WorkVisual的版本要和KSS版本匹配。我踩过一次坑用WorkVisual 5.0去连KSS 8.3的机器人结果组信号的配置界面能打开但保存后不生效折腾了半天才发现是版本不兼容。后来换成WorkVisual 4.0就正常了。提示WorkVisual的版本兼容性表在KUKA官网的技术文档里有建议配置前先查一下别凭感觉选版本。2.2 在WorkVisual中创建组输入输出打开WorkVisual并连接到机器人控制器后整个配置流程分以下几个步骤。第一步导入PLC的GSDML文件。在WorkVisual的项目树里找到“总线”节点右键选择“导入设备描述文件”把西门子PLC的GSDML文件导进去。这一步是为了让WorkVisual知道对面PLC的设备类型和通讯参数。第二步添加通讯模块。在总线配置界面里把PLC添加为通讯伙伴然后根据实际需要添加输入输出模块。这里的关键是模块的字节长度要和PLC侧组态的一致。比如你计划用2个字节的组输入那在WorkVisual里就要添加一个2字节的输入模块。第三步配置组信号映射。这是核心步骤。在WorkVisual的“输入/输出映射”界面里找到“组输入”和“组输出”的选项卡。以组输入为例你需要设置以下参数参数项说明示例值组编号组信号的序号1起始地址在通讯模块中的字节偏移0位长度组信号占用的位数6数据类型整数或字节INT信号名称自定义名称GI_ProgramNo配置完成后WorkVisual会自动生成对应的映射关系。这里有个细节要注意起始地址是按位还是按字节计算取决于你的通讯模块配置。Profinet一般是按字节Devicenet可能按位搞错了地址就会整体偏移。第四步下载配置到机器人。配置完成后通过WorkVisual把项目下载到机器人控制器。下载过程中机器人会重启重启后组信号就生效了。2.3 示教器上的验证方法配置下载完成后不要急着写程序先在示教器上验证组信号是否正常。在示教器上依次进入“主菜单→显示→输入/输出→组输入”可以看到刚才配置的组信号列表。选中某个组信号示教器会显示当前的整数值。这时候让PLC那边手动置位几个位观察示教器上的数值是否跟着变化。我一般会做一个简单的测试让PLC依次输出1、2、4、8、16、32检查示教器上显示的数值是否对应。如果数值不对大概率是位的排列顺序反了——KUKA默认是低位在前还是高位在前跟PLC的字节序设置有关这个后面在常见问题里会详细说。2.4 在KRL程序中使用组信号组信号在KRL程序里的使用非常直接。假设你配置了一个6位的组输入名称叫GI_ProgramNo那么在程序里可以这样写DEF MainProgram() DECL INT nProgramNo nProgramNo GI_ProgramNo SWITCH nProgramNo CASE 1 PickAndPlace() CASE 2 Welding() CASE 3 Palletizing() DEFAULT ; 无效程序号处理 HALT ENDSWITCH END这段代码的逻辑很清晰读取组输入的整数值根据数值调用不同的子程序。相比用6个单点输入写一堆IF判断这种写法简洁得多而且后期增加程序号只需要改SWITCH里的CASE分支不用动输入映射。组输出的使用同样简单DEF SetStatus() DECL INT nStatus nStatus 0 IF bRunning THEN nStatus nStatus 1 ; bit0 运行中 ENDIF IF bAlarm THEN nStatus nStatus 2 ; bit1 报警 ENDIF IF bInPosition THEN nStatus nStatus 4 ; bit2 到位 ENDIF GO_Status nStatus END这里用加法来置位比用位操作符更直观也不容易出错。当然如果你对位操作很熟用nStatus nStatus OR 2这种写法也可以效果一样。3. PLC侧的对接配置与梯形图编写3.1 西门子PLC的硬件组态以西门子S7-1200/1500配合TIA Portal为例PLC侧的配置分硬件组态和程序编写两部分。硬件组态里需要在设备视图中添加KUKA机器人作为Profinet IO设备。添加完成后根据机器人侧配置的模块长度在PLC的输入输出地址区分配对应的地址。比如机器人侧配了2字节组输入和2字节组输出那PLC这边就分配2字节的输入地址如IB100~IB101和2字节的输出地址如QB100~QB101。这里有个容易搞混的地方从PLC的角度看机器人的组输入是PLC的输出机器人的组输出是PLC的输入。因为数据流向是反的。我见过不少新手在这里绕晕配置完了发现信号对不上其实就是方向搞反了。3.2 梯形图里的组信号处理PLC侧的梯形图逻辑核心就是把组信号拆成单个位来用或者把单个位组合成组信号发出去。接收机器人组输出PLC输入假设机器人发来的组输出占用IB100那么运行中 I100.0报警 I100.1到位 I100.2循环结束 I100.3在梯形图里直接用这些位地址就可以了不需要额外的转换指令。这也是组信号的一个好处——在PLC侧可以按位访问也可以按字节访问灵活度很高。发送组输入给机器人PLC输出假设PLC要发给机器人的组输入占用QB100需要置位启动和程序号// 梯形图逻辑示意 // 启动信号 Q100.0 // 程序号 bit0 Q100.1 // 程序号 bit1 Q100.2 // 程序号 bit2 Q100.3 Network 1: 启动按钮按下时置位 I0.0 Q100.0 ----| |------------( )---- Network 2: 程序号选择用MOVE指令更简洁 MOVE EN ENO MW10 -- QB100用MOVE指令直接把一个整数字节写到QB100比逐位置位要高效得多。MW10里的数值由HMI或上层逻辑决定这样程序号切换只需要改MW10的值就行。3.3 字节序和位序的坑这是组信号配置里最容易出问题的地方我单独拿出来说。KUKA机器人默认的位序是低位在前LSB First而西门子PLC的字节内位序也是低位在前所以大部分情况下两边是一致的。但是跨字节的时候就可能出问题。比如一个10位的组信号占了2个字节KUKA那边第8位对应的是第二个字节的第0位而PLC那边如果按字Word来访问高低字节的顺序可能跟KUKA相反。我的经验是组信号的长度尽量不要跨字节。如果确实需要超过8位的组信号要么拆成两个组信号要么在PLC侧做一次字节交换。具体做法是在PLC里用SWAP指令把高低字节换一下或者在KUKA侧配置时调整起始地址的偏移。注意调试阶段一定要用示教器和PLC变量表同时监控逐位比对确认位序无误后再写正式程序。这个验证工作花10分钟能省掉后面几小时的排查时间。3.4 一个完整的对接案例回到开头那个焊接产线的例子完整的对接配置是这样的KUKA侧组输入1GI_Command6位起始地址0包含启动、停止、复位、模式bit0、模式bit1、使能组输入2GI_ProgramNo4位起始地址1程序号0~15组输出1GO_Status4位起始地址0包含运行中、报警、到位、循环结束PLC侧QB100发给机器人bit0启动bit1停止bit2复位bit3~4模式bit5使能QB101发给机器人程序号低4位IB100从机器人接收bit0运行中bit1报警bit2到位bit3循环结束整个对接只用了3个字节的通讯量比原来10个单点信号的方案节省了一半以上的映射点。而且后期如果要增加一个“暂停”信号只需要在组输入里多占一位PLC侧改一个位地址就行不用重新配置通讯模块。4. 调试阶段的高频问题与排查技巧4.1 组信号值不对怎么办这是调试时遇到最多的问题。表现是PLC那边明明发了1示教器上显示的是128或者别的数。原因通常是位序反了。排查步骤在PLC侧强制输出一个已知值比如1只有bit0为1在示教器上查看组信号的整数值如果显示的是128bit7为1说明位序完全反了需要在KUKA侧调整起始地址或PLC侧做位反转如果显示的是2bit1为1说明整体偏移了一位检查起始地址设置我一般会做一个对照表来快速定位PLC输出值示教器显示值可能原因1128位序反转12地址偏移1位1256跨字节高低字节交换10通讯未建立或地址错误4.2 通讯断连后的组信号状态Profinet通讯中断时组信号的值会变成什么这个问题很多人没想过但实际生产中很关键。KUKA机器人默认在通讯中断时会把组输入保持为最后一次的有效值而不是清零。这意味着如果PLC那边因为故障断线了机器人可能还在用旧的组输入值继续运行这是很危险的。我的做法是在机器人程序里加一个通讯心跳检测PLC周期性翻转一个特定位机器人检测这个位如果在规定时间内没有翻转就触发报警并停止。这个心跳位可以放在组输入的最高位不占用正常的信号位。4.3 WorkVisual下载失败的处理WorkVisual下载配置时偶尔会报错常见的原因有机器人控制器处于急停状态或安全门打开状态不允许下载WorkVisual版本与KSS版本不匹配项目文件损坏需要重新创建项目网络连接不稳定建议用网线直连而不是走交换机我遇到过一次下载到99%卡住的情况等了十分钟后强制关闭WorkVisual结果机器人控制器起不来了。后来是通过示教器上的“冷启动”恢复的。所以下载过程中千万不要强制断电或拔网线耐心等它走完。4.4 组信号与单点信号的混用注意事项实际项目里经常是组信号和单点信号混用的。比如安全信号走单点状态信号走组信号。这时候要注意地址分配不要重叠。我一般会在地址规划表里明确标注每个信号的类型、地址范围和占用长度。比如信号名称类型地址长度说明急停单点输入0.01位安全信号安全门单点输入0.11位安全信号命令组组输入1.06位命令信号程序号组输入2.04位程序选择状态组组输出0.04位状态反馈这样规划的好处是地址清晰后期维护的时候一眼就能看出哪个信号在哪里。5. 进阶技巧让组信号配置更高效5.1 用Excel做地址规划表项目稍微大一点信号数量超过20个靠脑子记地址就不现实了。我的习惯是开工前先用Excel做一张地址规划表包含信号名称、类型、地址、位长度、对应PLC地址、备注这几列。配置的时候对着表来配置完了再对着表逐项验证。这张表还有个好处后期如果PLC程序要改直接把表发给PLC工程师两边对着同一张表改不会出现“我改了机器人你没改PLC”这种扯皮的事。5.2 组信号的默认值和初始化KUKA机器人在冷启动后组输出的默认值通常是0。但有些项目需要机器人一上电就告诉PLC“我准备好了”这时候就需要在初始化程序里给组输出赋初值。我一般会在CELL.SRC或者自定义的初始化程序里加一段DEF Init() GO_Status 0 GO_Status GO_Status 8 ; bit3 机器人就绪 WAIT FOR GI_Command 0 ; 等待PLC发来命令 END这段代码在机器人上电后自动执行先把就绪位置1然后等待PLC的命令。PLC那边看到就绪位后就可以开始发命令了。5.3 组信号在SimPro中的仿真验证如果项目用了KUKA.SimPro做离线仿真组信号也可以在仿真环境里验证。在SimPro里可以创建一个虚拟的PLC信号面板手动设置组输入的值观察机器人的反应。不过要注意SimPro里的组信号配置和真实控制器的配置是分开的仿真通过不代表真机就没问题。我一般是在SimPro里验证程序逻辑真机上再验证通讯配置两者结合才能确保万无一失。5.4 组信号数量的上限KUKA机器人对组信号的数量有没有限制从技术上讲组信号的数量取决于通讯模块的字节长度和KSS的授权。一般来说Profinet通讯下组信号的总位数不要超过64位8个字节超过的话建议拆分成多个通讯模块或者改用其他通讯方式。实际项目中我见过的组信号数量最多的是32位输入32位输出再多了就不如直接用数组或结构体来传输了。KUKA的EthernetKRL功能支持更复杂的数据结构传输适合信号量特别大的场景。5.5 文档化给后来者留条路最后说一个容易被忽视但很重要的点配置完成后一定要写文档。包括组信号的地址分配、每一位的含义、对应的PLC地址、调试过程中的注意事项。我接手过太多没有文档的项目一个组信号配置查了半天才搞明白每一位是什么意思。文档不用很复杂一张Excel表加几段说明就够了。关键是让下一个维护的人能看懂。这也是我这些年做项目一直坚持的习惯——代码可以写得不够优雅但文档一定要写清楚。6. 个人实操体会组输入输出这个功能说起来简单但真正用好需要对这些细节有感觉。我刚开始接触KUKA的时候也觉得组信号不就是把几个位拼在一起嘛有什么难的。结果第一次独立做项目就栽了跟头——位序搞反了机器人收到的程序号永远是错的排查了一整天才找到原因。后来做多了就总结出一个习惯每次配置完组信号先不写程序先用示教器和PLC变量表做一次逐位验证。让PLC从bit0到bit7依次置1在示教器上看数值是不是1、2、4、8、16、32、64、128。这个验证过程不超过5分钟但能避免后面大量的调试时间。还有一个体会是组信号的长度设计要留余量。比如你现在需要6个命令信号那就配8位留2位备用。后期增加功能的时候直接启用备用位就行不用重新配置通讯模块。这个余量设计在项目初期可能觉得浪费但到了后期改需求的时候就知道有多香了。PLC对接这块我最大的教训是一定要和PLC工程师对齐地址规划。我遇到过好几次机器人这边配好了PLC那边地址分配不一样结果两边对不上。后来我养成了一个习惯配置之前先拉个短会把地址规划表过一遍双方确认无误后再各自配置。这个会花不了10分钟但能省掉后面大量的返工。最后说一个关于调试心态的事。组信号配置出问题的时候不要慌按照“先查通讯、再查地址、最后查位序”的顺序来排查90%的问题都能定位到。通讯没建立的话示教器上根本看不到组信号的值通讯正常但值不对那就是地址或位序的问题。这个排查思路我用了很多年基本上没有解决不了的组信号问题。
返回列表