、程序結(jié)構(gòu)與聯(lián)鎖調(diào)試全解析)
調(diào)試汽車焊裝線的兄弟應該都有過這種感受一家焊裝車間里兩側(cè)排開十幾臺Fanuc機器人夾具一個個合攏焊槍火花噼里啪啦節(jié)拍再緊湊、軌跡再花哨背后都得靠一條西門子S7-1500當大腦。今天我就以手里這套“西門子PLC1500大型程序Fanuc機器人汽車焊裝包”為主線從網(wǎng)絡組態(tài)、程序結(jié)構(gòu)、機器人側(cè)指令到聯(lián)鎖調(diào)試完整拆一遍。我盡量不繞彎子說的都是現(xiàn)場實操里真實遇到的東西尤其適合正在做焊裝集成、機器人工作站想升級成整線控制的工程師參考。這套東西說不上神秘但里面有一堆細節(jié)不趟幾次坑根本注意不到。比如Profinet設備名匹配問題、機器人握手信號誰先誰后、夾具氣缸和機器人動作怎么互鎖、Fanuc側(cè)IO地址映射怎么和PLC對上。每一個環(huán)節(jié)掉鏈子整條線都跑不順。下文按設計、編程、聯(lián)調(diào)、故障排查的順序一層層講清楚。1. 項目整體架構(gòu)與選型邏輯1.1 為什么汽車焊裝線認準S7-1500先說選型。焊裝線不是隨便一臺PLC就能扛下來的。汽車焊裝線的規(guī)模一般是幾十個工位、幾百個焊點夾具氣缸、機器人、焊機、滾床滑臺全部塞進去IO點輕松上千復雜點的幾千點都有。程序里要處理的遠不止開關(guān)量邏輯還有安全聯(lián)鎖、手動/自動模式切換、節(jié)拍統(tǒng)計、報警歸檔、和MES通信用數(shù)據(jù)等。這種體量下S7-1200就明顯吃力了——CPU存儲空間小在線程序修改的余量有限通信能力也弱做幾個工作站也許能對付整線根本拉不動。S7-300呢屬于老平臺組態(tài)要裝Step7硬件診斷和TIA Portal比差距明顯很多維護工程師現(xiàn)在都不愿意碰。所以現(xiàn)在的汽車焊裝項目基本都以S7-1500為主流。我接觸過的焊裝線中小型項目用CPU 1513-1PN比較多再大一點直接上1515-2PN如果線里還帶軸運動控制就選1516或1517。S7-1500的優(yōu)點不光是硬件性能高更大的優(yōu)勢是跟TIA Portal配合得非常順暢從硬件組態(tài)、網(wǎng)絡配置、程序變量表到診斷功能全在一個項目文件里完成?,F(xiàn)場要改一個點位在線改完直接下載對應邏輯塊不用停機重新編譯整個工程這對動輒十幾臺機器人的焊裝線太重要了。1.2 網(wǎng)絡拓撲Profinet環(huán)上的設備從站焊裝車間的電氣環(huán)境是出了名的惡劣焊機群一啟動電流沖擊大電磁干擾強空間利用率又高線槽里全是動力線和信號線。所以網(wǎng)絡架構(gòu)基本都走工業(yè)以太網(wǎng)Profinet通訊電纜用屏蔽雙絞線布線時候也要刻意和焊機電纜錯開離動力線遠了信號才穩(wěn)。典型的焊裝線控制拓撲很簡單一條Profinet主環(huán)上掛著PLC、ET200SP分布式IO從站、Fanuc機器人控制柜、焊接控制器、以及工位操作面板。平時我習慣在每個機器人圍欄附近放一個ET200SP從站就近接入夾具閥島、磁性開關(guān)、安全門信號省去大量遠距離走線。交換機用西門子SCALANCE系列項目里至少劃兩個網(wǎng)段設備級Profinet控制網(wǎng)段以及上層車間MES/上位機數(shù)據(jù)網(wǎng)段中間用交換機隔離或路由不然數(shù)據(jù)擁塞會把實時控制拖垮。Fanuc機器人接入Profinet一般兩種方式老一點的控制柜用Profibus DP網(wǎng)關(guān)新的R-30iB Plus控制柜則是在柜內(nèi)裝Profinet接口板直接作為Profinet從站掛在PLC下面。機器人這邊的信號分兩類一是數(shù)字量輸入輸出DI/DO用來跑握手和聯(lián)鎖二是組輸入輸出GI/GO用來批量傳遞位置號、模式號這類多bit數(shù)據(jù)。PLC通過Profinet直接讀寫這些映射地址相當于把機器人當成一個大IO從站來用。這里要特別提醒Profinet從站是按設備名稱識別的不是按IP地址。這是新手最容易踩的坑。很多人改完網(wǎng)口IP發(fā)現(xiàn)PLC還是找不到設備其實是因為設備名和項目組態(tài)里的名稱不一致。所以現(xiàn)場做機器人或ET200SP接入時第一件事就是核對設備名是否嚴格匹配區(qū)分大小寫。換過從站模塊后也得檢查設備名是否丟失。2. 大型PLC程序結(jié)構(gòu)化落地2.1 程序塊、數(shù)據(jù)塊與UDT的規(guī)劃大型焊裝程序最怕寫完半年后發(fā)現(xiàn)沒法維護。干到項目后期動一個點牽一發(fā)動全身所以程序結(jié)構(gòu)必須在寫第一行代碼前就規(guī)劃好。以TIA Portal里常見的組織方式為例OB1是主循環(huán)負責調(diào)度各功能塊OB100負責上電初始化把系統(tǒng)狀態(tài)置為初始模式把所有機器人輸出、夾具輸出清零防止上電瞬間設備亂動OB82之類的診斷OB則負責收集模塊診斷信息。真正干活的代碼全部拆成FB和FC按工藝功能分模塊夾具控制FB、機器人交互FB、焊機控制FB、滑臺輸送FC、節(jié)拍統(tǒng)計FC、報警處理FC。每個模塊獨立成塊外部只通過輸入輸出參數(shù)交互。數(shù)據(jù)塊方面我習慣用一個公共DB存系統(tǒng)級變量比如當前模式、節(jié)拍總數(shù)、報警代碼。再用多個設備DB管理夾具、機器人、滑臺各自的運行狀態(tài)。DB的規(guī)劃直接影響維護體驗例如所有夾具的狀態(tài)數(shù)據(jù)如果擠在一起調(diào)試時找一個點位要翻半天按工位或按夾具分組見名知意就清楚多了。UDT自定義數(shù)據(jù)類型更是結(jié)構(gòu)化編程的利器。比如一個夾具的數(shù)據(jù)類型可以定義成UDT_Fixture { ClampCmd : Bool; // 夾緊命令 UnclampCmd : Bool; // 松開命令 ClampDone : Bool; // 夾緊到位反饋 UnclampDone : Bool; // 松開到位反饋 Fault : Bool; // 夾具故障 Timeout : Time; // 動作超時時間 }然后寫一個通用的FB_FixtureControl內(nèi)部只處理一組夾具的邏輯傳入的背景DB是具體實例。這條線上有20個夾具程序里就調(diào)用20次同一個FB每個實例用不同的背景DB。這樣做極大減少了重復代碼。后期要改夾具邏輯比如增加一個“夾緊后保壓補償”只改FB_FixtureControl一處所有夾具自動生效。這種修改方式對幾十個工位的焊裝線來說簡直是救命的。2.2 夾具與氣動元件控制的防呆設計焊裝夾具的氣動控制看似簡單其實細節(jié)最多。每個夾具氣缸上一般都裝了磁性開關(guān)檢測兩個極限位置夾緊到位和松開到位。程序里不能只盯著一個方向要兩個方向都監(jiān)控并做超時。一般動作時序是這樣收到自動循環(huán)啟動信號PLC輸出夾緊閥夾具開始動作如果超過2秒還沒收到夾緊到位反饋就要置超時報警并且禁止機器人進入。反過來松開也一樣松開超時不能放行下一個工件。這樣做的原因很直接一旦夾具沒有真正閉合機器人帶著焊槍進去輕則撞槍重則撞壞圍欄和機器人本體。這條安全邏輯不能省錢也不能靠延時繞過別人可能覺得“多等半秒就到位了拍一下信號就行”這個想法在調(diào)試期看著省事量產(chǎn)運營期必定吃大虧。雙電控閥的使用也有講究。有些閥體在程序掃描周期內(nèi)如果兩個輸出同時置ON會執(zhí)行不了換向動作實際就是卡在中間位。所以在FB里面輸出夾緊前必須先復位松開輸出輸出松開前先復位夾緊輸出中間最好留一個掃描周期的間隔或者直接定義互鎖位。還要講一下傳感器信號抖動。磁性開關(guān)安裝在氣缸表面長期震動后觸點可能會產(chǎn)生抖動。如果程序只是簡單讀取偶爾就會出現(xiàn)瞬間的丟信號。我一般會在輸入處理后加一個濾波延時比如信號持續(xù)20ms以上才認為有效這樣能濾掉大部分抖動又不至于影響實際節(jié)拍。2.3 PLC與Fanuc機器人的信號握手邏輯焊裝線里PLC和機器人之間的交互本質(zhì)是“請求-允許-反饋-完成”的循環(huán)。以一臺機器人加一個夾具工位為例標準握手順序是這樣的PLC判斷夾具已夾緊、無急停、無報警向機器人發(fā)出“允許進入”信號。機器人收到后運行到焊接位置到位后向PLC發(fā)“焊接準備完成”信號。PLC收到后給焊機發(fā)允許焊接信號開始焊接流程。焊接完成焊機反饋“焊接完成”給PLCPLC通知機器人退出。機器人退出并反饋“已退出”PLC才允許松開夾具放行工件。這些信號在PLC側(cè)我習慣用一個FB_RobotHandshake封裝。內(nèi)部含兩個計時器請求超時計時和完成超時計時。不管機器人哪個環(huán)節(jié)卡住了超過設定時間就報故障并停止循環(huán)。下面是一張我常用的信號定義表地址按實際工程會變但邏輯關(guān)系可以照搬信號方向信號名稱PLC側(cè)變量Fanuc側(cè)IO說明PLC→機器人允許進入RB_Enter_OKDI[10]機器人可以進入夾具區(qū)域PLC→機器人允許焊接RB_Weld_OKDI[11]機器人可以啟動焊槍焊接PLC→機器人急停復位確認RB_ESR_OKDI[12]安全回路已復位機器人→PLC請求進入RB_Req_InGI[1]機器人申請進入焊接位機器人→PLC到位反饋RB_At_Home / RB_At_PosGI[2]機器人已到指定位置機器人→PLC焊槍打開確認RB_Gun_OpenGI[3]焊槍已打開可以退出機器人→PLC程序號RB_Program_NoGI[10]當前調(diào)用程序編號機器人→PLC機器人報警RB_AlarmGI[11]機器人故障信號這里特別注意機器人側(cè)信號映射如果做反了現(xiàn)場調(diào)試會非常痛苦。我吃過一次虧機器人發(fā)出的“到位”信號在Profinet網(wǎng)關(guān)里映射錯了一位PLC這邊死活等不到后來發(fā)現(xiàn)是原來的工程師在機器人側(cè)把GI[2]和GI[3]接反了。排查了半天一頁頁地址表核對才發(fā)現(xiàn)。所以信號表下發(fā)之前必須和機器人工程師一起在柜門貼一份逐位打點。2.4 狀態(tài)機與手動/自動模式設計焊裝線程序里的狀態(tài)機是保證設備邏輯不混亂的核心。我把一個工位的自動循環(huán)流程拆成六個基本狀態(tài)IDLE初始空閑CLAMP夾具夾緊ROBOT_IN機器人進入焊接位置WELD執(zhí)行焊接ROBOT_OUT機器人退出UNCLAMP夾具松開放行在程序里用一個整型變量Step表示當前狀態(tài)。每個狀態(tài)都有獨立的時間性能監(jiān)控超時就報錯讓設備停在當前狀態(tài)不能直接往下跳。這種設計的好處是排故障時只要看Step到了哪一步、哪個信號沒回來問題定位非???。很多新手寫程序喜歡用一串MOVE和SET直接跳狀態(tài)狀態(tài)之間沒有嚴格條件設備偶爾就會亂跳治標不治本。手動模式則是自動模式的地基我用的是“單步屏蔽聯(lián)鎖”的方法手動狀態(tài)下可以單獨點動夾具、機器人、滑臺方便調(diào)試工人檢查每個動作。這里要注意手動模式下必須繞過機器人的自動進入信號但不允許繞過安全門和急?;芈贰7駝t調(diào)試時一個人在圍欄里調(diào)示教器另一個人在電柜前操作PLC稍不注意就出安全事故。3. Fanuc機器人側(cè)程序與指令實戰(zhàn)3.1 機器人程序框架與IO映射Fanuc機器人端的TP程序邏輯上更像一個大型流程控制程序。日??爝f工裝大多數(shù)情況會用一個大主程序做主分支按模式去調(diào)用不同的子程序。比如主程序里先判斷當前PLC給的是手動模式信號還是自動模式信號自動模式下再去選擇焊接程序號調(diào)用對應子程序執(zhí)行焊接。Fanuc的IO映射不是隨便填的。無論是控制柜上的標準IO板還是Profinet接口板進來的IO都需要通過機器人示教器上的IO配置界面確認地址對應關(guān)系。常見做法是把PLC進來的DI[10]、DI[11]這類信號映射到程序里實際用到的邏輯。曾經(jīng)遇到一個項目PLC側(cè)發(fā)了置位信號機器人示教器上也看到對應點亮了但程序里怎么判斷都是ON后來發(fā)現(xiàn)是IO地址重復映射兩個信號源都指向同一個物理地址導致沖突。3.2 焊裝常用指令速覽很多人找“Fanuc機器人指令大全pdf”我在這直接挑焊裝線上最常用的幾條講一講省得大家到處翻手冊。SET和PULSESET DO[12]是把數(shù)字量輸出置ON可以用于給PLC反饋機器人狀態(tài)。PULSE則是輸出一個指定寬度的脈沖常用于給焊機或PLC一個短暫啟動信號。WAIT指令機器人程序里最常用的等待指令。比如WAIT DI[10]ON TIMEOUT30意思是等待DI[10]變成ON如果30秒內(nèi)沒等到程序會報超時錯誤跳到指定的報警行。這里的超時時間不能拍腦袋隨便填要根據(jù)工位節(jié)拍來估算比如允許進入信號一般在PLC發(fā)出后1-2秒內(nèi)到達超時給到5秒就足夠給太長了故障響應就慢。OFFSET和PR偏移機器人焊接不同焊點時經(jīng)常需要基于基準位置做偏移。用位置寄存器PR存放偏移值在運動指令后面加OFFSET執(zhí)行比如L P[1] 300mm/sec FINE OFFSET這個指令效果是目標點從P[1]的實際存儲值基礎上疊加當前位置寄存器中的偏移。焊裝線上新產(chǎn)品切換時只要把偏移寄存器值更新就能快速適配不同車型的焊點位置省去重新示教整個程序。焊機聯(lián)動機器人到達焊點后程序通常這樣處理L P[5] 500mm/sec CNT50 SET DO[20] ; 焊機啟動 WAIT DI[21]ON TIMEOUT2 ; 等焊機確認 PULSE DO[20] ; 關(guān)閉焊機啟動信號焊機控制信號不是一直保持OFF/ON而是用脈沖來觸發(fā)這樣能降低信號干擾背景下的誤觸發(fā)概率。對于伺服焊槍還需要額外處理加壓信號確保電極壓緊工件后焊機才通電。3.3 節(jié)拍優(yōu)化與焊接參數(shù)控制焊裝線最終產(chǎn)量考核的就是節(jié)拍機器人動作快慢直接影響整線輸出。我見過不少項目程序?qū)懙脹]毛病但節(jié)拍就是壓不下來原因往往在幾個容易被忽視的地方。運動指令的過度參數(shù)很關(guān)鍵。如果每個焊點都走FINE精確到位機器人會在每個點都減速再啟動這種啟停動作對節(jié)拍損耗非常大。在很多不需要精確定位的過渡點用CNT50或CNT100替代FINE機器人就能圓滑地拐過去不必完全停下。反正機器人有位置補償能力路徑上小拐角用CNT處理不影響最終焊點精度但節(jié)拍差出來可能達10%以上。焊接順序也要優(yōu)化。離線編程出來的焊點順序不一定是最優(yōu)路徑。很多項目只求焊點全覆蓋忽略了機器人要從工件這頭飛到那頭浪費的時間。合理方式是調(diào)整焊點路徑讓機器人按最短路徑走避免大幅來回甩臂。焊接電流、焊接時間、電極壓力這些參數(shù)雖然主要在焊機上設定但機器人程序也會間接影響焊接質(zhì)量。比如機器人帶動伺服焊槍時加壓時間要足夠壓力穩(wěn)定后再允許焊機通電。程序里可以用TAU定時等待指令控制加壓時間這個時間不能過長否則影響節(jié)拍也不能過短否則虛焊飛濺跟著來。現(xiàn)場通常通過試片找出最佳區(qū)間我當時調(diào)一個點焊參數(shù)從加壓0.2秒調(diào)到0.3秒飛濺明顯減少節(jié)拍只慢了0.1秒完全能接受。4. 聯(lián)鎖安全設計與故障排查實錄4.1 安全回路和聯(lián)鎖原則焊裝線的安全設計是整個項目里最沒有商量余地的一環(huán)。很多設備上S7-1500是標準型號并不帶安全功能所以急?;芈方^對不能全部依賴PLC程序去處理。我始終堅持的原則是硬安全回路必須用安全繼電器或安全PLC搭主要承擔急停、安全門、光柵的物理切斷動作PLC程序里面的聯(lián)鎖是設備動作順序?qū)用娴倪壿嫳Wo。標準的焊裝線安全回路通常包括全線急停串成一個雙回路進入機器人圍欄的安全門裝雙門磁開關(guān)圍欄入口處安裝光柵。任何一個信號斷開機器人控制柜必須立即收到“安全信號斷開”的輸入進入安全停止狀態(tài)。Fanuc機器人控制柜的急?;芈肥峭ㄟ^外部的安全輸入端子直接切斷伺服電源的這和PLC里報一個“急停觸發(fā)”報警完全是兩回事。調(diào)試時如果發(fā)現(xiàn)某個急停按鈕按下了但PLC沒報警不要急著改程序先檢查按鈕接線和端子位置。PLC側(cè)的聯(lián)鎖邏輯重點保證兩件事一是任何危險動作前必須有人員不在危險區(qū)的確認二是設備之間的動作順序必須互鎖。比如夾具沒有完全夾緊機器人進入信號就不能置ON機器人沒有退出到安全位置夾具松開信號就不能置ON。這套邏輯做到位后即使有人誤操作觸摸屏也不容易造成設備碰撞。4.2 調(diào)試中最常見的六個問題焊裝線調(diào)試階段反復出現(xiàn)的有六個問題寫出來大家對照排查會方便不少。第一個是Profinet從站掉線?,F(xiàn)象是PLC里某個機器人或者ET200SP從站突然報“設備無響應”IO全部變0。先看從站模塊上的指示燈是不是在閃然后再用TIA Portal在線診斷看網(wǎng)絡有沒有丟幀。多數(shù)情況下是設備名稱不匹配或者IP沖突少部分是因為網(wǎng)線接頭被拉車頻繁拉扯松動。第二個是機器人急停釋放了但PLC還是顯示急停狀態(tài)。這個多數(shù)不是硬回路問題而是程序里用了置位保持的信號。急停觸發(fā)置位一個報警位后續(xù)恢復條件沒寫全導致即使物理急停釋放了報警位還是保持。排查方向是先看PLC輸入點有沒有回來再查程序里復位條件是否滿足。第三個是夾具夾緊到位和機器人進入信號互相卡死。夾具沒到位機器人無法進入機器人不進入有些項目里PLC又收不到信號無法自動復位。這類問題的根源是狀態(tài)機初始條件設計不完整。解決辦法是手動模式下可以獨立復位各個工位狀態(tài)自動循環(huán)重新從第一步初始化。第四個是焊接過程飛濺大。不能只盯著焊接參數(shù)你先檢查電極頭磨損情況再檢查電極壓力是否足夠冷卻水流量是否正常最后才考慮電流和通電時間要不要微調(diào)。很多新人是焊機參數(shù)亂調(diào)一氣結(jié)果質(zhì)量越調(diào)越差。第五個是程序下載導致設備突然亂動。在線修改時下載設置要選“只下載邏輯塊”不要勾選“下載硬件配置”。一旦把硬件配置也下載了CPU會停機重新啟動機器人輸出全部刷新現(xiàn)場很容易出狀況。這種低級事故其實完全可以避免。第六個是機器人側(cè)IO映射對不上。排查方法是先讓PLC強制輸出一個DO看機器人示教器上對應點有沒有亮反過來在機器人側(cè)置位一個輸出看PLC輸入點有沒有變化。一段一段排查很快就能定位到是映射問題還是硬件問題。4.3 排查思路與調(diào)試方法真正高效的排查靠的是方法而不是運氣。焊裝線調(diào)試我不推薦一上來就直接跑全自動那是給自己挖坑。正確套路是先做單工位手動再做幾個工位聯(lián)動最后才整線全自動。動手寫程序前先把信號表完整起草出來像前文那種“PLC箭頭機器人”的表格貼在每個電柜蓋板上現(xiàn)場對點信號往來一目了然。調(diào)試時每改一個點就去電柜前核對一次信號。這個習慣看著土但確實避免了很多低級錯誤。排查過程中PLC側(cè)用TIA Portal的在線表監(jiān)控輸入輸出值機器人側(cè)用示教器查看IO畫面。兩邊同時觀察信號邏輯對不對一眼就能看出來。必要時可以用強制執(zhí)行某個輸出但要格外小心特別是安全回路相關(guān)的信號不能強制只能物理短接測試并且測試時圍欄內(nèi)絕對沒有人。整套調(diào)試流程走完我個人最大的體會是焊裝線項目能順利交付靠的不是某個絕活而是把每一個看似簡單的小信號、小超時、小互鎖都做到可預期。我每次都會先花一天把所有握手條件和邊界條件用表格捋完再動手寫代碼半自動模式先走三五個循環(huán)每個焊點都看一下焊接質(zhì)量再切全自動。這套習慣幫我在一個大線項目里省了至少一周的聯(lián)調(diào)時間。你接手類似項目時也別急著看別人程序怎么寫的先把信號表理清楚再好的程序也比不過信號邏輯的自洽。