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

(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(**  **)
(** {* **)
(**  **)
(** ʱ  �䣺20220210 **)
(** ��  ����1.0 **)
(** ��  �ߣ���ƽ **)
(** ��  �ƣ��ϵ籣������ **)
(** ˵  ��������ʹ�������������д�룬��ѡ���ڣ��仯���ֶ� **)
(** ��  ע���ⲿ��Ҫ����SYS_FlashWrite������ʹ���ֶ�д��ģʽ **)
(** �����飺 NW_FlashRead **)
(** 	     NW_FlashWrite **)
(**  **)
(** *} **)
(**  **)
(** {*��ʼ�����ϵ�ǰ����д���ۼ�ֵ*} **)
(** if  ini=0 then **)
	(* if - Cond *)
	LD ini
	EQ 0
	JMPCN ODK_SKIP_000000000000001_000000000000001

		(* then - Stmts *)

(** Write_Num_ini:=WriteNumRec_In; **)
		(* assign - Stmt *)
		LD WriteNumRec_In
		ST Write_Num_ini

(** ini:=1; **)
		(* assign - Stmt *)
		LD 1
		ST ini

		JMP ODK_END_IF_000000000000001

(** end_if;	 **)
	(* if - End *) 
	ODK_SKIP_000000000000001_000000000000001:
	ODK_END_IF_000000000000001:

(** {* д���ж� 1���ڣ�2�仯��0�ֶ�*} **)
(** case Input_Type of **)
(** 		1: **)
	(* case - Elm *) 
	ODK_SKIP_000000000000002_000000000000000:

	(* case - Cond *)
	LD Input_Type
	EQ 1
	JMPC ODK_CASE_000000000000002_000000000000001

	JMP ODK_SKIP_000000000000002_000000000000001

	(* case - Stmts *) 
	ODK_CASE_000000000000002_000000000000001:

(** 		ton1_in := not ton1.q; **)
		(* assign - Stmt *)
		LD ton1.q
		NOT
		ST ton1_in

(**     	ton1( IN :=ton1_in ,PT :=Set_Timer   );  **)
		(* call - Stmt *)
		CAL ton1 (
			IN := ton1_in,
			PT := Set_Timer
		)

(** 			if ton1.q=1 then  **)
		(* if - Cond *)
		LD ton1.q
		EQ 1
		JMPCN ODK_SKIP_000000000000003_000000000000001

			(* then - Stmts *)

(** 			SYS_FlashWrite:=1 ;  **)
			(* assign - Stmt *)
			LD 1
			ST SYS_FlashWrite

			JMP ODK_END_IF_000000000000003

(** 			end_if;	 **)
		(* if - End *) 
		ODK_SKIP_000000000000003_000000000000001:
		ODK_END_IF_000000000000003:

		JMP ODK_END_CASE_000000000000002

(** 		2: **)
	(* case - Elm *) 
	ODK_SKIP_000000000000002_000000000000001:

	(* case - Cond *)
	LD Input_Type
	EQ 2
	JMPC ODK_CASE_000000000000002_000000000000002

	JMP ODK_SKIP_000000000000002_000000000000002

	(* case - Stmts *) 
	ODK_CASE_000000000000002_000000000000002:

(** 		ton1_in := not ton1.q; **)
		(* assign - Stmt *)
		LD ton1.q
		NOT
		ST ton1_in

(**     	ton1( IN :=ton1_in ,PT :=Set_Timer  );  **)
		(* call - Stmt *)
		CAL ton1 (
			IN := ton1_in,
			PT := Set_Timer
		)

(** 		if ton1.q=1 then  **)
		(* if - Cond *)
		LD ton1.q
		EQ 1
		JMPCN ODK_SKIP_000000000000004_000000000000001

			(* then - Stmts *)

(** 			if Judge_Num_M<>Judge_Num then  **)
			(* if - Cond *)
			LD Judge_Num_M
			NE Judge_Num
			JMPCN ODK_SKIP_000000000000005_000000000000001

				(* then - Stmts *)

(** 			SYS_FlashWrite:=1 ;  **)
				(* assign - Stmt *)
				LD 1
				ST SYS_FlashWrite

(** 			Judge_Num_M:=Judge_Num;  **)
				(* assign - Stmt *)
				LD Judge_Num
				ST Judge_Num_M

				JMP ODK_END_IF_000000000000005

(** 			end_if; **)
			(* if - End *) 
			ODK_SKIP_000000000000005_000000000000001:
			ODK_END_IF_000000000000005:

			JMP ODK_END_IF_000000000000004

(** 		end_if;	 **)
		(* if - End *) 
		ODK_SKIP_000000000000004_000000000000001:
		ODK_END_IF_000000000000004:

		JMP ODK_END_CASE_000000000000002

(**  **)
(** end_case;  **)
	(* case - End *) 
	ODK_SKIP_000000000000002_000000000000002:
	ODK_END_CASE_000000000000002:

(** 		     **)
(** {* ϵͳ�������ݶ�ȡ *}		 **)
(** if  not SYS_FlashRead and Read_Iso=0 then **)
	(* if - Cond *)
	LD SYS_FlashRead
	NOT
	AND ( Read_Iso
		EQ 0
	)
	JMPCN ODK_SKIP_000000000000006_000000000000001

		(* then - Stmts *)

(** 	Read_Flag:=0; **)
		(* assign - Stmt *)
		LD 0
		ST Read_Flag

(** 	BS_FlashRead(EN:=1,W_MEM_ADDR:=MEM_ADDR,W_FLASH_ADDR:=FLASH_ADDR,W_LEN:=SAVE_LEN |  Read_Flag:= ENO); **)
		(* call - Stmt *)
		CAL 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 {*���ɹ����*}			 **)
		(* if - Cond *)
		LD Read_Flag
		EQ 1
		JMPCN ODK_SKIP_000000000000007_000000000000001

			(* then - Stmts *)

(** 		SYS_FlashRead:=1; {*���ɹ���ֹͣ��ȡ*} **)
			(* assign - Stmt *)
			LD 1
			ST SYS_FlashRead

			JMP ODK_END_IF_000000000000007

(** 	end_if;	 **)
		(* if - End *) 
		ODK_SKIP_000000000000007_000000000000001:
		ODK_END_IF_000000000000007:

		JMP ODK_END_IF_000000000000006

(** end_if; **)
	(* if - End *) 
	ODK_SKIP_000000000000006_000000000000001:
	ODK_END_IF_000000000000006:

(**  **)
(** {* ϵͳ��������д�� *}	 **)
(** if SYS_FlashWrite then **)
	(* if - Cond *)
	LD SYS_FlashWrite
	JMPCN ODK_SKIP_000000000000008_000000000000001

		(* then - Stmts *)

(** 	Write_Flag:=0; **)
		(* assign - Stmt *)
		LD 0
		ST Write_Flag

(** 	Write_Numm:=1+Write_Numm ;  **)
		(* assign - Stmt *)
		LD 1
		ADD Write_Numm
		ST Write_Numm

(** 	Write_Num:=Write_Numm+Write_Num_ini ;  **)
		(* assign - Stmt *)
		LD Write_Numm
		ADD Write_Num_ini
		ST Write_Num

(** 	BS_FlashWrite(EN:=1,W_MEM_ADDR:=MEM_ADDR,W_FLASH_ADDR:=FLASH_ADDR,W_LEN:=SAVE_LEN |  Write_flag:= ENO);  **)
		(* call - Stmt *)
		CAL BS_FlashWrite (
			EN := 1,
			W_MEM_ADDR := MEM_ADDR,
			W_FLASH_ADDR := FLASH_ADDR,
			W_LEN := SAVE_LEN
			|
			Write_Flag := ENO
		)

(** 	SYS_FlashWrite:=0; **)
		(* assign - Stmt *)
		LD 0
		ST SYS_FlashWrite

		JMP ODK_END_IF_000000000000008

(** end_if; **)
	(* if - End *) 
	ODK_SKIP_000000000000008_000000000000001:
	ODK_END_IF_000000000000008:

(** 	 **)
(**  **)

END_FUNCTION_BLOCK