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