西門子plc S7-1200 由以下幾類基本元素組成:
OB:組織塊,英文名Organization block。組織塊是CPU係統和用戶程序之間的接口,可以在CPU上電啟動時調用,也可以循環調用,也可以在PLC發生錯誤時候調用。
DB:數據塊,英文名Data block。從(cong) 字麵含義(yi) 便知主要用於(yu) 儲(chu) 存用戶數據,比如模擬量轉換數據,相當於(yu) 200裏麵的V區,歐姆龍PLC的W區。
FC:函數,英文名Function。我們(men) 常常在FC函數中寫(xie) 一些需要重複執行的代碼,可以在程序不同地方調用,可以被OB調用,也可以被FC調用。使用FC可以簡化我們(men) 需要重複執行的任務,提高代碼的運行效率。FC類似於(yu) 200的子程序。
FB:FC+DB組合,意思是含有DB塊的FC函數,與(yu) FC的區別是當函數調用結束後,通過Static變量仍然可以保留數值,經常用於(yu) 調用間的數據共享。
OB組織塊
當我們(men) 新建一個(ge) 程序時,係統會(hui) 自動建立一個(ge) Main[OB1]程序,該程序會(hui) 在PLC的每個(ge) 掃描周期被調用。Main程序和200裏麵的主程序,是一個(ge) 同樣的概念。也類似於(yu) C裏麵的Main ,即為(wei) 函數入口點,我們(men) 可以在Main程序裏麵調用各種函數和塊。下麵的圖是在程序中調用一個(ge) FC和FB,然後在FC中調用另外一個(ge) FC,形成嵌套調用。
注:<調用fc>、<調用fb>是別名,方便我們(men) 記憶和理解,真正的地址在[.....]中,如OB1,FC2,FC1,FB1等等。
Mian程序包含程序段1(NW1)和程序段2(NW2),在Main的調用結構中包含了3個(ge) 元素test、調用FB和調用FC。其實應該是4個(ge) ,還有一個(ge) 嵌套在<調用fc>中,點擊<調用fc>左側(ce) 箭頭,出現如下圖所示:

圖1 FC嵌套調用

圖2 OB分類
分析上圖中的OB類型。OB塊主要用於(yu) 程序循環、啟動、延時中斷、循環中斷、硬件中斷、HSC中斷、診斷錯誤和時間錯誤八大事件。OB塊還有兩(liang) 個(ge) 屬性是編號和優(you) 先級,優(you) 先級越高,中斷級別越高。在同樣的優(you) 先級別,OB編號越小,越優(you) 先執行。Main程序的地址在OB1,是一個(ge) 循環運行程序,優(you) 先級為(wei) 1較低。時間錯誤事件的優(you) 先級最高,當發生該事件時,會(hui) 暫停執行Main程序,優(you) 先執行時間錯誤事件OB塊。程序循環OB類塊的編號屬性為(wei) '1;>=123',意為(wei) 可以創建多個(ge) 類似OB塊。因為(wei) 新建程序默認OB編號為(wei) 1,假設創立該事件類型OB塊,那麽(me) 默認編號為(wei) 123起,同時OB1的執行要優(you) 先於(yu) OB123。診斷錯誤事件OB塊和時間錯誤OB塊隻有一個(ge) 。

圖3 添加OB新塊

圖4 手動選擇創建編號
圖4 添加OB新塊界麵,可以看到,在紅色矩形框處,OB編號數值為(wei) 123,選擇的創建方式為(wei) 自動。如果你想起用別的編號,可以選擇手動方式,同時可以選擇創建OB塊采用的語言。不妨試一試。
這裏講解幾個(ge) 常用的OB類型塊使用,其他類型OB塊使用,大家可以翻閱係統編程手冊(ce) 。
程序循環事件OB塊(program cycle):該塊主要用於(yu) 執行循環運行的程序,一般一個(ge) 程序中創建一個(ge) 便可以,就是默認的Main程序(OB1),可以通過調用FC和FB來實現其他功能。係統CPU每個(ge) 掃描周期都會(hui) 執行該類型OB塊。
啟動事件OB塊(Startup):該塊主要用於(yu) 初始化變量,當PLC斷電重啟或者CPU從(cong) STOP切換為(wei) RUN時候執行,往後不再運行,也就是隻運行一次。新建一個(ge) DB1塊,添加兩(liang) 個(ge) ,設置初始值。
然後新建一個(ge) Startup事件OB塊,寫(xie) 如下程序(SCL語言)。
可以看到該類型OB塊編號為(wei) 100,如果再建一個(ge) 該類型OB塊,編號必須>=123。然後下載程序,這裏順便提一下下載選項。
如果是初次下載,選擇'硬件和軟件(僅(jin) 更改)'。如果不是初次,可以選擇你修改的部分,這樣會(hui) 提高下載速度。
循環中斷事件OB塊(Cyclic interrupt):常常用於(yu) 需要定時執行的任務,比如需要1秒鍾采樣50個(ge) 模擬值,我們(men) 可以把循環時間設置為(wei) 20毫秒。可能會(hui) 有人問,為(wei) 什麽(me) 不采用普通定時器每隔20毫秒采樣一次呢?因為(wei) 普通定時器會(hui) 受到CPU掃描周期的影響。在PID程序中,我們(men) 需要采用循環中斷事件來調整計算PID輸出。
在實驗程序裏,通過INC指令把DB1塊裏麵的變量,每隔1秒加1,運行效果如下:

圖5 循環中斷事件OB
可以看到在OB30這個(ge) 程序塊裏麵,'Data'.Var2的值會(hui) 每隔1秒變化,如果把INC指令放在Main[OB1]裏麵會(hui) 是什麽(me) 情況呢?
診斷錯誤事件OB塊(Diagnostic error interrupt):當PLC發生故障時,會(hui) 觸發該事件;解除故障時,也會(hui) 觸發該事件,在該模塊裏麵,我們(men) 可以讀到故障信息。

圖6 添加診斷錯誤事件OB塊
在實驗程序裏,我們(men) 需要捕捉模擬量輸入的溢出錯誤,所以需要對模擬量輸入進行配置,添加溢出診斷功能,AI通道硬件標識符。
在配置硬件組態時,TIA PORTAL 將為(wei) 每個(ge) 硬件對象(如模塊、接口或模塊端口,甚至是智能設備的傳(chuan) 輸區)自動分配硬件標識符,相當於(yu) 我們(men) 的身份證號碼,獨一無二。
在診斷程序中,可以獲取錯誤IO狀態,硬件標識符和通道,並添加了STP指令。當錯誤發生時候,使PLC處於(yu) STOP狀態,若不添加STP指令,PLC仍以RUN狀態運行。
通過讀取IO_State,LADDR和Channel三個(ge) 變量,IO狀態以二進製格式顯示,第4位為(wei) 1,所以會(hui) 出現錯誤。