S7-300中各个块之间的联系以及OB块的功能和应用场合
*S7-300中各個塊之間的聯系以及OB塊的功能和應用場合
在簡述S7-300中OB塊的功能和應用場合之前,我想先簡單的梳理一下S7-300中各個塊之間的聯系。再具體到OB塊進行綜合的分析。以下是我不成熟的小思路;用來梳理塊之間的聯系。
首先:PLC對軟件編寫程序的時候一般有三種編程方法,一是結構化編程,另一種是線性化編程,還有一種是模塊化編程。再模塊化編程和結構化編程中常常就會用到“塊”。
1、 塊的概念: 塊是存放程序和數據的存儲空間。具體根據存放什么來在劃分為,程序塊和數據塊。存放用戶程序的為程序塊,存放相關數據的為數據塊。
2、STEP7主要塊有: 組織塊(OB),功能塊/函數塊(FB),功能/函數(FC),數據塊(DB)及系統功能(SFC)和系統功能塊(SFB)等。
3、調用程序塊: OB,FB,FC(可以調用除OB塊以外的其它程序塊)。
4、被調用程序塊: FB,FC,SFB,SFC。
5、整體上塊的作用: 再PLC程序中有兩種程序,一種是廠家再生產PLC時把它固化在PLC內部CPU的系統程序,還有一種是我們需要自己編寫且能夠隨意“擦寫”和下載的用戶程序。
在編寫PLC程序時,為使程序條理清晰和便于管理維護和閱讀,軟件制作者給我們規制制作了不同的“塊”,在我們編寫程序時就把不同功能的程序寫在不同的程序塊中,當PLC運行時,它的CPU就會按照程序需要運行的條件去命令相應的“塊”來完成特定的控制任務。
6、具體各個塊的作用;
(1)組織塊OB
OB由系統自動調用,并執行用戶再OB塊中編寫的程序,所以OB的基本作用是調用用戶程序即程序塊。
在OB塊中編寫程序的最大容量,S7-300是16KB。
除主程序循環OB1外,其他OB均是由事件觸發的中斷。
相當于計算機編程里的主程序。
(2)函數FC
作為子程序用;
作為函數用,函數中通常帶形參。
函數中程序的最大容量 S7-300 位16KB。
FC的形參通常稱為接口區,參數類型分為輸入參數,輸出參數,輸入/輸出參數和臨時數據區。在編寫函數FC的輸出參數時,應避免沒有直接輸出(否則,可能輸出一個隨機值,影響程序的判斷),可以在函數的開始,將FC參數清0,位輸出參數復位。
相當于計算機編程里的子程序。
(3)函數塊FB
FB與FC相比,FB每次調用都必須分配一個背景數據塊,用來存儲接口數據區(TEMP類型除外)和運算的中間數據。其它程序可以直接使用背景數據區的數據。
FB中程序的最大容量 S7-300是16KB.
FB的接口區比FC多一個靜態數據區(STAT),用來存儲中間變量。程序調用FB時形參不像FC那樣必須賦值,可以通過背景數據塊直接賦值。
由于FB帶有背景數據塊,輸出參數不會輸出隨機值,可以不在FB中編寫初始化程序。
(4)數據塊DB
DB用來存儲用戶數據及程序的中間變量,為全局變量。
DB的最大容量,S7-300為32KB,S7-400為64KB。
DB可分為共享數據塊(Share DB)、背景數據塊(Instance DB)和用戶自定義數據(UDT)類型的數據塊。(數據塊的分類)
★ 共享數據塊可作為所有程序使用的全局變量,在CPU允許的條件下,一個程序可創建任意多個DB,每個DB的最大容量為64KB。
默認條件下,共享數據塊為掉電保持,在其屬性菜單中選中“Non Retain”可以更改為掉電數據丟失。
如CPU中無足夠的內部存儲空間保存數據,可將指定的數據保存到共享數據塊。存儲在共享數據塊中的數據可被其它任意一個塊調用(全局變量)。這一點和背景數據塊不同,背景數據塊只能被指定的功能塊(FB)使用,保存在背景數據塊中的數據只能在這個功能塊中有效。
★ 背景數據塊與FB和SFB關聯,也是全局變量。背景數據塊和共享數據塊相比,只保存與FB或SFB接口數據區(Temp)相關的數據。背景數據塊中有一種比較特殊的數據塊,稱為多重背景數據塊。有關多重背景數據塊的用法和使用注意事項請參看《怎樣使用多重背景數據塊》。
★ 基于UDT的數據塊為全局變量,提供一個固定格式的數據結構,便于用戶使用。
(5)系統函數(SFC)和系統函數塊(SFB)
SFC和SFB集成在CPU中,相當于系統提供的可供用戶程序調用的FC或FB,實現與CPU系統相關的一些功能,如讀寫CPU時鐘等功能。調用SFB需要背景數據塊。
7、具體上總結各個塊之間的聯系
(1)“OB”組織塊的意義和作用
“OB”組織塊是PLC的軟件操作系統與我們所編寫程序的接口,在PLC啟動后,PLC里面的CPU就會循環執行OB組織塊,在“OB”組織塊中我們可以調用“FC”函數和“FB”函數塊。“OB”具有多個種類,比如有主程序快“OB1”、中斷程序塊“OB10”等,這樣以來組織塊“OB”是具有優先級的。這就像單片機中的優先級相類似。比如中斷程序塊“OB10”可以打斷“OB1”的執行。
(2)“FC”函數的意義及使用
在PLC編程軟件中的"FC"是指函數的意思,它是用戶自己編寫的程序塊。在函數(FC)中是沒有數據存儲器的,它是可以通過調用使用,在調用時要給它的形式參數送一個具體的數值才可以用。另外在這個“FC”函數里面是有局部變量表和塊參數的,比如這些變量可以是有輸入、輸出和輸入/輸出和臨時變量等。它有點類似一個子程序,可以在主程序中調用。
舉個PLC啟停控制的簡單例子,我們可以在主函數中建立一個子函數“FC”命名為“啟停控制FC1”,建立好函數后給啟動按鈕與停止按鈕以及輸出繼電器關聯一個具體的實際參數就可以了。比如I0.0和I0.1是啟動和停止,Q0.0是輸出控制電機,我們把這種函數的調用叫絕對調用,很顯然這種方式是不夠靈活的。
(3)“FB”函數塊的意義和作用
這個“FB”函數塊是我們自己編寫程序時自己可以創建的,我們創建的這個函數塊FB具有他的參數是可以分配的特點,具有相應的存儲空間。比如剛才講的我們在主程序創建了“FC”函數,由于采用了絕對調用顯得不夠靈活,如果我們用“FB”函數塊來操作就顯得很“柔性化”了。
我們先在項目中建立一個函數塊,在輸入參數中建立兩個變量分別命名“啟動變量”和“停止變量”,再在輸出參數中建立一個變量,命名為“電機變量”。然后再通過主程序調用后,啟動和停止按鈕就不僅限于I0.0和I0.1了,我們可以任意地相關聯就可以了,所以通過“FB”函數塊的使用使程序更加靈活,增加了程序的“柔性化”。
(4)“DB”數據塊的意義和作用
“DB”是數據塊,它的作用是儲存我們所編寫程序時所用的數據的,以及所我們所設置的中間變量也都有它存儲。我們把這種數據塊“DB”分成全局數據塊、數據背景數據塊和數據類型數據塊三種。全局數據塊是存儲程序數據的,它可以存儲我們前面所設置的變量,比如前面說的“啟動變量”和“停止變量”等。
以上就是我對S7-300 PLC“塊”的總結。清楚的了解后就可以具體的來分析S7-300中OB塊的功能和應用場合。
OB塊的功能;
(1)整體功能;
OB由系統自動調用,并執行用戶再OB塊中編寫的程序,所以OB的基本作用是調用用戶程序即程序塊。
在OB塊中編寫程序的最大容量,S7-300是16KB。
除主程序循環OB1外,其他OB均是由事件觸發的中斷。
(2)“OB”組織塊的意義和作用
“OB”組織塊是PLC的軟件操作系統與我們所編寫程序的接口,在PLC啟動后,PLC里面的CPU就會循環執行OB組織塊,在“OB”組織塊中我們可以調用“FC”函數和“FB”函數塊。“OB”具有多個種類,比如有主程序快“OB1”、中斷程序塊“OB10”等,這樣以來組織塊“OB”是具有優先級的。這就像單片機中的優先級相類似。比如中斷程序塊“OB10”可以打斷“OB1”的執行。
(3)具體每個OB塊的功能和應用場合如下表;
1、 自由循環組織塊 OB1
S7CPU啟動完成后,操作系統循環執行 OB1,OB1執行完成后,操作系統再次啟動 OB1。在 OB1中可以調用 FB、SFB、FC、SFC等用戶程序使其循環執行。除 OB90以外, OB1優先級最低,可以被其他 OB中斷。 OB1
默認掃描監控時間為 150ms(可設置),掃描超時, CPU自動調用 OB80報錯,如果程序中沒有建立 OB80, CPU進入停止模式。
2、 日期中斷組織塊 OB10~OB17
在 CPU屬性中,可以設置日期中斷組織塊 OB10~OB17觸發的日期、執行模式(到達設定的觸發日期后, OB 只執行一次或按每分、每小時、每周、每月周期執行)等參數,當 CPU的日期值大于設定的日期值時,觸發相應的 OB并按設定的模式執行。
在用戶程序中也可以通過調用 SFC28系統函數設定 CPU日期中斷的參數, 調用 SFC30激活日期中斷投入運行,與在CPU屬性中的設置相比,通過用戶程序,可以在 CPU運行時靈活 地修改設定的參數,兩種方式可以任意選擇,也可以同時對一個 OB進行設置。
3、 時間延遲中斷組織塊 OB20~OB23
時間延遲中斷組織塊 OB20~OB23的優先級及更新過程映像區的參數需要在 CPU屬性中設置, 通過調用系統 函數 SFC32觸發執行, OB號及延遲時間在 SFC32參數中設定, 延遲時間為 1~60000ms,大大優于定時器精度。
4、 循環中斷組織塊 OB30~OB38
循環中斷組織塊 OB30~OB38按設定的時間間隔循環執行, 循環中斷的間隔時間在 CPU屬性中設定, 每一個 OB默認的時間間隔不同, 例如 OB35默認的時間間隔為 100ms,在 OB35中的用程序將每隔 100ms調用一次, 時間間隔可以自由設定, 最小時間間隔不能小于 55ms。
OB中的用戶程序執行時間必須小于設定的時間間隔, 如果間隔時間較短,由于循環中斷 OB沒有完成程序掃描而被再次調用,從而造成 CPU故障,觸發 OB80報錯,如果程序中沒有創建 OB80,CPU進入停止模式。通過調用 SFC39~SFC42系統函數可以禁止、延遲、使 能循環中斷的調用。循環中斷組織塊通常處理需要固定掃描周期的用戶程序,例如 PID 函數塊通常需在循 環中斷中調用以處理積分時間的計算。
5、硬件中斷組織塊 OB40~OB47
硬件中斷也叫過程中斷,由外部設備產生,例如功能模塊 FM、通信處理器 CP及數字量輸入、輸出模塊等。 通常使用具有硬件中斷的數字量輸入模塊觸發中斷響應,然后為每一個模塊配置相應的中斷 OB(一個模塊 只能良一個中斷 OB, S7-300 系列 PLC。
CPU只能觸發硬件中斷 OB40),在模塊配置中可以選擇輸入點的上升沿、下降沿或全部作為觸發中斷 OB的事件。配置中的中斷事件出現,中斷主程序,執行中斷 OB中的用 戶程序一個周期,然后跳回中斷處繼續執行主程序。
使用中斷與普通輸入信號相比,沒有主程序掃描和過程映像區更新時間,適合需要快速響應的應用。如果輸入模塊中的一個通道觸發硬件中斷,操作系統將識別模塊的槽號及觸發相應的 OB,中斷 OB執行之后發送與通道相關的確認。
在識別和確認過程中,該通道再次觸發的中斷事件將丟失;如果模塊其他通道 觸發中斷事件, 中斷不會丟失, 在當前正在運行的中斷確認之后觸發; 如果是不同的模塊觸發的中斷事件, 中斷請求被記錄,中斷 OB在空閑(沒有模塊其他通道的中斷請求)時觸發。通過調用 SFC39~SFC42系統 函數可以禁止、延遲、使能硬件中斷的調用。
6、DPV1中斷組織塊 OB55~OB57
CPU響應 PROFIBUS-DP V1 從站觸發的中斷信息。
7、多處理器中斷組織塊 OB60
用于 S7-400 系列 PLC多 CPU (一個機架中最多插入 4 個 CPU完成同一個復雜任務) 處理功能,通過調用 SFC35, 可以觸發 OB60在多個 CPU中同時執行。
8、時鐘同步中斷組織塊 OB61~OB64
用于處理 PROFIBUS-DP V1 等時鐘同步, 從采集各個從站的輸入到邏輯結果輸出, 需要經過從站輸入信號采樣循環(信號轉換) 、從站背板總線循環(轉換的信號從模塊傳遞到從站接口) 、PROFIBUS-DP總線循環 (信號自從站傳遞到主站) 、程序執行循環(信號的程序處理) 、PROFIBUS-DP總線循環(信號從主站傳遞 到從站)、從站背板總線循環(信號從從站接口傳遞到輸出柜塊)及模塊輸出循環(信號轉換) 7 個循環, 時鐘同步中斷將 7 個循環同步,優化數據的傳遞并保證 PROFIBUS-DP各個從站數據處理的同步性。 PROFIBUS 時鐘同步中斷只能用于 S7-400 系列 PLC CPU(具有 DP V2 功能)。
9、工藝同步處理中斷組織塊 OB65
用于 T-CPU(具有運動控制功能的 CPU)工藝塊與開始程序的同步處理。
10、冗余故障中斷組織塊 OB70、OB72
用于 S7-400H 冗余系統,當 I/O 冗余故障,例如冗余的 PROFIBUS-DP從站故障時,觸發 OB70的調用,當 CPU冗余故障,如 CPU切換、同步故障時,觸發 OB72的調用。如果 I/O 冗余,或者 CPU冗余故障而在 CPU 中沒有創建 OB70、OB72,CPU不會進入停止模式。
11、異步故障中斷組織塊 OB80~OB87
異步故障中斷用于處理各種故障事件。
OB80:處理時間故障、 CIR(Configuration In Run)后的重新運行等功能,例如 OB1或 OB35運行超 時, CPU自動調用 OB80報錯,如果程序中沒有創建 OB80,CPU進入停止模式。
OB81:處理與電源相關的各種信息( S7-400 系列 PLC CPU只有電池故障時調用) ,出現故障, CPU自動調 用 OB81報錯,如果程序中沒有創建 OB81,CPU不會進入停止模式。
OB82:診斷中斷,如果使能一個具有診斷中斷模塊的診斷功能(例如斷線、傳感器電源丟失) ,出現故障時 調用 OB82,如果程序中沒有創建 OB82,CPU進入停止模式。診斷中斷還對 CPU所有內外部故障,包括模塊前連接器拔出、硬件中斷丟失等作出響應。
OB83:用于模塊插拔事件的中斷處理, 事件出現, CPU自動調用 OB83報警,如果程序中沒有創建 OB83,CPU 進入停止模式。
OB84:用于處理存儲器、冗余系統中兩個 CPU的冗余連接性能降低等事件。
OB85:用于處理操作系統訪問模塊故障、 更新過程映像區時 I/O 訪問故障、 事件觸發但相應的 OB沒有下載 到 CPU等事件,事件出現, CPU自動調用 OB85報錯,如果程序中沒創建 OB85,CPU進入停止模式。
OB86:用于處理擴展機架(不適用于 S7-300 系列)、PROFIBUS-DP主站、 PROFIBUS-DP或 PROFINET I/O 分布 I/O 系統中站點故障等事件,事件出現, CPU自動調用 OB86報錯,如果程序中沒有創建, CPU進入停
止模式。
OB87:用于處理 MPI GD 通信及時鐘同步故障,事件出現, CPU自動調用 OB87報錯,如果程序中沒有 創建, CPU不會進入停止模式。
12、處理中斷組織塊 OB88
用于處理程序嵌套、區域數據分配故障,故障出現, CPU自動調用 OB88報錯,如果程序中沒有創建, CPU 進入停止模式。
13、背景循環中斷組織塊 OB90
優先級最低,保證 CPU最短的掃描時間,避免過程映像區更新過于頻繁。程序的下載和 CPU中程序的刪除 觸發 OB90的調用。只能用于 S7-400 系列 PLC CPU。
14、啟動中斷組織塊 OB100~OB102
用于處理 CPU啟動事件,暖啟動 CPU調用 OB100,熱啟動 CPU調用 OB101 (不適合 S7-300 系列 PLC和 S7-400H),冷啟動 CPU調用 OB102,溫度越低, CPU啟動時清除存儲器中數據區的類型越多。
15、同步錯誤中斷組織塊 OB121、OB122
OB121處理與編程故障有關的事件,例如調用的函數沒有下載到 CPU中、 BCD碼出錯等, OB122處理與 I/O 地址訪問故障有關的事件,例如訪問一個 I/O 模塊時,出現讀故障等。如果上述故障出現,在程序中沒有 創建 OB121、OB122,CP進入停止模式。
注意:不是所有的 OB都可以在 S7 CPU中使用,例如 S7-300 系列 PLC PU 中只有暖啟動 OB100,操作 系統不能調用 OB101、OB102,CPU中可以使用的 OB請參考 CPU選型手冊。
S7-300 系列 PLC中組織塊的優先級是固定的,不能修改,在 S7-400 系列 PLC中下列組織塊的優先級可以 進行修改:
OB10~OB47:優先級修改范圍 2~23。
OB70~OB72:優先級修改范圍 2~38。
OB81~OB87:優先級修改范圍 2~26,優先級 24~26 確保異步故障中斷不被其他的事件中斷。
幾個組織塊可以具有相同的優先級,當事件同時出現時,組織塊按事件出現的先后順序觸發,如果超過 12個相同優先級的 OB同進觸發,中斷可能丟失。
以上就是我對S7-300關于塊方面以及具體到OB塊,每一個OB塊具體詳細的功能以及適宜的應用場景,如果由錯誤的地方還希望大家能多多指正,我會好好修改的。
總結
以上是生活随笔為你收集整理的S7-300中各个块之间的联系以及OB块的功能和应用场合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络——高效校园网络设计与实现(华
- 下一篇: MFC Windows 程序设计[二十一