Beispiel #1
0
        public bool Cmd_SendHome_Z()
        {
            _WorkStatus = WORK_STATUS.MOVING;
            string strCmd = "HOME Z\r";

            return(SendData(strCmd));
        }
Beispiel #2
0
 public void ResetSeq()
 {
     Flush();
     m_nSeqNo     = 0;
     m_RetryCount = 0;
     _WorkStatus  = WORK_STATUS.IDLE;
 }
Beispiel #3
0
        public bool Cmd_SendPlace(int nStage, int nSlot, ARM _Arm)
        {
            _WorkStatus = WORK_STATUS.MOVING;
            string strCmd = string.Format("PLACE {0} SLOT {1} ARM {2}\r"
                                          , nStage
                                          , nSlot
                                          , _Arm == ARM.LOWER ? "A" : "B");

            return(SendData(strCmd));
        }
Beispiel #4
0
        public bool Cmd_Retract(int nStage, int nSlot, ARM _Arm, UPDOWN_POS _UpDnPos)
        {
            _WorkStatus = WORK_STATUS.MOVING;
            string strCmd = string.Format("RETRACT {0} {1} {2} {3}\r"
                                          , nStage
                                          , _UpDnPos == UPDOWN_POS.UP ? "UP" : "DN"
                                          , nSlot
                                          , _Arm == ARM.LOWER ? "A" : "B");

            return(SendData(strCmd));
        }
Beispiel #5
0
        public bool Cmd_SendZAxis(int nStage, int nSlot, ARM _Arm, UPDOWN_POS _UpDnPos)
        {
            _WorkStatus = WORK_STATUS.MOVING;
            string strCmd = string.Format("ZAXIS {0} SLOT {1} {2} ARM {3}\r"
                                          , nStage
                                          , nSlot
                                          , _UpDnPos == UPDOWN_POS.UP ? "UP" : "DN"
                                          , _Arm == ARM.LOWER ? "A" : "B");

            return(SendData(strCmd));
        }
Beispiel #6
0
        public bool Cmd_SendGoTo(int nStage, int nSlot, ARM _Arm, RADIAL_POS _RadialPos, UPDOWN_POS _UpDnPos)
        {
            _WorkStatus = WORK_STATUS.MOVING;
            string strCmd = string.Format("GOTO N {0} R {1} Z {2} SLOT {3} ARM {4}\r"
                                          , nStage
                                          , _RadialPos == RADIAL_POS.EXTENDED ? "EX" : "RE"
                                          , _UpDnPos == UPDOWN_POS.UP ? "UP" : "DN"
                                          , nSlot
                                          , _Arm == ARM.LOWER ? "A" : "B");

            return(SendData(strCmd));
        }
Beispiel #7
0
        public bool Cmd_SendHomeAll()
        {
            _WorkStatus = WORK_STATUS.MOVING;

            char[] CH = new char[3];
            CH[0] = (char)0x0d;
            CH[1] = (char)0x00;
            CH[1] = (char)0x00;
            StringBuilder st = new StringBuilder("HOME ALL");

            st.Append(CH[0].ToString());
            //string strCmd = st.ToString();//"HOME ALL\r";
            //strCmd = strCmd + CH[0].ToString() + CH[1].ToString() + CH[2].ToString();
            string strCmd = "HOME ALL\r";

            return(SendData(strCmd));
        }
Beispiel #8
0
        public int Seq_Wait_Command_Test(string strCmd, ACK_MODE _CheckMode)
        {
            int nSeqNo = m_nSeqNo;
            int nRet   = 0;

            switch (nSeqNo)
            {
            case 0:     //상태 체크
            {
                nSeqNo       = 100;
                _WorkStatus  = WORK_STATUS.ACK_CHECK;
                m_RetryCount = 0;
            }
            break;

            case 100:     //명령 전송
            {
                if (SendData(strCmd + "\n") == true)
                {
                    nSeqNo    = 200;
                    m_TimeOut = DateTime.Now;
                }
                else
                {
                    //알람
                    Flush();
                    nSeqNo      = 0;
                    nRet        = -1;
                    _ErrMsg     = "Send Fail.";
                    _WorkStatus = WORK_STATUS.ERROR;
                }
            }
            break;

            case 200:     //ACK Check.
            {
                string   strRcv   = "";
                ACK_MODE _AckMode = RcvCheck(ref strRcv);
                if ((int)_AckMode > 0)
                {
                    if (_AckMode == _CheckMode)
                    {
                        //원하는 데이터 받을때 까지..돈다..
                        m_TimeOut = DateTime.Now;
                        nSeqNo    = 1000;
                    }
                    else
                    {
                        m_TimeOut = DateTime.Now;
                    }
                }
                else if ((int)_AckMode < 0)
                {
                    if (_AckMode == ACK_MODE.BEFORE_CMD_PROC)
                    {        //이미 명령 나가있는놈이 있어서, 방금보낸 명령이 안먹음...리트라이 해야한다.
                        if (m_RetryCount < MaxRetryCount)
                        {
                            m_RetryCount += 1;
                            nSeqNo        = 100;
                            m_TimeOut     = DateTime.Now;
                            LogTextOut(string.Format("{0}/Retry Count:{1})", strCmd, m_RetryCount));
                        }
                        else
                        {
                            nRet   = nSeqNo * -1;
                            nSeqNo = 0;
                            LogTextOut(string.Format("{0}/RetryCount Over.", strCmd));
                        }
                    }
                    else
                    {
                        _WorkStatus = WORK_STATUS.ERROR;
                        nRet        = nSeqNo * -1;
                        nSeqNo      = 0;
                    }
                }
                else
                {
                    if (strCmd == "OPEN" || strCmd == "CLOSE")
                    {
                        if (GetElapseTime(m_TimeOut) > READ_END_DELAY * 20)
                        {
                            _ErrMsg     = "Receive Time Out.";
                            _WorkStatus = WORK_STATUS.ERROR;
                            nRet        = nSeqNo * -1;
                            nSeqNo      = 0;
                            Flush();
                        }
                    }
                    else
                    {
                        if (GetElapseTime(m_TimeOut) > READ_END_DELAY)
                        {
                            _ErrMsg     = "Receive Time Out.";
                            _WorkStatus = WORK_STATUS.ERROR;
                            nRet        = nSeqNo * -1;
                            nSeqNo      = 0;
                            Flush();
                        }
                    }
                }
            }
            break;

            case 1000:
            {
                nRet        = 1;
                nSeqNo      = 0;
                _WorkStatus = WORK_STATUS.IDLE;
            }
            break;

            default:
            {
                _ErrMsg     = "Seq No Error.";
                _WorkStatus = WORK_STATUS.ERROR;
                nSeqNo      = 0;
                nRet        = -1;
                Flush();
            }
            break;
            }
            m_nSeqNo = nSeqNo;
            return(nRet);
        }
Beispiel #9
0
        public int Seq_ReadCommand_Test(string strCmd, ref string sRcvData)
        {
            int  nSeqNo = m_nSeqNo;
            int  nRet   = 0;
            char STX    = '#';

            switch (nSeqNo)
            {
            case 0:     //상태 체크
            {
                nSeqNo      = 100;
                _WorkStatus = WORK_STATUS.READING;
            }
            break;

            case 100:     //명령 전송
            {
                if (SendData(STX + strCmd + "\r") == true)
                {
                    nSeqNo    = 200;
                    m_TimeOut = DateTime.Now;
                }
                else
                {
                    //알람
                    Flush();
                    nSeqNo = 0;
                    nRet   = -1;
                }
            }
            break;

            case 200:     //ACK Check.
            {
                ACK_MODE _AckMode = RcvCheck(ref sRcvData);
                if ((int)_AckMode > 0)
                {
                    if (_AckMode == ACK_MODE.DATA)
                    {
                        m_strBeforeRcvData = sRcvData;
                        _WorkStatus        = WORK_STATUS.IDLE;
                        nRet   = 1;
                        nSeqNo = 0;
                    }
                }
                else if ((int)_AckMode < 0)
                {
                    nRet   = nSeqNo * -1;
                    nSeqNo = 0;
                }
                else
                {
                    if (GetElapseTime(m_TimeOut) > READ_END_DELAY)
                    {
                        nRet   = nSeqNo * -1;
                        nSeqNo = 0;
                        Flush();
                    }
                }
            }
            break;

            default:
            {
                nSeqNo = 0;
                nRet   = -1;
                Flush();
            }
            break;
            }
            m_nSeqNo = nSeqNo;
            return(nRet);
        }
Beispiel #10
0
        private int Seq_SendCommand_WaitComplete(string strCmd)
        {
            int  nSeqNo = m_nSeqNo;
            int  nRet   = 0;
            char STX    = '#';

            switch (nSeqNo)
            {
            case 0:                     //상태 체크
            {
                nSeqNo      = 100;
                _WorkStatus = WORK_STATUS.MOVING;
            } break;

            case 100:                     //명령 전송
            {
                if (SendData(STX + strCmd + "\r") == true)
                {
                    nSeqNo    = 200;
                    m_TimeOut = DateTime.Now;
                }
                else
                {
                    //알람
                    Flush();
                    nSeqNo = 0;
                    nRet   = -1;
                }
            } break;

            case 200:                     //ACK Check.
            {
                string   strRcvData = "";
                ACK_MODE _AckMode   = RcvCheck(ref strRcvData);
                if ((int)_AckMode > 0)
                {
                    m_TimeOut = DateTime.Now;
                    if (_AckMode == ACK_MODE.COMPLETE)
                    {
                        _WorkStatus = WORK_STATUS.IDLE;
                        nRet        = 1;
                        nSeqNo      = 0;
                    }
                }
                else if ((int)_AckMode < 0)
                {
                    nRet   = nSeqNo * -1;
                    nSeqNo = 0;
                }
                else
                {
                    //if (GetElapseTime(m_TimeOut) > MOVING_COMPLETE_DELAY)
                    //{
                    //    nRet = nSeqNo * -1;
                    //    nSeqNo = 0;
                    //    Flush();
                    //}
                }
            } break;

            default:
            {
                nSeqNo = 0;
                nRet   = -1;
                Flush();
            } break;
            }
            m_nSeqNo = nSeqNo;
            return(nRet);
        }
Beispiel #11
0
        private int Seq_ReadCommand(string strCmd, ref string sRcvData)
        {
            int nSeqNo = m_nReadSeqNo;
            int nRet   = 0;

            switch (nSeqNo)
            {
            case 0:         //상태 체크
            {
                nSeqNo      = 100;
                _WorkStatus = WORK_STATUS.READING;

                //Console.WriteLine("Send 1->" + strCmd);
            } break;

            case 100:         //명령 전송
            {
                if (SendData(strCmd + "\r\n") == true)
                {
                    //Console.WriteLine("Send 2->" + strCmd);
                    nSeqNo    = 200;
                    m_TimeOut = DateTime.Now;
                }
                else
                {
                    //알람
                    Flush();
                    nSeqNo = 0;
                    nRet   = -1;
                }
            } break;

            case 200:         //ACK Check.
            {
                ACK_MODE _AckMode = RcvCheck(ref sRcvData);
                if ((int)_AckMode > 0)
                {
                    switch (_AckMode)
                    {
                    case ACK_MODE.ACK:
                    {                    //Ack 받고.
                        m_TimeOut = DateTime.Now;
                        //Console.WriteLine("Ack->" + sRcvData);
                    } break;

                    case ACK_MODE.DATA:
                    {                    //데이터 받고..
                        m_TimeOut          = DateTime.Now;
                        sRcvData           = sRcvData.Replace("\r\n", "");
                        sRcvData           = sRcvData.Replace("*", "");
                        sRcvData           = sRcvData.Replace(" ", "");
                        m_strBeforeRcvData = sRcvData;

                        //Console.WriteLine("Data->" + sRcvData);
                    } break;

                    case ACK_MODE.COMPLETE:
                    {                    //데이터 받는거 완료 되었다..진짜끝임.
                        m_TimeOut = DateTime.Now;
                        sRcvData  = m_strBeforeRcvData;

                        nRet   = 1;
                        nSeqNo = 0;

                        //Console.WriteLine("Rcv Compl->" + strCmd);
                    } break;
                    }
                }
                else if ((int)_AckMode < 0)
                {
                    nRet   = nSeqNo * -1;
                    nSeqNo = 0;
                }
                else
                {
                    if (GetElapseTime(m_TimeOut) > READ_END_DELAY)
                    {
                        nRet   = nSeqNo * -1;
                        nSeqNo = 0;
                        Flush();
                        //Console.WriteLine("Time Out");
                    }
                }
            } break;

            default:
            {
                Console.WriteLine("Error");
                nSeqNo = 0;
                nRet   = -1;
                Flush();
            } break;
            }

            m_nReadSeqNo = nSeqNo;
            return(nRet);
        }
Beispiel #12
0
        private int Seq_SendCommand(string strCmd)
        {
            int nSeqNo = m_nSeqNo;
            int nRet   = 0;

            switch (nSeqNo)
            {
            case 0:                     //상태 체크
            {
                nSeqNo      = 100;
                _WorkStatus = WORK_STATUS.MOVING;
            } break;

            case 100:                     //명령 전송
            {
                if (SendData(strCmd + "\r\n") == true)
                {
                    nSeqNo    = 200;
                    m_TimeOut = DateTime.Now;
                }
                else
                {
                    //알람
                    Flush();
                    nSeqNo = 0;
                    nRet   = -1;
                }
            } break;

            case 200:                     //ACK Check.
            {
                string   strRcvData = "";
                ACK_MODE _AckMode   = RcvCheck(ref strRcvData);
                if ((int)_AckMode > 0)
                {
                    nRet   = 1;
                    nSeqNo = 0;
                }
                else if ((int)_AckMode < 0)
                {
                    nRet   = nSeqNo * -1;
                    nSeqNo = 0;
                }
                else
                {
                    if (GetElapseTime(m_TimeOut) > READ_END_DELAY)
                    {
                        nRet   = nSeqNo * -1;
                        nSeqNo = 0;
                        Flush();
                    }
                }
            } break;

            default:
            {
                nSeqNo = 0;
                nRet   = -1;
                Flush();
            } break;
            }
            m_nSeqNo = nSeqNo;

            return(nRet);
        }