Example #1
0
        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;
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
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", ""));
            }
        }
Example #4
0
        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;
                }
            }
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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");
            }
        }