本人對“邏輯程序最好讓OB1每個周期都掃描到”不太明白.不是提倡結構化編程嗎?對于不符合當前使用的功能或功能塊里面的邏輯程序一定要讓OB1掃描到嗎?那不是浪費OB1的掃描時間嗎?那跟線性化編程又有什么區(qū)別呢?那條件調(diào)用的功能或功能塊豈不是不能在OB1中使用?請各位高手再指教?
會寫幾個FC/FB就叫結構化編程啦?
結構化編程也不應該影響OB對邏輯程序的掃描,這是完全的不同的概念.
PLC的邏輯控制語言起源于繼電器控制邏輯,硬件的邏輯電路在軟件上我們可以等效認為是全掃描的,從系統(tǒng)的穩(wěn)定性考慮,邏輯程序雖然可能分布在不同的子程序中,但其執(zhí)行應該和線性化程序被全掃描的效果是一致的,其時序也應該是固定的,而條件調(diào)用的邏輯程序是無法保證邏輯時序的一致性的,從而容易導致控制性能的不穩(wěn)定.
批評不錯,本人得益非淺.其實條件調(diào)用功能或功能塊時,當條件不滿足時,這個功能或功能塊,在CPU掃描到這個位置時,是不會進去掃描這個功能或功能里面的程序的,而是跳過直接掃描下一個語句.那你這個功能或功能塊里的所有的變量會保持剛調(diào)用之前的狀態(tài).除非里面的變量給其他的功能或功能塊調(diào)用并刷新.所以你的定時器及其它變量是保持在剛調(diào)用前的狀態(tài)的.
我以前曾做過一個試驗,就是在S7-300CPU的OB100中編了個語句:
AN Q0.7
=Q0.7
只要是這個Q0.7僅在這使用,Q0.7是保持常亮的.
這說明了在S7-300程序中,一個程序塊不被掃描時,其中的變量是保持原態(tài)的.
班主意思說得很明白了,盡量少用條件調(diào)用功量或功量塊.調(diào)用條件要做在功能或功量塊里面.
說白了就是,讓系統(tǒng)掃描到你的每個邏輯條件并及時刷新,不要留下死角讓系統(tǒng)掃描不到.
樓主的工藝要求每個時期只有一個步驟在進行,這與CPU的掃描是沒有沖突的.因為只要邏輯條件滿足的才被執(zhí)行,不滿足的就不被執(zhí)行.掃描時只不過是每個周期不斷地刷新你的邏輯結果而已.并不是說掃描到你的程序就一定執(zhí)行,是不是?
我說的是邏輯程序盡量作到OB1全掃描,但有些算術運算或數(shù)據(jù)處理的程序完全可以根據(jù)需要來決定是條件調(diào)用還是無條件調(diào)用,事實上有些程序是必須條件調(diào)用的,比如一些數(shù)據(jù)的移位處理,PID等.
另外,邏輯程序被周期掃描,并不一定要輸出執(zhí)行,而是根據(jù)條件是否滿足才輸出執(zhí)行的,即使是所謂的順序控制(或稱步進控制),其邏輯也應該是被全掃描更好一些,因為一些安全自鎖信號(如某個電機的緊急停車)需要被盡快及時地處理,而不是等到下一個條件滿足周期才響應.
當然,事物不是絕對的,對于初學者來說,遵循這條原則是比較有幫助的,而且這也適用與普遍的邏輯控制,當你們不斷的進步,對于PLC的邏輯控制有著更深一層的了解和理解后,你們也可以在一些特定的場合嘗試編寫一些條件調(diào)用的邏輯程序,比如大量的邏輯是在中斷中處理的,有點類似于計算機語言中所謂基于事件的編程,這樣的編程就是看你考慮得是否周全,即使在這時候,OB1周期全掃描的概念對于一些基礎的邏輯的處理還是很重要的.










