APP下载

PMC 和C-执行器配合应用与冲突

2015-04-08许立新

制造技术与机床 2015年6期
关键词:存储器执行器命令

许立新

(上海通用汽车有限公司,上海 201206)

1 概述

一台使用FANUC-160C 数控系统的进口卧式加工中心,投产后不久偶尔出现完成备刀后既不动作、也不报警的“死机”现象,大约每周出现二次,复位和急停操作都无法恢复,只能关机。该机床使用了C-执行器(C-EXE)。发生故障时CNC 在执行的M661 代码(备刀命令),等待M-功能结束。后来查出故障原因是PMC 与C-EXE 配合使用时,因为忽略了PMC分割段运行机理,程序出现了漏洞导致竞争冒险。

下面按照分析故障的过程进行叙述。

2 分析故障

2.1 逆向追踪

机床备刀过程是将主轴上换下来的旧刀从待刀位送回刀库,再把下一把刀从刀库转移到待刀位;在这个过程中,刀具数据信息(刀具号、刀具寿命等)也要同步转移;因为刀具数据管理由C-EXE 处理,所以在执行备刀命令M661 过程中,根据实际步骤C-EXE 也要同步运行。

从M661 功能没有结束开始追踪,文中箭头所指方向为程序逻辑执行方向。

①M661 结束[M661FN=0]←②M06 等待[M06WAT=1]←③未执行备刀第8 步[TCF-08=0]←④未执行备刀第7 步[TCF-07=0]←⑤刀具检索未完成[TSROK=0]←⑥未执行备刀第4 步[TCF-04=0]←⑦未执行备刀第3 步[TCF-03=0]←⑧C-EXE 相关[CEXBSY=1,CEXFIN=1]。

由于CEXBSY 和CEXFIN 信号比较复杂,停止逆向追踪。CEXBSY 信号是PMC 向C-EXE 发出的任务请求信号,梯形图中有10 处置位和10 处复位CEXBSY 信号。CEXFIN 信号是C-EXE 向PMC 发出的C-EXE的任务完成信号,梯形图中没有写这个信号。

[确定目标]:焦点是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的10 项任务和C-EXE。

2.2 梳理10 项任务

[任务1]:WORK DATA RESET JOB;

[任务2]:TOOL DATA RESET JOB;

[任务3]:TOOL CALLING STEP-3;

[任务4]:WORK COUNTER UPDATE STEP-1;

[任务5]:CYCCLE TIME MONITOR STEP-1;

[任务6]:SL FLAG SET STEP-2;

[任务7]:TL COUNT-UP STEP-1;

[任务8]:M034 ACTION STEP-1;

[任务9]:BT FLAG RESET JOB STEP-2;

[任务10]:SET DATA TRIGGER;

10 项任务与C-EXE 的应答方式是相同的。

2.3 使用排除法,缩小目标范围

依次检查10 项任务,寻找不同之处:

9 项任务的触发信号都是“0”,所以这9 项任务都不会向C-EXE 发出任务请求。只有[任务3]的触发信号TCF-02 是“1”,但是因为条件不满足,所以[任务3]的任务选通信号TCF-3 没有接通。与2.1 节的追踪结果“会合”了,怀疑是[任务3]有问题。

分析[任务3]的梯型图(图1):

(1)在Net4 上,因为[TCF-03=0],所以不能置位CEXBSY 信号。

(2)假设一:当时正在执行[任务3],TCF-03 信号曾经是“1”,当时置位了CEXBSY 信号,然后关断TCF-03 信号。

因为Net1 中TCF-03 信号是自锁的,如果要关断它,则需要上一次循环时Net8[TSROK=1],因此Net5[TCF-04=1];既然[TCF-04=1],那么Net6 就能够复位CEXBSY 了;这与实际状态[CEXBSY=1]不符,所以假设一不成立。

(3)假设二:当时在等待执行[任务3],即[CEXBSY=1]是由其他任务置位的。

因为其他任务还没有完成,所以[CEXBSY=1];当其他任务完成后,使[CEXBSY=0,CEXFIN=0]成立,就可以执行[任务3]了,符合逻辑,证明假设二成立,所以不是[任务3]出的问题。

[更新目标]:焦点是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的9 项任务和C-EXE。

至此,我们需要先研究PMC 和C-EXE 的联合应用。

3 学习PMC 和C-执行器联合应用

3.1 分析PMC 接口程序(图1)

Net1[Step1]:在没有其他任务时(CEXBSY=0,CEXFIN=0),处于任务使能状态,如果有触发信号(TCF-02=1),则任务选通(TCF-03=1)并且自锁。

Net2,3[Step2]:如果任务选通,就一次性传送任务数据到C-EXE(CEDT00、CEDT04、……);到下一个循环周期时CEXBSY=1,就不再传送了。

Net4[Step3]:如果任务选通,就置位CEXBSY 信号(向C-EXE 发出任务请求命令)

Net5[Step6]:收到C-EXE 任务完成信号(CEXFIN=1)后,就发出PMC 的任务完成命令(TCF-04=1)。

Net6[Step7]:收到PMC 的任务完成命令,就复位CEXBSY 信号(通知C-EXE 任务结束)。

Net7,8[Step9]:如果C-EXE 的返回代码[CEDT02]是“0”,就发出PMC 的任务结束命令(TSRCOK=1);

Net1[Step10]:到下一个循环周期时,由PMC 的任务结束命令(TSRCOK=1)关断任务选通信号(TCF-03=0),结束任务;当收到C-EXE 发出的允许接收新任务命令(CEXFIN=0)后,则再次处于任务使能状态(其它任务也处于使能状态)。

3.2 分析C-EXE 接口程序(图2)

[A]:如果成功获取CEXBSY 和CEXFIN 的状态则向下运行,执行[B]和[C]。

[B]:如果状态为[CEXBSY=1,CEXFIN=0](收到PMC 的任务请求命令[CEXBSY=1],对应Net4),则向下运行,执行[D];否则执行[C]。

[C][Step8]:如果状态为[CEXBSY=0,CEXFIN=1](收到PMC 的任务结束命令[CEXBSY=0]时,对应Net6);则置[CEXFIN=0](通知PMC 允许接收新任务,对应Net1[Step10]);

[D][Step4]:如果成功获取任务数据(组)CEDT00、…,则向下运行,执行[E]和[F]。

[E][Step4]:执行PMC 请求的任务。(根据[CEDT00]的任务代码,选择执行相应的函数;完成任务后把返回代码写入[CEDT02]中,对应Net7)。

[F][Step5]:完成PMC 请求的任务后,如果仍然CEXBSY=1,则置CEXFIN=1(通知PMC 任务完成,对应Net5)。

整个PMC 和C-EXE 的应答关系如表1 所示。

小结:在[C]中,只要CEXBSY=0,C-EXE 就会置CEXFIN=0;所以排除了CEXFIN≠0 的因素。

[更新目标]:焦点CEXBSY≠0;方向是PMC 的9项任务。

3.3 设置“痕迹标识位”缩小目标

为了确定到底是哪个任务出了问题,采用设置痕迹标识位的方法,具体方法如下:

修改梯形图,分别为各项任务设置“痕迹标识位”(R20.0~R21.1);在每项任务“置位”和“复位”CEXBSY 的同时也“置位”和“复位”各自的“痕迹标识位”。在出现“死机”时,如果哪一个“痕迹标识位”还是“1”,则就是哪一项任务出了问题。

增加标识位后,再次出现“死机”时,R20.6=1;说明是[任务7]出了状况。

[锁定目标]:[任务7]没有复位CEXBSY!

3.4 检查[任务7]的梯形图(图3)

(1)根据[锁定目标],Net14 没有复位CEXBSY;当时状态是[CEXBSY=1,CEXFIN=1];

表1 PMC 与C-EXE 应答关系顺序表

(2)逆向追踪:箭头所指方向为程序逻辑执行方向。Net14[CEXBSY≠0]←Net9[TLCU-1=0]←上一循环周期Net16[TLCUFN=1]←[TLCU-1=1,CEXFIN=1]。

说明在上一循环周期时[TLCU-1=1,CEXFIN=1]是成立的。那么,为什么排在前面的Net14 没有执行而后面的Net16 却执行了?

分析:顺序程序没有逻辑错误,猜测是PMC 运行时发生了冲突。

4 回顾PMC 的运行原理,寻求突破

4.1 从基础原理出发

回顾PMC 程序的执行原理,梳理相关概念(参考图4,图5)。

(1)扫描周期:8 ms。

(2)扫描PMC 时间:5 ms(FS160C);即在8 ms 内有5ms 执行PMC 程序,3 ms 由NC 使用。

(3)5 ms 分为两部分:①处理高级段:执行Level1程序,每个扫描周期都要执行一次;②处理低级段:剩余时间执行Level2 程序,每个扫描周期只能执行一部分。

(4)分割段:Level2 程序按分配的时间分割成n个段,每个扫描周期执行一个段。

(5)运行方式:循环执行。

(6)循环周期:8×n ms,执行一遍PMC 程序的时间。

4.2 发现突破口:是分割段问题

假设:①两个分割段的“接缝”在Net14 和Net15之间(见图6);②在执行Net14 后和Net15 之前这段时间内,C-EXE 把CEXFIN 由“0”变为“1”。分析如下:

(1)在执行Net14 时,因为[TLCU-1=1,CEXFIN=0],所以没有复位CEXBSY,保持[CEXBSY=1],此时结束了当前分隔段。

(2)接着执行3 ms“NC 处理”(参考图5),然后开始下一个扫描周期,首先执行高级段,在这段间内C-EXE 把CEXFIN 信号变为“1”。

(3)再从下一分割段起点Net15 开始执行;因为此时[TLCU-1=1,CEXFIN=1],如果[CEDT02=0],则Net16 置[TLCUFN=1]。

(4)下一个循环周期,执行到Net9 时就会关断任务选通信号(TLCU-1=0)。

(5)再次执行到Net14 时,因为[TLCU-1=0,CEXFIN=1],则还是不能复位CEXBSY。;

上述推理符合PMC 运行原理,此假设成立!

小结:由于CEXFIN 信号在一个循环周期内能够发生变化,且这个变化又导致在复位CEXBSY 之前关断了它的复位条件,所以就再无法复位CEXBSY 了。

4.3 整改措施

参见图7,增加一个CEXFIN 信号的同步信号CFIN_B,用CFIN_B 替代原来所有的CEXFIN 信号;因为CFIN_B 信号在一个循环周期内不会有变化,所以就不会发生冲突了。

经过长期使用没有再出现状况,证明整改有效。

5 探讨

5.1 PMC 是如何处理X-信号和R、E、D-信号的?

(1)PMC 对X-信号进行两种缓冲处理

扫描缓冲处理:每隔2 ms,扫描[机床X-信号]传送到[X-信号存储器]一次;Level1 程序使用的X-信号来自[X-信号存储器]。

同步缓冲处理:每次开始执行Level2 时,同步[X-信号存储器]传送到[X-信号同步存储器]一次;Level2 程序使用的X-信号来自[X-信号同步存储器],且在Level2 扫描周期中对信号进行锁存。

因此,Level2 程序中的X-信号要比Level1 程序中的X-信号滞后,最多时可能滞后一个循环周期。

(2)PMC 直接使用R、E、D-信号,不进行缓冲处理

R、E、D-信号是内部存储器信号,它们的状态源于PMC 顺序程序,只要符合顺序逻辑就不会发生冲突。

5.2 单独使用PMC 控制就不会有这种冲突吗?

也会有的,因为每隔8 ms 就要刷新一次Level1 程序;假设在Level1 程序中写的一个R-信号,且这个信号在Level2 程序中多次引用;这个R-信号在一个循环周期(8×n ms)内状态是会发生变化的,如果该变化发生在引用这个R-信号的两个分割段之间就可能会发生冲突。

6 结语

在使用FANUC 数控系统进行机床设计时,经常会使用C-执行器、Macro-执行器和Fanuc-Picture等配合PMC 进行控制。这些执行器能够直接“写”PMC 内部存储器(R、E、D 等地址),虽然灵活方便了,但是也引入了导致竞争冒险的因素。

对于PMC 来说这些执行器都属于外部设备,相互之间的通讯信号就要遵循DI/DO 信号的处理规则!Level2 程序使用来自执行器的输入信号都需要经过同步缓冲处理;保持这些信号状态在执行Level2 程序过程中不会变化,避免发生冲突。

[1]FANUC PMC ladder language programming manual[Z].B-61863E/10,1997.

猜你喜欢

存储器执行器命令
只听主人的命令
静态随机存储器在轨自检算法
安装和启动Docker
高锁螺母自动化安装机器人末端执行器设计
X-431实测篇2010年奔驰B200空调执行器电机学习
移防命令下达后
飞机装配预连接紧固件自动化安装末端执行器设计
延迟不确定马尔科夫跳变系统的执行器和传感器故障同时估计方法
任意2~k点存储器结构傅里叶处理器
存储器——安格尔(墨西哥)▲