西門子S7-200子程序出現問題的原因//
在OB1中兩次調用上一個日志中的子程序SBR_0,在運行程序時發(fā)現,接通I0.0外接的小開關,Q0.0和Q0.1同時變?yōu)镺N。這是因為分配給SBR_0的輸出參數“電動機”的地址為L0.2,第一次調用SBR_0之后,L0.2的值為ON。第二次調用SBR_0時,雖然起動按鈕I0.2為OFF,但是因為兩次調用SBR_0時局部變量區(qū)是公用的,此時輸出參數“電動機”(L0.2)仍然為ON,所以第二次調用SBR_0之后,由于執(zhí)行圖4-40中的程序,輸出參數“電動機”使Q0.1為ON。子程序的局部變量一定要遵循“先賦值后使用”的原則。
S7-200的子程序使用臨時變量來傳遞參數,OUT類型的參數不會把實參讀入形參,所以這里使用OUT形參的觸點就出現了臨時變量未賦值先使用的情況。將輸出參數“電動機”的變量類型改為IN_OUT就可以解決上述問題。這是因為兩次調用子程序,參數“電動機”返回的運算結果分別用Q0.0和Q0.1保存,在第二次調用子程序SBR_0,執(zhí)行“O #電動機”指令時,因為“電動機”是IN_OUT參數,使用的是前一個掃描周期保存到Q0.1的值,與本掃描周期第一次調用子程序后參數“電動機”的值無關。
簡單地說,對于有記憶功能的電路,需要用存儲單元來保存要記憶的變量值。S7-300的FB可以用靜態(tài)變量來保存,而S7-200的子程序沒有靜態(tài)變量,只有用IN_OUT變量的實參(本例中的Q0.1)來保存變量值。
S7-200的子程序使用臨時變量來傳遞參數,OUT類型的參數不會把實參讀入形參,所以這里使用OUT形參的觸點就出現了臨時變量未賦值先使用的情況。將輸出參數“電動機”的變量類型改為IN_OUT就可以解決上述問題。這是因為兩次調用子程序,參數“電動機”返回的運算結果分別用Q0.0和Q0.1保存,在第二次調用子程序SBR_0,執(zhí)行“O #電動機”指令時,因為“電動機”是IN_OUT參數,使用的是前一個掃描周期保存到Q0.1的值,與本掃描周期第一次調用子程序后參數“電動機”的值無關。
簡單地說,對于有記憶功能的電路,需要用存儲單元來保存要記憶的變量值。S7-300的FB可以用靜態(tài)變量來保存,而S7-200的子程序沒有靜態(tài)變量,只有用IN_OUT變量的實參(本例中的Q0.1)來保存變量值。
本文標簽:西門子S7-200子程序出現問題的原因//
* 由于無法獲得聯(lián)系方式等原因,本網使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《西門子S7-200子程序出現問題的原因//》相關權利人與機電之家網取得聯(lián)系。










