
簡介FANUC機器人自動運行PNS設(shè)置指導(dǎo)手冊是一份面向工業(yè)自動化工程師、現(xiàn)場調(diào)試及維護人員的實操型技術(shù)文檔重點解決生產(chǎn)線上多任務(wù)快速切換與無人化自動運行問題。資源包為單個docx文件大小約1.61MB內(nèi)容涵蓋PNS概述、參數(shù)設(shè)置步驟、典型應(yīng)用場景、故障排查及培訓(xùn)維護等完整章節(jié)。文檔從登錄系統(tǒng)、創(chuàng)建程序、設(shè)置參數(shù)如3100號到啟動PNS逐步展開并結(jié)合多品種小批量生產(chǎn)、流水線作業(yè)、物料搬運等常見場景進行說明便于讀者直接對照操作。同時手冊還針對參數(shù)錯配、通信異常、程序報警等給出了排查思路和安全注意事項能夠幫助使用者減少調(diào)試時間、規(guī)避現(xiàn)場風(fēng)險。已有977人學(xué)習(xí)下載適合需要快速掌握FANUC PNS配置或用于內(nèi)部培訓(xùn)的技術(shù)人員參考。 干這行時間久了你會碰到一個特別典型的場景產(chǎn)線換型PLC那邊噼里啪啦切了一堆信號機器人這邊還得人工跑到示教器上選程序、按啟動。小批量多品種的產(chǎn)線尤其痛苦一天換十幾次型光來回跑就能跑斷腿。FANUC的PNS功能Program Number Select程序號選擇就是專門解決這個問題的——通過外部PLC的8根信號線遠程選擇機器人運行的TP程序并自動啟動最多覆蓋255個程序號。這篇文章是我結(jié)合現(xiàn)場調(diào)試經(jīng)驗整理的一份PNS設(shè)置指導(dǎo)從原理、配置、調(diào)試到常見坑一次說清。適合正在做FANUC機器人產(chǎn)線集成的工程師、現(xiàn)場設(shè)備維護人員以及準備用PNS做遠程啟動但還沒摸清門道的人。1. PNS到底是什么——換產(chǎn)頻繁的產(chǎn)線為什么需要它1.1 自動運行的幾種方式FANUC機器人實現(xiàn)外部自動運行最基礎(chǔ)的方案是“CYCLE START 固定程序”。也就是說PLC給一個啟動信號機器人就運行當前示教器上選中的那個程序。這個方案的問題很明顯換產(chǎn)品就得人去選程序根本做不到全自動換型。再往上走FANUC提供了RSRRobot Service Request和PNSProgram Number Select兩種外部程序選擇功能。RSR的做法是在系統(tǒng)里預(yù)設(shè)最多8個程序外部通過3位二進制信號選其中一個啟動。PNS則是把程序選擇的范圍擴大到了255個用8位二進制信號直接指定程序號。PNS的本質(zhì)就是把“選哪個程序”這件事從人手操作交給PLC邏輯去決定。RSR和PNS的區(qū)別說白了就是“8選1”和“255選1”的區(qū)別。8個程序?qū)Υ蠖鄶?shù)單機工作站夠用但遇到多車型共線、上百種產(chǎn)品配方的情況RSR就捉襟見肘了。PNS還多了一個好處——程序號本身就攜帶了產(chǎn)品信息PLC的工程師可以直接把產(chǎn)品編碼映射到PNS信號上邏輯鏈路更短出問題也好排查。1.2 PNS的工作時序理解PNS關(guān)鍵是理解它的信號時序。整個工作過程可以拆成四步PLC把目標程序號換算成8位二進制輸出到PNS1~PNS8信號上。PLC等這些信號穩(wěn)定后發(fā)出一個PNSTROBE選通脈沖相當于告訴機器人“程序號已經(jīng)準備好了請鎖存”。機器人控制器收到選通脈沖鎖存程序號檢查該編號的TP程序是否存在然后自動啟動這個程序。程序執(zhí)行完畢機器人通過輸出信號通知PLC“本次任務(wù)完成”PLC收到后才能開始下一輪程序號下發(fā)。這個時序里最要命的就是第二步。如果PLC的程序號還沒穩(wěn)定就發(fā)選通脈沖機器人鎖存到的可能是一個中間態(tài)的錯誤程序號結(jié)果就是機器人跑了個錯程序。后面我會專門講這個坑。2. 動手之前選項、系統(tǒng)變量與信號清單2.1 先確認控制裝置有沒有PNS選項PNS不是所有FANUC機器人默認就有的功能它是一個可選功能包。你在配置之前第一件事是確認當前控制裝置R-30iA、R-30iB Mate等都適用是否已經(jīng)激活了PNS選項。確認方法有兩個按下【MENU】→【系統(tǒng)】→【版本】或者【選項】頁面在列表里找有沒有“PNS”相關(guān)的選項名。有的版本顯示為“Program Number Select”。在系統(tǒng)變量里搜$PNS_SELECT如果這個變量存在說明系統(tǒng)支持PNS如果完全搜不到基本可以斷定PNS選項沒激活。順帶提醒一句FANUC還有一款仿真軟件叫Roboguide早期叫NCGuide上面新建控制器時也能勾選PNS選項。我強烈建議你先把配置在仿真環(huán)境里跑通再上真機后面會講具體怎么做。2.2 系統(tǒng)變量$PNS_SELECTPNS功能的總開關(guān)是系統(tǒng)變量$PNS_SELECT。把這個變量設(shè)為1即啟用PNS外部啟動模式。你可以在【MENU】→【系統(tǒng)】→【變量】頁面里找到它也可以直接在KAREL程序里讀寫。這里有個容易混的點RSR和PNS是兩種互斥的啟動模式。如果你的控制器已經(jīng)配過了RSR想改用PNS別忘了把RSR相關(guān)的使能變量復(fù)位否則會出現(xiàn)外部啟動信號發(fā)過去但機器人不響應(yīng)的怪現(xiàn)象。2.3 信號清單與UI/UO映射PNS依賴UOPUser Operator Panel信號體系。UOP是FANUC定義的一套標準信號集合UI是輸入UO是輸出每個信號都有固定的功能含義。PNS相關(guān)的核心信號如下信號名對應(yīng)UOP信號功能說明PNS1UI[9]程序號第1位權(quán)重1PNS2UI[10]程序號第2位權(quán)重2PNS4UI[11]程序號第3位權(quán)重4PNS8UI[12]程序號第4位權(quán)重8PNS16UI[13]程序號第5位權(quán)重16PNS32UI[14]程序號第6位權(quán)重32PNS64UI[15]程序號第7位權(quán)重64PNS128UI[16]程序號第8位權(quán)重128PNSTROBEUI[17]程序號選通脈沖PNSREQUI[18]程序號請求信號程序號的計算方法很直接把導(dǎo)通的PNS信號對應(yīng)權(quán)重加起來。比如要選程序號5就導(dǎo)通PNS1權(quán)重1和PNS4權(quán)重4145。要選程序號200就是PNS128 PNS64 PNS8128648200。注意這里不是順序編號是二進制權(quán)重編碼排查時一定要按權(quán)重逐位核對。PNSREQ這個信號在部分版本里叫PNS請求可以理解為PLC告訴機器人“我準備要下發(fā)程序號了請做好準備”。有的現(xiàn)場圖省事不用PNSREQ只用PNSTROBE觸發(fā)程序選擇也能跑但嚴格按標準時序來穩(wěn)定性會好很多。2.4 I/O映射這一步不能省UOP信號是控制器內(nèi)部的概念要和外部PLC通信必須把UI/UO信號映射到實際的物理I/O或者網(wǎng)絡(luò)I/O上。比如你的PLC通過EtherNet/IP和機器人通信那就要在機器人的I/O配置界面里把UI[9]映射到EtherNet/IP模塊的Input Tag第0位把UI[17]映射到對應(yīng)位以此類推。具體路徑一般是【MENU】→【I/O】→【UOP】→【配置】進去后逐個配置UI/UO信號對應(yīng)的物理地址。不同控制柜和通信協(xié)議的操作界面略有差異但思路是一致的把PNS這一組信號完整映射到PLC能讀寫的地址上。映射完成后建議先做一件事在機器人I/O監(jiān)視界面手動強制PLC側(cè)的對應(yīng)位確認機器人側(cè)能正確收到。這一步能過濾掉一大半“線沒接通”“地址配錯”的低級問題。3. 核心配置把PNS跑通的完整步驟3.1 啟用PNS并設(shè)置好信號映射第一步把$PNS_SELECT設(shè)為1啟用PNS模式。第二步按上一節(jié)的方法把UI[9]到UI[18]這組PNS信號映射到你的通信模塊上。同時把UO狀態(tài)信號也映射好至少要有兩個一個“程序運行中”信號給PLC做聯(lián)鎖一個“程序完成”信號告訴PLC上一輪任務(wù)結(jié)束了。第三步把機器人切到AUTO模式。這是外部啟動的前提條件PNS只能在AUTO模式下響應(yīng)外部啟動信號。T1/T2模式下PNS是不會動作的很多新手第一次調(diào)試時會在T1模式下試半天然后懷疑系統(tǒng)有問題。3.2 TP程序的組織方式PNS模式下的程序組織最簡單、最不容易錯的方案是約定的程序號直接作為TP程序的程序名。比如PLC發(fā)程序號5那就建一個名為“5”的TP程序PLC發(fā)程序號200就建一個名為“200”的TP程序。你沒有聽錯程序名可以用純數(shù)字。如果你們工廠的程序命名規(guī)范要求必須用字母開頭比如“P200”、“WELD_01”那就要引入一個中間映射邏輯。做法是建一個固定程序名的總控程序比如叫“MAIN”然后在里面根據(jù)當前PNS程序號做分支跳轉(zhuǎn)??偪爻绦蚶镒龇种Э梢杂肐F條件加CALL調(diào)用實現(xiàn)判斷邏輯的核心是讀取當前鎖存的PNS程序號。FANUC不同版本的變量名有差異有的版本在TP里可以直接讀到當前PNS編號有的需要借助KAREL程序讀取后寫入寄存器。不管用哪種最終都是一個邏輯程序號 1 → 調(diào)用 WELD_01 程序號 2 → 調(diào)用 WELD_02 程序號 3 → 調(diào)用 SPRAY_03我把這兩種方案都實踐過。程序號對應(yīng)程序名簡單粗暴適合程序數(shù)量不多、程序名可以由工程師自由定義的場景??偪胤种У姆绞角捌谂渲昧看笠稽c但程序命名規(guī)范、后期維護方便尤其適合上百個程序的場合。3.3 程序里別忘了CLR_PNSPNS模式里有一個TP指令特別容易遺漏叫CLR_PNS它的作用是清除PNS程序號選擇狀態(tài)。程序執(zhí)行完后控制器不會自動清除PNS狀態(tài)如果你下一個周期還發(fā)同樣的程序號沒有CLR_PNS的復(fù)位動作部分版本會出現(xiàn)啟動信號雖然給了、但程序不重新運行的情況。標準做法是在每個PNS程序的末尾加上CLR_PNS指令。加了這條指令后控制器會復(fù)位內(nèi)部的PNS選通狀態(tài)同時向PLC發(fā)出一個“程序完成”的輸出信號這樣PLC才能確認“上一輪任務(wù)真正結(jié)束了可以發(fā)下一輪程序號”。一個典型的PNS程序結(jié)構(gòu)大概是這樣的1: J P[1] 50% FINE ; 2: LBL[1] ; 3: CALL WELD_MAIN ; 實際工藝調(diào)用 4: J P[2] 50% FINE ; 5: CLR_PNS ; 清除PNS選通狀態(tài)如果你用的是“程序名編號”的方案那每個數(shù)字編號的程序末尾都要加這一句別漏。3.4 PLC端下發(fā)程序號的邏輯機器人端配置完成后輪到了PLC端。PLC的主要工作是把產(chǎn)品代碼換算成8位PNS二進制信號按正確時序輸出。這里給一段ST風(fēng)格的偽代碼方便理解時序(* 假設(shè)產(chǎn)品代碼存儲在變量 ProductCode *) (* 第一步輸出程序號二進制信號 *) PNS1 : ProductCode.0; PNS2 : ProductCode.1; PNS4 : ProductCode.2; PNS8 : ProductCode.3; PNS16 : ProductCode.4; PNS32 : ProductCode.5; PNS64 : ProductCode.6; PNS128 : ProductCode.7; (* 第二步延時50ms等信號穩(wěn)定 *) TON(IN : TRUE, PT : T#50MS); (* 第三步發(fā)選通脈沖 *) PNSTROBE : TRUE; TON(IN : TRUE, PT : T#200MS); PNSTROBE : FALSE;核心時序原則是先輸出程序號延時穩(wěn)定再發(fā)選通脈沖然后復(fù)位。程序號的穩(wěn)定時間建議至少留50ms選通脈沖寬度建議100ms以上。有些工程師圖省事程序號和選通脈沖同一掃描周期輸出這在PLC掃描時間短、機器人掃描時間長的情況下很容易丟信號或者收到錯誤程序號。3.5 用Roboguide離線驗證強烈建議所有人在真機調(diào)試前先用Roboguide或者NCGuide把PNS邏輯完整驗證一遍。在Roboguide里新建控制裝置時勾選PNS選項。然后按前面步驟配置$PNS_SELECT、映射UO/UI信號。Roboguide里有一個I/O仿真面板可以手動強制UI信號狀態(tài)。你可以模擬PLC的時序一步步給PNS1~PNS8賦值再給PNSTROBE一個脈沖觀察機器人是否按預(yù)期啟動了對應(yīng)編號的程序。這一步的成本極低但能幫你提前發(fā)現(xiàn)程序組織邏輯的問題。我曾經(jīng)在仿真里發(fā)現(xiàn)單純給PNSTROBE脈沖而PNSREQ沒給的話機器人根本不會鎖存程序號。這種問題如果在現(xiàn)場排查至少半天時間就進去了。4. 遠程啟動的調(diào)試與報警排查4.1 按下啟動沒反應(yīng)從哪開始查最經(jīng)典的現(xiàn)場問題PLC那邊信號都給了程序號也發(fā)過去了機器人紋絲不動。我的排查習(xí)慣是下面這個順序第一步確認機器人處于AUTO模式示教器上的運行狀態(tài)沒有報警、沒有暫停。外部急停、安全門、防護圍欄互鎖信號任何一個沒復(fù)位PNS都不會動作。第二步在機器人I/O監(jiān)視界面看UI[9]~UI[18]的實時狀態(tài)和PLC側(cè)實際輸出的信號逐位核對。這一步能快速判斷是通信映射問題還是PLC邏輯問題。如果機器人側(cè)信號和PLC側(cè)不一致查通信模塊的映射和字節(jié)序。第三步如果信號都對查$PNS_SELECT是否真的是1PNS選項是否激活。有的系統(tǒng)里$PNS_SELECT有多個取值有的版本是“0禁用、1啟用PNS、2啟用RSR”改錯了會導(dǎo)致啟動命令不生效。第四步看程序號對應(yīng)的TP程序是否存在。PNS發(fā)程序號50但控制器里根本沒有名為“50”的程序自然啟動不了。排查方法是在示教器程序列表里確認一下。4.2 程序號不對、選錯程序的坑比完全沒反應(yīng)更麻煩的是程序號發(fā)出了機器人也動了但跑的不是目標程序。這種問題十有八九出在信號映射或編碼時序上。我舉一個真實案例?,F(xiàn)場PLC發(fā)程序號7機器人跑的是程序號3。逐位核查后發(fā)現(xiàn)PLC工程師把PNS信號的權(quán)重搞反了他把PNS1對應(yīng)到了程序號的第3位PNS4對應(yīng)到了第1位。7的二進制是00000111按錯誤映射換算過來控制器鎖存到的就是123結(jié)果自然是錯的。另有一起是字節(jié)序問題。用的是EtherNet/IP通信PLC側(cè)的數(shù)據(jù)排列是高字節(jié)在前機器人側(cè)配置沒調(diào)整導(dǎo)致PNS8~PNS128這一組高權(quán)重信號全部錯位。程序號超過7就亂套。這種問題最隱蔽排查時一定要逐位對照不要只看“有信號”就以為是對的還要看信號落到了哪一位上。還有一個常見原因PLC的程序號輸出和PNSTROBE選通脈沖之間的穩(wěn)定延時太短。特別是PLC用了立即刷新輸出而機器人側(cè)通信模塊的刷新周期和PLC不同步程序號還沒穩(wěn)定選通就來了。這個我在前面已經(jīng)強調(diào)過穩(wěn)定時間至少留50ms。4.3 偶發(fā)性故障與時序干擾有時候不是每次都不行而是“十次里面壞一次”這種偶發(fā)問題最磨人。我的經(jīng)驗是只要程序號不對優(yōu)先懷疑時序問題而不是先懷疑通信模塊故障。排查思路是讓PLC把每次下發(fā)的程序號、PNSTROBE時標、機器人側(cè)實際接收到的信號狀態(tài)全部記錄下來出現(xiàn)問題后對比兩邊的時間戳。有條件的話可以在機器人側(cè)用后臺KAREL任務(wù)記錄UO/UI狀態(tài)變化再導(dǎo)出時間序列。很多偶發(fā)情況的根源是PLC程序其他網(wǎng)絡(luò)對PNS輸出字做了意外的改寫。比如某段初始化程序在特定條件下把輸出字清零了恰好和PNSTROBE的上升沿撞在一起。如果你在PLC端查不到問題就把PNS信號從普通輸出字挪到專用的、沒有其他程序讀寫的地址上。4.4 常見報警與根因?qū)φ請缶?現(xiàn)象排查方向程序不存在類報警程序號對應(yīng)TP程序是否已創(chuàng)建程序名是否匹配外部啟動無響應(yīng)模式是否AUTO、急停/門聯(lián)鎖是否復(fù)位、$PNS_SELECT是否使能偶發(fā)跑錯程序PNS權(quán)重是否映射錯位、穩(wěn)定延時是否足夠、PLC是否意外改寫輸出程序跑完后無法再次啟動程序末尾是否缺少CLR_PNS指令PNSTROBE給了機器人不鎖存PNSREQ是否同時有效、UI映射是否沖突、通信字節(jié)序是否正確這些報警有一個共性根因——信號時序不滿足。所以我在現(xiàn)場調(diào)試時習(xí)慣把PLC側(cè)和機器人側(cè)的信號狀態(tài)通過HMI做一個“PNS調(diào)試頁面”把8位PNS信號的實時狀態(tài)、選通脈沖狀態(tài)、當前鎖存程序號全部顯示出來。出了毛病一眼就能定位。5. 進階KAREL與后臺任務(wù)讀取PNS狀態(tài)5.1 什么時候需要上KAREL用“程序名編號”的方式雖然簡單但有些場景玩不轉(zhuǎn)。比如程序號不是一個簡單的編號而是一個編碼規(guī)則復(fù)雜的產(chǎn)品代碼或者PNS程序號需要與MES系統(tǒng)里的配方號聯(lián)動。這時需要在后臺做一層邏輯轉(zhuǎn)換把PNS程序號翻譯成實際要執(zhí)行的工藝程序。FANUC系統(tǒng)支持KAREL語言編寫后臺任務(wù)在后臺任務(wù)里可以讀取PNS相關(guān)的系統(tǒng)狀態(tài)變量做判斷和轉(zhuǎn)換再通過寄存器或標志位告訴TP程序該執(zhí)行哪套工藝。5.2 $SBR[n].$PARAM[47]的用途FANUC系統(tǒng)里$SBR[n]代表后臺任務(wù)Background Routine相關(guān)系統(tǒng)變量$PARAM[i]則表示該任務(wù)的參數(shù)寄存器。熱詞里提到的$SBR[n].$PARAM[47]在PNS相關(guān)的KAREL應(yīng)用中通常用于后臺任務(wù)之間或后臺任務(wù)與主任務(wù)之間傳遞控制參數(shù)。實際項目中我見過有人用這個變量在后臺任務(wù)里記錄“上一次PNS選擇的歷史程序號”配合報警日志做追溯也有人用它作為PLC與KAREL后臺任務(wù)之間的臨時數(shù)據(jù)交換區(qū)。不過一個現(xiàn)實情況是$SBR[n].$PARAM[47]的含義在不同軟件版本、不同選項配置下可能有差異。用之前一定要在Roboguide的KAREL調(diào)試窗口里監(jiān)視這個變量確認它的實際取值和變化規(guī)律再把它寫進正式邏輯里。盲抄網(wǎng)上的代碼很容易踩版本差異的坑。5.3 KAREL和PLC的分工我的建議是KAREL只做一件事把PNS程序號轉(zhuǎn)換成工藝程序名或者做PNS狀態(tài)的復(fù)雜判斷。所有的信號收發(fā)、時序控制、聯(lián)鎖互鎖都留在PLC里做。不要試圖用KAREL去替代PLC的時序邏輯KAREL的一個優(yōu)勢是靈活一個劣勢也是靈活——寫得隨意了排查起來非常痛苦。舉個例子我在一個多車型項目中PLC通過PNS發(fā)的是車型代碼1~12但每個車型對應(yīng)的工藝程序在機器人側(cè)是“MODEL_01_WELD”、“MODEL_02_WELD”這種命名。如果用“程序名編號”的方式就得在PLC側(cè)維護一張車型到程序號的映射表。后來改成KAREL后臺任務(wù)后車型代碼直接進KAREL程序內(nèi)部做字符串拼接和校驗再通過寄存器告訴TP程序要調(diào)用哪個程序。這樣PLC側(cè)只關(guān)心信號時序程序選擇的業(yè)務(wù)邏輯全部收攏在KAREL里兩邊各管一頭邏輯清晰了很多。最后再說一個容易被忽略的細節(jié)PNS程序啟動后如果中途PLC切了新的程序號過來機器人不會立刻響應(yīng)。當前程序會繼續(xù)執(zhí)行完直到收到新的選通脈沖并且舊程序已經(jīng)完成復(fù)位才會執(zhí)行下一次切換。這是FANUC的安全機制不是故障?,F(xiàn)場調(diào)試時很多人以為“切換程序號就能中斷當前程序”發(fā)現(xiàn)不行就以為是壞了其實是機制設(shè)計如此。理解了這一點你再去設(shè)計PLC端切換時序就不會卡在這種“偽故障”上了。本文還有配套的精品資源點擊獲取