Ejemplo n.º 1
0
 void ICommandReport.On_Command_Error(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job)
 {
     if (AlarmList.ContainsKey(Msg.GetDAT()))
     {
         Alarm alm;
         if (AlarmList.TryGetValue(Msg.GetDAT(), out alm))
         {
             MessageBox.Show(Device_ID + "錯誤發生\n錯誤類型:" + alm.Error_Type + "\n錯誤名稱:" + alm.Error_Name + "\n錯誤描述:" + alm.Error_Cause, "錯誤碼:" + alm.Error_Code);
         }
     }
     else
     {
         MessageBox.Show(Device_ID + "錯誤發生,錯誤碼:" + Msg.GetDAT());
     }
 }
Ejemplo n.º 2
0
        void ICommandReport.On_Command_Finished(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job)
        {
            string[] reply;
            switch (Msg.GetCMD())
            {
            case "PNSTS":
                reply = Msg.GetDAT().Split(',');
                string arm = reply[0];
                string vac = reply[1];
                string pre = reply[2];
                switch (arm)
                {
                case "1":
                    //R

                    status.R_ArmVacuumNo1 = Convert.ToBoolean(Convert.ToInt16(vac[0]));
                    status.R_ArmVacuumNo2 = Convert.ToBoolean(Convert.ToInt16(vac[1]));
                    status.R_ArmVacuumNo3 = Convert.ToBoolean(Convert.ToInt16(vac[2]));
                    status.R_ArmVacuumNo4 = Convert.ToBoolean(Convert.ToInt16(vac[3]));

                    status.R_ArmPresentNo1 = Convert.ToBoolean(Convert.ToInt16(pre[0]));
                    status.R_ArmPresentNo2 = Convert.ToBoolean(Convert.ToInt16(pre[1]));
                    status.R_ArmPresentNo3 = Convert.ToBoolean(Convert.ToInt16(pre[2]));
                    status.R_ArmPresentNo4 = Convert.ToBoolean(Convert.ToInt16(pre[3]));
                    break;

                case "2":
                    //L
                    status.L_ArmVacuumNo1 = Convert.ToBoolean(Convert.ToInt16(vac[0]));
                    status.L_ArmVacuumNo2 = Convert.ToBoolean(Convert.ToInt16(vac[1]));
                    status.L_ArmVacuumNo3 = Convert.ToBoolean(Convert.ToInt16(vac[2]));
                    status.L_ArmVacuumNo4 = Convert.ToBoolean(Convert.ToInt16(vac[3]));

                    status.L_ArmPresentNo1 = Convert.ToBoolean(Convert.ToInt16(pre[0]));
                    status.L_ArmPresentNo2 = Convert.ToBoolean(Convert.ToInt16(pre[1]));
                    status.L_ArmPresentNo3 = Convert.ToBoolean(Convert.ToInt16(pre[2]));
                    status.L_ArmPresentNo4 = Convert.ToBoolean(Convert.ToInt16(pre[3]));
                    break;
                }

                break;

            case "POS__":
                reply = Msg.GetDAT().Split(',');
                status.R_EncoderPosition  = reply[0];
                status.L_EncoderPosition  = reply[1];
                status.S_EncoderPosition  = reply[2];
                status.Z_EncoderPosition  = reply[3];
                status.X_EncoderPosition  = reply[4];
                status.R1_EncoderPosition = reply[5];
                break;
            }



            RunIdx++;
            if (RunIdx < cmdList.Count)
            {
                _Controller.SendCommand(cmdList[RunIdx]);
            }
            else
            {
                RefreshStatus();
                RunIdx = 0;
                _Controller.SendCommand(cmdList[RunIdx]);
            }
        }
Ejemplo n.º 3
0
 void ICommandReport.On_Command_Excuted(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job)
 {
 }
Ejemplo n.º 4
0
        void IConnectionReport.OnSocketMessage(string Msg)
        {
            try
            {
                string[] MsgList = Msg.Split('\n');

                foreach (string each in MsgList)
                {
                    //logger.Debug("OnSocketMessage:" + each);
                    if (each.Trim().Equals(""))
                    {
                        continue;
                    }
                    ReturnMsg eachMsg = new ReturnMsg(each);
                    timeOutTimer.Enabled = false;
                    switch (eachMsg.GetFLG())
                    {
                    case "ACK":

                        if (LastSendCommand.GetFLG().Equals("CMD"))    //如果送出的指令不是CMD,就做下一步,否則必須等待FIN才能繼續
                        {
                            SetStatus(Runing);
                            actionTimeOutTimer.Enabled = true;
                            tObj.On_Command_Excuted(ControllerName, eachMsg, LastSendCommand, LastJob);
                        }
                        else
                        {
                            SetStatus(Idle);
                            tObj.On_Command_Excuted(ControllerName, eachMsg, LastSendCommand, LastJob);
                        }

                        break;

                    case "NAK":
                        SetStatus(Idle);
                        tObj.On_Command_Error(ControllerName, eachMsg, LastSendCommand, LastJob);
                        //錯誤發生
                        logger.Error("Error happen:error code=" + eachMsg.GetDAT());
                        break;

                    case "FIN":
                        actionTimeOutTimer.Enabled = false;
                        SetStatus(Idle);
                        //下一步
                        if (eachMsg.GetDAT().Equals("00000000"))
                        {
                            tObj.On_Command_Finished(ControllerName, eachMsg, LastSendCommand, LastJob);
                        }
                        else
                        {
                            //錯誤發生
                            tObj.On_Command_Error(ControllerName, eachMsg, LastSendCommand, LastJob);
                            logger.Error("Error happen:error code=" + eachMsg.GetDAT());
                        }

                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("OnSocketMessage:" + ex.Message + "\n" + ex.StackTrace);
            }
        }
Ejemplo n.º 5
0
        public void On_Command_Finished(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job)
        {
            if (running)
            {
                RunIdx++;
                if (RunIdx < cmdList.Count)
                {
                    Run(cmdList[RunIdx]);
                    UpdateScriptProgress(RunIdx);
                }
                else
                {
                    RunIdx = 0;
                    Run(cmdList[RunIdx]);
                    UpdateScriptProgress(RunIdx);
                }
            }
            else
            {
                IController robot1;
                if (Device_ID.Equals("Aligner"))
                {
                    foreach (Job eachJob in JobList.Values)
                    {
                        if (eachJob.Position.Equals(Aligner_1))
                        {
                            if (ControllerList.TryGetValue(eachJob.Deliver, out robot1))
                            {
                                robot1.DoWork(RobotCommand.GetAfterWait, eachJob);
                            }
                        }
                    }
                }
                else
                {
                    switch (Msg.GetCMD())
                    {
                    case "MAP__":
                        #region MAP動作完成


                        #endregion
                        break;

                    case "GET__":
                        if (Job.From.Equals(Port_1))
                        {
                            for (int i = 0; i < Port1.Count; i++)
                            {
                                if (Port1[i].JobID.Equals(Job.JobID))
                                {
                                    Port1.Remove(Port1[i]);
                                }
                            }

                            UpdateMapResult(Port1_gv, Port1);
                        }
                        if ((Job.From.Equals(Aligner_1)))
                        {
                            Aligner.Clear();
                            UpdateMapResult(Aligner_gv, Aligner);
                        }
                        if (ControllerList.TryGetValue(Device_ID, out robot1))
                        {
                            if (Job.ToWay.Equals(Port_2))
                            {
                                Job.ToSlot = Port2.Count.ToString("000");
                            }
                            robot1.DoWork(Job.ToWay, Job);
                        }

                        break;

                    case "ALIGN":
                        foreach (Job eachJob in JobList.Values)
                        {
                            if (eachJob.Position.Equals(Aligner_1))
                            {
                                if (ControllerList.TryGetValue(eachJob.Deliver, out robot1))
                                {
                                    robot1.DoWork(eachJob.FromWay, eachJob);
                                }
                            }
                        }
                        break;

                    case "PUT__":
                        Job.Position = Job.To;
                        //Job取得下一站目的地
                        Job.GetNext();
                        if (Job.Position.Equals(Aligner_1))
                        {
                            Slot inPanel = new Slot();
                            inPanel.JobID = Job.JobID;
                            Aligner.Add(inPanel);
                            UpdateMapResult(Aligner_gv, Aligner);

                            if (ControllerList.TryGetValue(Job.Producer, out robot1))
                            {
                                robot1.DoWork(RobotCommand.ALIGN, Job);
                            }

                            break;
                        }
                        if (Job.Position.Equals(Port_2))
                        {
                            Slot inPanel = new Slot();
                            inPanel.JobID  = Job.JobID;
                            inPanel.SlotNo = (Port2.Count + 1).ToString();
                            Port2.Add(inPanel);
                            UpdateMapResult(Port2_gv, Port2);
                        }

                        //該Robot命令完成,尋找需要搬運的Panel
                        foreach (Job eachJob in JobList.Values)
                        {
                            if (eachJob.Deliver.Equals(Device_ID) && eachJob.Position.Equals(eachJob.From))
                            {
                                if (ControllerList.TryGetValue(Device_ID, out robot1))
                                {
                                    robot1.DoWork(eachJob.FromWay, eachJob);
                                }
                            }
                        }

                        break;
                    }
                }
            }
        }
Ejemplo n.º 6
0
        void ICommandReport.On_Command_Excuted(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job)
        {
            if (!running)
            {
                IController robot1;
                if (Cmd.GetFLG().Equals("GET"))
                {
                    switch (Msg.GetCMD())
                    {
                    case "MAP__":

                        #region MAP回傳結果
                        //string[] mapResult = Msg.GetDAT().Split(',');
                        string[] mapResult = "1,1,1,1".Split(',');    //模擬slot 1~4 有片
                        for (int i = 1; i < mapResult.Count(); i++)
                        {
                            string status = mapResult[i];

                            switch (status)
                            {
                            case "0":
                                status = "無";
                                break;

                            case "1":
                                status = "有";
                                break;

                            case "W":
                                status = "厚度異常";
                                break;

                            case "E":
                                status = "傾斜異常";
                                break;
                            }
                            Slot eachSlot = new Slot();
                            eachSlot.JobID  = "";
                            eachSlot.SlotNo = i.ToString();;
                            eachSlot.Status = status;
                            Port1.Add(eachSlot);
                        }
                        UpdateMapResult(Port1_gv, Port1);
                        #endregion
                        break;
                    }
                }
                else if (Cmd.GetFLG().Equals("CMD"))
                {
                    switch (Msg.GetCMD())
                    {
                    case "GET__":    //Panel 在手臂上
                        if (Job.Position.Equals(Aligner))
                        {
                            Aligner.Clear();;
                            UpdateMapResult(Aligner_gv, Aligner);
                        }
                        Job.Position = Device_ID;


                        break;

                    case "PUT__":
                    case "GETW_":

                        break;
                    }
                }
            }
            else
            {
                if (!Cmd.GetFLG().Equals("CMD"))
                {
                    RunIdx++;
                    if (RunIdx < cmdList.Count)
                    {
                        Run(cmdList[RunIdx]);
                        UpdateScriptProgress(RunIdx);
                    }
                    else
                    {
                        RunIdx = 0;
                        Run(cmdList[RunIdx]);
                        UpdateScriptProgress(RunIdx);
                    }
                }
            }
        }