protected override void LogicImpl() { switch (LG.Step) { case 1: DeviceRsDef.Ax_顶升.MC_MoveAbs(RiseSnapPos); LG.ImmediateStepNext(2); snapCount = 0; break; case 2: if (DeviceRsDef.Ax_顶升.status == Device.AxState.AXSTA_READY) { DeviceRsDef.Ax_相机X轴.MC_MoveAbs(XYSnapPos[snapCount].X); DeviceRsDef.Ax_相机Y轴.MC_MoveAbs(XYSnapPos[snapCount].Y); LG.ImmediateStepNext(3); } break; case 3: if (DeviceRsDef.Ax_相机X轴.status == Device.AxState.AXSTA_READY && DeviceRsDef.Ax_相机Y轴.status == Device.AxState.AXSTA_READY) { LG.ImmediateStepNext(4); } break; case 4: //相机触发 if (LG.TCnt(50)) { LG.ImmediateStepNext(5); } break; case 5: //相机触发结果 LG.ImmediateStepNext(6); break; case 6: break; } }
protected override void LogicImpl() { switch (LG.Step) { case 1: DeviceRsDef.Ax_刮锡膏.MC_MoveAbs(StartPos); LG.ImmediateStepNext(2); DeviceRsDef.Q_刮刀1.OFF(); DeviceRsDef.Q_刮刀2.OFF(); break; case 2: if (DeviceRsDef.Ax_刮锡膏.status == AxState.AXSTA_READY) { DeviceRsDef.Q_刮刀1.ON(); DeviceRsDef.Q_刮刀2.ON(); LG.ImmediateStepNext(3); } break; case 3: if (LG.TCnt(Delay)) { DeviceRsDef.Ax_刮锡膏.MC_MoveAbs(EndPos); LG.ImmediateStepNext(4); } break; case 4: if (DeviceRsDef.Ax_刮锡膏.status == AxState.AXSTA_READY) { DeviceRsDef.Q_刮刀1.OFF(); DeviceRsDef.Q_刮刀2.OFF(); LG.ImmediateStepNext(5); } break; case 5: LG.End(); break; } }
protected override void LogicImpl() { var Para = Product.Inst.Stickdata; switch (LG.Step) { case 1: whichproduct = Product.Inst.Stickdata.TrayData.ProductList.Count - 1; DataList.Clear(); LG.StepNext(2); break; case 2: for (int i = 0; i < CTRCard.Axis_Z.Count; i++) { CTRCard.Axis_Z[i].MC_MoveAbs(Para.ZSafePos); } LG.StepNext(3); break; case 3: if (CTRCard.ZArrive) { if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0) { LG.StepNext(4); } else { LG.StepNext(0xef); } } break; case 4: if (Para.CanscanCode) { CTRCard.Axis_X.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[whichproduct].CodePoint2.X); CTRCard.Axis_Y.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[whichproduct].CodePoint2.Y); LG.StepNext(5); } else { LG.StepNext(0xef); } break; case 5: if (CTRCard.XYArrive) { LG.StepNext(6); } break; case 6: if (CTRCard.XYArrive) { LG.StepNext(7); DeviceRsDef.Q_Light.ON(); DeviceRsDef.Q_HoldLightCtrl.OFF(); } break; case 7: if (LG.Delay(10)) { //VisionProject.Instance.visionApi.TrigRun(2, 0); LG.StepNext(8); } break; case 8: if (Product.Inst.IsAging) { //老化模式下,不判断拍照结果 if (LG.TCnt(500)) { LG.StepNext(10); } } else { //正常模式下 //if (VisionProject.Instance.visionApi.Trig == false) //{ // if (VisionProject.Instance.visionApi.Error == 0) // { // LG.StepNext(9); // } // else // { // LG.StepNext(10); // } //} } break; case 9: //DataList.Add(VisionProject.Instance.visionApi.CodeString);//将读取到的二维码信息加进list里面 //ShowMessge.SendStartMsg(string.Format("产品{0}二维码:{1}", whichproduct, VisionProject.Instance.visionApi.CodeString)); LG.StepNext(10); break; case 10: whichproduct--; if (whichproduct <= -1) { LG.StepNext(0xef); } else { LG.StepNext(3); } break; case 0xef: DeviceRsDef.Q_HoldLightCtrl.ON(); DeviceRsDef.Q_Light.OFF(); LG.End(); break; } }
protected override void LogicImpl() { var Para = Product.Inst; switch (LG.Step) { case 1: whichMark = 0; //第一个mark点 Para.ProcessData.StickPosList.Clear(); //贴附过程列表清空 Para.ProcessData.currWhichPoint = 0; //第一个点 Para.ProcessData.currWhichProduct = 0; //第一个产品 MarkscanProduct = 0; MarkResult.Clear(); //mark点的拍照结果清空 whichProductAngle.Clear(); //机械角度列表清空 LG.StepNext(2); break; case 2: for (int i = 0; i < CTRCard.Axis_Z.Count; i++) { CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos); //两个Z轴抬起到安全高度 } LG.StepNext(3); break; case 3: if (CTRCard.ZArrive) //Z轴到达 { if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0) //产品树列表有产品 { LG.StepNext(4); stickPos = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].Clone(); //把产品树里的产品参数克隆过来 } else { LG.StepNext(0xef); } } break; case 4: CTRCard.Axis_X.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X); //XY到位 CTRCard.Axis_Y.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y); DeviceRsDef.Q_UpLighSource.ON(); //上光源打开 //VisionProject.Instance.SetBenchmark1 // ( // Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X, // Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y, // Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R, // whichMark,true // );//设置mark点识别位置 LG.StepNext(5); break; case 5: if (CTRCard.XYArrive && LG.Delay(Para.Stickdata.CTDelay)) //XY到达 { TaskMain.UpCamLogc.ModelID = whichMark; TaskMain.UpCamLogc.Triger(); LG.StepNext(6); } break; case 6: if (Product.Inst.IsAging) //老化模式 { if (LG.TCnt(200)) { LG.StepNext(7); } } else { if (TaskMain.UpCamLogc.Finish) { if (TaskMain.UpCamLogc.Result.Count > 0) { LG.StepNext(7); } else { LG.StepNext(8); } } } break; case 7: PointF3Vision mark = new PointF3Vision(); if (Product.Inst.IsAging) { mark.X = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X; mark.Y = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y; mark.R = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R; } else { mark.X = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X + TaskMain.UpCamLogc.Result[0].X; mark.Y = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y + TaskMain.UpCamLogc.Result[0].Y; mark.R = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R + TaskMain.UpCamLogc.Result[0].R; } VisionProject.Instance.Tool.PointLocation.SetBenchmark2 ( whichMark, mark.X, mark.Y ); MarkResult.Add(mark); whichMark++; if (whichMark >= 2) { VisionProject.Instance.Tool.PointLocation.Calculation(); if (Product.Inst.IsAging) { Para.ProcessData.StickPosList.Add(stickPos); } else { //计算Mark点,并暂存计算结果 Para.ProcessData.StickPosList.Add(MarkCaculate(stickPos)); //计算Mark点,并保存计算结果 } LG.StepNext(8); } else { LG.StepNext(4); } break; case 8: DeviceRsDef.Q_UpLighSource.OFF(); if (MarkscanProduct >= Product.Inst.Stickdata.TrayData.ProductList.Count - 1) { LG.StepNext(0xef); } else { LG.StepNext(3); whichMark = 0; MarkscanProduct++; } break; case 0xef: LG.End(); break; } }
protected override void LogicImpl() { var Para = Product.Inst; switch (LG.Step) { case 1: //Z轴抬起到安全高度 if (Para.ProcessData.currWhichProduct >= Para.ProcessData.StickPosList.Count) { Para.ProcessData.currWhichProduct = 0; } else { if (Para.ProcessData.currWhichPoint >= Para.ProcessData.CurrStickWhichProduct().SiteList.Count) { Para.ProcessData.currWhichPoint = 0; } } if (Para.ProcessData.StickPosList.Count == 0) { Alarm.SetAlarm(AlarmLevelEnum.Level2, "没扫Mark点,不允许贴附"); LG.StepNext(0xef); } else { if (CTRCard.ZArrive) { for (int i = 0; i < 2; i++) { CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos); } LG.StepNext(2); } } break; case 2: bool isCanStick = false; for (int i = 0; i < 2; i++) //扫描吸嘴个数 { if (Para.ProcessData.NuzzlePara[i].isOk == 1 && Para.ProcessData.NuzzlePara[i].isHave) { whichNuzzle = i; isCanStick = true; break; } } if (isCanStick) { StickPos(whichNuzzle); Para.ProcessData.NuzzlePara[whichNuzzle].isHave = false; Para.ProcessData.NuzzlePara[whichNuzzle].isOk = 0; LG.StepNext(3); } else { LG.StepNext(0xef); } break; case 3: //xy到贴标位置 if (CTRCard.ZArrive) { CTRCard.Axis_X.MC_MoveAbs(stickPos.X); CTRCard.Axis_Y.MC_MoveAbs(stickPos.Y); CTRCard.Axis_R[whichNuzzle].MC_MoveAbs(stickPos.R); LG.StepNext(4); } break; case 4: //系统稳定时间+第一段快速下降 if (CTRCard.XYArrive && CTRCard.RArrive && LG.TCnt(10)) { CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(stickPos.Z - 5); LG.StepNext(5); } break; case 5: //第二段慢速下降 if (CTRCard.ZArrive) { CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(30, stickPos.Z); LG.StepNext(6); } break; case 6: //到达贴标高度吸真空打开,吹气关闭 if (CTRCard.ZArrive) { CTRCard.Q_Nuzzle[whichNuzzle].ON(); CTRCard.Q_Blow[whichNuzzle].OFF(); LG.StepNext(7); } break; case 7: //真空延时后,很空关闭,吹气打开 if (LG.Delay(Para.Stickdata.StickPara.SuckOffDelay)) { CTRCard.Q_Nuzzle[whichNuzzle].OFF(); CTRCard.Q_Blow[whichNuzzle].ON(); LG.StepNext(8); } break; case 8: //吹气延时后吹气关闭 if (LG.Delay(Para.Stickdata.StickPara.SuckBlowDelay)) { CTRCard.Q_Blow[whichNuzzle].OFF(); Product.Inst.ProductYield.ProductCount(); //产量+1用于计算UPH LG.StepNext(9); } break; case 9: //Z轴回到安全位 if (CTRCard.ZArrive) { CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.ZSafePos); LG.StepNext(10); } break; case 10: //Z轴到位后 if (CTRCard.Axis_Z[whichNuzzle].status == AxState.AXSTA_READY) { CTRCard.Axis_R[whichNuzzle].MC_MoveAbs(0); LG.StepNext(11); } break; case 11: Para.ProcessData.currWhichPoint++; //点位++ if (Para.ProcessData.currWhichPoint >= Para.ProcessData.StickPosList[Para.ProcessData.currWhichProduct].SiteList.Count) { Para.ProcessData.currWhichPoint = 0; //点位置0 Para.ProcessData.currWhichProduct++; //产品加1 if (Para.ProcessData.currWhichProduct >= Para.ProcessData.StickPosList.Count) { //Para.ProcessData.currWhichPoint = 0;//点位置0 //Para.ProcessData.currWhichProduct = 0;//产品置0 LG.StepNext(0xef); break; } } LG.StepNext(2); if (!Para.ProcessData.NuzzlePara[0].isHave && !Para.ProcessData.NuzzlePara[1].isHave) { LG.StepNext(0xef); //两个吸嘴都没有料就结束 } break; case 0xef: LG.End(); break; } }
protected override void LogicImpl() { var Para = Product.Inst.Stickdata; LG.Start(); switch (LG.Step) { case 1: whichProduct = 0; LG.StepNext(2); break; case 2: for (int i = 0; i < CTRCard.Axis_Z.Count; i++) { CTRCard.Axis_Z[i].MC_MoveAbs(0); } LG.StepNext(3); break; case 3: if (CTRCard.ZArrive) { if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0) { LG.StepNext(4); } else { LG.StepNext(0xef); } } break; case 4: if (Para.CanBackCT) { CTRCard.Axis_X.MC_MoveAbs(TrayData.ProductList[whichProduct].BackCT.X); CTRCard.Axis_Y.MC_MoveAbs(TrayData.ProductList[whichProduct].BackCT.Y); LG.StepNext(5); } else { LG.StepNext(0xef); } break; case 5: if (CTRCard.XYArrive) { LG.StepNext(6); } break; case 6: if (CTRCard.XYArrive) { LG.StepNext(7); DeviceRsDef.Q_HoldLightCtrl.ON(); DeviceRsDef.Q_Light.OFF(); } break; case 7: if (LG.Delay(Para.CTDelay)) { //VisionProject.Instance.visionApi.TrigRun(3, 0); LG.StepNext(8); } break; case 8: if (Product.Inst.IsAging) { //老化模式下,不判断拍照结果 if (LG.TCnt(100)) { LG.StepNext(0xA0); } } else { //正常模式下 //if (VisionProject.Instance.visionApi.Trig == false) //{ // VisionProject.Instance.SaveBackCTFunImage(); // if (VisionProject.Instance.visionApi.Error == 0) // { // LG.StepNext(0xA0); // } // else // { // LG.StepNext(9); // } //} } break; case 0xA0: if (Product.Inst.IsAging) { LG.StepNext(9); } else { //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[0].X, VisionProject.Instance.visionApi.CheckStick[0].Y, VisionProject.Instance.visionApi.CheckStick[0].R)); //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[1].X, VisionProject.Instance.visionApi.CheckStick[1].Y, VisionProject.Instance.visionApi.CheckStick[1].R)); //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[2].X, VisionProject.Instance.visionApi.CheckStick[2].Y, VisionProject.Instance.visionApi.CheckStick[2].R)); //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[3].X, VisionProject.Instance.visionApi.CheckStick[3].Y, VisionProject.Instance.visionApi.CheckStick[3].R)); LG.StepNext(9); } break; case 9: whichProduct++; if (whichProduct >= TrayData.ProductList.Count) { LG.StepNext(0xef); } else { LG.StepNext(3); } break; case 0xef: LG.End(); break; } }