描述
優(yōu)化塊臨時數(shù)據(jù)區(qū)中的變量在每次調(diào)用塊時被用缺省值初始化(如,INT 的缺省值是 0)。下列內(nèi)容不會被初始化:
● 聲明為數(shù)組的變量。
● 非優(yōu)化塊中聲明的變量。
在 STEP 7 (TIA 博途)中, 對西門子S7-1500 的優(yōu)化存儲區(qū)中的結(jié)構(gòu)體可以用用戶自定義的值進行初始化。
如果要把定義的值加載到結(jié)構(gòu)體中的獨立元素,只能先初始化臨時結(jié)構(gòu)體,再分配給靜態(tài)結(jié)構(gòu)體。在SCL中使用FOR循環(huán)可以在運行時用很少的代碼初始化大量區(qū)域(數(shù)組結(jié)構(gòu))。
圖. 01 是一個DB塊結(jié)構(gòu)中有兩個DB變量的示例。第二個DB變量的PLC數(shù)據(jù)類型使用的是 "Array [1..10] of motor data type".
圖. 01
使用 "MOVE" 指令(復(fù)制值) 可以完整的初始化結(jié)構(gòu)體 InOut 變量 "Motor". 在下面的例子中,臨時變量"tmp_Motor" 的內(nèi)容傳到了 InOut 變量 "Motor". 在 LAD/FBD 中, 位信號通過slice訪問復(fù)制到了狀態(tài)字(圖. 02).
圖. 02
臨時變量和InOut變量必須具有相同的數(shù)據(jù)類型或相同的結(jié)構(gòu)體數(shù)據(jù)類型。圖. 03 說明了在SLC中編程實現(xiàn)完整初始化 InOut 變量 "Motor" 和單個元素的位到位訪問。
圖. 03
下面的例子說明初始化DB變量 "Motor field". 在SCL中使用 FOR 指令,循環(huán)程序重復(fù)執(zhí)行只要運行變量 "tmp_Counter" 在指定的范圍內(nèi)。由于PLC數(shù)據(jù)類型是 "Array [1..10] of motor data type", 程序循環(huán)必須執(zhí)行10次("1 TO 10 DO") 來初始化結(jié)構(gòu)體變量中的所有數(shù)組元素。
圖. 04
注意
在 UDT中,可以通過聲明定義初始值,這樣基于UDT的每一個變量都有其初始值。只有對運行中的設(shè)備做程序復(fù)位時才需要初始化結(jié)構(gòu)體變量。當 STOP/RUN 切換時,就會從從裝載存儲區(qū)提取初始值,這相當于一次復(fù)位。
(轉(zhuǎn)載)