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()); } }
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]); } }
void ICommandReport.On_Command_Excuted(string Device_ID, ReturnMsg Msg, Command Cmd, Job Job) { }
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); } }
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; } } } }
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); } } } }