戰(zhàn)錯(cuò)題本:90條現(xiàn)場(chǎng)踩坑經(jīng)驗(yàn)與避坑指南)
1. 為什么入行1-3年的PLC工程師最需要一份“實(shí)戰(zhàn)錯(cuò)題本”干了十幾年工控帶過的徒弟少說也有二十來個(gè)。我發(fā)現(xiàn)一個(gè)特別有意思的現(xiàn)象剛?cè)胄邪肽甑男氯朔炊覇枂栴}因?yàn)樗麄冎雷约翰粫?huì)干了五六年往上的老手遇到問題也能憑經(jīng)驗(yàn)摸出個(gè)大概。最尷尬的就是入行1到3年這個(gè)階段——基礎(chǔ)指令都會(huì)了梯形圖也能寫但一到現(xiàn)場(chǎng)就各種翻車而且翻車之后還不好意思問因?yàn)橛X得自己“應(yīng)該會(huì)”。這個(gè)階段的人最缺的其實(shí)不是知識(shí)而是一份踩坑記錄。學(xué)校里教的是“電機(jī)正反轉(zhuǎn)怎么接線”但現(xiàn)場(chǎng)遇到的是“為什么這個(gè)光電開關(guān)在下午三點(diǎn)之后就開始誤動(dòng)作”。前者是知識(shí)后者是經(jīng)驗(yàn)。知識(shí)可以看書經(jīng)驗(yàn)只能靠踩坑或者靠別人把坑指給你看。我自己剛?cè)胄心菚?huì)兒在一個(gè)包裝線上調(diào)伺服位置怎么都對(duì)不上折騰了整整兩天最后發(fā)現(xiàn)是機(jī)械聯(lián)軸器的鍵槽裝反了。這種事沒人會(huì)寫在手冊(cè)里但每個(gè)老工程師都能給你講出一堆類似的。所以我把這些年積累的、帶徒弟過程中反復(fù)被問到的、以及自己在現(xiàn)場(chǎng)摔過的跟頭整理成了這90條實(shí)戰(zhàn)經(jīng)驗(yàn)。它們不按教科書章節(jié)排列而是按你真正會(huì)遇到問題的順序來組織——從選型、接線、編程、調(diào)試到維護(hù)一條一條說清楚。這篇文章會(huì)挑其中最有代表性的幾類問題展開講不是簡(jiǎn)單羅列90條就完事而是把每條經(jīng)驗(yàn)背后的“為什么”講透。你看完之后至少能在下次遇到類似情況時(shí)腦子里能蹦出一句“哦這個(gè)坑有人踩過我知道大概往哪個(gè)方向查?!?. 硬件選型與接線階段那些手冊(cè)上不會(huì)寫的判斷依據(jù)2.1 輸入輸出點(diǎn)數(shù)的“隱藏消耗”怎么算新手最常犯的錯(cuò)誤就是按設(shè)備實(shí)際需要的I/O點(diǎn)數(shù)去選PLC比如算出來需要14個(gè)輸入、10個(gè)輸出就選一個(gè)16入16出的型號(hào)。結(jié)果程序?qū)懙揭话氚l(fā)現(xiàn)點(diǎn)數(shù)不夠了因?yàn)楹芏唷半[藏消耗”在前期根本想不到。我自己的經(jīng)驗(yàn)是實(shí)際需要的I/O點(diǎn)數(shù)乘以1.5再往上取整到最近的常見型號(hào)。為什么是1.5因?yàn)槟阋A(yù)留至少10%的備用點(diǎn)給后期改造還要考慮一些“看起來不需要但實(shí)際會(huì)占點(diǎn)”的情況。比如一個(gè)氣缸你以為只需要一個(gè)輸出點(diǎn)控制電磁閥但如果要檢測(cè)氣缸的兩個(gè)到位狀態(tài)那就還要占兩個(gè)輸入點(diǎn)。再比如很多安全回路、急?;芈?、復(fù)位按鈕雖然不參與邏輯控制但往往也要接入PLC或者至少占用模塊通道。還有一個(gè)特別容易被忽略的高速計(jì)數(shù)器和脈沖輸出會(huì)占用普通I/O的物理通道。比如某款PLC標(biāo)稱有8個(gè)輸出點(diǎn)但其中2個(gè)是晶體管輸出用于脈沖如果你用了這兩個(gè)點(diǎn)做PTO脈沖串輸出那它們就不能再當(dāng)普通輸出用了。選型的時(shí)候一定要看清楚模塊的通道分配表別只看總數(shù)。提示如果項(xiàng)目有擴(kuò)展需求優(yōu)先選帶擴(kuò)展接口的CPU而不是一開始就買點(diǎn)數(shù)很大的單體機(jī)。擴(kuò)展模塊可以后期加單體機(jī)點(diǎn)數(shù)不夠就只能換整機(jī)成本差好幾倍。2.2 傳感器選型NPN和PNP到底怎么選這個(gè)問題幾乎每個(gè)新手都問過。簡(jiǎn)單說NPN輸出的是低電平有效漏型PNP輸出的是高電平有效源型。但實(shí)際選型的時(shí)候不是看你喜歡哪個(gè)而是看你的PLC輸入模塊支持哪種接法。大部分日系PLC比如三菱、歐姆龍的輸入模塊是漏型輸入也就是公共端接24V正極輸入點(diǎn)接傳感器信號(hào)線傳感器導(dǎo)通時(shí)把信號(hào)線拉到0V。這種接法配NPN傳感器最方便。歐系PLC比如西門子很多是源型輸入公共端接0V輸入點(diǎn)接傳感器信號(hào)線傳感器導(dǎo)通時(shí)輸出24V。這種配PNP傳感器。但現(xiàn)實(shí)情況往往更復(fù)雜一個(gè)項(xiàng)目里可能既有NPN又有PNP的傳感器因?yàn)椴煌瑥S家的標(biāo)準(zhǔn)不一樣。這時(shí)候你有兩個(gè)選擇一是選支持源型/漏型切換的輸入模塊二是加中間繼電器轉(zhuǎn)換。我個(gè)人的建議是盡量統(tǒng)一成一種類型因?yàn)榛煊弥笈挪楣收蠒?huì)非常痛苦——你永遠(yuǎn)記不清哪個(gè)傳感器是哪種接法。還有一個(gè)坑兩線制傳感器和PLC輸入模塊的漏電流問題。兩線制傳感器在關(guān)斷狀態(tài)下仍然有微弱的漏電流通過如果這個(gè)漏電流足夠大PLC的輸入點(diǎn)可能會(huì)誤判為ON。特別是當(dāng)輸入模塊的導(dǎo)通閾值比較低的時(shí)候。解決辦法是在輸入點(diǎn)并聯(lián)一個(gè)泄放電阻或者直接選用三線制傳感器。這個(gè)坑我在一個(gè)水處理項(xiàng)目上踩過當(dāng)時(shí)液位開關(guān)明明沒動(dòng)作PLC輸入燈卻微微亮著查了半天才反應(yīng)過來是漏電流。2.3 電源容量別讓PLC“餓著肚子干活”PLC的電源容量計(jì)算很多人只算了CPU和擴(kuò)展模塊的背板電流消耗忘了算外部負(fù)載的電流。比如輸出模塊驅(qū)動(dòng)繼電器線圈每個(gè)線圈可能要幾十毫安如果同時(shí)有8個(gè)輸出點(diǎn)動(dòng)作那就是幾百毫安。再加上傳感器供電、觸摸屏供電很容易超出開關(guān)電源的額定容量。我的做法是把所有需要24V供電的設(shè)備列一張表標(biāo)出每個(gè)設(shè)備的額定電流和同時(shí)工作的最大數(shù)量然后總和乘以1.3的余量。開關(guān)電源選型的時(shí)候還要注意它的額定電流是在什么溫度下測(cè)的。很多電源標(biāo)稱5A但那是在25度環(huán)境下的數(shù)據(jù)如果電柜內(nèi)溫度到了50度實(shí)際能輸出的電流可能只有3.5A左右。所以電柜空間允許的話電源選大一號(hào)沒壞處。另外PLC的24V輸出如果有的話最好不要用來驅(qū)動(dòng)外部負(fù)載。那個(gè)輸出通常只有幾百毫安的容量是給內(nèi)部電路或者少量傳感器用的。你拿它去驅(qū)動(dòng)一堆繼電器輕則電源保護(hù)重則燒掉CPU內(nèi)部的電源模塊。我見過一個(gè)案例有人用PLC自帶的24V輸出接了六個(gè)中間繼電器運(yùn)行了三個(gè)月后CPU直接罷工返廠維修說是電源模塊燒了。3. 編程邏輯中的“想當(dāng)然”陷阱從梯形圖到實(shí)際動(dòng)作的鴻溝3.1 掃描周期導(dǎo)致的“幽靈動(dòng)作”PLC是循環(huán)掃描執(zhí)行的一個(gè)掃描周期包括輸入采樣、程序執(zhí)行、輸出刷新三個(gè)階段。新手寫程序的時(shí)候往往默認(rèn)“輸入變了輸出馬上變”但實(shí)際不是這樣的。輸入信號(hào)的變化要等到下一個(gè)掃描周期的輸入采樣階段才能被讀到輸出信號(hào)的變化也要等到輸出刷新階段才會(huì)真正送到端子。這個(gè)特性在大多數(shù)情況下沒問題因?yàn)閽呙柚芷谕ǔV挥袔缀撩氲綆资撩?。但在一些特殊?chǎng)景下會(huì)出大問題。比如你用PLC做一個(gè)高速計(jì)數(shù)或者位置捕捉如果信號(hào)持續(xù)時(shí)間比掃描周期還短那這個(gè)信號(hào)可能完全被漏掉。再比如你在程序里寫了“如果X0接通則Y0接通如果Y0接通則X1復(fù)位”這種邏輯在掃描周期的影響下可能會(huì)產(chǎn)生你意想不到的時(shí)序。我遇到過一個(gè)典型案例一個(gè)分揀系統(tǒng)用光電開關(guān)檢測(cè)物品通過然后氣缸推料。程序邏輯很簡(jiǎn)單光電開關(guān)接通就觸發(fā)氣缸動(dòng)作。但實(shí)際運(yùn)行的時(shí)候偶爾會(huì)漏推。查了半天發(fā)現(xiàn)光電開關(guān)的輸出信號(hào)只持續(xù)了不到5毫秒而PLC的掃描周期在某些情況下會(huì)超過10毫秒因?yàn)槌绦蚶镉幸欢螐?fù)雜的浮點(diǎn)運(yùn)算。信號(hào)在輸入采樣階段沒被讀到自然就不會(huì)觸發(fā)動(dòng)作。解決辦法是把光電開關(guān)的信號(hào)先經(jīng)過一個(gè)高速計(jì)數(shù)模塊或者用中斷輸入而不是走普通輸入點(diǎn)。注意如果你的程序里有大量浮點(diǎn)運(yùn)算、PID運(yùn)算或者通信處理掃描周期會(huì)明顯變長(zhǎng)。這時(shí)候要特別小心那些“一閃而過”的信號(hào)。3.2 定時(shí)器的“累計(jì)誤差”和“刷新機(jī)制”PLC的定時(shí)器不是硬件定時(shí)器而是靠掃描周期累加計(jì)時(shí)的。這意味著定時(shí)器的實(shí)際定時(shí)時(shí)間會(huì)略大于設(shè)定時(shí)間因?yàn)槊總€(gè)掃描周期都會(huì)產(chǎn)生一點(diǎn)誤差。對(duì)于一般的延時(shí)控制這點(diǎn)誤差無所謂但如果你用定時(shí)器做精確的時(shí)間控制比如每100毫秒發(fā)一個(gè)脈沖那累計(jì)誤差就會(huì)越來越明顯。更隱蔽的問題是定時(shí)器的刷新機(jī)制。不同品牌的PLC定時(shí)器的刷新方式不一樣。有的定時(shí)器在達(dá)到設(shè)定值后當(dāng)前值會(huì)保持直到復(fù)位信號(hào)到來有的定時(shí)器在達(dá)到設(shè)定值后會(huì)自動(dòng)復(fù)位重新開始計(jì)時(shí)。如果你不清楚用的是哪種程序邏輯就可能出錯(cuò)。我自己的習(xí)慣是對(duì)于需要精確時(shí)間控制的場(chǎng)合用系統(tǒng)時(shí)鐘脈沖或者中斷程序而不是普通定時(shí)器。比如西門子的OB35循環(huán)中斷可以設(shè)置固定的中斷周期不受掃描周期影響。三菱的PLC可以用特殊繼電器比如M8013是1秒時(shí)鐘脈沖來觸發(fā)動(dòng)作。這些方式比用定時(shí)器累加要可靠得多。還有一個(gè)新手常犯的錯(cuò)誤在同一個(gè)程序里重復(fù)使用同一個(gè)定時(shí)器編號(hào)。比如在子程序里用了T0在主程序里也用了T0兩個(gè)地方都在控制這個(gè)定時(shí)器結(jié)果就是誰(shuí)最后執(zhí)行誰(shuí)說了算。這種bug特別難查因?yàn)槟憧粗鞒绦蜻壿嬍菍?duì)的看子程序邏輯也是對(duì)的但合在一起就是不對(duì)。解決辦法是給每個(gè)子程序分配獨(dú)立的定時(shí)器編號(hào)段比如子程序1用T0-T9子程序2用T10-T19。3.3 模擬量處理的“量程轉(zhuǎn)換”到底怎么算模擬量輸入模塊讀回來的原始值是一個(gè)整數(shù)比如0到27648西門子或者0到4000三菱。你需要把它轉(zhuǎn)換成實(shí)際的物理量比如溫度、壓力、流量。這個(gè)轉(zhuǎn)換公式看起來簡(jiǎn)單但實(shí)際寫程序的時(shí)候有幾個(gè)坑。第一個(gè)坑量程不是從零開始的。比如一個(gè)壓力變送器量程是0到10bar輸出4到20mA。對(duì)應(yīng)的PLC原始值4mA對(duì)應(yīng)的是5530西門子S7-1200的0-20mA量程20mA對(duì)應(yīng)的是27648。所以轉(zhuǎn)換公式不是簡(jiǎn)單的“原始值除以27648乘以10”而是要先減去4mA對(duì)應(yīng)的偏移量。第二個(gè)坑過沖和欠量程的處理。如果傳感器故障或者線路斷了原始值可能低于5530或者高于27648。這時(shí)候如果不做處理轉(zhuǎn)換出來的物理量就會(huì)是負(fù)數(shù)或者超大值可能導(dǎo)致誤報(bào)警或者誤動(dòng)作。我的做法是在程序里加一段限幅邏輯如果原始值小于5530就按5530算如果大于27648就按27648算。同時(shí)輸出一個(gè)故障標(biāo)志位讓上位機(jī)知道傳感器可能有問題。第三個(gè)坑浮點(diǎn)數(shù)運(yùn)算的精度問題。有些PLC在做浮點(diǎn)運(yùn)算時(shí)會(huì)有精度損失特別是當(dāng)你的轉(zhuǎn)換公式里有除法的時(shí)候。比如你先除以27648再乘以10000和先乘以10000再除以27648結(jié)果可能不一樣。一般來說先乘后除的精度更高因?yàn)槌〞?huì)產(chǎn)生小數(shù)小數(shù)再參與后續(xù)運(yùn)算會(huì)累積誤差。4. 現(xiàn)場(chǎng)調(diào)試階段那些讓你懷疑人生的瞬間4.1 通信不上先查這五個(gè)地方PLC和觸摸屏、變頻器、伺服驅(qū)動(dòng)器之間的通信問題是現(xiàn)場(chǎng)調(diào)試最耗時(shí)的環(huán)節(jié)之一。我總結(jié)了一個(gè)排查順序按這個(gè)順序走能解決80%的通信故障。第一查物理連接。網(wǎng)線水晶頭有沒有壓好終端電阻有沒有接通信線有沒有和動(dòng)力線走同一個(gè)線槽這些看起來是廢話但我見過太多次因?yàn)榫W(wǎng)線水晶頭沒壓好導(dǎo)致通信時(shí)斷時(shí)續(xù)的案例。特別是Profinet或者EtherCAT這種以太網(wǎng)通信對(duì)線纜質(zhì)量要求很高普通的網(wǎng)線在電磁干擾大的環(huán)境下根本扛不住。第二查站號(hào)。Modbus通信里每個(gè)從站必須有唯一的站號(hào)如果兩個(gè)從站站號(hào)一樣主站就不知道該聽誰(shuí)的。這個(gè)錯(cuò)誤特別容易發(fā)生在復(fù)制粘貼配置的時(shí)候——你從站1的配置復(fù)制到站2忘了改站號(hào)。第三查波特率和數(shù)據(jù)格式。主站和從站的波特率、數(shù)據(jù)位、停止位、校驗(yàn)方式必須完全一致。我遇到過有人把波特率設(shè)成9600但從站是19200結(jié)果通信指示燈閃都不閃因?yàn)橹髡景l(fā)的數(shù)據(jù)從站根本解析不了。第四查通信地址映射。Modbus的寄存器地址有幾種表示方式有的文檔寫40001有的寫0有的寫1。如果你按40001去讀寫但實(shí)際設(shè)備用的是0基地址那就會(huì)偏移一個(gè)寄存器。這個(gè)坑幾乎每個(gè)做Modbus的人都踩過。第五查數(shù)據(jù)字節(jié)序。32位數(shù)據(jù)在Modbus里傳輸?shù)臅r(shí)候高低字的前后順序不同廠家可能不一樣。有的先發(fā)高字有的先發(fā)低字。如果字節(jié)序搞反了讀回來的數(shù)據(jù)就是完全錯(cuò)誤的值。比如浮點(diǎn)數(shù)1.0字節(jié)序反了可能變成-2.5之類的奇怪?jǐn)?shù)字。提示調(diào)試通信的時(shí)候手邊備一個(gè)USB轉(zhuǎn)485/232的轉(zhuǎn)換器和一個(gè)串口調(diào)試助手。直接看原始報(bào)文比在PLC程序里猜要快得多。4.2 伺服電機(jī)“嗡嗡”響但不轉(zhuǎn)問題可能不在參數(shù)伺服調(diào)試是很多新手的噩夢(mèng)。電機(jī)通電后嗡嗡響但不轉(zhuǎn)或者轉(zhuǎn)起來抖動(dòng)厲害大多數(shù)人第一反應(yīng)是去調(diào)增益參數(shù)。但根據(jù)我的經(jīng)驗(yàn)至少一半的伺服問題不是參數(shù)問題而是機(jī)械或者接線問題。先查機(jī)械聯(lián)軸器的頂絲有沒有擰緊絲杠的預(yù)緊力是不是太大導(dǎo)軌的潤(rùn)滑是不是到位我遇到過一個(gè)案例伺服電機(jī)帶一個(gè)絲杠空載的時(shí)候轉(zhuǎn)得好好的一裝上負(fù)載就嗡嗡響。查了半天發(fā)現(xiàn)是絲杠兩端的軸承座不同心電機(jī)轉(zhuǎn)起來之后絲杠別著勁伺服驅(qū)動(dòng)器檢測(cè)到轉(zhuǎn)矩波動(dòng)就報(bào)警了。再查接線伺服電機(jī)的動(dòng)力線U、V、W有沒有接錯(cuò)編碼器的線有沒有接反動(dòng)力線和編碼器線有沒有屏蔽接地特別是編碼器線如果屏蔽層沒有接地或者和動(dòng)力線捆在一起走編碼器反饋的信號(hào)就會(huì)受到干擾驅(qū)動(dòng)器收到的位置信息和實(shí)際位置對(duì)不上電機(jī)就會(huì)亂轉(zhuǎn)或者抖動(dòng)。最后才查參數(shù)增益是不是太高了慣量比設(shè)置對(duì)不對(duì)濾波時(shí)間常數(shù)是不是太小了調(diào)參數(shù)的時(shí)候先把增益調(diào)低讓電機(jī)能穩(wěn)定轉(zhuǎn)起來再慢慢往上加。一上來就調(diào)高增益電機(jī)很容易震蕩甚至飛車。4.3 觸摸屏顯示“####”或者亂碼別急著換屏觸摸屏上顯示“####”通常是因?yàn)閿?shù)值超出了顯示控件的位數(shù)范圍。比如你設(shè)置了一個(gè)4位數(shù)的顯示控件但實(shí)際數(shù)值是12345那就會(huì)顯示“####”。解決辦法要么是增加顯示位數(shù)要么是在PLC程序里做限幅。顯示亂碼則通常是字符編碼問題。比如PLC里用的是ASCII碼觸摸屏設(shè)置的是Unicode那中文就會(huì)顯示成亂碼?;蛘咄ㄐ艛?shù)據(jù)里的字節(jié)序搞反了一個(gè)16位的數(shù)據(jù)高低字節(jié)交換了顯示出來的就是完全不相干的字符。還有一種情況是觸摸屏和PLC的地址對(duì)不上。比如你在觸摸屏上做了一個(gè)按鈕關(guān)聯(lián)的是PLC的M10但PLC程序里實(shí)際用的是M100。這種錯(cuò)誤在項(xiàng)目后期修改地址的時(shí)候特別容易發(fā)生——PLC程序改了觸摸屏忘了改。我的習(xí)慣是在項(xiàng)目開始的時(shí)候就建一個(gè)地址分配表所有用到的地址都登記在表里PLC和觸摸屏都按這個(gè)表來改的時(shí)候兩邊一起改。5. 程序維護(hù)與故障排查如何快速定位“昨天還好好的”問題5.1 先問“改了什么”再查“哪里壞了”設(shè)備突然出故障操作工跟你說“昨天還好好的今天就不行了”。這時(shí)候你第一句話應(yīng)該問“昨天到今天之間有沒有人動(dòng)過什么東西” 根據(jù)我的經(jīng)驗(yàn)至少60%的突發(fā)故障都和最近的改動(dòng)有關(guān)——可能是改了程序、換了傳感器、調(diào)了參數(shù)、甚至只是有人打掃衛(wèi)生的時(shí)候碰松了一根線。如果確認(rèn)沒有改動(dòng)那就按“從外到內(nèi)”的順序排查先看電源指示燈亮不亮再看PLC的RUN燈是不是綠色再看輸入輸出指示燈的狀態(tài)和實(shí)際信號(hào)對(duì)不對(duì)得上。很多時(shí)候問題就出在最外層——比如一個(gè)急停按鈕被按下了沒復(fù)位或者一個(gè)斷路器跳閘了沒人發(fā)現(xiàn)。我自己的排查習(xí)慣是從執(zhí)行機(jī)構(gòu)往回查。比如氣缸不動(dòng)作先看電磁閥有沒有電再看PLC輸出點(diǎn)有沒有信號(hào)再看程序里這個(gè)輸出點(diǎn)的條件滿不滿足。這樣一步一步往回推比從頭開始查要快得多。5.2 用“強(qiáng)制”功能要小心別把自己坑了PLC編程軟件都有強(qiáng)制Force功能可以強(qiáng)制某個(gè)輸入點(diǎn)ON或者OFF也可以強(qiáng)制某個(gè)輸出點(diǎn)ON或者OFF。調(diào)試的時(shí)候用起來很方便但強(qiáng)制之后一定要記得取消。我見過太多次因?yàn)橥巳∠麖?qiáng)制導(dǎo)致設(shè)備運(yùn)行異常的事故。更危險(xiǎn)的是強(qiáng)制輸出。你強(qiáng)制一個(gè)輸出點(diǎn)ON程序里這個(gè)輸出點(diǎn)的邏輯條件可能根本不滿足但物理輸出端子就是有電。如果這個(gè)輸出點(diǎn)控制的是一個(gè)危險(xiǎn)動(dòng)作比如機(jī)械手下降那強(qiáng)制輸出就可能造成設(shè)備損壞甚至人身傷害。我的做法是強(qiáng)制之前先想清楚后果強(qiáng)制之后立刻在紙上記一筆調(diào)試結(jié)束前逐條取消。有些PLC軟件有“強(qiáng)制列表”功能能看到當(dāng)前所有被強(qiáng)制的點(diǎn)調(diào)試完對(duì)著列表一個(gè)一個(gè)取消。這個(gè)習(xí)慣救過我很多次。5.3 程序備份別等硬盤壞了才后悔這個(gè)聽起來像是廢話但我真的見過太多人因?yàn)闆]備份程序而抓狂。PLC程序備份要注意幾點(diǎn)第一備份的時(shí)候要連注釋一起備份。很多PLC軟件默認(rèn)只備份程序邏輯不備份符號(hào)表和注釋。如果你只備份了邏輯下次打開的時(shí)候看到的全是M0.0、M0.1根本看不懂。第二備份文件要存至少兩個(gè)地方。U盤一份電腦硬盤一份有條件的話再發(fā)一份到自己郵箱。第三每次修改程序之前先備份。這樣萬一改出問題了還能回退到上一個(gè)版本。還有一個(gè)細(xì)節(jié)不同版本的編程軟件可能不兼容。比如你用V15寫的程序用V13可能打不開。所以備份的時(shí)候最好把編程軟件的版本號(hào)也記下來或者直接連軟件安裝包一起備份。我吃過這個(gè)虧一個(gè)老項(xiàng)目的程序用新版本軟件打不開又找不到舊版本安裝包最后只能重新寫了一遍。6. 那些讓我印象深刻的“奇葩”故障案例6.1 變頻器干擾導(dǎo)致PLC輸入誤動(dòng)作這個(gè)案例發(fā)生在幾年前的一個(gè)風(fēng)機(jī)控制項(xiàng)目上。設(shè)備運(yùn)行的時(shí)候偶爾會(huì)出現(xiàn)某個(gè)輸入點(diǎn)莫名其妙接通的情況但對(duì)應(yīng)的傳感器明明沒有信號(hào)。查了程序、換了傳感器、甚至換了PLC輸入模塊問題依舊。后來用示波器看輸入端的波形發(fā)現(xiàn)每當(dāng)變頻器啟動(dòng)或者加速的時(shí)候輸入端就會(huì)出現(xiàn)高頻干擾信號(hào)。原因是變頻器的動(dòng)力線和PLC的信號(hào)線走在同一個(gè)線槽里而且距離很近。變頻器輸出的PWM波形含有豐富的高頻諧波通過線間電容耦合到了信號(hào)線上。解決辦法很簡(jiǎn)單把動(dòng)力線和信號(hào)線分開走至少間隔20厘米以上。如果實(shí)在分不開就用屏蔽線并且屏蔽層單端接地。另外在PLC的輸入點(diǎn)并聯(lián)一個(gè)小電容比如0.1微法也能濾掉一部分高頻干擾。這個(gè)案例讓我之后做任何項(xiàng)目都堅(jiān)持一個(gè)原則動(dòng)力線和信號(hào)線永遠(yuǎn)分槽走。6.2 接地不良導(dǎo)致模擬量跳動(dòng)模擬量輸入跳動(dòng)是另一個(gè)常見問題。一個(gè)壓力變送器4到20mA信號(hào)PLC讀回來的值一直在上下波動(dòng)波動(dòng)范圍大概有幾十個(gè)計(jì)數(shù)。換了變送器、換了模塊、甚至換了PLC問題還在。最后發(fā)現(xiàn)是接地問題。這個(gè)項(xiàng)目的電柜沒有做等電位接地PLC的模擬量模塊地和變送器的地之間存在電位差。這個(gè)電位差疊加在4到20mA信號(hào)上導(dǎo)致讀回來的值不穩(wěn)定。解決辦法是把PLC的模擬量地、變送器的地、開關(guān)電源的地全部接到同一個(gè)接地排上并且這個(gè)接地排要真正接到大地。接好之后模擬量讀數(shù)立刻就穩(wěn)定了。這個(gè)案例給我的教訓(xùn)是模擬量信號(hào)對(duì)接地非常敏感。如果遇到模擬量跳動(dòng)的問題先查接地再查屏蔽最后才懷疑模塊本身。6.3 程序里的“死循環(huán)”導(dǎo)致PLC停機(jī)PLC的程序是循環(huán)執(zhí)行的但如果你的程序里有一個(gè)循環(huán)而這個(gè)循環(huán)的退出條件永遠(yuǎn)不滿足那PLC就會(huì)卡在這個(gè)循環(huán)里出不來。這時(shí)候看門狗定時(shí)器會(huì)超時(shí)PLC報(bào)錯(cuò)停機(jī)。我遇到過一個(gè)案例一個(gè)配方管理程序用FOR循環(huán)遍歷配方數(shù)組。正常情況下數(shù)組有10個(gè)元素循環(huán)10次就退出。但有一次操作員誤操作把配方數(shù)量設(shè)成了0循環(huán)條件寫的是“循環(huán)變量小于配方數(shù)量”結(jié)果循環(huán)變量從0開始0小于0不成立循環(huán)一次都不執(zhí)行——這倒沒問題。但如果配方數(shù)量設(shè)成了一個(gè)負(fù)數(shù)比如-1那循環(huán)變量從0開始0小于-1不成立也不執(zhí)行。真正出問題的是另一種情況循環(huán)變量在循環(huán)體內(nèi)被修改了導(dǎo)致退出條件永遠(yuǎn)不滿足。所以寫循環(huán)的時(shí)候一定要小心確保循環(huán)變量在循環(huán)體內(nèi)不會(huì)被意外修改確保退出條件最終一定會(huì)滿足。如果循環(huán)次數(shù)可能很大最好加一個(gè)最大循環(huán)次數(shù)限制超過就強(qiáng)制退出并報(bào)錯(cuò)。7. 給入行1-3年工程師的幾條實(shí)在建議7.1 建立自己的“錯(cuò)題本”我從入行第二年開始就養(yǎng)成了一個(gè)習(xí)慣每次解決一個(gè)故障就把故障現(xiàn)象、排查過程、根本原因、解決辦法記下來。一開始是記在筆記本上后來記在電腦里。十幾年下來這個(gè)錯(cuò)題本成了我最值錢的東西。下次遇到類似問題翻一翻錯(cuò)題本往往幾分鐘就能定位。錯(cuò)題本不用寫得很正式關(guān)鍵是記下“當(dāng)時(shí)是怎么想的”和“實(shí)際是什么問題”之間的差距。比如你以為是傳感器壞了結(jié)果是線接錯(cuò)了你以為是程序邏輯問題結(jié)果是掃描周期導(dǎo)致的。這些“以為”和“實(shí)際”之間的差距就是經(jīng)驗(yàn)增長(zhǎng)的地方。7.2 學(xué)會(huì)看手冊(cè)但別全信手冊(cè)手冊(cè)是重要的參考資料但手冊(cè)上的數(shù)據(jù)都是在理想條件下測(cè)出來的。比如手冊(cè)說輸入模塊的響應(yīng)時(shí)間是1毫秒但實(shí)際使用中因?yàn)闉V波設(shè)置、線纜長(zhǎng)度、信號(hào)質(zhì)量等因素響應(yīng)時(shí)間可能是5毫秒甚至更長(zhǎng)。手冊(cè)說通信距離可以達(dá)到1200米但實(shí)際在電磁干擾大的工廠環(huán)境里能穩(wěn)定通信500米就不錯(cuò)了。所以我的建議是手冊(cè)用來查引腳定義、參數(shù)范圍、接線圖但實(shí)際能跑多快、能跑多遠(yuǎn)要靠自己在現(xiàn)場(chǎng)試。試的時(shí)候留足余量別卡著手冊(cè)的極限值用。7.3 多和機(jī)械、電氣的人聊天PLC工程師不能只懂PLC。很多故障的根源在機(jī)械或者電氣那邊如果你不懂就會(huì)在程序里繞來繞去。比如氣缸動(dòng)作慢可能是氣源壓力不夠也可能是電磁閥選型不對(duì)還可能是機(jī)械卡澀。你如果只盯著程序看永遠(yuǎn)找不到原因。我自己的習(xí)慣是調(diào)試的時(shí)候多問機(jī)械工程師“這個(gè)機(jī)構(gòu)是怎么動(dòng)的”多問電氣工程師“這個(gè)回路是怎么設(shè)計(jì)的”。了解得越多排查故障的時(shí)候思路就越寬。而且和他們對(duì)好關(guān)系下次你懷疑是機(jī)械問題的時(shí)候他們才愿意幫你拆開看看。7.4 別怕問“蠢問題”入行1到3年的人最容易犯的毛病就是不好意思問問題。覺得這個(gè)問題太簡(jiǎn)單了問出來會(huì)被笑話。但根據(jù)我的觀察那些進(jìn)步最快的恰恰是敢問“蠢問題”的人。因?yàn)楹芏唷按绬栴}”背后其實(shí)是基礎(chǔ)概念沒搞清楚。你今天不問明天遇到類似的問題還是不會(huì)。當(dāng)然問問題之前先自己查一查手冊(cè)、搜一搜資料實(shí)在搞不定再問。問的時(shí)候把現(xiàn)象、你試過的方法、你的猜測(cè)都說清楚這樣別人也更容易幫你。最怕的就是一句“PLC不工作了怎么辦”這種問題沒人能回答。7.5 保持學(xué)習(xí)但別追新追得太累工控行業(yè)的技術(shù)更新不算快但也不慢。今天流行Profinet明天可能就流行EtherCAT今天用梯形圖明天可能就要用SCL或者ST。保持學(xué)習(xí)是必須的但不用每個(gè)新技術(shù)都追。先把一種PLC玩透把一種通信協(xié)議搞明白把一種編程語(yǔ)言用熟然后再去擴(kuò)展。基礎(chǔ)打牢了學(xué)新東西會(huì)快很多。我見過一些人今天學(xué)西門子明天學(xué)三菱后天學(xué)歐姆龍每個(gè)都學(xué)了個(gè)皮毛遇到稍微復(fù)雜一點(diǎn)的問題就抓瞎。不如先把一個(gè)平臺(tái)吃透其他的觸類旁通。最后說一個(gè)我自己的體會(huì)PLC工程師的價(jià)值不在于會(huì)寫多少種指令而在于能不能在設(shè)備出問題的時(shí)候用最短的時(shí)間找到原因并解決。這個(gè)能力靠的就是日積月累的實(shí)戰(zhàn)經(jīng)驗(yàn)。這90條經(jīng)驗(yàn)每一條背后都是一個(gè)或者幾個(gè)真實(shí)的故事。希望它們能幫你少走一點(diǎn)彎路少熬幾個(gè)通宵。