Example #1
0
        /// <summary>
        /// 홈을 수행한다.
        /// </summary>
        /// <returns>수행 성공여부.</returns>
        public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst)
        {
            SetServo(true);

            short nRet;
            bool  bRet;

            nRet = NMC2.nmc_SetSpeed(m_nDevId, (short)Para.iPhysicalNo, 200, _dHomeAccFirst, _dHomeAccFirst, _dHomeVelFirst);
            nRet = NMC2.nmc_SetAccSpeed(m_nDevId, (short)Para.iPhysicalNo, _dHomeAccFirst);
            nRet = NMC2.nmc_SetDecSpeed(m_nDevId, (short)Para.iPhysicalNo, _dHomeAccFirst);
            nRet = NMC2.nmc_SetHomeSpeed(m_nDevId, (short)Para.iPhysicalNo, _dHomeVelFirst, _dHomeVelFirst, _dHomeVelLast);


            // 1. 0번 축의 원점 이동 모드 : +Near
            // 2. 원점 검색후(3차이동 까지 완료) CW회전으로 Z상 검출
            // 3. 지령/엔코더 위치 0으로 초기화
            // 4. Offset 300위치로 이동
            // 5. Offset이동후 지령/엔코더 위치 0으로 초기화
            //nRet = nmc_HomeMove(11, 0, 0x82 | 3, 0xF, 300);


            const short nHomeEndMode = NMC2.NMC_END_CMD_CLEAR_A_OFFSET |
                                       NMC2.NMC_END_ENC_CLEAR_A_OFFSET |
                                       NMC2.NMC_END_CMD_CLEAR_B_OFFSET |
                                       NMC2.NMC_END_ENC_CLEAR_B_OFFSET;

            //메뉴얼과 샘플이 달라서 샘플 방식으로 함...eHomeMethode 여기다 0x80을 덮어 씌워야 된다고
            //메뉴얼에 나와 있었는데 잘 모르겠음...
            nRet = NMC2.nmc_HomeMove(m_nDevId, (short)Para.iPhysicalNo, (short)Para.eHomeMode, nHomeEndMode, Para.dHomeOffset * m_dPulsePerUnit, 0);
            bRet = nRet == 0;


            return(bRet);
        }