PLC程式設計—基本知識

GesLuck發表於2024-12-06

1. OB、FB、FC功能

OB(組織塊):用於執行特定的任務(CPU啟動、迴圈掃描、時間中斷、硬體中斷等),每個OB塊均有一個特定的功能和優先順序(特定事件發生時被觸發)。
FB(功能塊):具有內部儲存器,可保留狀態資料,適用於多頻次呼叫需要保持資料狀態的場合(PID控制器、計數器等)。
FC(功能):不儲存任何內部狀態資料,用於執行特定的功能,每次呼叫資料不保留(簡單計算、邏輯操作)

呼叫規則:

呼叫是指在一個塊中使用另一個程式塊的功能,可以將一個任務拆分成更小、更易管理的部分,遞迴地使用其他程式塊,每個部分由一個獨立的FB或FC來處理。(巢狀深度為8層)

  • OB為最高層次的程式塊,內部可編寫邏輯,呼叫其他FB、FC塊;
  • FB塊可呼叫FB、FC,可利用其他功能塊或功能完成複雜邏輯(臨時變數並不儲存在背景資料塊中,只用於一個迴圈);
  • FC塊可呼叫FB、FC,它自己不儲存任何資料,(必須給所有形參分配實參)。

說明:

  • 巢狀呼叫從迴圈OB開始,最多巢狀16層FB或FC;中斷OB最多巢狀6層;安全程式巢狀只有4層
  • 結構 (STRUCT) 和 PLC 資料型別 (UDT) 的巢狀深度為 8 級。具體巢狀深度取決於所使用的 CPU。

OB的事件與優先順序:
OB的執行先後與其優先順序有關,優先順序高的OB會中斷低階的OB。當CPU在執行主迴圈程式時,如有有一個高優先順序的中斷OB被觸發時,CPU會暫停主程式,先執行中斷OB,當其執行完成後繼續主程式。


2. 背景資料塊是什麼

函式塊(FB)的呼叫稱為例項。例項使用的資料儲存在背景資料塊中(例項定址)。

  • 要對來自當前塊介面的變數進行定址: #<變數名稱>
  • 訪問多重背景塊的資料:#<多重例項名稱>.<變數名稱>


3. 最佳化與標準訪問的區別

STEP 7 提供具有不同訪問選項的資料塊:

  • 可最佳化訪問的資料塊 (S7-1200/S7-1500)
  • 可標準訪問的資料塊 (S7-300 / S7-400 / S7-1200 / S7-1500)

可最佳化訪問的資料塊(符號定址)

  • 可最佳化訪問的資料塊沒有固定的定義結構。在宣告中,僅為資料元素分配一個符號名稱,而不分配在塊中的固定地址。
  • 對於符號定址,可以使用資料塊的名稱和變數名,並用圓點分隔。資料塊的名稱用引號括起來。
  • 提高儲存空間的使用率
  • 提高 CPU 的效能
    注意事項:
  • 使用符號表示,少量的註釋即可

可標準訪問的資料塊(絕對定址)

  • 可標準訪問的資料塊具有固定的結構。資料元素在宣告中分配了一個符號名,並且在塊中有固定地址。
  • 對於絕對定址,可以使用資料塊的編號和資料塊變數的絕對地址,並用圓點分隔。地址識別符號 % 被自動設定為絕對地址的字首

4. 程式設計中的運算元

  • PLC 變數
  • 常量
  • 背景資料塊中的變數
  • 全域性資料塊中的變數

5. 片段定址

可以選擇包含所宣告變數的特定地址區域,訪問寬為 1 位、8 位、16 位或 32 位的區域。


6. 間接定址

在執行之前不計算地址的運算元,採用間接定址方式時,單迴圈中各程式段可多次執行,而且每次執行時使用的運算元不同。

間接定址選項:

  • 透過指標間接定址
  • ARRAY 元素的間接索引
  • 透過 DB_ANY 資料型別間接定址資料塊。

間接定址示例1:

  • 使用下標訪問來自不同的三個變數。
下標 變數
1 Input_WORD_0——Word
2 Temperature——DInt
3 Output_WORD_4——Word

根據在 Index 引數中指定的編號(1、2 或 3),執行“FC_AccessGroupInt”指令的第一、第二或第三種情況。

ARRAY 間接定址示例2:

  • 使用下標訪問將ARRAY三維陣列的元素複製到 "MyTarget" 變數中。


7. AT覆蓋變數(訪問變數內部的片段)

附加“AT”關鍵字宣告來覆蓋已經定義了的變數;例如:對WORD中內部的Byte進行定址;

使用注意事項:

  • 在標準訪問塊內(去掉“最佳化的塊訪問”)
  • 可小於等於被覆蓋變數的寬度


8.PLC 資料型別(UDT)

  • 使用 PLC 資料型別作為定義變數的基本資料型別。
  • 作為建立全域性資料塊的模板。
  • 更改會在所有的使用點自動更新。


9.使用 IEC 定時器和計數器

IEC 定時器和計數器的優勢

IEC 定時器和計數器的統一應用,可顯著提高程式程式碼的執行效率。
採用這種方式具有以下優勢:

  • 透過新生成的背景資料塊,可對塊進行多次呼叫。
  • IEC 計數器的計數範圍更大。
  • 與 S5 定時器相比,IEC 定時器效能更佳,且計時更為準確。

應用的兩種方法
【1】TON IEC 定時器和 CTU IEC 計數器的資料宣告為區域性變數(應用於塊介面中)。
【2】建立一個 ARRAY of ICE... 型別的全域性資料塊,並將變數元素拖放到程式段中


10. 寫程式時必備的OB塊

程式必備塊(開發常用的OB塊)

  • 主程式迴圈塊OB1‌:這是使用者程式的核心,負責協調整個程式的執行。OB1在CPU啟動後迴圈執行,使用者可以在其中呼叫其他使用者塊(如FB、SFB、FC、SFC等)‌

  • ‌初始化程式塊OB100‌:在CPU上電時呼叫一次,通常用於初始化設定‌

  • 迴圈中斷塊OB30:用於處理需要定期執行的任務,如通訊處理等‌

‌錯誤處理塊‌(新增後可直接下載空程式):

  • ‌時間錯誤塊OB80‌:防止CPU掃描時間超過最大值‌
  • ‌‌電源故障塊OB81‌:防止後備電源失效導致CPU停機‌
  • ‌診斷中斷塊OB82‌:通訊時需要下載‌
  • ‌CPU硬體故障塊OB84‌:處理CPU硬體故障導致的停機‌
  • ‌通訊錯誤塊OB87‌:處理通訊錯誤‌‌
  • ‌程式設計錯誤塊OB121‌:處理程式設計錯誤‌
  • ‌‌I/O錯誤塊OB122‌:處理I/O錯誤‌
  • ‌冗餘錯誤塊OB72‌:處理冗餘系統錯誤‌‌(冗餘系統時使用)

  • ‌日期中斷塊OB10~OB17‌:根據設定的日期和時間觸發執行,適用於需要按日期執行的任務‌
  • ‌時間延遲中斷塊OB20~OB23‌:按設定的延遲時間觸發執行,適用於需要延遲執行的任務‌
  • ‌硬體中斷塊OB40~OB47‌:由外部裝置觸發,適用於處理硬體相關的事件‌(硬體中斷模組HF使用)

經驗1:FC函式中的置復位指令無法執行?

  • FC函式中置復位使用需要將其變數屬性安排到IN_OUT內。使用Input、output、Temp變數無法保持!


待續

相關文章