```pascal // Block Type: FB // Block Name (Original): RecipeManagement - Prod // Block Number: 1798 // Original Network Languages: STL // Block Comment: // Machine Main Recipe Management // DB1001.DBB70 -> Active Recipe // DB1008 -> Working Recipe (Edit, Copy, Erase) // DB1009 -> Recipe Name Data Base // DB400 -> Working Recipe (Data Save) // DB401 -:- DB500 -> Recipe 1-:-100 data FUNCTION_BLOCK "RecipeManagement___Prod" { 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; RecipeManagement_Busy : Bool; END_VAR VAR_INOUT Active_Recipe_Running : Int; Active_Recipe_Req : Int; Work_Recipe : Int; Copy_to : Int; Work_Rec_is_Active_Recip_IO : Bool; Save_Requested_IO : Bool; Copy_Rec_is_Active_Recip_IO : Bool; 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; 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; Upload_RET_VAL : Int; Download_RET_VAL : Int; TUDT904 : "Recipe_Prod"; End_UDT904 : Byte; Lenght_UDT904 : Int; PNullRecipe : DInt; Name_String_App : String; 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_UDT904" // --- 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: (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 400 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_UDT904" 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" = "RecipeManagement_Busy" // --- END STL Network 3 --- // Network 4: Recipe on Editing is the same number of Active Recipe (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" = "Work_Rec_is_Active_Recip_IO" // --- 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 400 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_UDT904" 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 SLW 3 T "Buffer_Pointer" LAR1_ACCU1 AUF "HMI_Recipe_Edit" L DBW2.0 AUF "HMI_Recipe_Name" T DBW[AR1,P#2.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD4.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD8.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD12.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD16.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD20.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD24.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] ADDAR1 P#4.0 AUF "HMI_Recipe_Edit" L DBD28.0 AUF "HMI_Recipe_Name" T DBD[AR1,P#0.0] LAR1 P#0.0 L "Lenght_UDT904" L 2 DIV_I Bupl: T "Loop_Count" AUF "HMI_Recipe_Edit" L DBD[AR1,P#0.0] AUF "RecipeEditDataSave" T DBD[AR1,P#0.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 DB1008 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_IO" AN "Save_Requested_IO" AN "Write" AN "Write_BUSY" JC Rdel JU Edel Rdel: LAR1 P#0.0 L "Lenght_UDT904" ITD L DINT#8 MUL_D T "PNullRecipe" L "Lenght_UDT904" L 2 DIV_I Bdel: T "Loop_Count" L "Work_Recipe_Source_DB" T "Work_Recipe_Source" AUF "RecipeEditDataSave" L DBW[AR?,P#0.0] AUF "HMI_Recipe_Edit" T DBW[AR1,P#2.0] ADDAR1 P#2.0 L 16 L "PNullRecipe" ADD_D T "PNullRecipe" 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_IO" AN "Save_Requested_IO" AN "Write" AN "Write_BUSY" A "Copy_Request" = "Copy_Start" A "Copy_Start" JC Ccop JU Ecop Ccop: L "Copy_to" ADD 400 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 "Save_Requested_IO" 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_UDT904" L 2 DIV_I Bdow: T "Loop_Count" AUF "HMI_Recipe_Edit" L DBD[AR1,P#0.0] AUF "RecipeEditDataSave" T DBD[AR1,P#0.0] AN "Save_Active_Recipe" JC Ndow AUF "HMI_Blender_Parameters" T DBD[AR1,P#70.0] Ndow: ADDAR1 P#2.0 L "Loop_Count" LOOP Bdow L "Work_Recipe_Save" Copy: L 34 MUL_I SLW 3 T "Buffer_Pointer" LAR1_ACCU1 L "Work_Recipe_Save" L 1 EQ_I JCN R02 R01: CALL _Call_? R02: L "Work_Recipe" L 2 EQ_I JCN R03 CALL _Call_? R03: L "Work_Recipe" L 3 EQ_I JCN R04 CALL _Call_? R04: L "Work_Recipe" L 4 EQ_I JCN R05 CALL _Call_? R05: L "Work_Recipe" L 5 EQ_I JCN R06 CALL _Call_? R06: L "Work_Recipe" L 6 EQ_I JCN R07 CALL _Call_? R07: L "Work_Recipe" L 7 EQ_I JCN R08 CALL _Call_? R08: L "Work_Recipe" L 8 EQ_I JCN R09 CALL _Call_? R09: L "Work_Recipe" L 9 EQ_I JCN R10 CALL _Call_? R10: L "Work_Recipe" L 10 EQ_I JCN R11 CALL _Call_? R11: L "Work_Recipe" L 11 EQ_I JCN R12 CALL _Call_? R12: L "Work_Recipe" L 12 EQ_I JCN R13 CALL _Call_? R13: L "Work_Recipe" L 13 EQ_I JCN R14 CALL _Call_? R14: L "Work_Recipe" L 14 EQ_I JCN R15 CALL _Call_? R15: L "Work_Recipe" L 15 EQ_I JCN R16 CALL _Call_? R16: L "Work_Recipe" L 16 EQ_I JCN R17 CALL _Call_? R17: L "Work_Recipe" L 17 EQ_I JCN R18 CALL _Call_? R18: L "Work_Recipe" L 18 EQ_I JCN R19 CALL _Call_? R19: L "Work_Recipe" L 19 EQ_I JCN R20 CALL _Call_? R20: L "Work_Recipe" L 20 EQ_I JCN R21 CALL _Call_? R21: L "Work_Recipe" L 21 EQ_I JCN R22 CALL _Call_? R22: L "Work_Recipe" L 22 EQ_I JCN R23 CALL _Call_? R23: L "Work_Recipe" L 23 EQ_I JCN R24 CALL _Call_? R24: L "Work_Recipe" L 24 EQ_I JCN R25 CALL _Call_? R25: L "Work_Recipe" L 25 EQ_I JCN R26 CALL _Call_? R26: L "Work_Recipe" L 26 EQ_I JCN R27 CALL _Call_? R27: L "Work_Recipe" L 27 EQ_I JCN R28 CALL _Call_? R28: L "Work_Recipe" L 28 EQ_I JCN R29 CALL _Call_? R29: L "Work_Recipe" L +29 EQ_I JCN R30 CALL _Call_? R30: L "Work_Recipe" L 30 EQ_I JCN R31 CALL _Call_? R31: L "Work_Recipe" L 31 EQ_I JCN R32 CALL _Call_? R32: L "Work_Recipe" L +32 EQ_I JCN R33 CALL _Call_? R33: L "Work_Recipe" L 33 EQ_I JCN R34 CALL _Call_? R34: L "Work_Recipe" L 34 EQ_I JCN R35 CALL _Call_? R35: L "Work_Recipe" L 35 EQ_I JCN R36 CALL _Call_? R36: L "Work_Recipe" L 36 EQ_I JCN R37 CALL _Call_? R37: L "Work_Recipe" L 37 EQ_I JCN R38 CALL _Call_? R38: L "Work_Recipe" L 38 EQ_I JCN R39 CALL _Call_? R39: L "Work_Recipe" L 39 EQ_I JCN R40 CALL _Call_? R40: L "Work_Recipe" L 40 EQ_I JCN R41 CALL _Call_? R41: L "Work_Recipe" L 41 EQ_I JCN R42 CALL _Call_? R42: L "Work_Recipe" L 42 EQ_I JCN R43 CALL _Call_? R43: L "Work_Recipe" L 43 EQ_I JCN R44 CALL _Call_? R44: L "Work_Recipe" L 44 EQ_I JCN R45 CALL _Call_? R45: L "Work_Recipe" L 45 EQ_I JCN R46 CALL _Call_? R46: L "Work_Recipe" L 46 EQ_I JCN R47 CALL _Call_? R47: L "Work_Recipe" L 47 EQ_I JCN R48 CALL _Call_? R48: L "Work_Recipe" L 48 EQ_I JCN R49 CALL _Call_? R49: L "Work_Recipe" L 49 EQ_I JCN R50 CALL _Call_? R50: L "Work_Recipe" L 50 EQ_I JCN Cdow CALL _Call_? 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_UDT904" 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] A "Write_REQ" S M106.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" = "Save_Requested_IO" LAR1 P#0.0 L "Lenght_UDT904" L 2 DIV_I Bsav: T "Loop_Count" AUF "RecipeEditDataSave" L DBD[AR1,P#0.0] AUF "HMI_Recipe_Edit" L DBD[AR1,P#0.0] NE_D JC Sreq ADDAR1 P#2.0 L "Loop_Count" LOOP Bsav JU Esav Sreq: SET = "Save_Requested" = "Save_Requested_IO" Esav: NOP_0 // --- END STL Network 9 --- // Network 10: to HMI (Original Language: STL) // Active Recipe UPLOAD (Data Uploading from PLC) // --- BEGIN STL Network 10 --- A "Upload" Rise "Upload_FP" S "Upload_Start" S "HMI_Variables_Cmd".Recipe.Get_current_Active_Recip AN "Upload_Start" JC skip CALL _Call_? SET R "Upload_Start" skip: NOP_0 // --- END STL Network 10 --- // Network 11: (Original Language: STL) // Active Recipe DOWNLOAD (Data Downloading to PLC) // --- BEGIN STL Network 11 --- A "Download" Rise "Download_FP" S "Download_Start" AN "Download_Start" JC end CALL _Call_? SET R "Download_Start" end: NOP_0 // --- END STL Network 11 --- // Network 12: (Original Language: STL) // --- BEGIN STL Network 12 --- A "UploadPC" JCN Noup S "mUploadPC" Noup: A "Edit" JCN Roup R "mUploadPC" Roup: NOP_0 // --- END STL Network 12 --- // Network 13: Control to avoid Air Sterile and N2 double selection (Original Language: STL) // --- BEGIN STL Network 13 --- A "M19157" JC VAI A "HMI_Recipe_Edit".Actual_Recipe_Parameters._GAS2_Injection S "M19156" AN "HMI_Recipe_Edit".Actual_Recipe_Parameters._GAS2_Injection R "M19156" A "M19156" JC RES1 VAI: A "M19156" JC RES1 A "HMI_Recipe_Edit".Actual_Recipe_Parameters._AirSteril S "M19157" AN "HMI_Recipe_Edit".Actual_Recipe_Parameters._AirSteril R "M19157" A "M19157" JC RES2 JU FINE RES1: R "HMI_Recipe_Edit".Actual_Recipe_Parameters._AirSteril R "M19157" JU FINE RES2: R "HMI_Recipe_Edit".Actual_Recipe_Parameters._GAS2_Injection R "M19156" FINE: NOP_0 // --- END STL Network 13 --- // Network 14: 0 = N2 not present; 1 = N2 present (Original Language: STL) // --- BEGIN STL Network 14 --- AN "HMI_Blender_Parameters".Processor_Options.Blender_OPT._CO2_GAS2_Injection R "HMI_Recipe_Edit".Actual_Recipe_Parameters._GAS2_Injection // --- END STL Network 14 --- END_FUNCTION_BLOCK ```