You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

91 lines
3.5 KiB

PROGRAM SAVE
VAR_EXTERNAL
END_VAR
VAR_GLOBAL
END_VAR
VAR
SYS_SavePower1:BS_SavePower;
SYS_SavePower2:BS_SavePower;
SYS_SavePower3:BS_SavePower;
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;
initon :ton;
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