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










