private void UpdateCheckBox(object input) { FormMain.HostControl.Events.Load(); MonitoringUpdate.EventUpdate("MAPDT", FormMain.HostControl.Events.MAPDT); MonitoringUpdate.EventUpdate("PORT", FormMain.HostControl.Events.PORT); MonitoringUpdate.EventUpdate("PRS", FormMain.HostControl.Events.PRS); MonitoringUpdate.EventUpdate("SYSTEM", FormMain.HostControl.Events.SYSTEM); MonitoringUpdate.EventUpdate("TRANSREQ", FormMain.HostControl.Events.TRANSREQ); MonitoringUpdate.EventUpdate("FFU", FormMain.HostControl.Events.FFU); MonitoringUpdate.EventUpdate("BF1_BYPASS", FormMain.HostControl.Events.BF1_BYPASS); NodeManagement.Get("BF1").ByPassCheck = FormMain.HostControl.Events.BF1_BYPASS; MonitoringUpdate.EventUpdate("BF2_BYPASS", FormMain.HostControl.Events.BF2_BYPASS); NodeManagement.Get("BF2").ByPassCheck = FormMain.HostControl.Events.BF2_BYPASS; DIOUpdate.UpdateDIOStatus("RED", "False"); DIOUpdate.UpdateDIOStatus("ORANGE", "False"); DIOUpdate.UpdateDIOStatus("GREEN", "False"); DIOUpdate.UpdateDIOStatus("BLUE", "False"); DIOUpdate.UpdateDIOStatus("BUZZER1", "False"); DIOUpdate.UpdateDIOStatus("BUZZER2", "False"); foreach (Node node in NodeManagement.GetList()) { MonitoringUpdate.EventUpdate(node.Name + "_Enable", node.Enable); } }
private void UnAssignPort(object sender, EventArgs e) { if ((CurrentSelected as DataGridView).SelectedRows.Count == 0) { MessageBox.Show("請選擇來源Slot"); } else if ((CurrentSelected as DataGridView).SelectedRows.Count == 1) { string waferId = (CurrentSelected as DataGridView).SelectedRows[0].Cells["Job_Id"].Value.ToString(); string OrgDest = (CurrentSelected as DataGridView).SelectedRows[0].Cells["Destination"].Value.ToString(); string OrgDestSlot = (CurrentSelected as DataGridView).SelectedRows[0].Cells["DestinationSlot"].Value.ToString(); Job wafer = JobManagement.Get(waferId); if (wafer != null) { wafer.UnAssignPort(); wafer.NeedProcess = false; //wafer.Position = PortName; if (!OrgDest.Equals("")) { NodeManagement.Get(OrgDest).RemoveReserve(OrgDestSlot); } (CurrentSelected as DataGridView).Refresh(); } else { MessageBox.Show("找不到此Wafer資料:" + wafer.Job_Id); } } else if ((CurrentSelected as DataGridView).SelectedRows.Count > 1) { foreach (DataGridViewRow each in (CurrentSelected as DataGridView).SelectedRows) { string waferId = each.Cells["Job_Id"].Value.ToString(); string OrgDest = each.Cells["Destination"].Value.ToString(); string OrgDestSlot = each.Cells["DestinationSlot"].Value.ToString(); Job wafer = JobManagement.Get(waferId); if (wafer != null) { wafer.UnAssignPort(); wafer.NeedProcess = false; if (!OrgDest.Equals("")) { NodeManagement.Get(OrgDest).RemoveReserve(OrgDestSlot); } } } (CurrentSelected as DataGridView).Refresh(); MonitoringUpdate.UpdateNodesJob((CurrentSelected as DataGridView).Name.Replace("Assign_Gv", "")); } }
public void On_Mode_Changed(string Mode) { logger.Debug("On_Mode_Changed"); ConnectionStatusUpdate.UpdateModeStatus(Mode); RunningUpdate.UpdateModeStatus(Mode); MonitoringUpdate.UpdateStatus(Mode); foreach (Node port in NodeManagement.GetLoadPortList()) { WaferAssignUpdate.RefreshMapping(port.Name); if (Mode.Equals("Stop")) { WaferAssignUpdate.ResetAssignCM(port.Name, true); } } }
private void btnSave_Click(object sender, EventArgs e) { Job job = JobManagement.Get(WaferID_tb.Text); if (job != null) { //job.Job_Id = WaferID_tb.Text; job.NeedProcess = NeedProcess_ck.Checked; job.ProcessFlag = ProcessFlag_ck.Checked; job.AlignerFlag = AlignFlag_ck.Checked; job.OCRFlag = OCRFlag_ck.Checked; Node NewPosition = NodeManagement.Get(Position_cb.Text); if (NewPosition != null) { Job tmp; if (!job.Position.ToUpper().Equals(Position_cb.Text) || !job.Slot.Equals(Slot_cb.Text)) { if (NewPosition.JobList.TryAdd(Slot_cb.Text, job)) { Node OrgPosition = NodeManagement.Get(job.Position); if (OrgPosition != null) { OrgPosition.JobList.TryRemove(job.Slot, out tmp); job.LastNode = job.Position; job.LastSlot = job.Slot; job.Position = Position_cb.Text; job.Slot = Slot_cb.Text; MonitoringUpdate.UpdateJobMove(job.Job_Id); } } else { MessageBox.Show("Wafer is Exist in new Position"); Position_cb.Text = job.Position; Slot_cb.Text = job.Slot; } } } job.Host_Job_Id = OCRResult_tb.Text; MessageBox.Show("成功"); } }
private void btnDelete_Click(object sender, EventArgs e) { Job job = JobManagement.Get(WaferID_tb.Text); if (job != null) { Node OrgPosition = NodeManagement.Get(job.Position); Job tmp; OrgPosition.JobList.TryRemove(job.Slot, out tmp); job.LastNode = job.Position; job.LastSlot = job.Slot; job.Position = ""; job.Slot = ""; MonitoringUpdate.UpdateJobMove(job.Job_Id); JobManagement.Remove(tmp.Job_Id); ClearForm(); MessageBox.Show("成功"); } }
private void AssignPort(object sender, EventArgs e) { string PortName = (sender as MenuItem).Text.Split('-')[0]; string LDPort = (CurrentSelected as DataGridView).Name.Replace("Assign_Gv", ""); Node UD = NodeManagement.Get(PortName); Node LD = NodeManagement.Get(LDPort); UD.Mode = "UD"; LD.Mode = "LD"; LD.DestPort = UD.Name; WaferAssignUpdate.UpdateLoadPortMode(UD.Name, UD.Mode); WaferAssignUpdate.UpdateLoadPortMode(LD.Name, LD.Mode); string Slot = (sender as MenuItem).Text.Split('-')[1]; if ((CurrentSelected as DataGridView).SelectedRows.Count == 0) { MessageBox.Show("請選擇來源Slot"); } else if ((CurrentSelected as DataGridView).SelectedRows.Count == 1) { string waferId = (CurrentSelected as DataGridView).SelectedRows[0].Cells["Job_Id"].Value.ToString(); string OrgDest = (CurrentSelected as DataGridView).SelectedRows[0].Cells["Destination"].Value.ToString(); string OrgDestSlot = (CurrentSelected as DataGridView).SelectedRows[0].Cells["DestinationSlot"].Value.ToString(); Job UDSlot = UD.GetJob(Slot); if (UDSlot == null) { MessageBox.Show(PortName + "沒有FOUP或是尚未進行Mapping"); return; } if (UDSlot.MapFlag == false || LD.Name.Equals(UD.Name)) { Job wafer = JobManagement.Get(waferId); if (wafer != null) { wafer.AssignPort(PortName, Slot); wafer.NeedProcess = true; wafer.ProcessFlag = false; //wafer.Position = PortName; if (!OrgDest.Equals("")) { NodeManagement.Get(OrgDest).RemoveReserve(OrgDestSlot); } NodeManagement.Get(PortName).AddReserve(Slot, wafer); (CurrentSelected as DataGridView).Refresh(); MonitoringUpdate.UpdateNodesJob((CurrentSelected as DataGridView).Name.Replace("Assign_Gv", "")); } else { MessageBox.Show("找不到此Wafer資料"); } } } else if ((CurrentSelected as DataGridView).SelectedRows.Count > 1) { int StartSlot = Convert.ToInt32(Slot); List <DataGridViewRow> tmp = new List <DataGridViewRow>(); foreach (DataGridViewRow each in (CurrentSelected as DataGridView).SelectedRows) { tmp.Add(each); } tmp.Sort((x, y) => { return(-x.Index.CompareTo(y.Index)); }); foreach (DataGridViewRow each in tmp) { string waferId = each.Cells["Job_Id"].Value.ToString(); string OrgDest = each.Cells["Destination"].Value.ToString(); string OrgDestSlot = each.Cells["DestinationSlot"].Value.ToString(); Job wafer = JobManagement.Get(waferId); if (wafer != null) { while (true) { if (NodeManagement.Get(PortName).GetJob(StartSlot.ToString()).MapFlag == false || LD.Name.Equals(UD.Name)) { wafer.AssignPort(PortName, StartSlot.ToString()); //wafer.Position = PortName; wafer.NeedProcess = true; wafer.ProcessFlag = false; if (!OrgDest.Equals("")) { NodeManagement.Get(OrgDest).RemoveReserve(OrgDestSlot); } NodeManagement.Get(PortName).AddReserve(StartSlot.ToString(), wafer); break; } else { StartSlot++; if (StartSlot > 25) { break; } } } StartSlot++; if (StartSlot > 25) { break; } } } (CurrentSelected as DataGridView).Refresh(); MonitoringUpdate.UpdateNodesJob((CurrentSelected as DataGridView).Name.Replace("Assign_Gv", "")); } }
public void On_Job_Location_Changed(Job Job) { logger.Debug("On_Job_Location_Changed"); MonitoringUpdate.UpdateJobMove(Job.Job_Id); RunningUpdate.UpdateJobMove(Job.Job_Id); }
public void On_Command_Excuted(Node Node, Transaction Txn, CommandReturnMessage Msg) { logger.Debug("On_Command_Excuted"); string Message = ""; Transaction SendTxn = new Transaction(); if (Txn.Method == Transaction.Command.LoadPortType.Reset) { AlarmUpdate.UpdateAlarmList(AlarmManagement.GetAll()); } switch (Node.Type) { case "LOADPORT": switch (Txn.Method) { case Transaction.Command.LoadPortType.GetMapping: case Transaction.Command.LoadPortType.Unload: case Transaction.Command.LoadPortType.MappingUnload: case Transaction.Command.LoadPortType.DoorUp: case Transaction.Command.LoadPortType.InitialPos: case Transaction.Command.LoadPortType.ForceInitialPos: WaferAssignUpdate.RefreshMapping(Node.Name); MonitoringUpdate.UpdateNodesJob(Node.Name); RunningUpdate.UpdateNodesJob(Node.Name); break; case Transaction.Command.LoadPortType.GetCassetteSize: ManualPortStatusUpdate.UpdateParameter("CASSETTE_SIZE_tb", Msg.Value); break; case Transaction.Command.LoadPortType.GetSlotOffset: ManualPortStatusUpdate.UpdateParameter("SLOT_OFFSET_tb", Msg.Value); break; case Transaction.Command.LoadPortType.GetWaferOffset: ManualPortStatusUpdate.UpdateParameter("WAFER_OFFSET_tb", Msg.Value); break; case Transaction.Command.LoadPortType.GetTweekDistance: ManualPortStatusUpdate.UpdateParameter("TWEEK_tb", Msg.Value); break; case Transaction.Command.LoadPortType.GetSlotPitch: ManualPortStatusUpdate.UpdateParameter("SLOT_PITCH_tb", Msg.Value); break; } break; case "ROBOT": switch (Txn.Method) { case Transaction.Command.RobotType.GetMapping: WaferAssignUpdate.RefreshMapping(Node.CurrentPosition); MonitoringUpdate.UpdateNodesJob(Node.CurrentPosition); RunningUpdate.UpdateNodesJob(Node.CurrentPosition); break; } break; } switch (Txn.FormName) { case "FormStatus": Util.StateUtil.UpdateSTS(Node.Name, Msg.Value); break; case "PauseProcedure": break; case "FormManual": switch (Node.Type) { case "SMARTTAG": if (!Txn.Method.Equals(Transaction.Command.SmartTagType.GetLCDData)) { //ManualPortStatusUpdate.LockUI(false); } break; case "LOADPORT": if (!Txn.CommandType.Equals("MOV") && !Txn.CommandType.Equals("HCS")) { //ManualPortStatusUpdate.LockUI(false); } else { if (Txn.Method.Equals(Transaction.Command.LoadPortType.Reset)) { // ManualPortStatusUpdate.LockUI(false); } } ManualPortStatusUpdate.UpdateLog(Node.Name, Msg.Command + " Excuted"); switch (Txn.Method) { case Transaction.Command.LoadPortType.ReadVersion: ManualPortStatusUpdate.UpdateVersion(Node.Name, Msg.Value); break; case Transaction.Command.LoadPortType.GetLED: ManualPortStatusUpdate.UpdateLED(Node.Name, Msg.Value); break; case Transaction.Command.LoadPortType.ReadStatus: ManualPortStatusUpdate.UpdateSmifStatus(Node.Name, Msg.Value); break; case Transaction.Command.LoadPortType.GetCount: break; case Transaction.Command.LoadPortType.GetMapping: ManualPortStatusUpdate.UpdateMapping(Node.Name, Msg.Value); break; } break; case "OCR": switch (Txn.Method) { case Transaction.Command.OCRType.GetOnline: //OCRUpdate.UpdateOCRStatus(Node.Name, Msg.Value); break; } break; case "ROBOT": switch (Txn.Method) { case Transaction.Command.RobotType.Speed: case Transaction.Command.RobotType.Mode: case Transaction.Command.RobotType.Reset: case Transaction.Command.RobotType.Servo: ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value); //update 手動功能畫面 break; case Transaction.Command.RobotType.GetSpeed: case Transaction.Command.RobotType.GetRIO: case Transaction.Command.RobotType.GetError: case Transaction.Command.RobotType.GetMode: case Transaction.Command.RobotType.GetStatus: case Transaction.Command.RobotType.GetSV: ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value); //update 手動功能畫面 break; case Transaction.Command.RobotType.GetCombineStatus: ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Command); //update 手動功能畫面 break; } break; case "ALIGNER": switch (Txn.Method) { case Transaction.Command.AlignerType.Speed: case Transaction.Command.AlignerType.Mode: case Transaction.Command.AlignerType.Reset: case Transaction.Command.AlignerType.Servo: //Thread.Sleep(500); ////向Aligner 詢問狀態 //Node aligner = NodeManagement.Get(Node.Name); //String script_name = aligner.Brand.ToUpper().Equals("SANWA") ? "AlignerStateGet" : "AlignerStateGet(Kawasaki)"; ////aligner.ExcuteScript(script_name, "FormManual", out Message); //ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);//update //break; case Transaction.Command.AlignerType.GetMode: case Transaction.Command.AlignerType.GetSV: case Transaction.Command.AlignerType.GetStatus: case Transaction.Command.AlignerType.GetSpeed: case Transaction.Command.AlignerType.GetRIO: case Transaction.Command.AlignerType.GetError: ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value); //update 手動功能畫面 break; case Transaction.Command.RobotType.GetCombineStatus: ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Command); //update 手動功能畫面 break; } break; } break; default: break; } }
public void On_Message_Log(string Type, string Message) { MonitoringUpdate.LogUpdate(Message); }
private void FoupID_Read_Confirm_btn_Click(object sender, EventArgs e) { if (!FoupID_Read_tb.Text.Equals("")) { if (!ManualInput_ck.Checked) { //open & mapping foup string end = ""; switch (LoadportName_lb.Text) { case "LOADPORT01": end = "!"; break; case "LOADPORT02": end = "\""; break; case "LOADPORT03": end = "#"; break; case "LOADPORT04": end = "$"; break; } if (!end.Equals(endCode)) { MessageBox.Show("請使用正確的條碼槍"); return; } } else { foupID = FoupID_Read_tb.Text; } TaskJobManagment.CurrentProceedTask Task; Node port = NodeManagement.Get(LoadportName_lb.Text); if (port != null) { port.FoupID = foupID; MonitoringUpdate.UpdateFoupID(port.Name.ToUpper(), foupID); WaferAssignUpdate.UpdateFoupID(port.Name.ToUpper(), foupID); port.OPACCESS = false; string TaskName = "LOADPORT_OPEN"; string Message = ""; Dictionary <string, string> param = new Dictionary <string, string>(); param.Add("@Target", port.Name); RouteControl.Instance.TaskJob.Excute(Guid.NewGuid().ToString(), out Message, out Task, TaskName, param); this.Hide(); } else { MessageBox.Show("找不到該Laodport資料"); } } else { MessageBox.Show("請輸入Foup ID"); } }
public static void UpdateLoadPortMapping(string PortName, string Mapping) { try { Form form = Application.OpenForms["FormWaferMapping"]; DataGridView Port_gv; if (form == null) { return; } Port_gv = form.Controls.Find(PortName + "Assign_Gv", true).FirstOrDefault() as DataGridView; if (Port_gv == null) { return; } if (Port_gv.InvokeRequired) { UpdatePort ph = new UpdatePort(UpdateLoadPortMapping); Port_gv.BeginInvoke(ph, PortName, Mapping); } else { Node port = NodeManagement.Get(PortName); //List<Job> MappingData = new List<Job>(); //port.IsMapping = true; if (Mapping.Equals("")) { foreach (Job eachJob in port.JobList.Values) { JobManagement.Remove(eachJob.Job_Id); } port.JobList.Clear(); port.ReserveList.Clear(); JobManagement.ClearAssignJobByPort(port.Name); } else { int currentIdx = 1; for (int i = 0; i < Mapping.Length; i++) { Job wafer = RouteControl.CreateJob(); wafer.Slot = (i + 1).ToString(); wafer.FromPort = PortName; wafer.FromPortSlot = wafer.Slot; wafer.Position = PortName; wafer.AlignerFlag = false; wafer.RecipeID = "300MM"; string Slot = (i + 1).ToString("00"); switch (Mapping[i]) { case '0': wafer.Job_Id = "No wafer"; wafer.Host_Job_Id = wafer.Job_Id; //MappingData.Add(wafer); break; case '1': while (true) { wafer.Job_Id = "Wafer" + currentIdx.ToString("00"); wafer.Host_Job_Id = wafer.Job_Id; wafer.MapFlag = true; if (JobManagement.Add(wafer.Job_Id, wafer)) { //MappingData.Add(wafer); break; } currentIdx++; } break; case '2': wafer.Job_Id = "Crossed"; wafer.Host_Job_Id = wafer.Job_Id; wafer.MapFlag = true; //MappingData.Add(wafer); break; case '?': wafer.Job_Id = "Undefined"; wafer.Host_Job_Id = wafer.Job_Id; wafer.MapFlag = true; //MappingData.Add(wafer); break; case 'W': wafer.Job_Id = "Double"; wafer.Host_Job_Id = wafer.Job_Id; wafer.MapFlag = true; //MappingData.Add(wafer); break; } if (!port.AddJob(wafer.Slot, wafer)) { Job org = port.GetJob(wafer.Slot); JobManagement.Remove(org.Job_Id); port.RemoveJob(wafer.Slot); port.AddJob(wafer.Slot, wafer); } } } List <Job> tmp = port.JobList.Values.ToList(); tmp.Sort((x, y) => { return(-Convert.ToInt16(x.Slot).CompareTo(Convert.ToInt16(y.Slot))); }); Port_gv.DataSource = tmp; Port_gv.Columns["Slot"].Width = 25; Port_gv.Columns["Slot"].HeaderText = "S"; Port_gv.Columns["Host_Job_Id"].Width = 75; Port_gv.Columns["DisplayDestination"].Width = 55; Port_gv.Columns["DestinationSlot"].Width = 30; Port_gv.Columns["Offset"].Visible = false; Port_gv.Columns["Angle"].Visible = false; Port_gv.Columns["Job_Id"].Visible = false; Port_gv.Columns["Destination"].Visible = false; Port_gv.Columns["ProcessFlag"].Visible = false; // Port_gv.Columns["Piority"].Visible = false; Port_gv.Columns["AlignerFlag"].Visible = false; Port_gv.Columns["OCRFlag"].Visible = false; Port_gv.Columns["AlignerFinished"].Visible = false; Port_gv.Columns["OCRFinished"].Visible = false; Port_gv.Columns["Position"].Visible = false; Port_gv.Columns["FromPort"].Visible = false; Port_gv.Columns["LastNode"].Visible = false; Port_gv.Columns["CurrentState"].Visible = false; Port_gv.Columns["WaitToDo"].Visible = false; //Port_gv.Columns["FetchRobot"].Visible = false; Port_gv.Columns["ProcessNode"].Visible = false; Port_gv.Columns["MapFlag"].Visible = false; Port_gv.Columns["DisplayDestination"].HeaderText = "Dest"; Port_gv.Columns["DestinationSlot"].HeaderText = "DS"; Port_gv.Columns["Host_Job_Id"].HeaderText = "ID"; Port_gv.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 10); Port_gv.Columns["NeedProcess"].Visible = false; Port_gv.Columns["OCRImgPath"].Visible = false; Port_gv.Columns["OCRScore"].Visible = false; Port_gv.Columns["LastSlot"].Visible = false; Port_gv.Columns["FromPortSlot"].Visible = false; Port_gv.Columns["AssignTime"].Visible = false; Port_gv.Columns["DefaultOCR"].Visible = false; Port_gv.Columns["RecipeID"].Visible = false; Port_gv.Columns["ErrPosition"].Visible = false; Port_gv.Columns["InProcess"].Visible = false; Port_gv.Columns["Host_Lot_Id"].Visible = false; MonitoringUpdate.UpdateNodesJob(PortName); port.IsMapping = true; } } catch (Exception e) { logger.Error("UpdateLoadPortMapping: Update fail:" + e.StackTrace); } }