public PolishCleanFun(string name) : base(name + "打磨清洗模块")
        {
            switch (name.ToString())
            {
            case "左":
                ID = 0;
                break;

            case "右":
                ID = 1;
                break;
            }
            Axis = new IOandAxisFun();
        }
        public SolderPlatform(string name) : base(name + "焊锡平台")
        {
            SolderClean = new TinCleanFun(name);
            SolderCT    = new SolderCTFun(name);
            Solder      = new SolderFun(name);
            Axis        = new IOandAxisFun();
            switch (name)
            {
            case "左":
                ID = 0;
                break;

            case "右":
                ID = 1;
                break;
            }
        }
        public PolishPlatform(string name) : base(name + "打磨平台")
        {
            PolishCT    = new PolishCTFun(name);
            Polish      = new PolishFun(name);
            PolishClean = new PolishCleanFun(name);
            switch (name)
            {
            case "左":
                ID = 0;
                break;

            case "右":
                ID = 1;
                break;
            }
            Axis = new IOandAxisFun();
        }
예제 #4
0
 public ResetLogicDef() : base("整机复位")
 {
     Axis = new IOandAxisFun();
 }
예제 #5
0
        protected override void LogicImpl()
        {
            var ProcessData = ProjectData.Instance.SaveData.processdata;

            switch (LG.Step)
            {
            case 1:    //RZ到位
                ProcessData.SolderList[ID].Clear();
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    NUM = 0;
                    Axis.SolderR[ID].MC_MoveAbs(0);
                    Axis.SolderZ[ID].MC_MoveAbs(ProjectData.Instance.SaveData.SolderData[ID].SafeZ);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XY到位
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    if (ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Ban)
                    {
                        NUM++;
                        break;
                    }
                    Axis.SolderX[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].X);
                    Axis.SolderY[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].Y);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //拍照
                if (Axis.SolderX[ID].status == 0 && Axis.SolderY[ID].status == 0 && LG.Delay(ProjectData.Instance.SaveData.SolderData[ID].CTDelay))
                {
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //获取相机数据
                if (/*VisionProject.Instance.visionApi.TrigComplete()||*/ TaskManager.Default.FSM.MODE == 1)
                {
                    if (TaskManager.Default.FSM.MODE == 1)
                    {
                        SolderPosData _pos = new SolderPosData();
                        _pos.Pos.X = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                        _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;
                        _pos.Pos.R = 0;
                        if (ProjectData.Instance.SaveData.processdata.Agingdataforsolder == null)
                        {
                            ProjectData.Instance.SaveData.processdata.Agingdataforsolder = new SolderDef();
                        }
                        ProjectData.Instance.SaveData.processdata.Agingdataforsolder.Z = 25;

                        _pos.Pos        = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos);
                        _pos.SolderData = ProjectData.Instance.SaveData.processdata.Agingdataforsolder;
                        ProcessData.SolderList[ID].Add(_pos);    //增加到list里
                        NUM++;
                        if (NUM < ProjectData.Instance.SaveData.processdata.SolderCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                    else if (true)
                    {
                        foreach (var p in VisionInteraction.Instance.WhichSolder(ID).listModel)
                        {
                            int type = p.modelindex;
                            int num  = 0;
                            foreach (var item in ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID))
                            {
                                float Tx = 0;
                                float Ty = 0;
                                float Tr = 0;

                                float x    = 0;
                                float y    = 0;
                                float cAng = (float)(p.ListPos[num].R * Math.PI / 180);
                                if (ProjectData.Instance.SaveData.SolderPlatform[ID].UseR)    //使用旋转中心
                                {
                                    x = p.ModelPos.X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                                    y = p.ModelPos.Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;

                                    IOandAxisFun.Transorm(ID, x, y, x + p.ListPos[num].X, y + p.ListPos[num].Y, cAng, out Tx, out Ty);
                                }
                                else
                                {
                                    Tx = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                                    Ty = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;
                                    Tr = 0;
                                }
                                SolderPosData _pos = new SolderPosData();
                                _pos.Pos.X      = Tx;
                                _pos.Pos.Y      = Ty;
                                _pos.Pos.R      = Tr;
                                _pos.Pos        = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos);
                                _pos.SolderData = ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID)[type].solderdata[num].Clone();
                                num++;
                                SolderOrderList.Add(_pos);    //增加到list里
                            }
                        }
                        foreach (SolderPosData data in SolderOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //排序
                        {
                            ProcessData.SolderList[ID].Add(data);                                                  //加到上锡位置
                        }
                        NUM++;
                        if (ProcessData.SolderCTPos[ID].Count() > NUM)
                        {
                            LG.ImmediateStepNext(2);    //去下一个拍照位置
                        }
                        else
                        {
                            LG.ImmediateStepNext(5);
                        }
                    }
                }
                break;

            case 5:    //判断上锡列表里的数据
                if (ProcessData.SolderList[ID].Count() > 0)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else if (TaskManager.Default.FSM.MODE == 1)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else
                {
                    string mes = ID.ToString() + "平台无上锡点";
                    MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes);
                    LG.StepNext(0xef, FSMStaDef.RUN);
                }
                break;

            case 0xef:    //结束
                LG.End();
                break;
            }
        }
예제 #6
0
 public LogicLoopRun() : base("报警等循环扫描")
 {
     Axis = new IOandAxisFun();
 }
예제 #7
0
        protected override void LogicImpl()
        {
            var para = ProjectData.Instance.SaveData.PolishData[ID];

            switch (LG.Step)
            {
            case 1:    //RZ到拍照位
                ProjectData.Instance.SaveData.processdata.PolishList[ID].Clear();
                if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0)
                {
                    NUM = 0;
                    Axis.PolishR[ID].MC_MoveAbs(0);
                    Axis.PolishZ[ID].MC_MoveAbs(para.SafeZ);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XY到拍照位
                if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0)
                {
                    if (ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Ban)
                    {
                        NUM++;
                        break;
                    }
                    Axis.PolishX[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X);
                    Axis.PolishY[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //延时拍照
                if (Axis.PolishX[ID].status == 0 && Axis.PolishY[ID].status == 0 && LG.Delay(para.CTDelay))
                {
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //获取相机数据
                if (/*VisionInteraction.Instance.TriggerCamera(ID)*/ true)
                {
                    if (TaskManager.Default.FSM.MODE == 1)
                    {
                        PolishPosData _pos = new PolishPosData();
                        _pos.Pos.X = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X;
                        _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y;
                        _pos.Pos.R = 0;
                        //_pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                        if (ProjectData.Instance.SaveData.processdata.Agingdataforpolish == null)
                        {
                            ProjectData.Instance.SaveData.processdata.Agingdataforpolish = new PolishDef();
                        }
                        _pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                        ProjectData.Instance.SaveData.processdata.Agingdataforpolish.Z = 20;
                        _pos.polishData = ProjectData.Instance.SaveData.processdata.Agingdataforpolish;
                        NUM++;

                        ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(_pos);
                        if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                    else if (true)
                    {
                        foreach (var p in VisionInteraction.Instance.WhichPolish(ID).listModel)
                        {
                            int type = p.modelindex;
                            int num  = 0;
                            foreach (var item in ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID))
                            {
                                PolishPosData _pos = new PolishPosData();
                                _pos.Pos.X      = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X;
                                _pos.Pos.Y      = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y;
                                _pos.Pos.R      = p.ListPos[num].R;
                                _pos.polishData = ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID)[type].polishData[num].Clone();
                                _pos.Pos        = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                                num++;
                                PolishOrderList.Add(_pos);    //增加到list里
                            }
                        }
                        foreach (PolishPosData data in PolishOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //对list里的点进行排序
                        {
                            ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(data);                    //把排列好的点写进打磨list里
                        }

                        if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                }
                break;

            case 5:    //判断打磨列表里的数据
                if (ProjectData.Instance.SaveData.processdata.PolishList[ID].Count() > 0)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else if (TaskManager.Default.FSM.MODE == 1)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else
                {
                    string mes = ID.ToString() + "平台没有打磨点";
                    MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes);
                    LG.StepNext(0xef, FSMStaDef.RUN);
                }
                break;

            case 0xef:    //结束
                LG.End();
                break;
            }
        }