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
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
|