Exemplo n.º 1
1
        /// <summary>
        /// 현재 파라미터들을 아진 함수를 이용하여 세팅함.
        /// </summary>


        public void ApplyPara(double _dPulsePerUnit)
        {
            m_dPulsePerUnit = _dPulsePerUnit;

            const int iStart_Stop_speed = 1;                           //모션프로파일 생성시 처음 치고 나가는 속도. 이보다 느리면 구동이 안됨.
            const int iMax_Speed_Pulse  = 6000000;                     //최대 구동 펄스.

            CAXM.AxmMotSetMinVel(Para.iPhysicalNo, iStart_Stop_speed); //모션프로파일 생성시 처음 치고 나가는 속도. 이보다 느리면 구동이 안됨.
            CAXM.AxmMotSetMaxVel(Para.iPhysicalNo, iMax_Speed_Pulse);  //최대 구동 속도를 설정

            uint iRet2;
            uint iMode;

            if (Para.dSCurveAcPer == 0 && Para.dSCurveDcPer == 0)          //커브 안쓸때.
            {
                iMode = (uint)AXT_MOTION_PROFILE_MODE.SYM_TRAPEZOIDE_MODE; //대칭
            }
            else
            {
                iMode = (uint)AXT_MOTION_PROFILE_MODE.ASYM_TRAPEZOIDE_MODE;//비대칭
            }
            CAXM.AxmMotSetProfileMode(Para.iPhysicalNo, iMode);
            CAXM.AxmMotSetAccelJerk(Para.iPhysicalNo, Para.dSCurveAcPer);
            CAXM.AxmMotSetDecelJerk(Para.iPhysicalNo, Para.dSCurveDcPer);



            iRet2 = CAXM.AxmSignalSetZphaseLevel(Para.iPhysicalNo, (uint)Para.eZphaPhase); //Z상 접점.
            iRet2 = CAXM.AxmHomeSetSignalLevel(Para.iPhysicalNo, (uint)Para.eHomePhase);   //홈센서 접점.
            CAXM.AxmSignalGetServoOnLevel(Para.iPhysicalNo, ref iMode);
            iRet2 = CAXM.AxmSignalSetServoOnLevel(Para.iPhysicalNo, (uint)Para.eServoPhase);
            CAXM.AxmSignalGetServoOnLevel(Para.iPhysicalNo, ref iMode);

            // 지정 축의 end limit sensor의 사용 유무 및 신호의 입력 레벨을 설정한다.
            const uint iStopMode = 0;//EMERGENCY_STOP

            CAXM.AxmSignalSetLimit(Para.iPhysicalNo, iStopMode, (uint)Para.ePLimPhase, (uint)Para.eNLimPhase);

            CAXM.AxmSignalSetServoAlarm(Para.iPhysicalNo, (uint)Para.eAlarmPhase);   //알람시에 비상정지 않씀 직접 세움.

            CAXM.AxmMotSetEncInputMethod(Para.iPhysicalNo, (uint)Para.eEncInput);    //엔코더 입력 방식 설정 엔코더 방향 전환.
            CAXM.AxmMotSetPulseOutMethod(Para.iPhysicalNo, (uint)Para.ePulseOutput); //펄스 출력 방식 설정


            // uLevel : LOW(0), HIGH(1), UNUSED(2), USED(3)
            CAXM.AxmSignalSetInpos(Para.iPhysicalNo, (uint)Para.eInposPhase); //인포지션(Inposition) 신호 액티브레벨 설정

            int iDir = Para.bUseInpos ? 3 : 2;

            // uLevel : LOW(0), HIGH(1), UNUSED(2), USED(3)
            CAXM.AxmSignalSetInpos(Para.iPhysicalNo, (uint)iDir);

            // AccelUnit : UNIT_SEC2   '0' - 가감속 단위를 unit/sec2 사용
            //             SEC         '1' - 가감속 단위를 sec 사용
            CAXM.AxmMotSetAccelUnit(Para.iPhysicalNo, 0);


            SetGantryEnable();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 현재 파라미터들을 아진 함수를 이용하여 세팅함.
        /// </summary>


        public void ApplyPara(double _dPulsePerUnit)
        {
            m_dPulsePerUnit = _dPulsePerUnit;

            const int iStart_Stop_speed = 1;                           //모션프로파일 생성시 처음 치고 나가는 속도. 이보다 느리면 구동이 안됨.
            const int iMax_Speed_Pulse  = 6000000;                     //최대 구동 펄스.

            CAXM.AxmMotSetMinVel(Para.iPhysicalNo, iStart_Stop_speed); //모션프로파일 생성시 처음 치고 나가는 속도. 이보다 느리면 구동이 안됨.
            CAXM.AxmMotSetMaxVel(Para.iPhysicalNo, iMax_Speed_Pulse);  //최대 구동 속도를 설정

            uint iRet2;
            uint iMode;

            if (Para.dSCurveAcPer == 0 && Para.dSCurveDcPer == 0)          //커브 안쓸때.
            {
                iMode = (uint)AXT_MOTION_PROFILE_MODE.SYM_TRAPEZOIDE_MODE; //대칭
            }
            else
            {
                iMode = (uint)AXT_MOTION_PROFILE_MODE.ASYM_TRAPEZOIDE_MODE;//비대칭
            }
            CAXM.AxmMotSetProfileMode(Para.iPhysicalNo, iMode);
            CAXM.AxmMotSetAccelJerk(Para.iPhysicalNo, Para.dSCurveAcPer);
            CAXM.AxmMotSetDecelJerk(Para.iPhysicalNo, Para.dSCurveDcPer);



            iRet2 = CAXM.AxmSignalSetZphaseLevel(Para.iPhysicalNo, (uint)Para.eZphaPhase); //Z상 접점.
            iRet2 = CAXM.AxmHomeSetSignalLevel(Para.iPhysicalNo, (uint)Para.eHomePhase);   //홈센서 접점.
            CAXM.AxmSignalGetServoOnLevel(Para.iPhysicalNo, ref iMode);
            iRet2 = CAXM.AxmSignalSetServoOnLevel(Para.iPhysicalNo, (uint)Para.eServoPhase);
            CAXM.AxmSignalGetServoOnLevel(Para.iPhysicalNo, ref iMode);

            // 지정 축의 end limit sensor의 사용 유무 및 신호의 입력 레벨을 설정한다.
            const uint iStopMode = 0;//EMERGENCY_STOP

            CAXM.AxmSignalSetLimit(Para.iPhysicalNo, iStopMode, (uint)Para.ePLimPhase, (uint)Para.eNLimPhase);

            CAXM.AxmSignalSetServoAlarm(Para.iPhysicalNo, (uint)Para.eAlarmPhase);   //알람시에 비상정지 않씀 직접 세움.

            CAXM.AxmMotSetEncInputMethod(Para.iPhysicalNo, (uint)Para.eEncInput);    //엔코더 입력 방식 설정 엔코더 방향 전환.
            CAXM.AxmMotSetPulseOutMethod(Para.iPhysicalNo, (uint)Para.ePulseOutput); //펄스 출력 방식 설정


            // uLevel : LOW(0), HIGH(1), UNUSED(2), USED(3)
            CAXM.AxmSignalSetInpos(Para.iPhysicalNo, (uint)Para.eInposPhase); //인포지션(Inposition) 신호 액티브레벨 설정

            int iDir = Para.bUseInpos ? 3 : 2;

            // uLevel : LOW(0), HIGH(1), UNUSED(2), USED(3)
            CAXM.AxmSignalSetInpos(Para.iPhysicalNo, (uint)iDir);

            // AccelUnit : UNIT_SEC2   '0' - 가감속 단위를 unit/sec2 사용
            //             SEC         '1' - 가감속 단위를 sec 사용
            CAXM.AxmMotSetAccelUnit(Para.iPhysicalNo, 0);

            //링 카운터 설정.
            //360도로 쓸때 UI에 360을 입력 하면 360이 되야 되는 순간에 0으로 클리어 됌.
            //홈 서치 시에는 해당 기능을 Disable 하고 홈서치 완료 후 Enable 해야 정상적으로 사용이 가능합니다 . <==메뉴얼에 나와있는건데 일단 안해본다.
            uint uiRet;

            if (Para.dSetMaxPos != 0)
            {
                uiRet = CAXM.AxmStatusSetPosType(Para.iPhysicalNo, 1, (Para.dSetMaxPos * _dPulsePerUnit) - 1, 0);
            }
            else
            {
                uiRet = CAXM.AxmStatusSetPosType(Para.iPhysicalNo, 0, (Para.dSetMaxPos * _dPulsePerUnit) - 1, 0);
            }

            if (Para.bGantryEnable)
            {
                SetLinkEnable(Para.iGantrySubAdd);
            }
            else
            {
                SetLinkDisable(Para.iGantrySubAdd);
            }
        }