Пример #1
0
        //Home씨퀜스.

        /// <summary>
        /// 홈을 수행한다.
        /// </summary>
        /// <returns>수행 성공여부.</returns>
        public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst)
        {
            //원점복귀 작업을 수행합니다. cmmHomeMove() 함수는 모션이 완료되기 전까지 반환되지 않으며,
            //cmmHomeMoveStart() 함수는 모션을 시작시킨 후에 바로 반환됩니다.
            SetServo(true);

            //Home Mode
            //0 : ORG > Stop
            //1 : ORG > Stop > Back (Vr) > ORG-OFF > Foward(Vr) > ORG > Stop
            //2 : ORG > Slow down (Vini) > Stop on EZ Count
            //3 : ORG > Stop on EZ Count
            //4 : ORG > Stop > Back (Vr) > Stop on EZ Count
            //5 : ORG > Stop > Back (Vwork) > Stop on EZ
            //6 : EL > Stop > Back (Vr) > EL 0 > Stop
            //7 : EL > Stop > Back (Vr) > Stop on EZ count
            //8 : EL > Stop > Back (Vwork) > Stop on EZ count
            //9 : MODE0 > Operate till dev. counter 0
            //10 : MODE3 > Operate till dev. counter 0
            //11 : MODE5 > Operate till dev. counter 0
            //12 : MODE8 > Operate till dev. counter 0
            int iHomeMode = 0;

            if (Para.eHomeZMethod == Z_METHOD.HomeDirection)
            {
                if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor)
                {
                    iHomeMode = 3;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor)
                {
                    iHomeMode = 7;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor)
                {
                    iHomeMode = 7;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.ZPhase)
                {
                    iHomeMode = 3;                                               //이거는 없네;;;
                }
            }
            else if (Para.eHomeZMethod == Z_METHOD.NotHomeDirection)
            {
                if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor)
                {
                    iHomeMode = 4;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor)
                {
                    iHomeMode = 7;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor)
                {
                    iHomeMode = 7;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.ZPhase)
                {
                    iHomeMode = 3;                                               //이거는 없네;;;
                }
            }
            else
            {
                if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor)
                {
                    iHomeMode = 1;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor)
                {
                    iHomeMode = 6;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor)
                {
                    iHomeMode = 6;
                }
                if (Para.eHomeSignal == HOME_SIGNAL.ZPhase)
                {
                    iHomeMode = 1;
                }
            }

            //Manual
            //long nHomeMode = 0; // 원점 복귀 모드 설정. 0 ~ 12 번 모드가 있습니다.
            //long nHomeDir = cmDIR_N; // 원점 복귀 방향. cmDIR_N: (-) 방향, cmDIR_P: (+) 방향
            //long nEzCount = 0; // Encoder Z 상 카운트. ‘0’ 은 EZ 상 1 회 카운트를 의미합니다.
            //double fEscDist = 10.0f; // 원점 탈출 거리. 자동 원점 검색 기능에 사용되며,
            //// 최소 ‘1’ 이상의 값이어야 합니다.
            //double fOffset = 0.0f; // 원점 복귀 완료 후 Offset 값 (상대 거리)
            int iHomeDir = Para.bHomeNegDir ? 0 : 1; // 0 - N , 1 - P

            Cmmsdk.cmmHomeSetConfig(Para.iPhysicalNo, iHomeMode, iHomeDir, 1, Para.dHomeOffset * m_dPulsePerUnit);

            //iHomeClearMode
            //0 : Clears both position(C&F) at the moment ORG(/EL/EZ) signal works.
            //1 : Clears both position(C&F) after home completes.
            //2 : Set command smae as feedback after home completes.
            //-1 : Disable HomePosClearMode.
            int iHomeClearMode = 1;

            Cmmsdk.cmmHomeSetPosClrMode(Para.iPhysicalNo, iHomeClearMode);

            //Vr(Reverse Speed)
            //▶ Revel : cmmHomeSetSpeedPattern 함수의 인자이며, Reverse Speed 를 설정합니다. 복귀모드에 따라 Reverse Speed 를
            //필요로 하는 모드가 있습니다. 앞의 복귀 모드 설명에서 Reverse Speed 는 Vr 로 표기되었습니다.
            //SpeedMode
            //0 또는 cmSMODE_C CONSTANT 속도모드 => 가감속을 수행하지 않습니다.
            //1 또는 cmSMODE_T TRAPEZOIDAL 속도모드 => 사다리꼴 가감속을 수행합니다.
            //2 또는 cmSMODE_S S-CURVE 속도모드 => S-CURVE 가감속을 수행합니다.
            Cmmsdk.cmmHomeSetSpeedPattern(Para.iPhysicalNo, (int)MotnDefines._TCmSpeedMode.cmSMODE_T, _dHomeVelFirst, _dHomeAccFirst, _dHomeAccFirst, _dHomeVelLast);
            //0 또는 cmDIR_N (-) 방향
            //1 또는 cmDIR_P (+) 방향
            int iFuncRet = Cmmsdk.cmmHomeMoveStart(Para.iPhysicalNo, iHomeDir);

            return(iFuncRet == MotnDefines.cmERR_NONE);
        }