組裝線PLC實(shí)戰(zhàn))
前段時(shí)間交付了一條小型自動(dòng)組裝生產(chǎn)線控制系統(tǒng)用的歐姆龍CP1H PLC。這套程序的特別之處在于氣缸動(dòng)作、輸送帶啟停、三色燈這些邏輯控制全部走梯形圖而配方選擇、產(chǎn)量統(tǒng)計(jì)、串口掃碼解析、進(jìn)制轉(zhuǎn)換這類跟數(shù)據(jù)打交道的活兒全部用ST語言處理。兩者在同一個(gè)工程里共存各干各的活互不干擾。做完這個(gè)項(xiàng)目之后我最大的體會(huì)是——ST語言和梯形圖不是替代關(guān)系而是互補(bǔ)關(guān)系。你要是能把這兩套東西配合好寫出來的程序既好讀又好看而且邏輯維護(hù)起來輕松得多。這篇內(nèi)容不打算講枯燥的理論就圍繞這條自動(dòng)組裝線把程序架構(gòu)、IO規(guī)劃、典型代碼段、調(diào)試中踩過的坑都攤開來說。做設(shè)備維護(hù)的、寫PLC程序的、甚至剛?cè)胄邢肓私釹T語言怎么用的朋友應(yīng)該都能從這里找到點(diǎn)有用的東西。1. 項(xiàng)目背景與控制需求拆解1.1 這條自動(dòng)組裝線要實(shí)現(xiàn)什么先交代一下項(xiàng)目背景。客戶要組裝一個(gè)小型的機(jī)電產(chǎn)品工藝路線不算復(fù)雜但節(jié)奏要求比較高上料、定位夾緊、壓裝、檢測、分揀輸出五個(gè)工位目標(biāo)節(jié)拍是單件12秒以內(nèi)。線體上配了兩臺(tái)氣缸、一臺(tái)夾緊氣缸還有一臺(tái)步進(jìn)電機(jī)負(fù)責(zé)工位間的傳送定位另外有一個(gè)掃碼槍需要讀取工件上的條碼信息把數(shù)據(jù)存入PLC用于追溯。工藝順序大致是這樣人工把工件放到上料位光電傳感器檢測到有料后定位氣缸伸出把工件卡住接著壓裝氣缸下壓完成裝配壓裝到位后升起然后步進(jìn)電機(jī)把托盤推到檢測工位檢測傳感器判斷裝配結(jié)果合格的送到下料位不合格的推到NG料箱。這個(gè)流程聽起來簡單但真正寫程序的時(shí)候你會(huì)發(fā)現(xiàn)里面藏著不少細(xì)節(jié)氣缸的動(dòng)作必須嚴(yán)格按順序來不能同時(shí)伸出縮回掃碼槍的數(shù)據(jù)是ASCII字符串需要解析成能用的條碼編號(hào)檢測結(jié)果要跟當(dāng)前工件的條碼綁定方便客戶做質(zhì)量追溯產(chǎn)量、合格率這些數(shù)據(jù)要實(shí)時(shí)統(tǒng)計(jì)并顯示在觸摸屏上。這些都是程序?qū)用娴脑O(shè)計(jì)問題不是簡單把IO接上就能解決的。1.2 從控制需求反推程序結(jié)構(gòu)我的習(xí)慣是先列控制需求清單再?zèng)Q定用什么程序結(jié)構(gòu)來實(shí)現(xiàn)。這條線整理下來大概是這幾類順序控制五個(gè)工位的氣缸、傳送、分揀必須按步驟執(zhí)行步與步之間有明顯轉(zhuǎn)移條件手動(dòng)調(diào)試每個(gè)氣缸、電機(jī)都要能單獨(dú)動(dòng)作方便裝配調(diào)試和故障處理數(shù)據(jù)處理?xiàng)l碼解析、產(chǎn)量統(tǒng)計(jì)、合格率計(jì)算、配方參數(shù)管理報(bào)警管理氣缸超時(shí)、氣壓不足、急停復(fù)位、伺服報(bào)警要能區(qū)分優(yōu)先級(jí)并在觸摸屏上顯示安全處理急停必須在硬件回路里切斷負(fù)載而不是只靠程序邏輯清單列完后程序結(jié)構(gòu)已經(jīng)比較清晰氣缸和電機(jī)這類設(shè)備控制用梯形圖因?yàn)樘菪螆D在表示順序步進(jìn)、互鎖邏輯的時(shí)候非常直觀數(shù)據(jù)采集和運(yùn)算用ST語言因?yàn)樗幚碜址?shù)組、數(shù)學(xué)運(yùn)算的時(shí)候比梯形圖高效太多。這也是最終選擇ST梯形圖混搭方案的根本原因。2. 編程方案選型為什么ST語言要和梯形圖混搭2.1 梯形圖到底強(qiáng)在哪弱在哪梯形圖出現(xiàn)到現(xiàn)在幾十年了至今仍然是PLC編程的主流語言原因就四個(gè)字直觀、好查。一個(gè)維護(hù)電工拿著圖紙看梯形圖能順著左母線一路看到右母線哪個(gè)觸點(diǎn)接通了、哪個(gè)線圈沒輸出眼睛一掃就知道問題出在哪。這在產(chǎn)線維護(hù)場景里是巨大的優(yōu)勢。但梯形圖有個(gè)明顯的軟肋遇到復(fù)雜運(yùn)算的時(shí)候就力不從心了。你說要把一個(gè)ASCII字符串里的十六進(jìn)制字符轉(zhuǎn)成十進(jìn)制數(shù)再用到手寫一堆比較指令、移位指令、轉(zhuǎn)換指令梯形圖能把你畫到懷疑人生。不信你可以試試用梯形圖計(jì)算一個(gè)產(chǎn)品的合格率百分比還得帶一位小數(shù)——梯形圖做浮點(diǎn)運(yùn)算的指令本身就少程序行數(shù)卻會(huì)翻好幾倍。這種場景梯形圖的效率就很低了。2.2 ST語言擅長做什么不擅長做什么ST語言其實(shí)就是結(jié)構(gòu)化文本語法跟Pascal比較接近。它的強(qiáng)項(xiàng)恰恰是梯形圖的弱項(xiàng)字符串處理、數(shù)組運(yùn)算、數(shù)學(xué)計(jì)算、CASE分支選擇、FOR循環(huán)——這些在ST里面寫起來非常舒服程序條理也很清晰。但ST語言也有短板最大的問題是看不到邏輯流。一段完全用ST寫的程序如果變量命名不規(guī)范、注釋不到位別人接手的時(shí)候會(huì)很痛苦。尤其是現(xiàn)場維護(hù)電工很多不會(huì)ST語言你讓他們?nèi)プx一段幾十行的ST代碼不如直接給他們看一張?zhí)菪螆D。所以ST寫在程序里要克制、要配合好注釋不能濫用。2.3 混合編程的分工邊界我對(duì)混合編程的建議是按照數(shù)據(jù)的流動(dòng)來劃分邊界。設(shè)備動(dòng)作、互鎖、急停、手動(dòng)自動(dòng)切換這些跟硬件接線強(qiáng)相關(guān)的邏輯放梯形圖里。凡是現(xiàn)場維護(hù)時(shí)需要一眼看懂的都應(yīng)該畫成梯形圖。凡是涉及數(shù)值計(jì)算、協(xié)議解析、配方管理、統(tǒng)計(jì)報(bào)表的邏輯放ST里。這些邏輯天然適合用文本形式表達(dá)而且平時(shí)不怎么需要現(xiàn)場維護(hù)的人去翻。用歐姆龍編程軟件CX-Programmer或Sysmac Studio建工程的時(shí)候同一個(gè)PLC程序里可以同時(shí)存在多個(gè)梯形圖程序段和ST程序段他們之間通過全局變量互相訪問。這種安排非常靈活等于你既享受了梯形圖的高可讀性又獲得了ST的高計(jì)算效率不帶任何妥協(xié)。3. 硬件選型與IO地址規(guī)劃3.1 PLC選型為什么選CP1H這條自動(dòng)組裝線沒有太多模擬量輸入也沒有高速計(jì)數(shù)需求但需要驅(qū)動(dòng)步進(jìn)電機(jī)做定位。歐姆龍這個(gè)定位需求很典型CP1H自帶四路100kHz的脈沖輸出無論是驅(qū)動(dòng)步進(jìn)驅(qū)動(dòng)器還是伺服驅(qū)動(dòng)器都?jí)蛴?。相比起另外加定位模塊的方案用內(nèi)置脈沖口能省掉一個(gè)模塊的成本和接線工作量。CP1H還內(nèi)置了RS232C串口正好可以接掃碼槍做數(shù)據(jù)讀取不需要額外擴(kuò)展通信板。再加上CPU本體自帶以太網(wǎng)口觸摸屏和上位機(jī)連接都方便。綜合下來CP1H-XA40DR-A繼電器輸出帶模擬量輸入在這個(gè)項(xiàng)目里性價(jià)比最高。當(dāng)然如果你要控制的軸數(shù)更多或者要求整體以太網(wǎng)同步運(yùn)動(dòng)控制那可以直接上NJ/NX系列那邊Sysmac Studio的體驗(yàn)會(huì)更現(xiàn)代化。但就這條線來說CP1H足夠了。3.2 IO地址分配表輸入與輸出的區(qū)別搞PLC的人經(jīng)常問梯形圖輸入與輸出的區(qū)別——這句話問的就是IO映射的本質(zhì)。輸入?yún)^(qū)是現(xiàn)場傳感器信號(hào)進(jìn)入PLC的大門比如光電傳感器、磁性開關(guān)、按鈕它們把外部通斷狀態(tài)讀進(jìn)CIO區(qū)輸出區(qū)是PLC控制外部負(fù)載的大門比如電磁閥、接觸器、指示燈程序往CIO區(qū)寫狀態(tài)模塊再把它轉(zhuǎn)成實(shí)際的通斷。你要記住一條基本規(guī)則輸入點(diǎn)只能被程序讀取程序只能往輸出點(diǎn)寫反過來不行。這條線的地址分配我列成了一張表地址功能說明信號(hào)類型0.00急停按鈕常閉輸入0.01啟動(dòng)按鈕常開輸入0.02停止按鈕常閉輸入0.03手動(dòng)/自動(dòng)切換輸入0.04復(fù)位按鈕輸入1.00上料光電傳感器輸入1.01定位氣缸伸出到位輸入1.02定位氣缸縮回到位輸入1.03壓裝氣缸下到位輸入1.04壓裝氣缸上到位輸入1.05檢測工位結(jié)果OK輸入1.06檢測工位結(jié)果NG輸入100.00定位氣缸伸出電磁閥輸出100.01定位氣缸縮回電磁閥輸出100.02壓裝氣缸下行電磁閥輸出100.03壓裝氣缸上行電磁閥輸出100.04夾緊氣缸夾緊電磁閥輸出100.05輸送帶電機(jī)接觸器輸出100.06三色燈綠色輸出100.07三色燈紅色輸出100.08三色燈黃色輸出100.09蜂鳴器輸出IO地址規(guī)劃有一條實(shí)用經(jīng)驗(yàn)輸入輸出分區(qū)要留余量不要把地址排得太滿。比如輸入從0.00開始排排到1.06就停后面留幾個(gè)空位給現(xiàn)場加信號(hào)用。CP1H的輸入輸出地址是跟著模塊走的所以排地址之前一定要確認(rèn)模塊安裝在哪個(gè)槽位不然就會(huì)錯(cuò)位。4. 程序架構(gòu)與核心代碼實(shí)現(xiàn)4.1 程序總架構(gòu)與任務(wù)劃分CP1H的程序默認(rèn)有多個(gè)任務(wù)比如周期性任務(wù)和中斷任務(wù)。我的習(xí)慣是主流程放在周期執(zhí)行任務(wù)里把掃描周期設(shè)成10ms以上這類的固定周期保證氣缸動(dòng)作時(shí)間控制得比較準(zhǔn)確。如果涉及高速計(jì)數(shù)、脈沖輸出需要用到中斷任務(wù)不過這條線不需要所以沒有額外配置。工程內(nèi)部我分成幾大段主控程序段跑自動(dòng)流程的梯圖步進(jìn)邏輯手動(dòng)程序段讓操作員在調(diào)試模式單獨(dú)動(dòng)作氣缸和電機(jī)ST程序段處理掃碼數(shù)據(jù)、配方、產(chǎn)量統(tǒng)計(jì)報(bào)警程序段負(fù)責(zé)超時(shí)判斷、三色燈驅(qū)動(dòng)。歐姆龍支持在一個(gè)工程里同時(shí)建多個(gè)程序段每個(gè)程序段可以是梯圖或ST這種架構(gòu)用起來非常順手。這里有個(gè)細(xì)節(jié)要注意CP1H的任務(wù)執(zhí)行順序影響程序邏輯。如果多個(gè)程序段同時(shí)訪問同一個(gè)變量你要保證寫操作不會(huì)互相覆蓋。我的做法是規(guī)定誰寫變量誰能讀變量——比如產(chǎn)量統(tǒng)計(jì)只允許ST程序段寫梯形圖只讀不寫氣缸動(dòng)作標(biāo)志只允許梯形圖寫ST程序段不碰它。這樣程序之間就不會(huì)打架。4.2 梯形圖實(shí)現(xiàn)氣缸順序控制自動(dòng)流程我用的是典型的步進(jìn)式梯形圖俗稱步進(jìn)樓梯。每一行就是一個(gè)步驟步驟轉(zhuǎn)移條件就是這個(gè)步驟的樓梯臺(tái)階。舉個(gè)例子定位氣缸的伸出邏輯第一步是等待上料光電感應(yīng)到工件然后定位氣缸伸出。梯形圖的寫法就是當(dāng)前步驟標(biāo)志、光電傳感器常開觸點(diǎn)、氣缸伸出到位信號(hào)作為下一步的轉(zhuǎn)移條件。氣缸伸出到位之后下一步動(dòng)作才允許壓裝氣缸下行。這樣一步一步排下來邏輯非常清楚現(xiàn)場人員排查故障的時(shí)候只要看當(dāng)前是哪一步亮著就知道設(shè)備卡在哪了。氣缸動(dòng)作還有一個(gè)必須做的互鎖同一個(gè)氣缸的伸出和縮回電磁閥絕對(duì)不能同時(shí)輸出。梯形圖里要串對(duì)方的常閉觸點(diǎn)做硬件互鎖程序里也要做雙線圈檢查。所謂的雙線圈就是同一個(gè)輸出位在程序里寫了兩次或兩次以上比如100.02這個(gè)位既在自動(dòng)流程里寫了又在手動(dòng)流程里寫了掃描到最后一次寫的結(jié)果才生效這樣很容易出問題。用歐姆龍編程軟件自帶的交叉引用表查一下就避坑了。4.3 ST語言實(shí)現(xiàn)配方、統(tǒng)計(jì)與數(shù)據(jù)處理這才是ST語言大顯身手的地方。先說配方選擇??蛻舳水a(chǎn)品有3種規(guī)格每種規(guī)格對(duì)應(yīng)的壓裝力度、節(jié)拍時(shí)間、檢測閾值都不一樣。這種分支邏輯用梯形圖寫就像一團(tuán)亂麻但ST寫起來非常流暢我用了一個(gè)功能塊輸入一個(gè)配方編號(hào)輸出對(duì)應(yīng)的參數(shù)// 配方選擇功能塊 FB_RecipeSelect // IN: i_RecipeNo 配方編號(hào)(1~3) // OUT: o_CycleTime 節(jié)拍時(shí)間, o_PressForce 壓裝力度, o_AllowNG 是否允許NG品流到下道 CASE i_RecipeNo OF 1: o_CycleTime : 2.5; // 節(jié)拍2.5秒 o_PressForce : 1500; // 壓裝力度 o_AllowNG : FALSE; 2: o_CycleTime : 3.0; // 節(jié)拍3.0秒 o_PressForce : 2200; // 壓裝力度 o_AllowNG : TRUE; 3: o_CycleTime : 2.0; // 節(jié)拍2.0秒 o_PressForce : 1800; // 壓裝力度 o_AllowNG : FALSE; ELSE: o_CycleTime : 0.0; o_PressForce : 0; o_AllowNG : FALSE; END_CASE;CASE語句放在梯形圖里是想都不敢想的但在ST里面幾行就搞定可讀性也強(qiáng)。再說產(chǎn)量統(tǒng)計(jì)。生產(chǎn)報(bào)表要求統(tǒng)計(jì)總產(chǎn)量、合格數(shù)、不合格數(shù)、合格率客戶那邊觸摸屏要實(shí)時(shí)顯示。用ST寫這個(gè)邏輯就非常輕松// 產(chǎn)量統(tǒng)計(jì)功能塊 FB_ProductionCount // IN: i_RunSignal 運(yùn)行信號(hào), i_DetectOK 合格信號(hào) // OUT: o_TotalCount 總產(chǎn)量, o_OKCount 合格數(shù), o_NGCount 不合格數(shù), o_Rate 合格率% IF R_TRIG_Start.CLK : i_RunSignal AND R_TRIG_Start.P THEN o_TotalCount : o_TotalCount 1; END_IF; IF i_DetectOK THEN o_OKCount : o_OKCount 1; ELSE o_NGCount : o_OKCount 1; // 這一行應(yīng)該是NG見下面代碼 END_IF; o_Rate : INT_TO_REAL(o_OKCount) / INT_TO_REAL(o_TotalCount) * 100.0;等一下上面我寫錯(cuò)了一行NG統(tǒng)計(jì)應(yīng)該單獨(dú)計(jì)數(shù)。實(shí)際代碼是這樣IF _NOT_ i_DetectOK THEN o_NGCount : o_NGCount 1; END_IF;由于檢測工位每一件都判定OK或NG合格加不合格就等于總產(chǎn)量所以也可以直接用減法NG 總數(shù) - 合格。這個(gè)看個(gè)人習(xí)慣但要注意別重復(fù)統(tǒng)計(jì)。還有一個(gè)功能是條碼解析。掃碼槍通過RS232給PLC發(fā)一串ASCII字符比如一行ABC123*ST里讀取串口接收緩沖區(qū)然后用字符串處理指令截取有效部分再轉(zhuǎn)成能顯示的字符串。這里ST的字符串處理函數(shù)就非常高效了。網(wǎng)上有人問S71200中將10進(jìn)制轉(zhuǎn)換為16進(jìn)制的程序梯形圖說實(shí)話用梯形圖寫進(jìn)制轉(zhuǎn)換確實(shí)痛苦用ST寫也就一行函數(shù)的事。歐姆龍的ST里同樣支持各種轉(zhuǎn)換函數(shù)調(diào)試的時(shí)候一條指令搞定非常省事。最后是數(shù)據(jù)計(jì)算比如合格率百分比換算成觸摸屏能顯示的整數(shù)。ST里直接寫就行// 把0~100的實(shí)數(shù)值放大到0~1000方便觸摸屏顯示整數(shù)百分比 o_DisplayRate : INT_TO_REAL(TRUNC(o_Rate * 10.0));4.4 功能塊封裝把ST和梯形圖粘在一起看到這里你會(huì)發(fā)現(xiàn)我把配方、計(jì)數(shù)這些邏輯做成了功能塊FB。歐姆龍支持在梯形圖里面拖一個(gè)功能塊調(diào)用然后填寫輸入輸出參數(shù)。這樣一來梯形圖的程序段保持簡潔ST語言的邏輯都封裝在功能塊內(nèi)部。這個(gè)設(shè)計(jì)非常關(guān)鍵因?yàn)樗褪荢T和梯形圖結(jié)合的橋梁。打個(gè)比方梯形圖就像一個(gè)設(shè)備的面板上面有按鈕和指示燈ST功能塊就是藏在面板背后的控制電路。操作員只看面板就能操作和維護(hù)而復(fù)雜的計(jì)算邏輯被藏起來了。功能塊還能重復(fù)使用第二條產(chǎn)線直接復(fù)制這個(gè)FB改改參數(shù)開發(fā)效率和一致性都提高了。功能塊封裝要注意變量的作用域。內(nèi)部變量定義成局部變量外部接口才定義成輸入輸出變量。不要讓FB內(nèi)部邏輯去修改全局變量否則這個(gè)功能塊換個(gè)項(xiàng)目就廢了而且排查問題的時(shí)候很難定位。5. 調(diào)試實(shí)錄與常見問題排查5.1 傳感器誤信號(hào)與濾波處理這條線調(diào)試的時(shí)候遇到一個(gè)典型的坑上料光電傳感器在氣缸動(dòng)作的瞬間經(jīng)常會(huì)出現(xiàn)幾十毫秒的誤觸發(fā)。原因很簡單氣缸動(dòng)作引起的機(jī)械震動(dòng)傳導(dǎo)到傳感器支架導(dǎo)致光電信號(hào)瞬間閃斷。排查方法先看觸摸屏上的IO狀態(tài)監(jiān)視確認(rèn)誤觸發(fā)的頻率和時(shí)機(jī)再用示波器或者PLC的輸入點(diǎn)強(qiáng)制監(jiān)視鎖定誤差。解決方式是兩種組合第一傳感器支架加橡膠減震墊第二程序里加延時(shí)濾波要求信號(hào)穩(wěn)定超過20ms才認(rèn)為是有效信號(hào)。用梯形圖寫這個(gè)濾波比較直觀就是一個(gè)定時(shí)器加觸點(diǎn)判斷用ST寫也一樣幾行代碼就能實(shí)現(xiàn)。5.2 氣缸到位信號(hào)丟失的套路化排查很多時(shí)候氣缸明明到位了但程序就是不走下一步原因基本都在磁性開關(guān)或接近開關(guān)上。調(diào)試過程中最常見的問題是磁性開關(guān)安裝位置太靠邊氣缸活塞到位了但磁環(huán)沒有完全經(jīng)過開關(guān)的感應(yīng)范圍或者是開關(guān)接線端子松動(dòng)震動(dòng)之后信號(hào)時(shí)有時(shí)無。我排查這類問題的套路是這樣的先在IO監(jiān)視表里強(qiáng)制接通到位信號(hào)看程序能不能往下走如果能說明程序邏輯沒問題問題在信號(hào)檢測環(huán)節(jié)然后去調(diào)整磁性開關(guān)位置讓它剛好在氣缸到位時(shí)點(diǎn)亮最后檢查接線端子重新壓緊一遍。這套排查流程我大概處理過不下二十起基本都能快速定位。還有一條經(jīng)驗(yàn)氣缸電磁閥如果用的是單線圈雙位置、斷電保持型不存在斷電回位的問題但雙線圈閥體就必須嚴(yán)格做互鎖否則同時(shí)得電會(huì)對(duì)氣缸造成沖擊。這個(gè)在之前的梯形圖互鎖部分強(qiáng)調(diào)過現(xiàn)場再核對(duì)一次。5.3 伺服脈沖干擾與接地問題這條線用的是步進(jìn)電機(jī)而不是真正意義上的伺服但問題類似。調(diào)試的時(shí)候發(fā)現(xiàn)一個(gè)現(xiàn)象電機(jī)走位偶發(fā)偏差多走或者少走幾毫米。排查下來原因是脈沖輸出線跟動(dòng)力線捆在同一個(gè)線槽里電機(jī)啟動(dòng)時(shí)動(dòng)力線上的干擾串進(jìn)了脈沖信號(hào)。解決辦法第一脈沖線換成雙絞屏蔽線并且屏蔽層單端接地第二脈沖線和動(dòng)力線分槽敷設(shè)不要平行走太長的距離第三PLC輸出脈沖的頻率不要卡在驅(qū)動(dòng)器允許的極限值留出20%左右的余量。做完這三步走位偏差的問題徹底消失了。說到這順便提一下正反轉(zhuǎn)梯形圖這個(gè)熱門關(guān)鍵詞。步進(jìn)電機(jī)或者伺服的方向控制本質(zhì)上就一個(gè)方向信號(hào)方向信號(hào)為ON正轉(zhuǎn)、OFF反轉(zhuǎn)。你別把它想復(fù)雜了梯形圖寫一個(gè)方向輸出點(diǎn)再加一個(gè)脈沖輸出觸點(diǎn)就實(shí)現(xiàn)了正反轉(zhuǎn)控制。真正容易出問題的是方向切換的時(shí)序——電機(jī)可能還沒完全停下來方向就變了這時(shí)候需要做先停后轉(zhuǎn)的判斷加一個(gè)減速等待時(shí)間。5.4 程序版本管理與雙線圈檢查做自動(dòng)化項(xiàng)目程序版本管理的痛很多人應(yīng)該深有體會(huì)?,F(xiàn)場改了一版程序電腦里存了一版U盤里又拷了一版最后都搞不清楚哪一版在運(yùn)行。我的習(xí)慣是每次修改程序都在程序頭部注釋里寫明日期、修改人、修改內(nèi)容同時(shí)把版本號(hào)寫在觸摸屏的隱藏頁面上開機(jī)就能看到運(yùn)行版次。比如V1.02 2024-05-18 修改壓裝超時(shí)時(shí)間從3s到5s。這樣無論是維護(hù)還是追溯都很清楚。雙線圈檢查是梯形圖寫完之后必須做的一步。在CX-Programmer里用交叉引用功能搜索每個(gè)輸出線圈的地址看它出現(xiàn)過幾次。如果同一地址出現(xiàn)在兩個(gè)不同的梯圖程序段里幾乎可以肯定中間存在邏輯缺陷。這種問題最坑的地方在于設(shè)備平時(shí)運(yùn)行正常但一旦某個(gè)條件變化輸出就會(huì)莫名其妙地跳動(dòng)因?yàn)樗蛔詈髨?zhí)行的程序段覆蓋了。調(diào)試中還遇到過一種情況就是PLC程序里用了保持繼電器H區(qū)存放產(chǎn)量數(shù)據(jù)結(jié)果斷電之后產(chǎn)量歸零了。查下來發(fā)現(xiàn)地址寫錯(cuò)了寫到了普通CIO區(qū)斷電肯定丟。CP1H的數(shù)據(jù)保持區(qū)是需要電池支持的換電池或者電池電壓低的時(shí)候也要注意最好定期檢查PLC電池狀態(tài)不然統(tǒng)計(jì)數(shù)據(jù)突然清零客戶那邊可是要罵人的。最后再分享一個(gè)調(diào)試點(diǎn)的小技巧我在這套程序里專門加了一個(gè)調(diào)試模式——通過保持繼電器H512.0來觸發(fā)。在這個(gè)模式下程序會(huì)跳過氣缸動(dòng)作只允許單步執(zhí)行方便在觸摸屏上驗(yàn)證每一步邏輯是否正確。這個(gè)模式平時(shí)是關(guān)閉的但真到排查問題的時(shí)候它能幫你省下大量的時(shí)間。這個(gè)思路你可以直接借鑒到自己的項(xiàng)目里去成本很低但非常實(shí)用。