由于plc是由人來進(jìn)行安裝、組態(tài)和編程的,所以可能會(huì)發(fā)生很多人為的使用過程中的錯(cuò)誤。plc制造商通常都提供了很多工具來找出這些錯(cuò)誤。這些錯(cuò)誤可以分為以下幾類:
致命錯(cuò)誤
這些錯(cuò)誤將導(dǎo)致plc離開運(yùn)行模式而進(jìn)入故障模式(類似于硬件故障所導(dǎo)致的情形)。致命錯(cuò)誤通常發(fā)生在plc開機(jī)自檢時(shí)或程序執(zhí)行時(shí)的部件失敗。有的編程和組態(tài)問題(如看門狗定時(shí)器超時(shí),試圖運(yùn)行一個(gè)不存在的程序,等)也會(huì)導(dǎo)致致命錯(cuò)誤。
當(dāng)plc進(jìn)入故障模式時(shí),它將故障led打開,并將所有的輸出關(guān)閉為off(或者凍結(jié)在它們的上一個(gè)狀態(tài)),plc也會(huì)在內(nèi)存中保存一個(gè)故障代碼,編程人員可以讀取該故障代碼確定故障的原因,解決問題后,清除故障狀態(tài),將plc電源關(guān)掉再打開,重新進(jìn)入運(yùn)行模式。
現(xiàn)在的plc通常都會(huì)保存對(duì)幾個(gè)最近的故障的詳細(xì)描述,并允許編程人員編寫在致命故障發(fā)生時(shí)可以運(yùn)行的故障程序,我們?cè)诘诰耪略?jīng)描述過故障進(jìn)程,本章我們主要討論如何找到和使用故障代碼。
非致命故障
非致命故障是plc可以探測(cè)到,但不至于使plc離開運(yùn)行模式的故障。有些可探測(cè)的硬件問題,如內(nèi)存的后備電池電壓低,只導(dǎo)致非致命故障。非致命故障也可以由組態(tài)和編程錯(cuò)誤引起,如一個(gè)定時(shí)中斷程序的執(zhí)行被一個(gè)更高優(yōu)先級(jí)的程序的運(yùn)行而延遲,或者一個(gè)算術(shù)操作產(chǎn)生了一個(gè)太大以致無法存入指定目標(biāo)內(nèi)存的數(shù),等等。
非致命故障導(dǎo)致plc設(shè)定相關(guān)的狀態(tài)位或者將相關(guān)的錯(cuò)誤代碼寫到內(nèi)存中。當(dāng)結(jié)果太大或太小以致無法保存時(shí),數(shù)據(jù)字處理指令將把內(nèi)存中的算術(shù)標(biāo)志位設(shè)置為1。用戶程序應(yīng)當(dāng)檢查這些狀態(tài)位或代碼,并作出響應(yīng),因?yàn)閜lc將像沒有錯(cuò)誤發(fā)生一樣繼續(xù)執(zhí)行程序,有些非致命錯(cuò)誤狀態(tài)位在前面的章節(jié)已經(jīng)討論過,本章我們將討論另外一些。
編程或組態(tài)邏輯錯(cuò)誤
這些錯(cuò)誤是plc不能自動(dòng)檢查出來的,但可以用程序中的故障檢測(cè)指令或者編程單元的程序監(jiān)視功能來檢查。
邏輯錯(cuò)誤的例子包括一個(gè)用戶將一位設(shè)為off而不是on,兩段用戶程序試圖控制同一個(gè)輸出,或者結(jié)構(gòu)化編程旁路了一段需要的程序等等。
早期的plc設(shè)計(jì)為不允許邏輯錯(cuò)誤,如兩個(gè)橫檔控制一個(gè)輸出,或者跳轉(zhuǎn)指令向程序前面進(jìn)行跳轉(zhuǎn),等,但用戶需要更大的靈活性,因此,即使這些安全措施都取消了。有些編程單元在編程人員寫出上述具有潛在錯(cuò)誤的邏輯語句時(shí),會(huì)提供警示信息,但編程者可以忽略它們。
編程語言都包括簡(jiǎn)單的調(diào)試工具:提前終止掃描循環(huán)的指令,這樣程序可以一段一段來檢查;導(dǎo)致致命或非致命的錯(cuò)誤,使plc在某些情況下立即停止;以及其它特別為調(diào)試程序中的某一個(gè)問題的指令。標(biāo)準(zhǔn)指令比如,計(jì)數(shù)器,可以臨時(shí)插入程序中,記錄事件發(fā)生的次數(shù)。編程軟件也包括調(diào)試工具,如在用戶程序執(zhí)行時(shí),監(jiān)視和改變數(shù)據(jù)內(nèi)存,強(qiáng)迫i/o映射位開或者關(guān),以觀察程序如何響應(yīng);記錄某個(gè)特別位或特別字的短時(shí)間的變化,然后用歷史趨勢(shì)圖顯示這些變化;當(dāng)某個(gè)特別位在使用時(shí),生成一個(gè)程序中所有地方的交叉參考清單;還有搜索工具,可以找到程序中某個(gè)特別地址或指令在程序中的位置。