許立新
(上海通用汽車有限公司,上海 201206)
一臺使用FANUC-160C 數(shù)控系統(tǒng)的進(jìn)口臥式加工中心,投產(chǎn)后不久偶爾出現(xiàn)完成備刀后既不動作、也不報(bào)警的“死機(jī)”現(xiàn)象,大約每周出現(xiàn)二次,復(fù)位和急停操作都無法恢復(fù),只能關(guān)機(jī)。該機(jī)床使用了C-執(zhí)行器(C-EXE)。發(fā)生故障時CNC 在執(zhí)行的M661 代碼(備刀命令),等待M-功能結(jié)束。后來查出故障原因是PMC 與C-EXE 配合使用時,因?yàn)楹雎粤薖MC分割段運(yùn)行機(jī)理,程序出現(xiàn)了漏洞導(dǎo)致競爭冒險(xiǎn)。
下面按照分析故障的過程進(jìn)行敘述。
機(jī)床備刀過程是將主軸上換下來的舊刀從待刀位送回刀庫,再把下一把刀從刀庫轉(zhuǎn)移到待刀位;在這個過程中,刀具數(shù)據(jù)信息(刀具號、刀具壽命等)也要同步轉(zhuǎn)移;因?yàn)榈毒邤?shù)據(jù)管理由C-EXE 處理,所以在執(zhí)行備刀命令M661 過程中,根據(jù)實(shí)際步驟C-EXE 也要同步運(yùn)行。
從M661 功能沒有結(jié)束開始追蹤,文中箭頭所指方向?yàn)槌绦蜻壿媹?zhí)行方向。
①M(fèi)661 結(jié)束[M661FN=0]←②M06 等待[M06WAT=1]←③未執(zhí)行備刀第8 步[TCF-08=0]←④未執(zhí)行備刀第7 步[TCF-07=0]←⑤刀具檢索未完成[TSROK=0]←⑥未執(zhí)行備刀第4 步[TCF-04=0]←⑦未執(zhí)行備刀第3 步[TCF-03=0]←⑧C-EXE 相關(guān)[CEXBSY=1,CEXFIN=1]。
由于CEXBSY 和CEXFIN 信號比較復(fù)雜,停止逆向追蹤。CEXBSY 信號是PMC 向C-EXE 發(fā)出的任務(wù)請求信號,梯形圖中有10 處置位和10 處復(fù)位CEXBSY 信號。CEXFIN 信號是C-EXE 向PMC 發(fā)出的C-EXE的任務(wù)完成信號,梯形圖中沒有寫這個信號。
[確定目標(biāo)]:焦點(diǎn)是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的10 項(xiàng)任務(wù)和C-EXE。
[任務(wù)1]:WORK DATA RESET JOB;
[任務(wù)2]:TOOL DATA RESET JOB;
[任務(wù)3]:TOOL CALLING STEP-3;
[任務(wù)4]:WORK COUNTER UPDATE STEP-1;
[任務(wù)5]:CYCCLE TIME MONITOR STEP-1;
[任務(wù)6]:SL FLAG SET STEP-2;
[任務(wù)7]:TL COUNT-UP STEP-1;
[任務(wù)8]:M034 ACTION STEP-1;
[任務(wù)9]:BT FLAG RESET JOB STEP-2;
[任務(wù)10]:SET DATA TRIGGER;
10 項(xiàng)任務(wù)與C-EXE 的應(yīng)答方式是相同的。
依次檢查10 項(xiàng)任務(wù),尋找不同之處:
9 項(xiàng)任務(wù)的觸發(fā)信號都是“0”,所以這9 項(xiàng)任務(wù)都不會向C-EXE 發(fā)出任務(wù)請求。只有[任務(wù)3]的觸發(fā)信號TCF-02 是“1”,但是因?yàn)闂l件不滿足,所以[任務(wù)3]的任務(wù)選通信號TCF-3 沒有接通。與2.1 節(jié)的追蹤結(jié)果“會合”了,懷疑是[任務(wù)3]有問題。
分析[任務(wù)3]的梯型圖(圖1):
(1)在Net4 上,因?yàn)椋跿CF-03=0],所以不能置位CEXBSY 信號。
(2)假設(shè)一:當(dāng)時正在執(zhí)行[任務(wù)3],TCF-03 信號曾經(jīng)是“1”,當(dāng)時置位了CEXBSY 信號,然后關(guān)斷TCF-03 信號。
因?yàn)镹et1 中TCF-03 信號是自鎖的,如果要關(guān)斷它,則需要上一次循環(huán)時Net8[TSROK=1],因此Net5[TCF-04=1];既然[TCF-04=1],那么Net6 就能夠復(fù)位CEXBSY 了;這與實(shí)際狀態(tài)[CEXBSY=1]不符,所以假設(shè)一不成立。
(3)假設(shè)二:當(dāng)時在等待執(zhí)行[任務(wù)3],即[CEXBSY=1]是由其他任務(wù)置位的。
因?yàn)槠渌蝿?wù)還沒有完成,所以[CEXBSY=1];當(dāng)其他任務(wù)完成后,使[CEXBSY=0,CEXFIN=0]成立,就可以執(zhí)行[任務(wù)3]了,符合邏輯,證明假設(shè)二成立,所以不是[任務(wù)3]出的問題。
[更新目標(biāo)]:焦點(diǎn)是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的9 項(xiàng)任務(wù)和C-EXE。
至此,我們需要先研究PMC 和C-EXE 的聯(lián)合應(yīng)用。
Net1[Step1]:在沒有其他任務(wù)時(CEXBSY=0,CEXFIN=0),處于任務(wù)使能狀態(tài),如果有觸發(fā)信號(TCF-02=1),則任務(wù)選通(TCF-03=1)并且自鎖。
Net2,3[Step2]:如果任務(wù)選通,就一次性傳送任務(wù)數(shù)據(jù)到C-EXE(CEDT00、CEDT04、……);到下一個循環(huán)周期時CEXBSY=1,就不再傳送了。
Net4[Step3]:如果任務(wù)選通,就置位CEXBSY 信號(向C-EXE 發(fā)出任務(wù)請求命令)
Net5[Step6]:收到C-EXE 任務(wù)完成信號(CEXFIN=1)后,就發(fā)出PMC 的任務(wù)完成命令(TCF-04=1)。
Net6[Step7]:收到PMC 的任務(wù)完成命令,就復(fù)位CEXBSY 信號(通知C-EXE 任務(wù)結(jié)束)。
Net7,8[Step9]:如果C-EXE 的返回代碼[CEDT02]是“0”,就發(fā)出PMC 的任務(wù)結(jié)束命令(TSRCOK=1);
Net1[Step10]:到下一個循環(huán)周期時,由PMC 的任務(wù)結(jié)束命令(TSRCOK=1)關(guān)斷任務(wù)選通信號(TCF-03=0),結(jié)束任務(wù);當(dāng)收到C-EXE 發(fā)出的允許接收新任務(wù)命令(CEXFIN=0)后,則再次處于任務(wù)使能狀態(tài)(其它任務(wù)也處于使能狀態(tài))。
[A]:如果成功獲取CEXBSY 和CEXFIN 的狀態(tài)則向下運(yùn)行,執(zhí)行[B]和[C]。
[B]:如果狀態(tài)為[CEXBSY=1,CEXFIN=0](收到PMC 的任務(wù)請求命令[CEXBSY=1],對應(yīng)Net4),則向下運(yùn)行,執(zhí)行[D];否則執(zhí)行[C]。
[C][Step8]:如果狀態(tài)為[CEXBSY=0,CEXFIN=1](收到PMC 的任務(wù)結(jié)束命令[CEXBSY=0]時,對應(yīng)Net6);則置[CEXFIN=0](通知PMC 允許接收新任務(wù),對應(yīng)Net1[Step10]);
[D][Step4]:如果成功獲取任務(wù)數(shù)據(jù)(組)CEDT00、…,則向下運(yùn)行,執(zhí)行[E]和[F]。
[E][Step4]:執(zhí)行PMC 請求的任務(wù)。(根據(jù)[CEDT00]的任務(wù)代碼,選擇執(zhí)行相應(yīng)的函數(shù);完成任務(wù)后把返回代碼寫入[CEDT02]中,對應(yīng)Net7)。
[F][Step5]:完成PMC 請求的任務(wù)后,如果仍然CEXBSY=1,則置CEXFIN=1(通知PMC 任務(wù)完成,對應(yīng)Net5)。
整個PMC 和C-EXE 的應(yīng)答關(guān)系如表1 所示。
小結(jié):在[C]中,只要CEXBSY=0,C-EXE 就會置CEXFIN=0;所以排除了CEXFIN≠0 的因素。
[更新目標(biāo)]:焦點(diǎn)CEXBSY≠0;方向是PMC 的9項(xiàng)任務(wù)。
為了確定到底是哪個任務(wù)出了問題,采用設(shè)置痕跡標(biāo)識位的方法,具體方法如下:
修改梯形圖,分別為各項(xiàng)任務(wù)設(shè)置“痕跡標(biāo)識位”(R20.0~R21.1);在每項(xiàng)任務(wù)“置位”和“復(fù)位”CEXBSY 的同時也“置位”和“復(fù)位”各自的“痕跡標(biāo)識位”。在出現(xiàn)“死機(jī)”時,如果哪一個“痕跡標(biāo)識位”還是“1”,則就是哪一項(xiàng)任務(wù)出了問題。
增加標(biāo)識位后,再次出現(xiàn)“死機(jī)”時,R20.6=1;說明是[任務(wù)7]出了狀況。
[鎖定目標(biāo)]:[任務(wù)7]沒有復(fù)位CEXBSY!
(1)根據(jù)[鎖定目標(biāo)],Net14 沒有復(fù)位CEXBSY;當(dāng)時狀態(tài)是[CEXBSY=1,CEXFIN=1];
表1 PMC 與C-EXE 應(yīng)答關(guān)系順序表
(2)逆向追蹤:箭頭所指方向?yàn)槌绦蜻壿媹?zhí)行方向。Net14[CEXBSY≠0]←Net9[TLCU-1=0]←上一循環(huán)周期Net16[TLCUFN=1]←[TLCU-1=1,CEXFIN=1]。
說明在上一循環(huán)周期時[TLCU-1=1,CEXFIN=1]是成立的。那么,為什么排在前面的Net14 沒有執(zhí)行而后面的Net16 卻執(zhí)行了?
分析:順序程序沒有邏輯錯誤,猜測是PMC 運(yùn)行時發(fā)生了沖突。
回顧PMC 程序的執(zhí)行原理,梳理相關(guān)概念(參考圖4,圖5)。
(1)掃描周期:8 ms。
(2)掃描PMC 時間:5 ms(FS160C);即在8 ms 內(nèi)有5ms 執(zhí)行PMC 程序,3 ms 由NC 使用。
(3)5 ms 分為兩部分:①處理高級段:執(zhí)行Level1程序,每個掃描周期都要執(zhí)行一次;②處理低級段:剩余時間執(zhí)行Level2 程序,每個掃描周期只能執(zhí)行一部分。
(4)分割段:Level2 程序按分配的時間分割成n個段,每個掃描周期執(zhí)行一個段。
(5)運(yùn)行方式:循環(huán)執(zhí)行。
(6)循環(huán)周期:8×n ms,執(zhí)行一遍PMC 程序的時間。
假設(shè):①兩個分割段的“接縫”在Net14 和Net15之間(見圖6);②在執(zhí)行Net14 后和Net15 之前這段時間內(nèi),C-EXE 把CEXFIN 由“0”變?yōu)椤?”。分析如下:
(1)在執(zhí)行Net14 時,因?yàn)椋跿LCU-1=1,CEXFIN=0],所以沒有復(fù)位CEXBSY,保持[CEXBSY=1],此時結(jié)束了當(dāng)前分隔段。
(2)接著執(zhí)行3 ms“NC 處理”(參考圖5),然后開始下一個掃描周期,首先執(zhí)行高級段,在這段間內(nèi)C-EXE 把CEXFIN 信號變?yōu)椤?”。
(3)再從下一分割段起點(diǎn)Net15 開始執(zhí)行;因?yàn)榇藭r[TLCU-1=1,CEXFIN=1],如果[CEDT02=0],則Net16 置[TLCUFN=1]。
(4)下一個循環(huán)周期,執(zhí)行到Net9 時就會關(guān)斷任務(wù)選通信號(TLCU-1=0)。
(5)再次執(zhí)行到Net14 時,因?yàn)椋跿LCU-1=0,CEXFIN=1],則還是不能復(fù)位CEXBSY。;
上述推理符合PMC 運(yùn)行原理,此假設(shè)成立!
小結(jié):由于CEXFIN 信號在一個循環(huán)周期內(nèi)能夠發(fā)生變化,且這個變化又導(dǎo)致在復(fù)位CEXBSY 之前關(guān)斷了它的復(fù)位條件,所以就再無法復(fù)位CEXBSY 了。
參見圖7,增加一個CEXFIN 信號的同步信號CFIN_B,用CFIN_B 替代原來所有的CEXFIN 信號;因?yàn)镃FIN_B 信號在一個循環(huán)周期內(nèi)不會有變化,所以就不會發(fā)生沖突了。
經(jīng)過長期使用沒有再出現(xiàn)狀況,證明整改有效。
(1)PMC 對X-信號進(jìn)行兩種緩沖處理
掃描緩沖處理:每隔2 ms,掃描[機(jī)床X-信號]傳送到[X-信號存儲器]一次;Level1 程序使用的X-信號來自[X-信號存儲器]。
同步緩沖處理:每次開始執(zhí)行Level2 時,同步[X-信號存儲器]傳送到[X-信號同步存儲器]一次;Level2 程序使用的X-信號來自[X-信號同步存儲器],且在Level2 掃描周期中對信號進(jìn)行鎖存。
因此,Level2 程序中的X-信號要比Level1 程序中的X-信號滯后,最多時可能滯后一個循環(huán)周期。
(2)PMC 直接使用R、E、D-信號,不進(jìn)行緩沖處理
R、E、D-信號是內(nèi)部存儲器信號,它們的狀態(tài)源于PMC 順序程序,只要符合順序邏輯就不會發(fā)生沖突。
也會有的,因?yàn)槊扛? ms 就要刷新一次Level1 程序;假設(shè)在Level1 程序中寫的一個R-信號,且這個信號在Level2 程序中多次引用;這個R-信號在一個循環(huán)周期(8×n ms)內(nèi)狀態(tài)是會發(fā)生變化的,如果該變化發(fā)生在引用這個R-信號的兩個分割段之間就可能會發(fā)生沖突。
在使用FANUC 數(shù)控系統(tǒng)進(jìn)行機(jī)床設(shè)計(jì)時,經(jīng)常會使用C-執(zhí)行器、Macro-執(zhí)行器和Fanuc-Picture等配合PMC 進(jìn)行控制。這些執(zhí)行器能夠直接“寫”PMC 內(nèi)部存儲器(R、E、D 等地址),雖然靈活方便了,但是也引入了導(dǎo)致競爭冒險(xiǎn)的因素。
對于PMC 來說這些執(zhí)行器都屬于外部設(shè)備,相互之間的通訊信號就要遵循DI/DO 信號的處理規(guī)則!Level2 程序使用來自執(zhí)行器的輸入信號都需要經(jīng)過同步緩沖處理;保持這些信號狀態(tài)在執(zhí)行Level2 程序過程中不會變化,避免發(fā)生沖突。
[1]FANUC PMC ladder language programming manual[Z].B-61863E/10,1997.