```pascal FUNCTION "CIPLocal_ExecSimpleCIP" : Void { S7_Optimized_Access := 'FALSE' } VERSION : 0.0 VAR_INPUT Start : Bool; Hold : Bool; StepUp : Bool; StepDown : Bool; Inizialize : Bool; Clock : Bool; END_VAR VAR_TEMP mInizialize_ONS : Bool; mStepUp_ONS : Bool; mStepDown_ONS : Bool; mClock_ONS : Bool; mRecipeChanged_ONS : Bool; mCycleCount : Int; mCIPTotalTime : Int; mStepTotalTime : Int; i : Int; j : Int; END_VAR BEGIN "ONS_R"(Enable_ONS := #Inizialize, Aux_ONS := "mInizialize_ONS", ONS_R => #mInizialize_ONS ); "ONS_R"(Enable_ONS := #StepUp AND NOT "CIP_Program_Variables".Status.Completed, Aux_ONS := "mStepUp_ONS", ONS_R => #mStepUp_ONS ); "ONS_R"(Enable_ONS := #StepDown AND NOT "CIP_Program_Variables".Status.Inizialized, Aux_ONS := "mStepDown_ONS", ONS_R => #mStepDown_ONS ); "ONS_R"(Enable_ONS := #Clock, Aux_ONS := "mClock_ONS", ONS_R => #mClock_ONS ); IF #mInizialize_ONS THEN "CIPLocal_ProgInizialize"(); "HMI_Local_CIP_Variables".Cip_Recipe.ActualSimpleProgram :="HMI_Local_CIP_Variables".Cip_Recipe.ActualLinkProgram.CIP_Simple_Prog[1] ; ELSE "CIP_Program_Variables".General_Data.ActualSimpleNum := LIMIT (MN:= 1, IN:= "CIP_Program_Variables".General_Data.ActualSimpleNum, MX:= "CIP_Program_Variables".General_Data.CIPMaxSimpleNum) ; "CIP_Program_Variables".General_Data.ActualStepNum := LIMIT (MN:= 1, IN:= "CIP_Program_Variables".General_Data.ActualStepNum, MX:= "CIP_Program_Variables".General_Data.CIPMaxStepNum) ; IF #mStepUp_ONS THEN "CIPLocal_ProgStepUp"() ; END_IF ; IF #mStepDown_ONS THEN "CIPLocal_ProgStepDown"() ; END_IF ; #i := "CIP_Program_Variables".General_Data.ActualSimpleNum ; "CIP_SimpleProgr_Init"(i_SimpleProgr:= "HMI_Local_CIP_Variables".Cip_Recipe.ActualLinkProgram.CIP_Simple_Prog[#i], i_StepNumber:= "CIP_Program_Variables".General_Data.ActualStepNum, o_Step=> "CIP_Program_Variables".mCIP_ActualStep); "CIP_Program_Variables".General_Data.mStepTimeValue := "CIP_Program_Variables".mCIP_ActualStep.CIP_StepTime ; #mCycleCount := 0 ; WHILE "CIP_Program_Variables".General_Data.mStepTimeValue = 0 AND NOT "CIP_Program_Variables".Status.Completed AND NOT "CIP_Program_Variables".Status.Inizialized AND NOT (#mCycleCount>"CIP_Program_Variables".General_Data.CIPMaxSimpleNum*"CIP_Program_Variables".General_Data.CIPMaxStepNum) DO #mCycleCount := #mCycleCount + 1 ; IF #mStepUp_ONS OR ("CIP_Program_Variables".CIP_Run.Running AND "CIP_Program_Variables".General_Data.mStepTimeValue = 0) THEN "mSteppingUp" := TRUE ; END_IF ; IF #mStepDown_ONS THEN "mSteppingDown" := TRUE ; END_IF ; IF "mSteppingUp" THEN "CIPLocal_ProgStepUp"() ; ELSIF NOT ("mSteppingUp" OR "mSteppingDown") THEN EXIT ; END_IF ; IF "mSteppingDown" THEN "CIPLocal_ProgStepDown"() ; ELSIF NOT ("mSteppingUp" OR "mSteppingDown") THEN EXIT ; END_IF ; #i := "CIP_Program_Variables".General_Data.ActualSimpleNum ; "CIP_SimpleProgr_Init"(i_SimpleProgr:= "HMI_Local_CIP_Variables".Cip_Recipe.ActualLinkProgram.CIP_Simple_Prog[#i], i_StepNumber:= "CIP_Program_Variables".General_Data.ActualStepNum, o_Step=> "CIP_Program_Variables".mCIP_ActualStep); "CIP_Program_Variables".General_Data.mStepTimeValue := "CIP_Program_Variables".mCIP_ActualStep.CIP_StepTime ; END_WHILE ; "mSteppingUp" := FALSE ; "mSteppingDown" := FALSE ; IF #mStepDown_ONS THEN IF "CIP_Program_Variables".General_Data.StepActualTime=0 THEN "CIP_Program_Variables".General_Data.TotalElapsedTime := "CIP_Program_Variables".General_Data.TotalElapsedTime - "CIP_Program_Variables".General_Data.mStepTimeValue ; ELSE "CIP_Program_Variables".General_Data.TotalElapsedTime := "CIP_Program_Variables".General_Data.TotalElapsedTime - "CIP_Program_Variables".General_Data.StepActualTime ; END_IF ; "CIP_Program_Variables".General_Data.StepActualTime := 0 ; END_IF ; IF #Start THEN "CIPLocal_ExecStep"() ; END_IF ; END_IF ; "ONS_R"(Enable_ONS := ("HMI_Variables_Cmd".RecipeCIP.Download AND "HMI_Variables_Cmd".RecipeCIP.Work_Rec_is_Active_Recip) OR #mInizialize_ONS, Aux_ONS := "mRecipeChanged_ONS", ONS_R => #mRecipeChanged_ONS ); IF #mRecipeChanged_ONS THEN #mCIPTotalTime := 0 ; FOR #i:=1 TO "CIP_Program_Variables".General_Data.CIPMaxSimpleNum DO FOR #j:= 1 TO "CIP_Program_Variables".General_Data.CIPMaxStepNum DO "CIP_SimpleProgr_Init"(i_SimpleProgr:= "HMI_Local_CIP_Variables".Cip_Recipe.ActualLinkProgram.CIP_Simple_Prog[#i],i_StepNumber:= #j, o_Step=> "CIP_Program_Variables".mCIP_ActualStep); #mCIPTotalTime := #mCIPTotalTime + "CIP_Program_Variables".mCIP_ActualStep.CIP_StepTime ; END_FOR ; END_FOR ; "HMI_Local_CIP_Variables".CIP_AnalogValues._TotalTime := #mCIPTotalTime ; END_IF ; #mStepTotalTime := 0 ; FOR #j:= 1 TO "CIP_Program_Variables".General_Data.CIPMaxStepNum DO "CIP_SimpleProgr_Init"(i_SimpleProgr:= "HMI_Local_CIP_Variables".Cip_Recipe.ActualSimpleProgram, i_StepNumber:= #j, o_Step=> "CIP_Program_Variables".mCIP_ActualStep); #mStepTotalTime := #mStepTotalTime + "CIP_Program_Variables".mCIP_ActualStep.CIP_StepTime ; END_FOR ; "HMI_Local_CIP_Variables".CIP_AnalogValues._StepTime := #mStepTotalTime ; "HMI_Local_CIP_Variables".CIP_AnalogValues._StepElapsedTime := "CIP_Program_Variables".General_Data.mStepTotalActualTime ; "HMI_Local_CIP_Variables".CIP_AnalogValues._ElapsedTime := LIMIT (MN:=0, IN:="CIP_Program_Variables".General_Data.TotalElapsedTime, MX:="CIP_Program_Variables".General_Data.TotalElapsedTime ) ; "HMI_Local_CIP_Variables".CIP_AnalogValues._StepNum := "CIP_Program_Variables".General_Data.ActualSimpleNum ; "HMI_Local_CIP_Variables".Cip_Recipe.ActualSimpleProgram.CIP_SimpleCode := "HMI_Local_CIP_Variables".Cip_Recipe.ActualLinkProgram.CIP_Simple_Prog["CIP_Program_Variables".General_Data.ActualSimpleNum].CIP_SimpleCode ; "HMI_Local_CIP_Variables".CIP_SimpleEditType := "HMI_Local_CIP_Variables".Cip_Recipe.EditLinkProgram.CIP_Simple_Prog["HMI_Local_CIP_Variables".Cip_SimpleEditPhaseNum].CIP_SimpleCode ; END_FUNCTION ```