歡迎光臨
每天分享高質量文章

西門子S7-1200編程概念(3)——使用塊來構建程式


點擊 《福利來了!PLC的資料(免費),你要嗎?

點擊第二波福利來了!PLC的資料(免費),你要嗎?

通過設計 FB 和 FC 執行通用任務,可創建模塊化代碼塊。
然後可通過由其它代碼塊呼叫這些可重覆使用的模塊來構建程式。
呼叫塊將設備特定的引數傳遞給被呼叫塊。
當一個代碼塊呼叫另一個代碼塊時,CPU 會執行被呼叫塊中的程式代碼。
執行完被呼叫塊後,CPU 會繼續執行呼叫塊。 繼續執行該塊呼叫之後的指令。

可嵌套塊呼叫以實現更加模塊化的結構。 在以下示例中,嵌套深度為 3: 程式迴圈 OB加 3 層對代碼塊的呼叫。

組織塊 (OB)

組織塊為程式提供結構。 它們充當操作系統和用戶程式之間的接口。 OB是由事件驅動的。 事件(如診斷中斷或時間間隔)會使 CPU 執行 OB。某些 OB預定義了起始事件和行為。

程式迴圈 OB 包含用戶主程式。 用戶程式中可包含多個程式迴圈 OB。 RUN樣式期間,程式迴圈 OB 以最低優先級等級執行,可被其它事件型別中斷。 啟動OB不會中斷程式迴圈 OB,因為 CPU 在進入 RUN 樣式之前將先執行啟OB。完成程式迴圈 OB 的處理後,CPU 會立即重新執行程式迴圈 OB。該迴圈處理是用於可編程邏輯控制器的“正常”處理型別。
對於許多應用來說,整個用戶程式位於一個程式迴圈 OB 中。
可創建其它 OB以執行特定的功能,如用於處理中斷和錯誤或用於以特定的時間隔執行特定程式代碼。這些 OB 會中斷程式迴圈 OB 的執行。
使用“添加新塊”(Add new block) 對話框在用戶程式中創建新的 OB。

CPU 按優先級確定處理中斷事件的順序。 可為多個中斷事件分配相同的優先級。

  • 創建附加 OB

可為用戶程式,甚至為程式迴圈和啟動 OB 事件創建多個 OB。 使用“添加新塊”(Add new block) 對話框創建 OB 併為 OB 輸入名稱。
如果為用戶程式創建了多個程式迴圈 OB,則 CPU 會按數字順序從具有最小編號(例如OB 1)的程式迴圈 OB 開始執行每個程式迴圈 OB。 例如: 當第一個程式迴圈OB(例如 OB 1)完成後,CPU 將執行下一個編號更高的程式迴圈OB。

  • 組態 OB 的屬性

可對 OB 的屬性進行修改。例如,可組態 OB 編號或編程語言。

請註意,您可將區域性過程映像編號分配給對應於 PIP0、PIP1、PIP2、PIP3 或 PIP4 的OB。 如果您為區域性過程映像編號輸入編號,則 CPU 將創建該過程映像分割槽。

功能 (FC)

功能 (FC) 是通常用於對一組輸入值執行特定運算的代碼塊。 FC將此運算結果儲存在儲存器位置。 例如,可使用 FC執行標準運算和可重覆使用的運算(例如數學計算)或者執行工藝功能(如使用位邏輯運算執行獨立的控制)。 FC也可以在程式中的不同位置多次呼叫。此重覆使用簡化了對經常重覆發生的任務的編程。
FC 不具有相關的背景資料塊 (DB)。 對於用於計算該運算的臨時資料,FC採用了區域性資料堆棧。 不儲存臨時資料。
要長期儲存資料,可將輸出值賦給全域性儲存器位置,如 M 儲存器或全域性 DB。

功能塊 (FB)

功能塊 (FB) 是使用背景資料塊儲存其引數和靜態資料的代碼塊。 FB 具有位於資料塊(DB) 或“背景”DB 中的變數儲存器。 背景 DB 提供與 FB的實體(或呼叫)關聯的一塊儲存區併在 FB 完成後儲存資料。 可將不同的背景 DB 與FB 的不同呼叫進行關聯。 通過背景 DB 可使用一個通用 FB 控制多個設備。
通過使一個代碼塊對 FB 和背景 DB 進行呼叫,來構建程式。 然後,CPU 執行該 FB中的程式代碼,並將塊引數和靜態區域性資料儲存在背景 DB 中。 FB 執行完成後,CPU會傳回到呼叫該 FB 的代碼塊中。 背景 DB 保留該 FB 實體的值。
隨後在同一掃描周期或其它掃描周期中呼叫該功能塊時可使用這些值。

  • 可重覆使用的代碼塊和關聯的儲存區

用戶通常使用 FB 控制在一個掃描周期內未完成其運行的任務或設備的運行。要儲存運行引數以便從一個掃描快速訪問到下一個掃描,用戶程式中的每一個 FB都具有一個或多個背景 DB。 呼叫 FB 時,也需要指定包含塊引數以及用於該呼叫或 FB“實體”的靜態區域性資料的背景 DB。 FB 完成執行後,背景 DB 將保留這些值。
通過設計用於通用控制任務的 FB,可對多個設備重覆使用 FB,方法是:為 FB
的不同呼叫選擇不同的背景 DB。
FB 將 Input、Output 和 InOut 以及靜態引數儲存在背景資料塊中。

  • 在背景資料塊中分配起始值

背景資料塊儲存每個引數的預設值和起始值。 起始值提供在執行 FB 時使用的值。然後可在用戶程式執行期間修改起始值。
FB 接口還提供一個“預設值”(Default value)列,使您能夠在編寫程式代碼時為引數分配新的起始值。 然後將 FB中的這個預設值傳給關聯背景資料塊中的起始值。 如果不在 FB接口中為引數分配新的起始值,則將背景資料塊中的預設值複製到起始值。

  • 使用帶多個 DB 的單個 FB

下圖顯示了三次呼叫同一個 FB 的 OB,方法是針對每次呼叫使用一個不同的資料塊。
該結構使一個通用 FB可以控制多個相似的設備(如電機),方法是在每次呼叫時為各設備分配不同的背景資料塊。 每個背景 DB 儲存單個設備的資料(如速度、加速時間和總運行時間)。

在此實體中,FB 22 控制三個獨立的設備,其中 DB 201用於儲存第一個設備的運行資料,DB 202 用於儲存第二個設備的運行資料,DB 203用於儲存第三個設備的運行資料。

資料塊 (DB)

在用戶程式中創建資料塊 (DB) 以儲存代碼塊的資料。
用戶程式中的所有程式塊都可訪問全域性 DB 中的資料,而背景 DB 僅儲存特定功能塊 (FB)的資料。
相關代碼塊執行完成後,DB 中儲存的資料不會被刪除。 有兩種型別的 DB:
● 全域性 DB 儲存程式中代碼塊的資料。 任何 OB、FB 或 FC 都可訪問全域性 DB中的資料。
● 背景 DB 儲存特定 FB 的資料。 背景 DB 中資料的結構反映了 FB的引數(Input、Output 和 InOut)和靜態資料。 (FB 的臨時儲存器不儲存在背景 DB中。)

  • 只讀資料塊

可將 DB 組態為只讀:
1. 在專案瀏覽器中右鍵單擊相應 DB,然後在右鍵快捷選單中選擇“屬性”(Properties)。
2. 在“屬性”(Properties) 對話框中選擇“特性”(Attributes)。
3. 選擇“在設備中寫保護資料塊”(Data block write-protected in the device)選項並單擊“確定”(OK)。

  • 已優化的資料塊和標準資料塊

編程工具以及經典的 S7-300 和 S7-400 CPU 兼容。
可優化訪問的資料塊無固定的定義結構。
資料元素在宣告中僅包含一個符號名,在塊中沒有固定地址。 CPU會將元素自動儲存到塊的可用儲存區中,以免在儲存器中留下間隙。這樣一來,便可最優化地利用儲存器容量。
要設置對資料塊的優化訪問,請按以下步驟操作:
1. 在 STEP 7 專案樹中展開程式塊檔案夾。
2. 右鍵單擊資料塊並從背景關係選單中選擇“屬性”(Properties)。
3. 為屬性選擇“優化塊訪問”(Optimized block access)。
請註意,預設情況下會為新資料塊選中優化塊訪問。
如果取消選擇“優化塊訪問”(Optimized block access),則塊將採用標準訪問。


創建可重覆使用的代碼塊

可儲存想要在庫中重覆使用的物件。 每個專案都有一個與之相連的專案庫。除專案庫外,您還可以創建可在多個專案中使用的任意數量的全域性庫。
由於庫彼此兼容,因此可以複製庫要素並將其從一個庫移動到另一個庫。
庫可用於創建塊的模板:首先將塊粘貼到專案庫中,隨後在其中進一步開發塊。
最後,將塊從專案庫複製到全域性庫。 可將全域性庫共享給正在使用專案的其他同事。
他們可使用塊並根據需要進一步調整塊以滿足各自的需求。

向塊傳遞引數

函式塊 (FB) 和函式 (FC) 有三種不同接口型別:
● IN
● IN/OUT
● OUT
函式塊和函式通過 IN 和 IN/OUT 接口型別接收引數。
塊對這些資料進行處理,此後,通過 IN/OUT 和 OUT 接口型別將傳回值傳回呼用者。
用戶程式採用以下兩種方法中的某一種傳遞引數。

  • 傳值

  • 傳取用

  • 塊優化和引數傳遞

用戶程式傳遞的函式塊引數通常在和該函式塊相關的背景資料塊 (DB) 中:
● 通過將引數複製給背景資料塊,或者,複製位於背景資料中引數,用戶程式可以以“傳值”方式傳遞簡單資料型別(例如,INT、DINT 和 REAL)的引數。
● 用戶程式將複雜資料型別(例如,STRUCT、ARRAY 和 STRING)複製到用於 IN 和OUT 引數型別的背景資料塊中,或者,複製位於該背景資料塊中的複雜資料型別。
● 對於 IN/OUT 接口型別,用戶程式以“傳取用”方式傳遞複雜資料型別。
資料塊可以創建成“優化的”或“標準的”(未優化)資料塊。
優化型資料塊的體積小於非優化型資料塊。
優化型資料塊和非優化型資料塊中的資料元素順序不一樣。

可以創建用來處理優化或非優化資料的函式塊和函式。 可以選擇複選框“優化塊訪問”(Optimized block access),將其作為塊的屬性。
預設情況下,用戶程式會優化程式塊;程式塊期望傳遞給該塊的資料採用優化格式。

用戶向某個函式傳遞複雜引數(例如,STRUCT結構的引數)時,系統會檢查包含該結構的資料塊的優化設置和程式塊的優化設置。
如果你同時優化該資料塊和該函式,用戶程式將以“傳取用”方式傳遞該結構(STRUCT)。
如果選擇了不優化該資料塊和該函式,也採用“傳取用”方式傳遞該結構。
但是,如果函式和資料塊採用不同優化設置(即,優化了一個塊且沒有優化另一個塊),則必須將 STRUCT 轉換成函式所期望的格式。
例如,如果選擇了不優化該資料塊但優化該函式,則資料塊中的 STRUCT須轉換成優化格式後才能被該函式進行處理。
該轉換過程由系統完成,其方法是:先製作該 STRUCT的一個“副本”,接著,將它轉換成該函式所期望的優化格式。

總而言之,當用戶程式將某個複雜資料型別(例如,STRUCT)作為 IN/OUT引數傳遞給某個函式時,該函式希望用戶程式以“傳取用”方式傳遞 STRUCT。
● 對於含該結構的資料塊和該函式,如果都選擇了優化或者不優化,用戶程式將以“傳取用”方式傳遞資料。
● 如果對資料塊和函式沒有配置相同的優化設置(優化其中一個且不優化另一個),系統必須先製作 STRUCT 的一個副本,再將其傳遞給函式。
由於系統必須製作該結構的副本,因此,該操作可以高效地將“傳取用”轉換成“傳值”。

  • 優化設置對用戶程式的影響作用

如果 HMI 或中斷組織塊更改了結構中的元素,引數複製將可能導致用戶程式出現問題。
例如,某個函式有一個 IN/OUT引數(正常情況下以“傳取用”方式傳遞),但是,資料塊和該函式採用了不同的設置,則:
1. 用戶程式準備呼叫該函式時,系統必須製作該結構的一個“副本”,以將該資料的格式轉換成與該函式相匹配的格式。
2. 用戶程式採用該結構的該“副本”的取用呼叫該函式。
3. 該函式運行期間出現了一個中斷組織塊,且該中斷組織塊更改了原結構中的某個值。
4. 該函式運行完畢。由於該結構是一個 IN/OUT引數,因此,系統將該值以原來的格式複製回原結構。
採用製作結構副本的方式進行格式轉換的後果:該中斷組織塊改寫過的資料將被丟失。
對於採用 HMI 寫入的值,情況也同樣如此。 HMI也可能中斷用戶程式的執行,並以和中斷組織塊相同的方式寫入某個值。
解決該問題的方法有很多種:
● 最好的方法是:需要使用複雜資料型別(例如,STRUCT)時,對程式塊和資料塊採用相匹配的優化設置。
這種方法可以保證用戶程式總是以“傳取用”方式進行引數傳遞。
● 另一種方法是使中斷組織塊或 HMI 不直接修改該結構中的元素。 讓組織塊或 HMI修改另一個變數,此後,用戶在用戶程式的某個特定位置將該變數複製到該結構中。


尋找同路人

做自動化工業變革的踐行者


可通過選單查找自己喜歡的文章彙總:

現場儀錶DCS部分PLC部分SIS部分通訊標準數字化問題解答】此處列出部分鏈接,更多文章通過選單獲取。



赞(0)

分享創造快樂