兌幸福



摘 要:PLC(程序邏輯控制器)采用循環掃描的方式執行用戶程序,邏輯執行狀態和數據運行結果監視,需借助斷點功能或其他工具對PLC的存儲器和寄存器等內部存儲器進行查詢。該文借助西門子編程軟件STEP7斷點功能,闡述如何在程序調試中設置斷點,通過斷點操作,逐步執行程序,觀察程序運行時狀態字和累加器的數值改變,既可監視程序的運行情況,又可查看程序數據塊、背景數據塊、堆棧指針等數值的變化,通過實際的邏輯結果監視和數據實時查詢,對PLC的運行過程進行分析與探索,揭示PLC的工作原理。
關鍵詞:斷點功能 PLC測試 循環處理 存儲器 寄存器
中圖分類號:TP31 文獻標識碼:A 文章編號:1674-098X(2015)12(b)-0100-06
隨著科學技術的發展,以微處理器為基礎的工業用PLC(程序邏輯控制器),已經廣泛應用于各種機械設備及生產線過程的自動化控制系統中,它功能強大、使用方便,成為當代工業自動化領域的主要技術支柱之一。目前各廠商推出的PLC產品,基本結構相同,工作原理相似,隨著國際標準化編程語言IEC61131-3的推出,編程方式也趨于統一,但不同品牌又各有特點,針對不同的應用領域,開發出專用的功能模塊,對PLC性能進行優化;編程軟件的輔助功能也在進行功能拓展,應用于特殊的編程、測試、仿真等。
西門子公司編程軟件STEP7中的斷點調試功能,以其功能強大、操作簡單、設置方便、界面友好等特點,成為最好的探索PLC工作原理的工具之一,通過斷點調試功能結合PLC SIM仿真軟件或在線監控PLC硬件運行,可以分解程序運行步驟,觀察累加器和狀態字寄存器、塊寄存器、輸入/輸出變量、位存儲器等內部核心器件的運行狀態,了解PLC的工作過程。
1 PLC的運行工作過程
PLC的程序分為操作系統和用戶程序,操作系統用來處理PLC的啟動、刷新輸入/輸出過程映像區、調用用戶程序、處理中斷和錯誤、管理存儲區和通訊等任務。PLC采用循環掃描方式執行由若干條指令組成的用戶程序,指令在存貯器中順序排列。從第一條指令開始,逐條順序執行,直至掃描到最后一條,其間還會執行跳轉指令和塊調用指令,在執行指令時,從輸入/輸出過程映像區或其他存儲區讀入數據,按指令執行相應邏輯運算、算術運算,運算的結果寫入指定的存儲區域,因此與程序執行相關的執行器存儲區的內容會隨著程序的執行而變化,觀察和跟蹤這些核心器件內數據的變化過程,可以實現了解PLC的運行過程和工作原理的目的。
2 STEP7斷點測試功能
STEP7的斷點測試功能是在程序運行過程中產生斷點,該功能的初衷是調試程序,在設備運行初期或出現故障時,通過斷點操作,逐行在線掃描程序,同時觀察寄存器里狀態字的變化,累加器、存儲器中數據的運算以及檢測程序的運行結果,從而查找編程錯誤或故障點,最終解決問題。正是這樣逐步觀察程序運行的過程,為探索PLC的運行原理提供了技術手段。
2.1 斷點測試功能的內容
在STEP7測試模式下,斷點的限制數目可以通過選項設置,使用斷點可以在用戶程序的指定點停止程序處理。當PLC在程序中執行到斷點時,CPU會切換到STOP模式。基于斷點,可以逐步運行程序處理,檢測每條語句執行的結果,并通過窗口顯示PLC內部寄存器的內容、狀態和數值,如圖1所示。
2.2 斷點測試功能設置步驟
此例使用西門子的S7 PLC SIM仿真器進行演示,使用真實PLC時,要盡量隔離I/O信號,如果必須在線調試程序,就要做好相關設備的防護措施,減少設備誤動作造成的損害。注意:并非所有的PLC都可以使用斷點測試功能,測試前要查閱相關可編程控制器的文檔,確定PLC是否支持該功能。
2.2.1 設置斷點測試運行模式
在西門子STEP7編程軟件中打開需要調試的程序,在編程窗口使用調試/操作……菜單命令,就會打開操作窗口,如圖2所示,可以在過程操作和測試操作之間選擇需要的操作模式。
兩種模式是有區別的,過程操作模式下,測試功能程序狀態被限定為要保證在掃描周期時間上處理的程序最少,這就意味著不允許任何子程序調用,也不能進行HOLD測試和單步執行程序。測試操作模式下,所有的測試功能都可用,且不受限制,PLC掃描周期時間會明顯增加,這是因為,需要手動控制程序的進程,并且程序回路中的語句狀態在每個周期都被記錄。
2.2.2 設置程序狀態
通過離線/在線伙伴命令按鈕,可以切換PLC的離線/在線狀態,只有PLC處于在線狀態時,才能運行斷點測試功能,此時,頂部狀態欄會顯示為淺藍色,用來區分離線/在線狀態,如圖3所示。
2.2.3 在程序中設置斷點
將PLC設置為在線狀態后,使用視圖>斷點欄命令可以調出斷點工具欄,按鈕功能如圖4所示。
將光標移動到需要測試或觀察的程序行前端,點擊設置/刪除斷點按鈕,即可在此處設置斷點測試的起點,該程序行前端出現一個空心圓圈標記,如圖5所示,再點擊斷點激活(開/關),斷點變為實心圓圈標記,同時彈出圖1所示的PLC寄存器內容窗口。
此時要將PLC切換到RUN-P模式,然后點擊下一個語句按鈕,即可顯示一個箭頭,指向要運行的程序,隨著按鈕的點擊,程序逐步開始執行,執行過程中的狀態和運行數據都可以通過PLC寄存器內容窗口觀察到,直至程序結束。注意:斷點測試只能在STL視圖模式下進行。建議不要調用整個程序進行調試,而是逐個調用功能塊,應當從調用子程序體系最深的嵌套層開始。
3 斷點測試實例
為了能夠全面了解斷點測試功能,在編寫的測試程序中盡量涉及PLC的典型應用實例,包括邏輯判斷、數據運算、子程序調用、數據塊調用、背景數據塊等,基本能夠滿足對PLC運行和工作原理的探索與研究。
3.1 編寫測試程序
3.1.1 測試程序的功能
基于以上目的,編寫一個按鈕控制16盞燈的測試程序,當按鈕按下2次后16盞燈全亮,當按鈕按到第3次時16盞燈全滅,然后重新開始循環,具體過程如下。
(1)在主程序OB1中滿足M0.0=1條件后,調用子程序功能塊FB1,背景數據塊為DB3。
(2)在子程序FB1功能塊中點擊按鈕I0.0,點擊次數記錄在全局數據塊DB1的DB1.DBW0中。
(3)調用結束,回到主程序OB1。
(4)如果DB1.DBW0>=1(記錄到按鈕按下次數為1或以上),將DB2.DBW0賦值為1。
(5)DB1.DBW0和DB2.DBW0相加,計算結果送到MW100中。
(6)如果MW100>=3(即按鈕按下2次),PQW0控制下的16盞燈全亮。
(7)如果MW100>=4(即按鈕按下3次),PQW0控制下的16盞燈全滅,此時DB1.DBW0、DB2.DBW0、MW100復位為0,程序結束。
3.1.2 程序控制邏輯
程序邏輯如圖6所示。
滿足M0.0=1條件后,程序跳轉到功能FB1,完成按鈕計數后,轉回主程序,再對計數進行判斷,滿足條件燈亮,否則燈滅。
3.1.3 編寫程序
首先編寫子程序FB1功能塊,在變量聲明表中設置內部變量,“a”為布爾型數據,“zhongjian”為整數型數據。
在FB1中編寫程序如下:
程序段1
A I 0.0
FP #a
CU C 1
BLD 101
A M 0.3
L C#1
S C 1
A M 0.4
R C 1
L C 1
T #zhongjian
NOP 0
NOP 0
程序段2
L #zhongjian
T DB1.DBW 0
NOP 0
在OB1中編寫主程序,在程序段1中有條件調用功能塊FB1,會提示自動生成背景數據塊,這里指定的背景數據塊為DB3。
程序段1
A M 0.0
JNB _001
CALL FB 1 , DB3
a :=M0.1
zhongjian:=DB1.DBW2
_001: NOP 0
程序段2
A(
L DB1.DBW 0
L 1
>=I
)
JNB _002
L 1
T DB2.DBW 0
_002: NOP 0
程序段3
L DB1.DBW 0
L DB2.DBW 0
+I
T MW 100
NOP 0
程序段4
L MW 100
L 4
>=I
= M 0.4
程序段5
A M 0.4
= L 20.0
A L 20.0
JNB _003
L 0
T MW 100
_003: NOP 0
A L 20.0
JNB _004
L 0
T DB1.DBW 2
_004: NOP 0
A L 20.0
JNB _005
L 0
T DB2.DBW 0
_005: NOP 0
程序段6
L MW 100
L 3
>=I
JN noze
L DW#16#FFFF
T PQW 0
JU next
noze: L 0
T PQW 0
next: NOP 0
3.2 測試程序下載和運行
保存編寫完成的程序,STEP7會對編寫的程序進行檢測,如果發現問題會給出錯誤提示,幫助編程人員修改程序,然后下載到PLC的裝載存儲器中,工作時,由CPU調度指揮,將程序和系統存儲器中的數據放在工作存儲器中運行,再將結果送回各個系統存儲器,具體功能如下。
3.2.1 裝載存儲器
編寫的程序和系統數據(組態、連接和模塊參數)被下載到CPU的裝載存儲器內。程序運行時,CPU把程序中的可執行部分復制到工作存儲器內。隨PLC的型號不同,裝載存儲器可能是RAM和FEPROM等。
3.2.2 工作存儲器
集成高速存取的RAM存儲器,用于存儲CPU運行時的用戶程序和數據。在CPU斷電或復位操作時,RAM中的程序會被清除。
3.2.3 系統存儲器
系統存儲器是CPU為用戶程序提供的存儲器組件,被劃分為若干個地址區域,用于存放用戶程序的操作數據,如過程映像輸入/輸出、位存儲器、定時器、計數器、數據塊與背景數據塊、塊堆棧、中斷堆棧和診斷緩沖區等,該區域還提供臨時存儲器,可以存放程序塊的臨時數據,當用戶生成塊時,可以聲明臨時變量,該區域只在執行該塊時有效,執行完后被覆蓋,該例在FB1功能塊中聲明的布爾量“a”和整數“zhongjian”即為臨時變量。
如圖7所示:掃描循環開始時,CPU讀取過程映像輸入/輸出區域里的I0.0(按鈕)的輸入信號,在計數器存取區域記錄FB1功能塊中點擊按鈕的次數,并存儲在臨時存儲器里,背景數據塊DB3與之相關聯,然后送到共享數據塊DB1中的DB1.DBW0,同時使共享數據塊DB2中的DB2.DBW0等于1,DB1.DBW0與DB2.DBW0相加,結果送到位存儲器MW100中,通過對MW100的判斷,如果大于等于3,將FF賦值給過程映像輸入/輸出區域PQW0,控制16盞燈全部亮起,如果大于等于4,則將0賦值給PQW0,燈全部滅。
4 斷點測試過程
CPU中的狀態字寄存器和累加器寄存器擔負著PLC的程序控制和數值運行,通過斷點測試可以觀察到狀態字的狀態變化與控制程序運行的對應關系,以及累加器寄存器中數值的計算過程。
4.1 運行測試程序
在OB1的程序段1中設置斷點,在線開始測試,該行程序是一個條件調用,當M0.0=0時,程序向下進行,當M0.0=1時,調用FB1功能塊。
當M0.0=0時,狀態字寄存器的/FC=0,表示一行程序的開始,STA=1,與命令A相對應,隨著程序執行到第二行,/FC=1,表示程序正在執行中,繼續執行時,由于沒有滿足調用條件,程序沒有執行調用FB1功能塊,而是直接跳過,進入下一段程序。
當M0.0=1時,程序執行到第二行,狀態字寄存器/FC=1、STA=1、ROL=1,狀態為存儲的是尋址位的狀態,邏輯位為1,表示能流可以到達該運算處(滿足條件),可以跳轉,兩種條件下狀態字寄存器對比如圖8所示。
程序執行到第三行時,狀態字寄存器/FC=1、STA=1、ROL=1,表示程序重新開始,因此,一行程序的開始并不是以段落和行來劃分的,而是由狀態字根據程序執行的狀態,結合狀態位、邏輯位的結果來決定的。此時要點擊“執行調用”按鈕,程序執行調用,自動在編程窗口打開FB1程序塊,箭頭指示到程序段1的第一行,此時在PLC寄存器內容中可以看到,背景數據塊為DB3。
在FB1中,當I0.0=0時,/FC=1、STA=0、BR=1、ROL=0,程序執行到此處時,邏輯結果為0;當I0.0=1時, /FC=1、STA=1、BR=1、ROL=1,說明程序執行到該行時,對I0.0的信號做出狀態和邏輯判斷,邏輯結果為1,在隨后執行的程序中計數器值為1,記錄到按鈕的點擊次數,其余程序與此類同,不再分析。
4.2 狀態字寄存器
通過上面的實例,可以看出狀態字是一個16位的寄存器(高7位未用),用于存儲CPU執行指令的狀態。狀態字中的某些位用于決定指令是否執行和以什么樣的方式執行,此時,狀態字中的變化為了解程序的運行提供了參考,指示程序運行的情況,而且,位邏輯指令和字邏輯指令還可以訪問和檢測狀態字,將狀態位信號直接集成到程序中,控制程序執行的流程。
狀態字的每個位都與程序運行相關,如圖9所示。
4.2.1 /FC:首位檢測位
第0位稱為首次檢測位,FC前面的斜杠表示對FC取反,用于判斷一個邏輯串(一系列的邏輯運算指令)的起止。 /FC為0,表明一個新邏輯串的開始,邏輯串指令執行過程中/FC為1,邏輯串指令結束時,/FC位清零。
4.2.2 RLO:邏輯運算結果位
第1位為RLO,位稱為邏輯運算結果(Result of Logic Operation)。該位用來存儲執行位邏輯指令或比較指令的結果。RLO的狀態為1,表示有能流流過運算點處;為0則表示無能流流過該點。可以用RLO觸發跳轉指令。
4.2.3 STAT:狀態位
第2位為狀態位,用以保存被尋址位的值。狀態位不能用指令檢測,它只是在程序測試中被CPU解釋并使用。如果一條指令是對存儲區操作的位邏輯指令,則無論是對該位的讀或寫操作,STA總是與該位的值取得一致;對不訪問存儲區的位邏輯指令來說,STA位沒有意義,此時它總被置為1。
4.2.4 BR:二進制結果位
第8位為二進制結果位,它將字處理程序與位處理聯系起來,在一段既有位操作又有字操作的程序中,用于表示字邏輯是否正確。如果字邏輯指令或者功能、功能塊出現錯誤,把BR置為0,能流中斷,下條指令不被執行。字邏輯指令或者功能、功能塊被正確執行后,使BR位為1,能流就可以傳遞到下條指令。
其余的OR、OV、OS、CC0、CC1位也與指令的邏輯操作和字運算等相關聯,都可以通過邏輯位來訪問,作為狀態位常開/常閉觸點用于編程。
4.3 程序運算測試
在FB1功能塊將記錄的按鈕動作次數送入DB1.DBW 0中(為了更清楚地分析數據,假設這里已經記錄了兩次,即DB1.DBW 0=2),并返回OB1,運行到到程序段3 L DB1.DBW 0時,先將DB1.DBW 0中的數值2內容裝入ACCU1(全局數據塊為DB1),再執行L DB2.DBW 0,將數值1裝入ACCU1(全局數據塊為DB2),ACCU1原來的2移動到ACCU2中,執行整數相加命令后,結果送入ACCU1,此時ACCU1=3,ACCU執行前后對比如圖10所示。
4.4 CPU的累加器
從上面的測試可以看出,累加器是CPU中的專用寄存器。S7_300有兩個累加器,S7_400有4個累加器,數據的傳送與變換一般通過累加器進行,而不是在存儲區進行,還可以把操作數送入累加器,在累加器中進行運算和處理,處理后的運算結果保存在累加器1中,并可傳送到存儲區。數據運行原理如圖11所示。
5 結語
通過西門子STEP7斷點功能測試,為觀察PLC程序運行找到了一種技術途徑。編輯完成的程序下載到裝載存儲器,再將程序和系統存儲器中的數據調入工作存儲器中運行,由CPU狀態寄存器里的控制字控制執行程序,由累加器完成數據運算和數據傳遞,使人們對PLC的工作原理有了更深入的了解。
參考文獻
[1]廖常初.S7-300/400PLC應用技術[M].北京:機械工業出版社,2008.
[2]王安兵.什么是狀態字?狀態字的作用[J/OL].百度文庫:http://wenku.baidu.com/link?url=F-IF3lCjaiR80vvTiuLIaJgUvs0YepwAJls-a8ZqvID1Hub0m1g9MuAgDcFvUEXaV9imLPyjNIi-E4-oh1PfWNMy9dsdQPnE0Ycr28JTpkS.
[3]劉玉蓉.西門子狀態字九個位的含義[J/OL].技成文章:http://www.diangon.com/wenku/PLC/ximenzi/201308/00004968.html.