Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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;
            }
        }