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