許立新
(上海通用汽車有限公司,上海 201206)
一臺使用FANUC-160C 數(shù)控系統(tǒng)的進口臥式加工中心,投產(chǎn)后不久偶爾出現(xiàn)完成備刀后既不動作、也不報警的“死機”現(xiàn)象,大約每周出現(xiàn)二次,復位和急停操作都無法恢復,只能關機。該機床使用了C-執(zhí)行器(C-EXE)。發(fā)生故障時CNC 在執(zhí)行的M661 代碼(備刀命令),等待M-功能結束。后來查出故障原因是PMC 與C-EXE 配合使用時,因為忽略了PMC分割段運行機理,程序出現(xiàn)了漏洞導致競爭冒險。
下面按照分析故障的過程進行敘述。
機床備刀過程是將主軸上換下來的舊刀從待刀位送回刀庫,再把下一把刀從刀庫轉移到待刀位;在這個過程中,刀具數(shù)據(jù)信息(刀具號、刀具壽命等)也要同步轉移;因為刀具數(shù)據(jù)管理由C-EXE 處理,所以在執(zhí)行備刀命令M661 過程中,根據(jù)實際步驟C-EXE 也要同步運行。
從M661 功能沒有結束開始追蹤,文中箭頭所指方向為程序邏輯執(zhí)行方向。
①M661 結束[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 相關[CEXBSY=1,CEXFIN=1]。
由于CEXBSY 和CEXFIN 信號比較復雜,停止逆向追蹤。CEXBSY 信號是PMC 向C-EXE 發(fā)出的任務請求信號,梯形圖中有10 處置位和10 處復位CEXBSY 信號。CEXFIN 信號是C-EXE 向PMC 發(fā)出的C-EXE的任務完成信號,梯形圖中沒有寫這個信號。
[確定目標]:焦點是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的10 項任務和C-EXE。
[任務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 的應答方式是相同的。
依次檢查10 項任務,尋找不同之處:
9 項任務的觸發(fā)信號都是“0”,所以這9 項任務都不會向C-EXE 發(fā)出任務請求。只有[任務3]的觸發(fā)信號TCF-02 是“1”,但是因為條件不滿足,所以[任務3]的任務選通信號TCF-3 沒有接通。與2.1 節(jié)的追蹤結果“會合”了,懷疑是[任務3]有問題。
分析[任務3]的梯型圖(圖1):
(1)在Net4 上,因為[TCF-03=0],所以不能置位CEXBSY 信號。
(2)假設一:當時正在執(zhí)行[任務3],TCF-03 信號曾經(jīng)是“1”,當時置位了CEXBSY 信號,然后關斷TCF-03 信號。
因為Net1 中TCF-03 信號是自鎖的,如果要關斷它,則需要上一次循環(huán)時Net8[TSROK=1],因此Net5[TCF-04=1];既然[TCF-04=1],那么Net6 就能夠復位CEXBSY 了;這與實際狀態(tài)[CEXBSY=1]不符,所以假設一不成立。
(3)假設二:當時在等待執(zhí)行[任務3],即[CEXBSY=1]是由其他任務置位的。
因為其他任務還沒有完成,所以[CEXBSY=1];當其他任務完成后,使[CEXBSY=0,CEXFIN=0]成立,就可以執(zhí)行[任務3]了,符合邏輯,證明假設二成立,所以不是[任務3]出的問題。
[更新目標]:焦點是CEXBSY≠0 和CEXFIN≠0;方向是PMC 的9 項任務和C-EXE。
至此,我們需要先研究PMC 和C-EXE 的聯(lián)合應用。
Net1[Step1]:在沒有其他任務時(CEXBSY=0,CEXFIN=0),處于任務使能狀態(tài),如果有觸發(fā)信號(TCF-02=1),則任務選通(TCF-03=1)并且自鎖。
Net2,3[Step2]:如果任務選通,就一次性傳送任務數(shù)據(jù)到C-EXE(CEDT00、CEDT04、……);到下一個循環(huán)周期時CEXBSY=1,就不再傳送了。
Net4[Step3]:如果任務選通,就置位CEXBSY 信號(向C-EXE 發(fā)出任務請求命令)
Net5[Step6]:收到C-EXE 任務完成信號(CEXFIN=1)后,就發(fā)出PMC 的任務完成命令(TCF-04=1)。
Net6[Step7]:收到PMC 的任務完成命令,就復位CEXBSY 信號(通知C-EXE 任務結束)。
Net7,8[Step9]:如果C-EXE 的返回代碼[CEDT02]是“0”,就發(fā)出PMC 的任務結束命令(TSRCOK=1);
Net1[Step10]:到下一個循環(huán)周期時,由PMC 的任務結束命令(TSRCOK=1)關斷任務選通信號(TCF-03=0),結束任務;當收到C-EXE 發(fā)出的允許接收新任務命令(CEXFIN=0)后,則再次處于任務使能狀態(tài)(其它任務也處于使能狀態(tài))。
[A]:如果成功獲取CEXBSY 和CEXFIN 的狀態(tài)則向下運行,執(zhí)行[B]和[C]。
[B]:如果狀態(tài)為[CEXBSY=1,CEXFIN=0](收到PMC 的任務請求命令[CEXBSY=1],對應Net4),則向下運行,執(zhí)行[D];否則執(zhí)行[C]。
[C][Step8]:如果狀態(tài)為[CEXBSY=0,CEXFIN=1](收到PMC 的任務結束命令[CEXBSY=0]時,對應Net6);則置[CEXFIN=0](通知PMC 允許接收新任務,對應Net1[Step10]);
[D][Step4]:如果成功獲取任務數(shù)據(jù)(組)CEDT00、…,則向下運行,執(zhí)行[E]和[F]。
[E][Step4]:執(zhí)行PMC 請求的任務。(根據(jù)[CEDT00]的任務代碼,選擇執(zhí)行相應的函數(shù);完成任務后把返回代碼寫入[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項任務。
為了確定到底是哪個任務出了問題,采用設置痕跡標識位的方法,具體方法如下:
修改梯形圖,分別為各項任務設置“痕跡標識位”(R20.0~R21.1);在每項任務“置位”和“復位”CEXBSY 的同時也“置位”和“復位”各自的“痕跡標識位”。在出現(xiàn)“死機”時,如果哪一個“痕跡標識位”還是“1”,則就是哪一項任務出了問題。
增加標識位后,再次出現(xiàn)“死機”時,R20.6=1;說明是[任務7]出了狀況。
[鎖定目標]:[任務7]沒有復位CEXBSY!
(1)根據(jù)[鎖定目標],Net14 沒有復位CEXBSY;當時狀態(tài)是[CEXBSY=1,CEXFIN=1];



表1 PMC 與C-EXE 應答關系順序表

(2)逆向追蹤:箭頭所指方向為程序邏輯執(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 運行時發(fā)生了沖突。
回顧PMC 程序的執(zhí)行原理,梳理相關概念(參考圖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)運行方式:循環(huán)執(zhí)行。
(6)循環(huán)周期:8×n ms,執(zhí)行一遍PMC 程序的時間。
假設:①兩個分割段的“接縫”在Net14 和Net15之間(見圖6);②在執(zhí)行Net14 后和Net15 之前這段時間內(nèi),C-EXE 把CEXFIN 由“0”變?yōu)椤?”。分析如下:
(1)在執(zhí)行Net14 時,因為[TLCU-1=1,CEXFIN=0],所以沒有復位CEXBSY,保持[CEXBSY=1],此時結束了當前分隔段。
(2)接著執(zhí)行3 ms“NC 處理”(參考圖5),然后開始下一個掃描周期,首先執(zhí)行高級段,在這段間內(nèi)C-EXE 把CEXFIN 信號變?yōu)椤?”。
(3)再從下一分割段起點Net15 開始執(zhí)行;因為此時[TLCU-1=1,CEXFIN=1],如果[CEDT02=0],則Net16 置[TLCUFN=1]。
(4)下一個循環(huán)周期,執(zhí)行到Net9 時就會關斷任務選通信號(TLCU-1=0)。
(5)再次執(zhí)行到Net14 時,因為[TLCU-1=0,CEXFIN=1],則還是不能復位CEXBSY。;
上述推理符合PMC 運行原理,此假設成立!

小結:由于CEXFIN 信號在一個循環(huán)周期內(nèi)能夠發(fā)生變化,且這個變化又導致在復位CEXBSY 之前關斷了它的復位條件,所以就再無法復位CEXBSY 了。
參見圖7,增加一個CEXFIN 信號的同步信號CFIN_B,用CFIN_B 替代原來所有的CEXFIN 信號;因為CFIN_B 信號在一個循環(huán)周期內(nèi)不會有變化,所以就不會發(fā)生沖突了。
經(jīng)過長期使用沒有再出現(xiàn)狀況,證明整改有效。
(1)PMC 對X-信號進行兩種緩沖處理
掃描緩沖處理:每隔2 ms,掃描[機床X-信號]傳送到[X-信號存儲器]一次;Level1 程序使用的X-信號來自[X-信號存儲器]。
同步緩沖處理:每次開始執(zhí)行Level2 時,同步[X-信號存儲器]傳送到[X-信號同步存儲器]一次;Level2 程序使用的X-信號來自[X-信號同步存儲器],且在Level2 掃描周期中對信號進行鎖存。
因此,Level2 程序中的X-信號要比Level1 程序中的X-信號滯后,最多時可能滯后一個循環(huán)周期。



(2)PMC 直接使用R、E、D-信號,不進行緩沖處理
R、E、D-信號是內(nèi)部存儲器信號,它們的狀態(tài)源于PMC 順序程序,只要符合順序邏輯就不會發(fā)生沖突。
也會有的,因為每隔8 ms 就要刷新一次Level1 程序;假設在Level1 程序中寫的一個R-信號,且這個信號在Level2 程序中多次引用;這個R-信號在一個循環(huán)周期(8×n ms)內(nèi)狀態(tài)是會發(fā)生變化的,如果該變化發(fā)生在引用這個R-信號的兩個分割段之間就可能會發(fā)生沖突。
在使用FANUC 數(shù)控系統(tǒng)進行機床設計時,經(jīng)常會使用C-執(zhí)行器、Macro-執(zhí)行器和Fanuc-Picture等配合PMC 進行控制。這些執(zhí)行器能夠直接“寫”PMC 內(nèi)部存儲器(R、E、D 等地址),雖然靈活方便了,但是也引入了導致競爭冒險的因素。
對于PMC 來說這些執(zhí)行器都屬于外部設備,相互之間的通訊信號就要遵循DI/DO 信號的處理規(guī)則!Level2 程序使用來自執(zhí)行器的輸入信號都需要經(jīng)過同步緩沖處理;保持這些信號狀態(tài)在執(zhí)行Level2 程序過程中不會變化,避免發(fā)生沖突。
[1]FANUC PMC ladder language programming manual[Z].B-61863E/10,1997.