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