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.
 
 
 
 
 
 

94 lines
2.5 KiB

FUNCTION_BLOCK BS_SavePower
VAR_EXTERNAL
END_VAR
VAR_INPUT
Input_Type :byte; (*1周期2变化0手动 *)
Read_Iso :bool; (* *)
Set_Timer :time; (**)
Judge_Num :int; (**)
Mem_Addr :word; (*M区保存起始地址*)
Flash_Addr :word; (**)
Save_Len :word; (**)
WriteNumRec_In :int; (**)
END_VAR
VAR_OUTPUT
Write_Flag :bool; (**)
Read_Flag :bool; (**)
Write_Num :int; (**)
END_VAR
VAR
BS_FlashRead : NW_FlashRead;
BS_FlashWrite : NW_FlashWrite;
SYS_FlashWrite :bool;
SYS_FlashRead :bool; (*使*)
Judge_Num_M :int; (*-*)
ton1 :ton;
ton1_in :bool;
ini :bool;
Write_Num_ini :int; (**)
Write_Numm :int; (**)
END_VAR
(*
20220210
1.0
使
SYS_FlashWrite使
NW_FlashRead
NW_FlashWrite
*)
(**)
if ini=0 then
Write_Num_ini:=WriteNumRec_In;
ini:=1;
end_if;
(* 1周期2变化0手动*)
case Input_Type of
1:
ton1_in := not ton1.q;
ton1( IN :=ton1_in ,PT :=Set_Timer );
if ton1.q=1 then
SYS_FlashWrite:=1 ;
end_if;
2:
ton1_in := not ton1.q;
ton1( IN :=ton1_in ,PT :=Set_Timer );
if ton1.q=1 then
if Judge_Num_M<>Judge_Num then
SYS_FlashWrite:=1 ;
Judge_Num_M:=Judge_Num;
end_if;
end_if;
end_case;
(* *)
if not SYS_FlashRead and Read_Iso=0 then
Read_Flag:=0;
BS_FlashRead(EN:=1,W_MEM_ADDR:=MEM_ADDR,W_FLASH_ADDR:=FLASH_ADDR,W_LEN:=SAVE_LEN | Read_Flag:= ENO);
if Read_Flag=1 then (**)
SYS_FlashRead:=1; (**)
end_if;
end_if;
(* *)
if SYS_FlashWrite then
Write_Flag:=0;
Write_Numm:=1+Write_Numm ;
Write_Num:=Write_Numm+Write_Num_ini ;
BS_FlashWrite(EN:=1,W_MEM_ADDR:=MEM_ADDR,W_FLASH_ADDR:=FLASH_ADDR,W_LEN:=SAVE_LEN | Write_flag:= ENO);
SYS_FlashWrite:=0;
end_if;
END_FUNCTION_BLOCK