這些PLC的用戶程序由主程序、子程序和中斷程序組成。在每一個掃描循環(huán)周期,CPU都要調(diào)用一次主程序。主程序可以調(diào)用子程序,小型控制系統(tǒng)可以只有主程序。中斷程序用于快速響應(yīng)中斷事件。在中斷事件發(fā)生時,CPU將停止執(zhí)行當(dāng)時正在處理的程序或任務(wù),去執(zhí)行用戶編寫的中斷程序。執(zhí)行完中斷程序后,繼續(xù)執(zhí)行被暫停執(zhí)行的程序或任務(wù)。它們的子程序和中斷程序沒有局部變量,子程序沒有輸入、輸出參數(shù)。
2.西門子的S7-200的程序結(jié)構(gòu)
過程映像輸入/輸出(I/Q)、變量存儲器V、內(nèi)部存儲器位M、定時器T、計數(shù)器C等屬于全局變量。S7-200的程序組織單元(ProgramOrganizationalUnit,簡稱為POU)包括主程序、子程序和中斷程序。每個POU均有自己的64字節(jié)局部變量,局部變量只能在它所在的POU中使用。與此相反,全局變量可以在各POU中使用。
下面是子程序可以使用的局部變量:
1)TEMP(臨時變量)是暫時保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該P(yáng)OU時,定義的臨時變量才被使用,POU執(zhí)行完后,不再保存臨時變量的數(shù)值。
2)IN是由調(diào)用它的POU提供的輸入?yún)?shù)。
3)OUT是返回給調(diào)用它的POU的輸出參數(shù)(子程序的執(zhí)行結(jié)果)。
4)IN_OUT是輸入_輸出參數(shù),其初始值由調(diào)用它的POU傳送給子程序,并用同一變量將子程序的執(zhí)行結(jié)果返回給調(diào)用它的POU。
主程序和中斷程序的局部變量中只有臨時變量TEMP。
具有輸入、輸出參數(shù)和局部變量的子程序易于實現(xiàn)結(jié)構(gòu)化編程,對于長期生產(chǎn)同類設(shè)備或生產(chǎn)線的廠家尤為有用。這些廠家的編程人員為設(shè)備的各組件或工藝功能編寫了大量的通用的子程序。即使不知道子程序的內(nèi)部代碼,只要知道子程序的功能和輸入、輸出參數(shù)的意義,就可以通過程序之間的調(diào)用快速“組裝”出滿足不同用戶要求的控制程序。就好像用數(shù)字集成電路芯片組成復(fù)雜的數(shù)字電路一樣。
子程序如果沒有輸入、輸出參數(shù),它和調(diào)用它的程序之間沒有清晰的接口,很難實現(xiàn)結(jié)構(gòu)化編程。
子程序如果沒有局部變量,它和調(diào)用它的程序之間只能通過全局變量來交換數(shù)據(jù),子程序內(nèi)部也只能使用全局變量。將子程序和中斷程序移植到別的項目時,需要重新統(tǒng)一安排它們使用的全局變量,以保證不會出現(xiàn)地址沖突。當(dāng)程序很復(fù)雜,子程序和中斷程序很多時,這種重新分配地址的工作量非常大。
如果子程序和中斷程序有局部變量,并且它們內(nèi)部只使用局部變量,不使用全局變量,因為與其他POU沒有地址沖突,不需作任何改動,就可以將子程序移植到別的項目中去。
20BB080A0ANNANC0
20BB080A0AYNANC0
20BB104A0ANNANC0
20BB104A0AYNANC0
20BB130A0ANNANC0
20BB130A0AYNANC0
20BB154A0ANNANC0
20BB154A0AYNANC0
20BB154A3ANNANC0
20BB154A3AYNANC0
20BB192A0ANNANC0
20BB192A0AYNANC0
20BB192A3ANNANC0
20BB260A0AYNANC0
20BB260A3ANNANC0
20BB260A3AYNANC0
20BB2P2A0AYNBNC0
20BB2P2A3AYNBNC0
20BB4P2A0AYNBNC0
20BB4P2A0AYNBND0
20BB6P8A0AYNBNC0
20BB6P8A3AYYBNC1
20BB9P6A0AYNBNC0
20BB9P6A3AYNBNC0
20BC011A0AYNACC0
20BC011A0AYNADC1
20BC011A0AYNAEC1
20BC011A0AYNANA0
20BC011A0AYNANC0
20BC011A0AYNANC1
20BC011A0AYNAND0
20BC011A0AYYACD1
20BC011A0AYYANC0
20BC011A0NYNANC0
20BC011A0NYNANC1
20BC011A0NYNANN0
20BC011A0NYYADA0
20BC011A0NYYANC0
20BC011A0NYYANC1
20BC011A3AYNACC1
20BC011A3AYNADA0
20BC011A3AYNADC0
20BC011A3AYNANC0
20BC011A3AYNANC1
20BC011A3AYNAND0
20BC011A3AYYADC0
20BC011A3AYYAEC1
20BC011A3AYYANC0
20BC011A3AYYANC1
20BC011A3NYYACA0
20BC015A0AYNACC0
20BC015A0AYNANA0
20BC015A0AYNANB0
20BC015A0AYNANC0
20BC015A0AYNANC1
20BC015A0AYNAND0
20BC015A0AYNANN0
20BC015A0AYYANC0
20BC015A0NYNACC1
20BC015A0NYNANC0
20BC015A0NYYADA0