资讯详情

资讯详情

发那科机器人与PLC通讯故障排查:5类典型问题与解决套路

凌晨三点手机在床头柜上震得嗡嗡响。接起来对面是值班电工的声音“X老师设备停了机器人报‘通讯异常’PLC这边啥都看不见急停都复位不了。” 赶到现场一看通讯模块指示灯全绿网线水晶头也没松PLC诊断缓冲里就一条“Partner station not reachable”。查了一圈最后发现问题是上个月改造时某供应商把机器人的IP地址改掉了半个字节而PLC组态里还留着旧地址。半小时能解决的事折腾了一整夜。干机器人集成这些年发那科FANUC和PLC的通讯问题是最磨人的。它不像机械卡死那样一眼能看出故障点也不像伺服报警有明确的代码编号很多问题藏在配置、时序和地址映射里线上查半天最后往往就是一个小参数不对。今天把这几年在多个项目现场踩过的坑以及背后的原理和排查套路整理出来。这5类问题基本覆盖了90%的现场通讯故障不管你是刚入行的新人还是带过几个项目的老师傅都值得花几分钟对照一下。1. 坑一通讯参数不一致连上了但数据乱套1.1 现象描述与现场复盘先说一个最常见的场景设备调试阶段机器人侧通讯模块已经激活PLC组态里设备状态显示“存在”或“已连接”但寄存器里的数据就是不对。有的表现为全是0有的表现为数值来回乱跳还有的是偶尔能读到正确值一加大产量就丢数据。我遇到过最典型的一次客户用发那科R-30iB控制器走DeviceNet总线现场反映机器人发给PLC的完成信号经常收不到但PLC发给机器人的启动信号一直没问题。单从现象看很多人第一反应是通讯模块坏了——发那科的DeviceNet模块本来故障率就偏高但换了一个新模块之后问题依旧。最后我把机器人侧和PLC侧的网络配置导出来逐字节对比才发现PLC侧的“Polling Mode”里配置的输入输出长度和机器人ROM里定义的I/O长度差了2个字节。这个2字节的偏差导致PLC在接收数据帧时把机器人的手爪状态字节当成了填充字节数据整体“串位”了。1.2 根因拆解参数表逐项核对不管用什么总线通讯建立的前提是双方参数完全一致。很多人只关注波特率、IP地址这些大项真正出问题往往在小参数上。做参数对照时必须覆盖以下几个方面参数类别机器人侧位置PLC侧位置常见不一致点传输速率总线参数/串口参数总线主站配置串口场景最常见9600和19200配错数据格式数据位/停止位/校验位对应组态项校验位不一致最隐蔽偶发丢数据站地址/IPI/O地址或以太网卡主站组态地址重复或改动未同步数据长度ROM里I/O点数设置组态里输入输出字节数长度不足或超出数据错位通讯周期机器人侧刷新周期PLC扫描周期/总线刷新周期周期不匹配导致丢包设备名PROFINET设备名主站组态命名PROFINET场景尤其常见串口通讯里校验位不一致的表现尤其具有欺骗性。比如机器人设成偶校验PLC设成无校验握手阶段偶尔能成功但在传输比较长的数据包时接收方会检测到校验错误把整个帧丢掉。现场看起来就是“时好时坏”有时连续工作几小时没问题有时一开机就乱码。1.3 实操排查步骤排查这类问题我建议养成一套固定的检查顺序别拿到问题就盲改参数。第一步把设备两侧的网络配置导出或拍照保存。发那科机器人侧进入MENU——SETUP——Ethernet或Field Bus把当前生效的参数列表画面拍下来。PLC侧把设备组态画面截屏留存。第二步做参数逐行对照。不要只看波特率这类大项把数据位、停止位、校验位、站地址、数据长度全部过一遍。对照时按表格方式逐项勾选不要凭记忆。第三步做最小化测试。把通讯数据量缩到最小只传1个字或1个字节看数据是否正确。如果最小化测试通过全量测试失败说明问题出在数据长度配置上如果最小化测试就不通过问题大概率在参数层面。第四步用诊断计数器辅助定位。发那科机器人的通讯诊断画面里有丢包计数、错误计数PLC侧的总线诊断也有类似统计。两边计数器对不上基本可以锁定是哪一侧在丢帧。提示改通讯参数前一定要先备份原配置。发那科机器人可以通过存储器备份把网络参数导出来PLC侧也要先上传原程序。我见过有同事改了一个波特率没记住原值改回去的时候误设成了另一个值反而让问题变得更难排查。1.4 “假连接”与现场干扰还有一种特别坑的情况通讯状态显示正常但数据完全不通。这实际上是“链路层通了应用层没通”。设备指示灯全绿只表示物理链路和协议链路建立了不代表数据收发正常。以太网场景里假连接最常见的原因是IP地址冲突。当现场有两台设备占了同一个IP交换机对这个IP的报文会做丢弃或错误转发设备和PLC之间自然无法通信。这个问题在车间改造项目中特别常见——新增设备时随便填了一个IP和旧设备撞了。另一个容易忽略的因素是现场电磁干扰。焊接线缆和通讯线缆走同一个桥架大功率变频器启动时通讯就中断这种问题在汽车焊装线现场一年能碰上好几次。处理办法是通讯线缆单独穿管、屏蔽层单端可靠接地并在PLC侧把通讯模块放置到离动力线尽量远的位置。2. 坑二点位映射错位数据串了地址2.1 现场最常见的“张冠李戴”第二个高频问题是地址映射错误。通讯建立起来了数据也在传但数据对不上号——机器人发给PLC的坐标值到了PLC里变成了速度值PLC发给机器人的夹具夹紧指令机器人却把它当成了轨道移动信号。这种问题的本质是地址映射表配置错误。发那科机器人侧数字量输入输出是DI/DO模拟量是AI/AO而总线通讯的映射关系由一组配置画面来设定。PLC侧也存在对应的映射关系。两侧映射关系只要有一处错位后面所有数据都会跟着错。举个例子某项目要求机器人把当前坐标X值写入PLC的D100寄存器。机器人侧把GROUP数据映射到总线输出区PLC侧再把总线输入区映射到D区。如果PLC侧偏移地址少算了一个字那么机器人写到总线输出区的X值在PLC侧会被当成Y值读到——X和Y全串了但通讯一点问题没有。2.2 地址偏移与字节序问题地址映射的另一大坑是两种“错位”叠加在一起。第一类是起始地址偏移。不少PLC的寄存器编号从1开始而机器人侧的I/O编号从0开始。比如三菱PLC的D100对应机器人侧的GI[0]或GIO[0]但有些人在组态时下意识从D101开始分配最终导致所有的地址整体偏移一字。这种问题在逐点测试时往往能发现但如果谁都没有做点位核对就会一直带着错跑到量产。第二类是字节序问题这比地址偏移更隐蔽。机器人发一个16位整数比如十六进制的0xA1B2按字节拆分就是A1和B2两个字节。如果PLC按大端解析就是0xA1B2如果PLC按小端解析就会变成0xB2A1。数值从41266变成45551看着像是计算错误实际上只是字节顺序的问题。2.3 点位映射表的建立方法这几年我做过不少项目总结下来避免点位错位最有效的方法不是靠脑子记而是靠一张双向映射表。表格至少要有以下六列数据方向PLC到机器人还是机器人到PLC、机器人侧地址、PLC侧地址、数据类型、字节序、备注。方向机器人侧地址PLC侧地址数据类型字节序备注PLC→机器人DI[1]M0.0位-启动信号PLC→机器人GI[1]D10016位整数大端速度给定机器人→PLCDO[1]M10.0位-完成信号机器人→PLCGO[1]D20016位整数大端当前坐标X映射表建好之后发给PLC工程师和机器人调试工程师各一份两侧对着这张表做配置出错概率会小很多。关键是这张表必须在项目初期就建立而不是等到联调时临时拼凑。2.4 一点字的测试流程地址映射做完很多人直接跑整套程序发现数据乱了才回头查——这是效率最低的方式。正确做法是先做“一点字”测试。具体操作是把其他所有数据全部屏蔽只在映射表里保留一个信号。PLC侧强制写入一个已知数值机器人侧读取该数值确认一致反过来机器人侧写入一个固定值PLC侧读取确认一致。这个测试做完确认映射关系正确后再放开其余数据。这点字测试对排查字节序也有效。写一个0x1234进去读出来若是0x3412就说明两侧字节序不匹配。这种事前花十分钟做的小测试比事后花几个小时追数据偏移要划算得多。3. 坑三通讯断了没人知道停线才去救火3.1 为什么设备会“失联”却不报警第三个坑在量产线上尤其致命通讯断了系统没有报警。很多PLC程序里做了设备通讯诊断但诊断只到“主站看不到从站”这一层。具体到机器人如果机器人控制器本身还在运行PLC和机器人之间的总线断了PLC侧从站模块会显示异常但机器人侧可能什么反应都没有——因为发那科的通讯模块在工作异常时并不会自动把机器人程序停掉机器人还在按最后接收到的指令继续动作。这就产生一个很危险的情况PLC以为机器人还在正常运行机器人侧内部还在跑程序但两侧数据已经不同步了。等设备真的停下来人员已经蒙了到底是谁先断的断了多久有没有人碰过设备还有一种情况是通讯断断续续时好时坏。现场反映“机器人偶发死机”实际上不是机器人死机而是通讯数据在某一刻丢了机器人程序收到一个错误的输入信号触发了暂停等待。3.2 心跳机制与看门狗的设计思路解决“断了没人知道”的问题标准做法是加心跳和看门狗。心跳机制的思路很简单机器人侧周期性向PLC发送一个不断变化的值PLC侧监控这个值是否持续变化。如果超出设定时间没有变化就认为通讯中断或机器人异常。具体实现时发那科机器人侧可以做一个周期任务每200毫秒向固定的GO寄存器写入一个递增值。这个值到9999后归零重新开始——只要值在变就说明通讯链路和机器人程序都在正常工作。PLC侧对应地做看门狗逻辑用定时器检测心跳值变化如果连续500毫秒没有变化就触发“机器人通讯超时”报警同时把输出到机器人的启动信号、允许信号全部断开。这套机制的价值不只是报警它还能把通讯中断时的安全状态定义清楚通讯断了系统自动进入安全状态而不是停在有风险的中间状态。3.3 PLC侧报警逻辑的实现方案PLC程序里看门狗逻辑可以这样组织。用两个定时器一个做检测周期一个做超时计时。每次心跳值变化时把超时计时器清零重启心跳值停止变化超时计时器继续计时累计到设定值就触发报警。注意心跳值变化检测要选择“变化沿”触发而不是“等于某值”触发——因为心跳值是递增循环的用等于某个固定值来判断会漏掉变化的一半周期。如果是西门子S7系列的PLC可以考虑用OB1里的Network做心跳检测也可用循环中断组织块来做。用循环中断的好处是检测周期精确不随扫描周期波动。报警逻辑分两级比较合适一级是预警提示“机器人通讯中断”同时停止自动运行二级是故障锁定复位条件必须人工确认才能恢复。这样避免通讯瞬断时设备频繁停线——先预警持续超时才升级故障。3.4 心跳周期怎么选心跳周期太短容易误报太长报警延迟大。根据现场经验心跳周期一般按通讯刷新的10到20倍来设定比较合适。举个例子如果总线通讯周期是20毫秒心跳值每200毫秒变化一次PLC侧超时时间设1秒5倍心跳周期这套参数在现场基本不会误报响应速度也足够。对于要求快速响应的安全相关信号则不能依赖通讯心跳必须走硬接线安全回路这个原则不要动摇。还有一条经验心跳值不要用有符号数和浮点数用无符号整数就够了。浮点数在两侧精度不同时会偶尔相等导致心跳误判整数递增就不存在这个问题。4. 坑四安全信号与控制逻辑打架急停被“吞”4.1 安全回路的“隐形”时序冲突第四个坑牵涉到安全也最容易引发争议。某客户现场反映按下急停按钮后机器人还会再动一下或者在急停复位后机器人程序无法继续必须断电重启才能恢复。查了安全继电器、急停按钮、机器人安全回路接线所有硬件都正常但问题反复出现。这类故障的根源在于安全信号经过PLC中转时产生了时序延迟。发那科机器人程序扫描周期一般在8毫秒到16毫秒而常见PLC的扫描周期是10毫秒到50毫秒两者不同步。外部急停按下后安全继电器动作但信号送到PLC输入模块、PLC程序处理、再输出到机器人侧整个过程要经历几个扫描周期。机器人程序在某个扫描周期内读到的“急停状态”可能还是旧的——逻辑上就是“急停已经按下但机器人程序里这条指令还在执行”。这种情况下机器人不是没有停而是停得比预计的慢了一拍。如果刚好在执行切削、搬运等高速动作这一拍偏移就可能带来安全风险。4.2 信号竞争与扫描周期的关系安全信号被“吞掉”的另一种更隐蔽的表现是信号竞争。PLC向机器人发送“允许运行”信号时如果使用脉冲信号而PLC扫描周期比机器人程序扫描周期长那么机器人可能在两个扫描周期之间丢到这个脉冲。程序里看起来就是PLC明明发出了允许信号机器人侧完全没收到。这种问题在手动调试时因为速度慢很少出现全速自动运行时才暴露。另一个常见场景是多设备联锁。某设备给PLC发了一个暂停请求PLC内部用自锁位把这个状态保持住但机器人侧没有做对应的状态锁存。当PLC输出信号恢复时机器人侧的状态位已经被下一次扫描刷新覆盖程序跳过了暂停处理逻辑。注意安全相关的信号一律不建议通过通讯总线传输。急停、安全门、光幕信号必须走硬接线安全回路。通讯传输最大的问题在于延迟不确定和故障状态不可预判这在安全上是不允许的。4.3 安全可靠的控制逻辑写法那么正常逻辑应该怎么写核心原则就一条安全信号直连、运行信号锁存、状态变化沿触发。发那科机器人侧外部急停和门开关信号要直接接到机器人控制柜的专用安全端子不经过PLC中转。机器人系统变量里的安全信号状态是硬件层直接读取延迟只有硬件响应时间没有扫描周期的影响。PLC侧在程序里处理运行允许、启动等指令时不要直接用瞬时信号驱动输出。标准做法是内部做自锁然后用自锁位去驱动输出。自锁逻辑确保PLC扫描周期内信号状态一致不受输入刷新影响。机器人在接收启动信号时也建议用上升沿检测而不是电平信号——电平信号容易因刷新时序被错误读取边沿检测则能准确捕捉每一条启动指令。急停复位后的恢复逻辑尤其要注意。很多程序里急停复位只是把报警复位掉但机器人侧的暂停状态仍然保留需要PLC额外发一个“继续运行”指令。标准流程是急停按下——PLC停止输出“允许运行”——机器人进入暂停并保持——急停复位——操作人员确认——PLC重新输出“允许运行”——机器人恢复暂停前状态。每一步都要有明确的状态位不要偷懒跳步骤。4.4 现场排查安全类故障的顺序安全类故障排查最忌讳按想象改程序、改参数。正确顺序应该是先验证安全回路硬件。用万用表量急停触点、安全继电器输出、机器人安全端子输入确认硬件动作正常。再做单侧测试。把PLC和机器人的通讯断开单独测试机器人侧的安全响应和PLC侧的安全逻辑。确认单侧没问题再恢复通讯联调。最后加时序记录。在PLC程序里加一个环形缓冲连续记录安全信号变化时的状态和时间戳。现场复现故障后导出的记录可以精确到几十毫秒级快速定位是PLC输出延迟还是机器人读取延迟。这套顺序看起来慢实际比反复猜测要快得多。安全领域的现场排查宁可慢一点不能错一步。5. 坑五刷新周期和扫描周期错配数据“撕”成两半5.1 数据撕裂的现象与影响第五个坑是数据一致性问题在用到浮点数和多字节数据的场景里非常突出。现象是这样的机器人把当前坐标X值设为1234.5678PLC读到的值有时是1234.5678有时却变成1234.5600或者1234.5700偶尔还会出现一个完全离谱的数。用示波器看模拟量输出波形在数据更新瞬间出现毛刺。问题根源在于一个浮点数占4个字节通讯时这4个字节不是同一时刻到达PLC的。如果机器人侧在更新数据的间隙被PLC读到就可能读到“半个新数据加半个旧数据”拼出来的值自然就不对。这种问题在普通开关量通讯里不存在因为位只有0和1不存在“半新半旧”的状态。但一旦涉及坐标、速度、电流、压力等连续值的传输数据撕裂就会对生产过程造成直接影响比如焊接轨迹偏移、压力控制波动。5.2 刷新周期与扫描周期错配的原因数据撕裂的根本原因是两侧的数据刷新节奏不一致。发那科机器人在后台周期性地把坐标值写入通讯输出区这个刷新周期取决于机器人系统任务的调度典型值是8毫秒到32毫秒。PLC侧扫描读取输入区扫描周期取决于程序大小典型值是10毫秒到100毫秒。两个周期不成整数倍关系时PLC每次读取都会落在机器人数据更新周期的不同相位上。有时读到的恰好是完整数据有时读到新旧数据交界的瞬间。这就像用两把不同齿距的梳子去对齿对不上是常态。周期错配的另一层影响是控制延迟。PLC做PID调节时输入数据的采样时刻不固定相当于给PID算法引入了一个随时间变化的延迟项轻则控制精度下降重则系统震荡。5.3 一致性处理的工程套路解决数据撕裂有几种工程手段可以用。最简单的方案是“手拉手”标志位。机器人侧维护一个状态位先在输出区写入数据然后置位“数据有效”标志PLC侧读取到“数据有效”后才允许读取数据区读取完成后PLC清掉该标志。数据更新和取走形成一个互锁关系确保PLC永远读不到更新中间态。但这个方案有代价每一次数据交换多了一组握手机制通讯数据量增加逻辑也变复杂。而且如果PLC侧读取逻辑写得不够严谨标志位本身反而成了新的故障点。更常用的方案是“双缓冲区”。机器人侧准备两份数据缓冲区程序写入缓冲区A通讯输出区挂缓冲区B。每次更新时先写A写完把A和B整体切换通讯输出区瞬间看到完整的新数据。PLC侧也可以做对称处理。相当于用一块临时的“停车区”先停稳再让PLC进来取货。如果只是传输模拟量还有一个简单有效的办法在PLC侧做第一次滤波或多次采样取中值。比如连续采3个数去掉最大值和最小值取中间值。能有效滤掉数据撕裂造成的毛刺缺点是增加了PLC程序复杂度。5.4 周期标定与在线监控方法处理周期错配问题第一步不是写程序而是把实际周期测出来。不要信任手册上的理论刷新周期。手册写的是理想值实际运行中系统任务调度会受程序大小、总线负载、特殊功能影响。我测过不少案例实际刷新周期和手册值相差50%以上都很正常。测量方法是PLC侧写一个测试程序在收到机器人的数据变化沿时记录时间戳连续记录几十次计算间隔的平均值和最小值、最大值。同样方式测PLC侧扫描周期。两组数据放一起就能看出是否构成稳定的整数倍关系。如果不是整数倍关系优先做法是先固定PLC的扫描周期模式比如西门子PLC可以设置为恒定扫描周期。恒定扫描周期下PLC读取输入区的节奏稳定下来与机器人通信刷新的错配程度会明显降低。再配合双缓冲区或握手标志位数据撕裂基本能消除。在线监控方面PLC程序里可以做一个“数据撕裂计数器”当读取到连续两次数据差值超过设定范围时计数加一。这个计数器平时不报故障只做趋势记录。现场人员巡检时查看数值变化速度能提前识别出周期错配的隐患。6. 最后想跟工程师们说几句以上5类问题覆盖了我在多个现场遇到的大部分通讯疑难杂症。它们的共性是都不在教科书显眼的位置上而是在两侧设备配置的夹缝里。很多问题单独看都“不该发生”可一旦发生定位起来往往要耗费大量时间。我自己踩过的最惨一次是在某个集中调试的现场为了查一个偶发通讯中断连续加了三个夜班把总线从站换过、网线重做过、交换机也换过最后才在某个测试画面里发现是现场一台变频器的载波频率刚好和通讯速率形成干扰共振。那次之后我学到的教训是通讯排查不能只盯着通讯链路本身越隐蔽的问题越要把视野放宽到整个电气环境。最后还是那句话遇到通讯故障先别急着改参数、改程序。把两侧配置导出来逐项对照把硬件状态记录下来区分是链路问题还是映射问题把安全相关信号单独走硬线不要寄希望于通讯的实时性。这套习惯养成之后通讯故障对项目的困扰至少能减少一半。另外一个现场经验每个项目交付时一定要把最终的通讯参数表、映射表、心跳机制的详细说明写进维保文档。很多通讯问题不是调试时产生的而是后续维护人员调整设备时无意间改坏了参数。文档写清楚了后来的人就不会反复踩同一个坑。这比任何排障技巧都更有长期价值。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →