|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FB32 SEQ1 P01: Pick and Place and Batching sequencer |
|
|
|
Netzwerk 1: SEQ1 Pre-Setting
IF "DI MAIN GLB".Interface.FilterPicked_Conv1Ack THEN "DI MAIN GLB".Interface.FilterPicked_Conv1 := FALSE; END_IF; IF "DI MAIN GLB".Interface.FilterPicked_Conv2Ack THEN "DI MAIN GLB".Interface.FilterPicked_Conv2 := FALSE; END_IF; IF "DI MAIN GLB".Interface.FilterStack_Finished AND NOT "DI MAIN GLB".Interface.FilterStack_FinishedAck THEN #NextConveyor := #NextConveyor + 1; IF #NextConveyor > 2 THEN #NextConveyor := 1; END_IF; "DI MAIN GLB".Interface.FilterStack_FinishedAck := TRUE; #PickPlaceStarted:= FALSE; #LastActPos := #IndexPos := 0; END_IF; IF NOT "DI MAIN GLB".Interface.FilterStack_Finished THEN "DI MAIN GLB".Interface.FilterStack_FinishedAck := FALSE; END_IF; IF "DI MAIN GLB".Interface.FilterStack_TranspAck THEN "DI MAIN GLB".Interface.FilterStack_Finished := FALSE; END_IF; IF NOT "DI MAIN GLB".Interface.FilterStack_Request THEN "DI MAIN GLB".Interface.FilterPlaced_OutPutConv := FALSE; END_IF; // Write FilterStack_Request "DI MAIN GLB".Interface.FilterStack_Request := NOT ("DI MAIN GLB".Interface.FilterStack_Finished OR "DI OUT P01".M03.DRV.LampWP); "M01 RdyToStart" := "M01 HomPosIS" AND ("DI MAIN GLB".Interface.MinTraysPresent_Conv1 OR "DI MAIN GLB".Interface.MinTraysPresent_Conv2 OR #PickPlaceStarted); |
|
|
|
Netzwerk 2: Execute SEQ1
#SSM1(STEP_PLS := "HMI KEY".P01.GLB.F17_StepPls, STEP_MNS := "HMI KEY".P01.GLB.F18_StepMns, GOTO_STEP := "HMI KEY".P01.GLB.F19_GoToStep, GOTO_STEP_NO := "HMI KEY".P01.GLB.GoToStep, MAX_STEP := 70); |
|
|
|
Netzwerk 3: Step jump distributor
CASE #SSM1.S.stepact OF 0: // Query M01 Conv.1 or M02 Conv.2 "DI MAIN P01".SEQ1.PosIndex := 0; "M01 SEQ1 Active" := FALSE; IF #NextConveyor = 1 AND NOT "DI MAIN GLB".Interface.MinTraysPresent_Conv1 AND "DI MAIN GLB".Interface.MinTraysPresent_Conv2 AND NOT #PickPlaceStarted THEN #NextConveyor := 2; ELSIF #NextConveyor = 2 AND NOT "DI MAIN GLB".Interface.MinTraysPresent_Conv2 AND "DI MAIN GLB".Interface.MinTraysPresent_Conv1 AND NOT #PickPlaceStarted THEN #NextConveyor := 1; END_IF; IF #SSM1.S.steps AND "M01 RdyToStart" THEN #SSM1.S.stepd := #PickPlaceStarted := TRUE; #IndexPos := #LastActPos; #MaxPos := "DatOfMod".P01.STS.Rows_on_x_axis * "DatOfMod".P01.STS.Rows_on_y_axis * "DatOfMod".P01.STS.Layers_on_z_axis; END_IF;
1: // M01 Conveyer 1 or M02 Conveyor or PrintTest IF "DI MAIN GLB".Interface.MinTraysPresent_Conv1 AND #NextConveyor = 1 AND "E01 M01 FltrAvailable" AND NOT "DI MAIN GLB".Interface.FilterPicked_Conv1 THEN #SSM1.S.stepnew := 10; #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q; ELSIF "DI MAIN GLB".Interface.MinTraysPresent_Conv2 AND #NextConveyor = 2 AND "E01 M02 FltrAvailable" AND NOT "DI MAIN GLB".Interface.FilterPicked_Conv2 THEN #SSM1.S.stepnew := 20; #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q; END_IF;
10: // XYZRaxis MovAbso towards Pos.1 M01 conveyor 1 (down) "M01 SEQ1 Active" := TRUE; #PosIndex := 1; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3, PRECISION := 0.5, TARGET_REACHED => #SSM1.S.stepd); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on AND NOT "E01 C01 FltrAvailable"; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
11: // C01 Gripper jaws WP "DI OUT P01".C01.VLV_OC.CmdExe_HP := FALSE; "DI OUT P01".C01.VLV_OC.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP; #SSM1.S.stepd := "DI MAIN GLB".Interface.FilterPicked_Conv1 := "E01 C01 FltrAvailable" AND "DI OUT P01".C01.FB_WP; IF #HMI_PrintTest THEN #SSM1.S.stepnew := 33; ELSE #SSM1.S.stepnew := 30; END_IF;
20: // XYZRaxis MovAbso towards Pos.2 M01 conveyor 2 (down) "M01 SEQ1 Active" := TRUE; #PosIndex := 2; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3, PRECISION := 0.5, TARGET_REACHED => #SSM1.S.stepd); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
21: // C01 Gripper jaws WP "DI OUT P01".C01.VLV_OC.CmdExe_HP := FALSE; "DI OUT P01".C01.VLV_OC.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP; #SSM1.S.stepd := "DI MAIN GLB".Interface.FilterPicked_Conv2 := "E01 C01 FltrAvailable" AND "DI OUT P01".C01.FB_WP; IF #HMI_PrintTest THEN #SSM1.S.stepnew := 33; ELSE #SSM1.S.stepnew := 30; END_IF;
30: // XYZRaxis MovAbso towards Pos.3 TopView camera 1 (up) #PosIndex := 3; "DI MAIN GLB".Interface.FilterPicked_Conv1Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 1; "DI MAIN GLB".Interface.FilterPicked_Conv2Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 2; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_2, POS_WINDOW := TRUE, PRECISION := 9.0, TARGET_REACHED => #SSM1.S.stepd); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
31: // Start TopView camera 1 IF #SSM1.S.stepfc THEN "DI OUT P01".TopViewCam.Support.Report.AuditResultOk := FALSE; ELSE "M01 Cam1TopViewTrigger" := NOT ("DI OUT P01".TopViewCam.oxError OR "DI OUT P01".TopViewCam.Support.OUT.oxBusy) AND "DI OUT P01".TopViewCam.oiActAppNo > 0; #SSM1.S.stepd := "DI OUT P01".TopViewCam.Support.OUT.oxDone; END_IF;
32: // Write TopView Camera 1 ok or Nok IF "DI OUT P01".TopViewCam.ARchSendBuf[10] = 'O' THEN "DI OUT P01".TopViewCam.Support.Report.AuditResultOk := TRUE; ELSE "DI OUT P01".TopViewCam.Support.Report.AuditResultNok := TRUE; "DI OUT P01".TopViewCam.Support.Report.SpecificErrorNo := 4101; END_IF; #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;
33: // XYZRaxis MovAbso towards TrgtPos.4 Execute Scanner if inPos IF #SSM1.S.stepfc THEN "RCV_P2P_RS232".Scanned_Data[0] := "RCV_P2P_RS232".Scanned_Data[30] := 16#C; #SSM1.S.c2.set := 30; #PosIndex := 4; END_IF; "DI MAIN GLB".Interface.FilterPicked_Conv1Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 1; "DI MAIN GLB".Interface.FilterPicked_Conv2Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 2; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_2, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3, PRECISION := 9.0, TARGET_REACHED => #tmp_llo); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01 AND "DI OUT P01".V90_Z.drv_nc_delay_on; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01 AND "DI OUT P01".V90_Z.drv_nc_delay_on; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
IF "DI OUT P01".#Scanner_ET200SP.Support_AT.%X3 THEN #SSM1.S.c2.start := TRUE; END_IF; IF #tmp_llo AND #SSM1.S.c2.done THEN IF "RCV_P2P_RS232".Scanned_Data[0] = 16#C OR "RCV_P2P_RS232".Scanned_Data[30] = 16#C THEN #SSM1.S."1_FAULT_00_15".%X1 := "DI OUT P01".Scanner_ET200SP.Support_AT.%X3; ELSE #SSM1.S.stepd := TRUE; END_IF; END_IF;
34: // Read ExpiereDate, Name, Type, ID, Lot number IF #SSM1.S.DlyStart.Q THEN Chars_TO_Strg(Chars := "RCV_P2P_RS232".Scanned_Data, pChars := 1, Cnt := 30, Strg => #String_Cache."String[1]"); Chars_TO_Strg(Chars := "RCV_P2P_RS232".Scanned_Data, pChars := 31, Cnt := 30, Strg => #String_Cache."String[2]"); ELSE #SSM1.S.stepd := TRUE; END_IF;
35: // XYZRaxis MovAbso towards TrgtPos.5 Print Start #PosIndex := 5; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_2, PRECISION := 9.0, TARGET_REACHED => #SSM1.S.stepd); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
36: // XYZRaxis MovJogHP towards Pos.10, and print (slow) IF #SSM1.S.stepfc THEN #PosIndex := 10; "DI OUT P01".V90_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZRaxisVelo_1; "DI OUT P01".HITACHI.DataToPrint."String[1]" := MID_STRING(IN := #String_Cache."String[1]", L := 28, P := 3); "DI OUT P01".HITACHI.DataToPrint."String[2]" := MID_STRING(IN := #String_Cache."String[2]", L := 28, P := 1); END_IF; "M01 Scan SendPrintData" := "DI OUT P01".HITACHI.READY;
"M01 PRNT RunSignal" := "DI OUT P01".HITACHI.READY AND "DI OUT P01".V90_X.DRV.Support.ActPos < "DI OUT P01".MANUAL.XYZR_TrgtPos[5].X OR "DI OUT P01".V90_X.DRV.Support.ActPos > "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex].X;
IF "DI OUT P01".HITACHI.PRINT_COMPLET THEN IF #HMI_PrintTest THEN #HMI_PrintTest := FALSE; #SSM1.S.stepnew := 40; END_IF; #SSM1.S.stepd := TRUE; END_IF; "M01 V90_X MovJogHP" := NOT ("DI OUT P01".V90_X.HALT_01 OR #SSM1.S.stepd) AND "DI OUT P01".HITACHI.PRINTING_01;
37: // XYZRaxis MovAbso towards Pos.6 TextView camera 2 start IF #SSM1.S.stepfc THEN #PosIndex := 6; "DI OUT P01".V90_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZRaxisVelo_2; "DI OUT P01".V90_X.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex].X; ELSE "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; #SSM1.S.stepd := "DI OUT P01".V90_X.DRV.Support.InPos; END_IF;
38: // Camera 2 check print quality IF #SSM1.S.stepfc THEN "DI OUT P01".TextViewCam.Support.Report.AuditResultOk := FALSE; ELSE "M01 Cam2TextViewTrigger" := NOT ("DI OUT P01".TextViewCam.oxError OR "DI OUT P01".TextViewCam.Support.OUT.oxBusy) AND "DI OUT P01".TextViewCam.oiActAppNo > 0; END_IF; IF "DI OUT P01".TextViewCam.ARchSendBuf[10] = 'O' THEN "DI OUT P01".TextViewCam.Support.Report.AuditResultOk := TRUE; ELSE "DI OUT P01".TextViewCam.Support.Report.AuditResultNok := TRUE; "DI OUT P01".TextViewCam.Support.Report.SpecificErrorNo := 4301; END_IF; #SSM1.S.stepd := "DI OUT P01".TextViewCam.Support.OUT.oxDone AND NOT #SSM1.S.DlyStart.Q;
39: // Qery where to go to Batching/Nok/QS IF NOT #HMI_Start_QA AND ("DI OUT P01".TopViewCam.Support.Report.AuditResultNok OR "DI OUT P01".TextViewCam.Support.Report.AuditResultNok OR #HMI_PrintTest) THEN #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q; ELSIF #HMI_Start_QA AND "DI OUT P01".TopViewCam.Support.Report.AuditResultOk AND "DI OUT P01".TextViewCam.Support.Report.AuditResultOk THEN #SSM1.S.stepnew := 60; ELSIF "DI OUT P01".TopViewCam.Support.Report.AuditResultOk AND "DI OUT P01".TextViewCam.Support.Report.AuditResultOk AND NOT #HMI_Start_QA THEN #SSM1.S.stepnew := 50; END_IF; #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;
40: // XYZRaxis MovAbso towards Pos.8 NokPusher #PosIndex := 8; "FC POS REACHED P01"(START := #SSM1.S.stepfc, TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex], SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1, SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3, PRECISION := 0.5, TARGET_REACHED => #SSM1.S.stepd); "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on; "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01; "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01; "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;
41: // C01 Filter gripper HP placing filter on C02 Nok pusher "DI MAIN P01".SEQ1.HMI_PrintTest := "DI OUT P01".C01.VLV_OC.CmdExe_WP := FALSE; "DI OUT P01".C01.VLV_OC.CmdExe_HP := "HMI KEY".P01.C01.F11_Enable_HP; IF "DI OUT P01".C01.FB_HP AND "E01 C02 FltrPlaced" THEN "DI MAIN GLB".Interface.FilterPlaced_NokPusher := #SSM1.S.stepd := TRUE; #SSM1.S.stepnew := 1; END_IF;
|
|