コード例 #1
0
 /// <summary>
 /// 带参数的启动
 /// </summary>
 /// <param name="PosPut">放晶位置</param>
 public void Start(FPointXYZR PosPut, FPointXY PosCheck)
 {
     if (LG.Execute == false && LG.Step == 0)
     {
         this.Pos_Put   = PosPut;
         this.Pos_Check = PosCheck;
         Start();
     }
 }
コード例 #2
0
ファイル: PickJumpDef.cs プロジェクト: Lawrencehaveadream/XJS
 /// <summary>
 /// 带参数的启动
 /// </summary>
 /// <param name="p">跳跃目标位置</param>
 /// <param name="CheckVacuo">在跳跃到目标位置上方时,检测真空</param>
 /// <param name="PreInpZ">Z轴提前量,平滑处理</param>
 /// <param name="PreInpY">Y轴提前量,平滑处理</param>
 public void Start(FPointXYZR p, bool CheckVacuo = false, float PreInpZ = 0, float PreInpY = 0)
 {
     if (LG.Execute == false && LG.Step == 0)
     {
         this.CheckVacuo = CheckVacuo;
         this.PreInpY    = PreInpY;
         this.PreInpZ    = PreInpZ;
         this.PosTar     = p;
         Start();
     }
 }
コード例 #3
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:
                FPointXYZR p = TaskMain.PickTake.Pos_Take.Clone(); //取晶位置,clone出来
                p.Z = TaskMain.PickJump.Ready.Z;                   //Z位置改成预备高度
                TaskMain.PickJump.Start(p);                        //跳跃到取晶位上方
                LG.StepNext(2);
                break;

            case 2:
                if (TaskMain.PickJump.GetSta() == 0)                        //等待定位结束
                {
                    DeviceRsDef.Ax_PickZ.MC_MoveAbs(0, Pos_DetectMax);      //以最慢速度向测高极限移动
                    LG.StepNext(3);
                }
                break;

            case 3:
                if (DeviceRsDef.Ax_PickZ.busy)                                       //在轴运行过程中
                {
                    if (DeviceRsDef.I_PickDetect.value)                              //检测到测高信号
                    {
                        TaskMain.PickTake.Pos_Take.Z = DeviceRsDef.Ax_PickZ.currPos; //更新取晶高度
                        DeviceRsDef.Ax_PickZ.MC_Stop();                              //停止轴
                        LG.StepNext(4);                                              //
                    }
                }
                else                        //测高轴运行结束
                {
                    MessageBox.Show("测高失败,到达测高极限", "提示");
                    LG.End();
                }
                break;

            case 4:
                if (!DeviceRsDef.Ax_PickZ.busy)
                {
                    MessageBox.Show("测高完成,取晶高度已更新", "提示");
                    LG.End();
                }
                break;
            }
        }
コード例 #4
0
 public PickTakeDef() : base("拾取取晶")
 {
     Pos_Take = new FPointXYZR();
 }
コード例 #5
0
ファイル: PickJumpDef.cs プロジェクト: Lawrencehaveadream/XJS
        public bool VacuoResult;              //真空检测结果

        public PickJumpDef() : base("拾取跳跃")
        {
            Ready = new FPointXYZR();
        }
コード例 #6
0
 public PickDiscardDef() : base("拾取弃料")
 {
     Pos_Discard = new FPointXYZR();
 }
コード例 #7
0
        protected override void LogicImpl()
        {
            //放晶时循环处理提前控制真空和吹气
            if (LG.Execute == true)
            {
                if (Tr.TrigOne(System.Math.Abs(DeviceRsDef.Ax_PickZ.currPos - Pos_Put.Z) <= Pos_Ahead, 0)) //当Z位置进入到提前范围内时,执行一次
                {
                    DeviceRsDef.Q_PickVacuo.OFF();                                                         //关真空
                    DeviceRsDef.Q_PickBlow.ON();                                                           //开吹气
                }
            }
            switch (LG.Step)
            {
            case 1:
                if (!DeviceRsDef.Q_PickVacuo.Value || !DeviceRsDef.I_PickVacuo.value) //如果没取好片
                {
                    TaskMain.PickTake.Start();                                        //执行取片
                }
                LG.StepNext(2);
                break;

            case 2:
                if (DeviceRsDef.Q_PickVacuo.Value && DeviceRsDef.I_PickVacuo.value)  //如果取好片了
                {
                    FPointXYZR p = Pos_Put.Clone();                                  //取放晶点位置
                    p.Z = Pos_Put.Z - Pos_Slow;                                      //Z修改为慢速点
                    TaskMain.PickJump.Start(p, true, TaskMain.PickJump.Pos_PreInpZ); //跳跃到放晶点的慢速高度,检测真空,Z带提前量
                    LG.StepNext(3);
                }
                else                        //如果没取好片
                {
                    LG.End();               //结束流程
                }
                break;

            case 3:
                if (TaskMain.PickJump.GetSta() == 0)                          //跳跃结束
                {
                    if (TaskMain.PickJump.VacuoResult)                        //真空检测OK
                    {
                        DeviceRsDef.Ax_PickZ.MC_MoveAbs(Spd_Slow, Pos_Put.Z); //Z慢速到放晶位
                        LG.StepNext(4);
                    }
                    else                            //真空异常
                    {
                        //要报警
                        PutOk = false;                                //标志放晶失败
                        LG.End();
                    }
                }
                break;

            case 4:
                if (!DeviceRsDef.Ax_PickZ.busy)                        //等待Z到位
                {
                    //DeviceRsDef.Q_PickVacuo.OFF();//由提前量控制吹气和真空
                    //DeviceRsDef.Q_PickBlow.ON();
                    Tm.Restart();                            //到位开始计时
                    LG.StepNext(5);
                }
                break;

            case 5:
                if (Tm.ElapsedMilliseconds >= Tim_Put)                    //放晶时间到
                {
                    DeviceRsDef.Q_PickBlow.OFF();                         //关闭吹气
                    TaskMain.PickTake.Start();                            //取晶
                    TaskMain.TrayDesk.Start(Pos_Check);                   //相机移动到该点
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (TaskMain.TrayDesk.GetSta() == 0 && DeviceRsDef.Ax_PickY.currPos < TaskMain.PickJump.Ready.Y + 1)
                {
                    VisionSot = true;                            //触发视觉
                    LG.StepNext(7);
                }
                break;

            case 7:
                if (!VisionSot)                        //等待视觉结束
                {
                    PutOk = VisionRet;                 //标志放晶结果
                    LG.End();
                }
                break;
            }
        }