private void PortModeChange(object sender, EventArgs e) { string Name = (CurrentSelected as Label).Name.Replace("State_lb", ""); switch (((MenuItem)sender).Text) { //case "Change to LD": // NodeManagement.Get(Name).Mode = "LD"; // WaferAssignUpdate.UpdateLoadPortMode(Name, "LD"); // break; //case "Change to UD": // NodeManagement.Get(Name).Mode = "UD"; // WaferAssignUpdate.UpdateLoadPortMode(Name, "UD"); // break; //case "Change to LU": // NodeManagement.Get(Name).Mode = "LU"; // WaferAssignUpdate.UpdateLoadPortMode(Name, "LU"); // break; case "Fake Data(Full)": //WaferAssignUpdate.UpdateLoadPortMapping(Name, "1111111111111111111111111"); WaferAssignUpdate.UpdateLoadPortMapping(Name, "1111111111111111111111111"); break; case "Fake Data(Empty)": WaferAssignUpdate.UpdateLoadPortMapping(Name, "0000000000000000000000000"); break; } }
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 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 static void ReverseRunning(string FinishPort) { Form form = Application.OpenForms["FormRunningScreen"]; if (form == null) { return; } TextBox tb = form.Controls.Find("TransCount_tb", true).FirstOrDefault() as TextBox; if (tb == null) { return; } if (tb.InvokeRequired) { UpdatePresent ph = new UpdatePresent(ReverseRunning); tb.BeginInvoke(ph, FinishPort); } else { Node FinPort = NodeManagement.Get(FinishPort); if (FinPort != null) { Node DestPort = NodeManagement.Get(FinPort.DestPort); if (DestPort != null) { int StartSlot = 1; List <Job> DestPortJobs = DestPort.JobList.Values.ToList(); DestPortJobs.Sort((x, y) => { return(Convert.ToInt16(x.Slot).CompareTo(Convert.ToInt16(y.Slot))); }); foreach (Job job in DestPortJobs) { if (job.MapFlag) { while (StartSlot <= 25) { if (FinPort.GetJob(StartSlot.ToString()).MapFlag == false) { job.NeedProcess = true; job.ProcessFlag = false; job.AlignerFlag = true; job.OCRFlag = true; job.AssignPort(FinPort.Name, StartSlot.ToString()); FinPort.ReserveList.TryAdd(job.Slot, job); StartSlot++; break; } StartSlot++; } } if (StartSlot > 25) { break; } } //FinPort.DestPort = "Assign"; if (FinPort.Name.Equals(DestPort.Name)) { DestPort.Mode = "LU"; } else { FinPort.Mode = "UD"; DestPort.Mode = "LD"; WaferAssignUpdate.UpdateLoadPortMode(FinPort.Name, FinPort.Mode); WaferAssignUpdate.UpdateLoadPortMode(DestPort.Name, DestPort.Mode); } FinPort.DestPort = ""; DestPort.DestPort = FinPort.Name; DestPort.ReserveList.Clear(); tb = form.Controls.Find("TransCount_tb", true).FirstOrDefault() as TextBox; if (Convert.ToInt32(tb.Text) <= 1)//次數歸零 停止DEMO { DestPort.Available = false; //FormMain.RouteCtrl.Stop(); } else { ProcessRecord.CreatePr(DestPort); WaferAssignUpdate.UpdateAssignCM(DestPort.Name, FinPort.Name, false); DestPort.Available = true; if (DestPort.ByPass) { DestPort.PortUnloadAndLoadFinished = true; } } FinPort.Used = false; } else { return; } } else { return; } } }
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; } }
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"); } }