예제 #1
0
        public static void UpdateJobMove(string JobId)
        {
            try
            {
                Form     form = Application.OpenForms["FormRunningScreen"];
                CheckBox tb;

                if (form == null)
                {
                    return;
                }

                tb = form.Controls.Find("use_loadport01_ck", true).FirstOrDefault() as CheckBox;

                if (tb == null)
                {
                    return;
                }

                if (tb.InvokeRequired)
                {
                    UpdatePresent ph = new UpdatePresent(UpdateJobMove);
                    tb.BeginInvoke(ph, JobId);
                }
                else
                {
                    Job Job = JobManagement.Get(JobId);
                    if (Job != null)
                    {
                        Node LastNode    = NodeManagement.Get(Job.LastNode);
                        Node CurrentNode = NodeManagement.Get(Job.Position);
                        if (LastNode != null)
                        {
                            Label present = form.Controls.Find(Job.LastNode + "_Slot_" + Job.LastSlot, true).FirstOrDefault() as Label;
                            if (present != null)
                            {
                                present.Text      = "No wafer";
                                present.BackColor = Color.DimGray;
                                present.ForeColor = Color.White;
                            }
                        }
                        if (CurrentNode != null)
                        {
                            Label present = form.Controls.Find(Job.Position + "_Slot_" + Job.Slot, true).FirstOrDefault() as Label;
                            if (present != null)
                            {
                                present.Text = Job.Host_Job_Id;

                                present.BackColor = Color.Green;
                                present.ForeColor = Color.White;
                            }
                        }
                    }
                }
            }
            catch
            {
                logger.Error("UpdateJobMove: Update fail.");
            }
        }
예제 #2
0
        private void FormWafer_Layout(object sender, LayoutEventArgs e)
        {
            WaferList_tv.Nodes.Clear();
            Position_cb.Items.Clear();

            foreach (Node node in NodeManagement.GetList())
            {
                if (!node.Type.Equals("OCR"))
                {
                    TreeNode each = new TreeNode(node.Name);

                    Position_cb.Items.Add(node.Name);
                    List <Job> jobList = node.JobList.Values.ToList();
                    jobList.Sort((x, y) => { return(Convert.ToInt16(x.Slot).CompareTo(Convert.ToInt16(y.Slot))); });
                    foreach (Job j in jobList)
                    {
                        if (JobManagement.Get(j.Job_Id) != null)
                        {
                            each.Nodes.Add(j.Job_Id, j.Job_Id + "(Slot-" + j.Slot + ")");
                        }
                    }
                    WaferList_tv.Nodes.Add(each);
                }
            }
        }
예제 #3
0
        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", ""));
            }
        }
예제 #4
0
        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("成功");
            }
        }
예제 #5
0
        private void WaferList_tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            Job job = JobManagement.Get(e.Node.Name);

            if (job != null)
            {
                WaferID_tb.Text        = job.Job_Id;
                NeedProcess_ck.Checked = job.NeedProcess;
                ProcessFlag_ck.Checked = job.ProcessFlag;
                AlignFlag_ck.Checked   = job.AlignerFlag;
                OCRFlag_ck.Checked     = job.OCRFlag;
                Position_cb.Text       = job.Position.ToUpper();
                Slot_cb.Text           = job.Slot;
                OCRResult_tb.Text      = job.Host_Job_Id;
                List <Job> tmp = new List <Job>();
                tmp.Add(job);
                WaferInfo_gv.DataSource = tmp;
            }
        }
예제 #6
0
        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("成功");
            }
        }
예제 #7
0
        private void Assign_Gv_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu();


                string PortName = (sender as DataGridView).Name.Replace("Assign_Gv", "");
                //if (NodeManagement.Get(PortName).Mode.Equals("LD"))
                // {
                if (!NodeManagement.Get(PortName).IsMapping)
                {
                    return;
                }

                CurrentSelected = sender;
                foreach (Node eachPort in NodeManagement.GetLoadPortList())
                {
                    if (!eachPort.IsMapping)
                    {
                        continue;
                    }
                    List <MenuItem> tmpAry    = new List <MenuItem>();
                    bool            findFirst = false;
                    for (int i = 1; i <= 25; i++)
                    {
                        MenuItem tmp = new MenuItem();
                        if (eachPort.Name.Equals(PortName.ToUpper()))
                        {
                            tmp = new MenuItem(eachPort.Name + "-" + i.ToString(), AssignPort);
                            if (!findFirst)
                            {
                                List <DataGridViewRow> JobList = new List <DataGridViewRow>();
                                foreach (DataGridViewRow each in (CurrentSelected as DataGridView).SelectedRows)
                                {
                                    JobList.Add(each);
                                }
                                JobList.Sort((x, y) => { return(-x.Index.CompareTo(y.Index)); });

                                foreach (DataGridViewRow each in JobList)
                                {
                                    string waferId = each.Cells["Job_Id"].Value.ToString();
                                    Job    wafer   = JobManagement.Get(waferId);
                                    if (wafer == null)
                                    {
                                        MessageBox.Show("請選擇Wafer");
                                        return;
                                    }
                                    if (!eachPort.ReserveList.ContainsKey(i.ToString()))
                                    {
                                        if (wafer.Slot.Equals(i.ToString()))
                                        {
                                            tmp.Enabled = true;
                                            findFirst   = true;
                                            break;
                                        }
                                        else
                                        {
                                            tmp.Enabled = false;
                                        }
                                    }
                                    else
                                    {
                                        tmp.Enabled = false;
                                    }
                                }
                            }
                            else
                            {
                                tmp.Enabled = false;
                            }
                        }
                        else
                        {
                            if (!eachPort.ReserveList.ContainsKey(i.ToString()))
                            {
                                if (eachPort.JobList.ContainsKey(i.ToString()))
                                {
                                    if (eachPort.JobList[i.ToString()].MapFlag)
                                    {
                                        tmp = new MenuItem(eachPort.Name + "-" + i.ToString(), AssignPort);


                                        tmp.Enabled = false;
                                    }
                                    else
                                    {
                                        tmp = new MenuItem(eachPort.Name + "-" + i.ToString(), AssignPort);
                                    }
                                }
                                else
                                {
                                    tmp = new MenuItem(eachPort.Name + "-" + i.ToString(), AssignPort);
                                }
                            }
                            else
                            {
                                tmp         = new MenuItem(eachPort.Name + "-" + i.ToString(), AssignPort);
                                tmp.Enabled = false;
                            }
                        }
                        tmpAry.Add(tmp);
                    }
                    m.MenuItems.Add(eachPort.Name, tmpAry.ToArray());
                }
                m.MenuItems.Add(new MenuItem("取消", UnAssignPort));

                //}

                m.Show((DataGridView)sender, new Point(e.X, e.Y));
            }
        }
예제 #8
0
        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", ""));
            }
        }