西門子 PLC 1200的 OB塊用法
發(fā)布日期:
2023-05-23


西門子plc S7-1200 由以下幾類基本元素組成:

OB:組織塊,英文名Organization block。組織塊是CPU系統(tǒng)和用戶程序之間的接口,可以在CPU上電啟動時調(diào)用,也可以循環(huán)調(diào)用,也可以在PLC發(fā)生錯誤時候調(diào)用。

DB:數(shù)據(jù)塊,英文名Data block。從字面含義便知主要用于儲存用戶數(shù)據(jù),比如模擬量轉(zhuǎn)換數(shù)據(jù),相當于200里面的V區(qū),歐姆龍PLC的W區(qū)。

FC:函數(shù),英文名Function。我們常常在FC函數(shù)中寫一些需要重復執(zhí)行的代碼,可以在程序不同地方調(diào)用,可以被OB調(diào)用,也可以被FC調(diào)用。使用FC可以簡化我們需要重復執(zhí)行的任務,提高代碼的運行效率。FC類似于200的子程序。

FB:FC+DB組合,意思是含有DB塊的FC函數(shù),與FC的區(qū)別是當函數(shù)調(diào)用結(jié)束后,通過Static變量仍然可以保留數(shù)值,經(jīng)常用于調(diào)用間的數(shù)據(jù)共享。

OB組織塊

當我們新建一個程序時,系統(tǒng)會自動建立一個Main[OB1]程序,該程序會在PLC的每個掃描周期被調(diào)用。Main程序和200里面的主程序,是一個同樣的概念。也類似于C里面的Main ,即為函數(shù)入口點,我們可以在Main程序里面調(diào)用各種函數(shù)和塊。下面的圖是在程序中調(diào)用一個FC和FB,然后在FC中調(diào)用另外一個FC,形成嵌套調(diào)用。

注:<調(diào)用fc>、<調(diào)用fb>是別名,方便我們記憶和理解,真正的地址在[.....]中,如OB1,FC2,FC1,FB1等等。

Mian程序包含程序段1(NW1)和程序段2(NW2),在Main的調(diào)用結(jié)構中包含了3個元素test、調(diào)用FB和調(diào)用FC。其實應該是4個,還有一個嵌套在<調(diào)用fc>中,點擊<調(diào)用fc>左側(cè)箭頭,出現(xiàn)如下圖所示:


西門子 PLC 1200的 OB塊用法

圖1 FC嵌套調(diào)用

西門子 PLC 1200的 OB塊用法

圖2 OB分類

分析上圖中的OB類型。OB塊主要用于程序循環(huán)、啟動、延時中斷、循環(huán)中斷、硬件中斷、HSC中斷、診斷錯誤和時間錯誤八大事件。OB塊還有兩個屬性是編號和優(yōu)先級,優(yōu)先級越高,中斷級別越高。在同樣的優(yōu)先級別,OB編號越小,越優(yōu)先執(zhí)行。Main程序的地址在OB1,是一個循環(huán)運行程序,優(yōu)先級為1較低。時間錯誤事件的優(yōu)先級最高,當發(fā)生該事件時,會暫停執(zhí)行Main程序,優(yōu)先執(zhí)行時間錯誤事件OB塊。程序循環(huán)OB類塊的編號屬性為'1;>=123',意為可以創(chuàng)建多個類似OB塊。因為新建程序默認OB編號為1,假設創(chuàng)立該事件類型OB塊,那么默認編號為123起,同時OB1的執(zhí)行要優(yōu)先于OB123。診斷錯誤事件OB塊和時間錯誤OB塊只有一個。

西門子 PLC 1200的 OB塊用法

圖3 添加OB新塊

西門子 PLC 1200的 OB塊用法

圖4 手動選擇創(chuàng)建編號

圖4 添加OB新塊界面,可以看到,在紅色矩形框處,OB編號數(shù)值為123,選擇的創(chuàng)建方式為自動。如果你想起用別的編號,可以選擇手動方式,同時可以選擇創(chuàng)建OB塊采用的語言。不妨試一試。

這里講解幾個常用的OB類型塊使用,其他類型OB塊使用,大家可以翻閱系統(tǒng)編程手冊。

程序循環(huán)事件OB塊(program cycle):該塊主要用于執(zhí)行循環(huán)運行的程序,一般一個程序中創(chuàng)建一個便可以,就是默認的Main程序(OB1),可以通過調(diào)用FC和FB來實現(xiàn)其他功能。系統(tǒng)CPU每個掃描周期都會執(zhí)行該類型OB塊。

啟動事件OB塊(Startup):該塊主要用于初始化變量,當PLC斷電重啟或者CPU從STOP切換為RUN時候執(zhí)行,往后不再運行,也就是只運行一次。新建一個DB1塊,添加兩個,設置初始值。

然后新建一個Startup事件OB塊,寫如下程序(SCL語言)。

可以看到該類型OB塊編號為100,如果再建一個該類型OB塊,編號必須>=123。然后下載程序,這里順便提一下下載選項。

如果是初次下載,選擇'硬件和軟件(僅更改)'。如果不是初次,可以選擇你修改的部分,這樣會提高下載速度。

循環(huán)中斷事件OB塊(Cyclic interrupt):常常用于需要定時執(zhí)行的任務,比如需要1秒鐘采樣50個模擬值,我們可以把循環(huán)時間設置為20毫秒。可能會有人問,為什么不采用普通定時器每隔20毫秒采樣一次呢?因為普通定時器會受到CPU掃描周期的影響。在PID程序中,我們需要采用循環(huán)中斷事件來調(diào)整計算PID輸出。

在實驗程序里,通過INC指令把DB1塊里面的變量,每隔1秒加1,運行效果如下:

西門子 PLC 1200的 OB塊用法

圖5 循環(huán)中斷事件OB

可以看到在OB30這個程序塊里面,'Data'.Var2的值會每隔1秒變化,如果把INC指令放在Main[OB1]里面會是什么情況呢?

診斷錯誤事件OB塊(Diagnostic error interrupt):當PLC發(fā)生故障時,會觸發(fā)該事件;解除故障時,也會觸發(fā)該事件,在該模塊里面,我們可以讀到故障信息。

西門子 PLC 1200的 OB塊用法

圖6 添加診斷錯誤事件OB塊

在實驗程序里,我們需要捕捉模擬量輸入的溢出錯誤,所以需要對模擬量輸入進行配置,添加溢出診斷功能,AI通道硬件標識符。

在配置硬件組態(tài)時,TIA PORTAL 將為每個硬件對象(如模塊、接口或模塊端口,甚至是智能設備的傳輸區(qū))自動分配硬件標識符,相當于我們的身份證號碼,獨一無二。

在診斷程序中,可以獲取錯誤IO狀態(tài),硬件標識符和通道,并添加了STP指令。當錯誤發(fā)生時候,使PLC處于STOP狀態(tài),若不添加STP指令,PLC仍以RUN狀態(tài)運行。

通過讀取IO_State,LADDR和Channel三個變量,IO狀態(tài)以二進制格式顯示,第4位為1,所以會出現(xiàn)錯誤。

聲明:部分內(nèi)容來源于網(wǎng)絡,如侵權請后臺留言聯(lián)系刪除。