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