```pascal // Block Type: FB // Block Number: 1799 // Original Network Languages: STL // Block Comment: // Machine CIP Recipe Management // DB1003.DBB246 -> Active Recipe (DB124) // DB1003.DBB2 -> Working Recipe (Edit, Copy, Erase) (DB400) // DB963.DBB48 -> Working Recipe (Data Save) // DB501 -:- DB530 -> Recipe 1-:-30 data FUNCTION_BLOCK "CIPRecipeManagement" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT HMI_Recipe_Main_Page : Bool; HMI_Recipe_Page_Running : Bool; Active_Recipe_Start : Bool; Edit : Bool; Write : Bool; Read : Bool; Delete : Bool; Copy : Bool; Upload : Bool; UploadPC : Bool; Download : Bool; Max_Recipe_Number : Int; END_VAR VAR_OUTPUT Save_Requested : Bool; Work_Rec_is_Active_Recip : Bool; Copy_Rec_is_Active_Recip : Bool; Recipe_Activated : Bool; END_VAR VAR_INOUT Active_Recipe_Running : Int; Active_Recipe_Req : Int; Work_Recipe : Int; Copy_to : Int; END_VAR VAR_STAT Active_Recipe_First : Bool; Active_Recipe_Start_FP : Bool; Active_Recipe_Run : Bool; Active_Recipe_Source_DB : Int; Read_FP : Bool; Read_Start : Bool; Read_First_FP : Bool; Read_First_Start : Bool; Read_Change : Bool; Work_Recipe_Save : Int; Work_Recipe_Source_DB : Int; Loop_Count : Int; Delete_FP : Bool; Delete_Start : Bool; Delete_Write : Bool; Copy_FP : Bool; Copy_Request : Bool; Copy_Start : Bool; Copy_Recipe_Source_DB : Int; Copy_Write : Bool; Write_FP : Bool; Write_Start : Bool; Write_REQ : Bool; Save_Active_Recipe : Bool; Recipe_Destination_DB : Int; Save_requested_FP : Bool; Save_requested_veri : Bool; Save_requested_read_FP : Bool; Save_requested_read_veri : Bool; Read_act_BUSY : Bool; Read_wrk_BUSY : Bool; Read_wrk_Running : Bool; Write_BUSY : Bool; Upload_FP : Bool; Upload_Start : Bool; Download_FP : Bool; Download_Start : Bool; Recipe_Activated_FN : Bool; Save_requested_upldPC_FP : Bool; Save_requested_upldPC_ve : Bool; mUploadPC : Bool; END_VAR VAR_TEMP Active_Recipe_Source : Int; Work_Recipe_Source : Int; Recipe_Destination : Int; Read_act_DB : "Any"; Read_act_RET_VAL : Int; Read_wrk_REQ : Bool; Read_wrk_DB : "Any"; Read_wrk_RET_VAL : Int; Write_DB : "Any"; Write_RET_VAL : Int; Buffer_Pointer : DInt; mAux : Bool; TUDT900 : "CIP_Link_Type"; End_UDT900 : Byte; Lenght_UDT900 : Int; END_VAR BEGIN // Network 1: (Original Language: STL) // Active Recipe Request Number Control // --- BEGIN STL Network 1 --- CALL "LIMIT_I" L _ERR_CONST_ L _ERR_CONST_ SUB_D SRD 3 T "Lenght_UDT900" // --- END STL Network 1 --- // Network 2: (Original Language: STL) // Active Recipe Number Control // --- BEGIN STL Network 2 --- L "Active_Recipe_Running" L 1 LT_I JC aact L "Active_Recipe_Running" L "Max_Recipe_Number" GT_I JC aact JU bact aact: S "Active_Recipe_First" bact: CALL "LIMIT_I" // --- END STL Network 2 --- // Network 3: MIX - (Original Language: STL) // Active Recipe Number Start // --- BEGIN STL Network 3 --- A "Active_Recipe_Start" Rise "Active_Recipe_Start_FP" = "Active_Recipe_Run" A "Active_Recipe_Run" O "Active_Recipe_First" O "Read_act_BUSY" JC Rrun JU Erun Rrun: R "Active_Recipe_First" L "Active_Recipe_Req" T "Active_Recipe_Running" ADD 500 T "Active_Recipe_Source_DB" LAR1 _ERR_CONST_ L BYTE#16#10 T LocalB[AR1,P#0.0] L BYTE#16#02 T LocalB[AR1,P#1.0] L "Lenght_UDT900" T LocalW[AR1,P#2.0] L "Active_Recipe_Source_DB" T LocalW[AR1,P#4.0] L P#DBX0.0 T LocalD[AR1,P#6.0] CALL _Call_? Erun: NOP_0 A "Read_act_BUSY" Fall "Recipe_Activated_FN" = "Recipe_Activated" // --- END STL Network 3 --- // Network 4: (Original Language: STL) // Work Recipe Number Control // --- BEGIN STL Network 4 --- CALL "LIMIT_I" L "Work_Recipe" L "Active_Recipe_Running" EQ_I = "Work_Rec_is_Active_Recip" // --- END STL Network 4 --- // Network 5: (Original Language: STL) // Work Recipe READ (Data Uploading from archive) // --- BEGIN STL Network 5 --- A "Read" O "HMI_Recipe_Page_Running" Rise "Read_FP" S "Read_Start" L "Work_Recipe_Save" L "Work_Recipe" NE_I = "Read_Change" A "Read_Change" O "Read_Start" = "Read_wrk_REQ" A "Read_wrk_REQ" JC Rupl A "Read_wrk_BUSY" O "Read_wrk_Running" JC Cupl JU Eupl Rupl: NOP_0 A "mUploadPC" JC Eupl L "Work_Recipe" ADD 500 T "Work_Recipe_Source_DB" Cupl: LAR1 _ERR_CONST_ L BYTE#16#10 T LocalB[AR1,P#0.0] L BYTE#16#02 T LocalB[AR1,P#1.0] L "Lenght_UDT900" T LocalW[AR1,P#2.0] L "Work_Recipe_Source_DB" T LocalW[AR1,P#4.0] L P#DBX0.0 T LocalD[AR1,P#6.0] CALL _Call_? A "Read_wrk_BUSY" S "Read_wrk_Running" A "Read_wrk_Running" AN "Read_wrk_BUSY" JC Dupl JU Eupl Dupl: R "Read_Start" R "Read_wrk_Running" L "Work_Recipe" T "Work_Recipe_Save" L "Work_Recipe_Save" L 34 MUL_I ADD 576 SLW 3 T "Buffer_Pointer" LAR1_ACCU1 L "HMI_Local_CIP_Variables".Cip_Recipe.EditLinkProgram._LinkName[32] AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD6.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD10.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD14.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD18.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD22.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD26.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD30.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] LAR1 P#0.0 L "Lenght_UDT900" L 2 DIV_I Bupl: T "Loop_Count" AUF "HMI_Local_CIP_Variables" L DBW[AR1,P#2.0] AUF "CIP_Program_Variables" T DBW[AR1,P#50.0] ADDAR1 P#2.0 L "Loop_Count" LOOP Bupl Eupl: NOP_0 // --- END STL Network 5 --- // Network 6: (Original Language: STL) // Work Recipe Data DELETE (Erase DB500 Data + Write in Work_Recipe_Source) // --- BEGIN STL Network 6 --- A "Delete" Rise "Delete_FP" = "Delete_Start" A "Delete_Start" AN "Work_Rec_is_Active_Recip" AN "Save_Requested" AN "Write" AN "Write_BUSY" JC Rdel JU Edel Rdel: LAR1 P#0.0 L "Lenght_UDT900" Bdel: T "Loop_Count" L "Work_Recipe_Source_DB" T "Work_Recipe_Source" L DINT#0 AUF "HMI_Local_CIP_Variables" T DBW[AR1,P#2.0] ADDAR1 P#2.0 L "Loop_Count" LOOP Bdel SET S "Delete_Write" Edel: NOP_0 // --- END STL Network 6 --- // Network 7: (Original Language: STL) // Work Recipe Data COPY (DB1008 Data Write to different Recipe DB // Copy_Recipe_Source_DB) // --- BEGIN STL Network 7 --- CALL "LIMIT_I" A "Copy" Rise "Copy_FP" = "Copy_Request" L "Copy_to" L "Active_Recipe_Running" EQ_I = "Copy_Rec_is_Active_Recip" AN "Copy_Rec_is_Active_Recip" AN "Save_Requested" AN "Write" AN "Write_BUSY" A "Copy_Request" = "Copy_Start" A "Copy_Start" JC Ccop JU Ecop Ccop: L "Copy_to" ADD 500 T "Copy_Recipe_Source_DB" S "Copy_Write" Ecop: NOP_0 // --- END STL Network 7 --- // Network 8: (Original Language: STL) // Work Recipe WRITE (Data Downloading to archive) // --- BEGIN STL Network 8 --- A "Write" Rise "Write_FP" = "Write_Start" A "Write_Start" O "Delete_Write" O "Copy_Write" AN "Write_BUSY" = "Write_REQ" A "Write_Start" O "Delete_Write" AN "Write_BUSY" JC Rdow A "Write_BUSY" JC Cdow A "Copy_Write" JC CoDB JU Edow CoDB: R "Copy_Write" L "Copy_Recipe_Source_DB" T "Recipe_Destination_DB" L "Copy_to" JU Copy Rdow: R "Save_Requested" R "Delete_Write" R "mUploadPC" L "Work_Recipe_Source_DB" T "Recipe_Destination_DB" L "Work_Recipe_Save" L "Active_Recipe_Running" EQ_I = "Save_Active_Recipe" LAR1 P#0.0 L "Lenght_UDT900" L 2 DIV_I Bdow: T "Loop_Count" AUF "HMI_Local_CIP_Variables" L DBW[AR1,P#2.0] AUF "CIP_Program_Variables" T DBW[AR1,P#50.0] AN "Save_Active_Recipe" JC Ndow AUF "HMI_Local_CIP_Variables" T DBW[AR1,P#276.0] Ndow: ADDAR1 P#2.0 L "Loop_Count" LOOP Bdow L "Work_Recipe_Save" Copy: L 34 MUL_I ADD 576 SLW 3 T "Buffer_Pointer" LAR1_ACCU1 L DB1003.DBD2.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD6.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD10.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD14.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD18.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD22.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD26.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] ADDAR1 P#4.0 L DB1003.DBD32.0 AUF "HMI_Local_CIP_Variables" T DBD[AR1,P#0.0] Cdow: LAR1 _ERR_CONST_ L BYTE#16#10 T LocalB[AR1,P#0.0] L BYTE#16#02 T LocalB[AR1,P#1.0] L "Lenght_UDT900" T LocalW[AR1,P#2.0] L "Recipe_Destination_DB" T LocalW[AR1,P#4.0] L P#DBX0.0 T LocalD[AR1,P#6.0] CALL _Call_? Edow: NOP_0 // --- END STL Network 8 --- // Network 9: (Original Language: STL) // Work Recipe SAVE REQUESTED // --- BEGIN STL Network 9 --- A "HMI_Recipe_Main_Page" Rise "Save_requested_FP" = "Save_requested_veri" AN "Read_wrk_Running" Rise "Save_requested_read_FP" = "Save_requested_read_veri" A "mUploadPC" AN "UploadPC" Rise "Save_requested_upldPC_FP" = "Save_requested_upldPC_ve" A "Save_requested_veri" O "Save_requested_read_veri" O "Save_requested_upldPC_ve" JC Vsav JU Esav Vsav: CLR = "Save_Requested" LAR1 P#0.0 L "Lenght_UDT900" L 2 DIV_I L 17 SUB_I Bsav: T "Loop_Count" AUF "CIP_Program_Variables" L DBW[AR1,P#50.0] AUF "HMI_Local_CIP_Variables" L DBW[AR1,P#2.0] NE_D JC Sreq ADDAR1 P#2.0 L "Loop_Count" LOOP Bsav JU Esav Sreq: SET = "Save_Requested" Esav: NOP_0 // --- END STL Network 9 --- // Network 10: (Original Language: STL) // --- BEGIN STL Network 10 --- A "UploadPC" JCN Noup S "mUploadPC" Noup: A "Edit" JCN Roup R "mUploadPC" Roup: NOP_0 // --- END STL Network 10 --- END_FUNCTION_BLOCK ```