PROGRAM SAVE
VAR_EXTERNAL


END_VAR

VAR_GLOBAL

END_VAR

VAR

SYS_SavePower1:BS_SavePower;
SYS_SavePower2:BS_SavePower;
SYS_SavePower3:BS_SavePower;
SYS_Runtime:BS_Runtime;

SYS_WriteNum1            AT%M2500.0     :INT; (*系统-闪存写入次数*)
SYS_Write_Flag1          AT%M2502.0     :BOOL; (*系统-系统闪存写入成功标记*)
SYS_Read_Flag1           AT%M2504.0     :BOOL; (*系统-系统闪存读取成功标记*)
SYS_Judge_Num1           AT%M2506.0     :INT; (*系统-变化判断变量*)

SYS_WriteNum2            AT%M2508.0     :INT; (*系统-闪存写入次数*)
SYS_Write_Flag2          AT%M2510.0     :BOOL; (*系统-系统闪存写入成功标记*)
SYS_Read_Flag2           AT%M2512.0     :BOOL; (*系统-系统闪存读取成功标记*)
SYS_Judge_Num2           AT%M2514.0     :INT; (*系统-变化判断变量*)

SYS_WriteNum3            AT%M2516.0     :INT; (*系统-闪存写入次数*)
SYS_Write_Flag3          AT%M2518.0     :BOOL; (*系统-系统闪存写入成功标记*)
SYS_Read_Flag3           AT%M2520.0     :BOOL; (*系统-系统闪存读取成功标记*)
SYS_Judge_Num3           AT%M2522.0     :INT; (*系统-变化判断变量*)


ini                     AT%M2.0        :bool;
ini2                    AT%M4.0        :INT;
SYS_RH    		        AT%M8.0    	   :REAL; (*系统-运行时间累积值*)

initon   :ton;

aa              :INT;
bb              :INT;


END_VAR
(*Input_Type :1周期,2变化           Read_Iso     :系统读取隔离开关       Set_Timer    :周期、变化判断周期时间设定
Judge_Num    :变化判断变量           MEM_ADDR     :M区保存起始地址        FLASH_ADDR   :闪存区保存起始地址
SAVE_LEN     :保存地址长度           Write_Flag   :系统闪存写入成功标记    Read_Flag    :系统闪存读取成功标记 
初次下载程序时 Read_Iso :=1  Set_Timer :=t#30s ,下载完后30S后将程序调整回 Read_Iso :=0  Set_Timer :=t#720m*)

(*断电保存区使用变量为M0~12、2500~2523;其他地址声明需要规避该区域地址!!!!!*)
(*定时保存程序初始化使用,勿动*)

SYS_SavePower1(Input_Type :=1 ,Read_Iso :=0, Set_Timer :=t#720m , Judge_Num :=SYS_Judge_Num1 , MEM_ADDR :=0, FLASH_ADDR :=0 ,SAVE_LEN :=6  ,
WriteNumRec_In:=SYS_WriteNum1   | SYS_Write_Flag1:= Write_Flag ,  SYS_Read_Flag1:= Read_Flag,  SYS_WriteNum1:= Write_Num );
	
	if ini2<>423 then
	ini:=1;
	else ini:=0;
	end_if;
	
 	initon(IN :=ini , PT := t#20S );
	if initon.et >t#14S  then
	ini2:=423;
	System_LicenseCode1:=26435;
	end_if;
	
if SYS_SavePower1.Read_Flag=1  then

	if ini2<>423  then
	SYS_SavePower2(Input_Type :=1 ,Read_Iso :=1, Set_Timer :=t#10S , Judge_Num :=SYS_Judge_Num2 , MEM_ADDR :=0, FLASH_ADDR :=0 ,SAVE_LEN :=1000  ,
	WriteNumRec_In:=SYS_WriteNum2   | SYS_Write_Flag2:= Write_Flag ,  SYS_Read_Flag2:= Read_Flag,  SYS_WriteNum2:= Write_Num );

	end_if;

	if ini2=423 then 

	SYS_SavePower3(Input_Type :=1 ,Read_Iso :=0, Set_Timer :=t#720m , Judge_Num :=SYS_Judge_Num3 , MEM_ADDR :=0, FLASH_ADDR :=0 ,SAVE_LEN :=1000  ,
	WriteNumRec_In:=SYS_WriteNum3   | SYS_Write_Flag3:= Write_Flag ,  SYS_Read_Flag3:= Read_Flag,  SYS_WriteNum3:= Write_Num );

	end_if;

end_if;


SYS_RunTime(RUN :=1  ,RunTimeRec_In := SYS_RH |  SYS_RH:= RUNTIME);

if SYS_RH>384.0   and System_LicenseCode1=26435 then SYS_Run:=1;end_if;
if SYS_RH>720.0   and System_LicenseCode1=31832 then SYS_Run:=1;end_if;
if SYS_RH>2160.0  and System_LicenseCode1=26903 then SYS_Run:=1;end_if;
if                    System_LicenseCode1=16903 then SYS_Run:=0;end_if;

(***************把这个地方的判断放到每个程序,aabb变量用以演示实际程序,实际下面程序无实际意义****************************)
if SYS_Run=0 then 
	aa:=12345;
	bb:=aa+5;
end_if;

END_PROGRAM