帶參數(shù)子程序 子程序與宏指令在程序的使用中有何共性?
子程序與宏指令在程序的使用中有何共性?子程序和宏指令在程序使用中有什么共同點(diǎn):宏和子程序都可以用來(lái)簡(jiǎn)化程序并使程序多次調(diào)用它們。不同的特點(diǎn):宏操作可以直接傳送和接收參數(shù),不需要棧或其它介質(zhì);子程序不能
子程序與宏指令在程序的使用中有何共性?
子程序和宏指令在程序使用中有什么共同點(diǎn):宏和子程序都可以用來(lái)簡(jiǎn)化程序并使程序多次調(diào)用它們。不同的特點(diǎn):宏操作可以直接傳送和接收參數(shù),不需要?;蚱渌橘|(zhì);子程序不能直接獲取參數(shù),必須通過(guò)棧寄存器和存儲(chǔ)器傳送參數(shù)。宏調(diào)用只能簡(jiǎn)化源程序的編寫,不能縮短目標(biāo)代碼的長(zhǎng)度;子程序調(diào)用可以縮短目標(biāo)程序的長(zhǎng)度。良好操作的應(yīng)用不會(huì)增加執(zhí)行目標(biāo)代碼時(shí)額外的時(shí)間開(kāi)銷;子程序調(diào)用需要保護(hù)和恢復(fù)場(chǎng)景和斷點(diǎn),從而延長(zhǎng)目標(biāo)程序的執(zhí)行時(shí)間
S7-200子程序的參數(shù)為輸入?yún)?shù),輸出參數(shù)和輸入/輸出參數(shù)。例如,如果我將VD100傳輸?shù)阶映绦蛑械膮^(qū)域內(nèi)變量LD0,則此LD0為輸入?yún)?shù);如果我將子程序中的區(qū)域外變量LD8傳輸?shù)絭d200,則此LD8為輸出參數(shù);如果vd300與子程序中的區(qū)域內(nèi)變量LD0相關(guān)聯(lián),則此ld4為輸出參數(shù),vd300和ld4可以同時(shí)更改。也就是說(shuō),如果子程序中l(wèi)d4的值發(fā)生變化,vd300也會(huì)發(fā)生變化。這里的“傳輸”和“關(guān)聯(lián)”指的是主程序中的子程序調(diào)用,而不是上圖中的MOV和其他傳輸指令。
所有帶參數(shù)的子程序在子程序調(diào)用中都有輸入或輸出或輸入/輸出參數(shù)。
沒(méi)有參數(shù)就是沒(méi)有上面的參數(shù)
一般來(lái)說(shuō),就是有參數(shù)
就像圖中的程序一樣,我建議最好不要這樣使用它。在子程序中引用全局變量不是很標(biāo)準(zhǔn)
這就是為什么在子程序中不能多次調(diào)用計(jì)時(shí)器的原因。解決這個(gè)問(wèn)題的方法是自己制作定時(shí)器并用v區(qū)來(lái)計(jì)時(shí),它經(jīng)過(guò)子程序調(diào)用系統(tǒng)時(shí)鐘來(lái)增加,這樣就可以自由發(fā)揮了。在一種情況下,可以在子例程中調(diào)用計(jì)時(shí)器,即主程序每次掃描只調(diào)用一次,每次都調(diào)用一個(gè)子例程。
西門子S7200帶參數(shù)子程序不帶參數(shù)子程序區(qū)別?
你需要發(fā)送程序才能知道函數(shù)是什么
有四種常用的參數(shù)傳遞方法
1。Register method
Register method是將入口參數(shù)和出口參數(shù)存儲(chǔ)在約定的寄存器中。
優(yōu)點(diǎn):數(shù)據(jù)傳輸,讀取速度快,編程方便,節(jié)省存儲(chǔ)單元。
缺點(diǎn):當(dāng)傳遞的參數(shù)太多時(shí),寄存器的數(shù)量受到限制,并且經(jīng)常使用寄存器,這將導(dǎo)致寄存器不足。
應(yīng)用程序:參數(shù)較少的子程序
2。常規(guī)單元法:顧名思義,常規(guī)單元法就是將進(jìn)入?yún)?shù)和退出參數(shù)放置在預(yù)定的單元中。優(yōu)點(diǎn):無(wú)需寄存器,參數(shù)任意多,各子程序發(fā)送的數(shù)據(jù)和結(jié)構(gòu)獨(dú)立存儲(chǔ)單元。缺點(diǎn):使用一定數(shù)量的存儲(chǔ)單元增加了編程中變量定義的難度,堆棧方法使用堆棧傳遞參數(shù)。
優(yōu)點(diǎn):參數(shù)不占用寄存器和內(nèi)存單元。參數(shù)存儲(chǔ)在公共堆棧區(qū)域,并在處理后恢復(fù)。參數(shù)的個(gè)數(shù)一般是無(wú)限的
缺點(diǎn):由于參數(shù)和子程序是混合在一起的,所以在訪問(wèn)參數(shù)時(shí)必須仔細(xì)計(jì)算它在堆棧中的位置。注意斷點(diǎn)的存儲(chǔ)和恢復(fù)。
4. 地址表法
這種方法是把一個(gè)由參數(shù)組成的參數(shù)表放在一個(gè)存儲(chǔ)區(qū)中,然后只要主程序和子程序在第一個(gè)地址和存儲(chǔ)區(qū)的內(nèi)容上達(dá)成一致,主程序就會(huì)把參數(shù)傳遞給地址表,子程序就可以按此方法完成操作地址表中給定的參數(shù)。