Ejemplo 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();
        }
Ejemplo n.º 2
0
        public void AxtMotorInit(int ServoXDir, int ServoYDir, int ServoZDir)
        {
#if PROGRAM_RUNNING
            //각 축에 대한 리미트 센서의 Low/High Active 값을 설정한다.

            Axt_ServoOnOff(mStatus.X_SELECT, true);
            Axt_ServoOnOff(mStatus.Y_SELECT, true);
            Axt_ServoOnOff(mStatus.Z_SELECT, true);

            AlarmOperating(mStatus.X_SELECT, true);
            AlarmOperating(mStatus.Y_SELECT, true);

            delay(500);
            AlarmOperating(mStatus.X_SELECT, false);
            AlarmOperating(mStatus.Y_SELECT, false);
            AlarmOperating(mStatus.Z_SELECT, false);

            Axt_CWCCW_LimitSet(mStatus.X_SELECT, false, false);
            Axt_CWCCW_LimitSet(mStatus.Y_SELECT, false, false);
            Axt_CWCCW_LimitSet(mStatus.Z_SELECT, false, false);


            CAXM.AxmSignalSetServoAlarm(mStatus.X_SELECT, LOW_ACTIVE);
            CAXM.AxmSignalSetServoAlarm(mStatus.Y_SELECT, LOW_ACTIVE);
            CAXM.AxmSignalSetServoAlarm(mStatus.Z_SELECT, LOW_ACTIVE);

            //e stop 신호 입력시 처리
            uint uStopMode = 0; // 0 - emergency stop , 1 - Slow down stop
            CAXM.AxmSignalSetStop(mStatus.X_SELECT, uStopMode, LOW_ACTIVE);
            CAXM.AxmSignalSetStop(mStatus.Y_SELECT, uStopMode, LOW_ACTIVE);
            CAXM.AxmSignalSetStop(mStatus.Z_SELECT, uStopMode, LOW_ACTIVE);

            uint UnitMode = 0; // 0 - unit/sec1 , 1 - sec
            CAXM.AxmMotSetAccelUnit(mStatus.X_SELECT, UnitMode);
            CAXM.AxmMotSetAccelUnit(mStatus.Y_SELECT, UnitMode);
            CAXM.AxmMotSetAccelUnit(mStatus.Z_SELECT, UnitMode);

            SetAbsMode(mStatus.X_SELECT);
            SetAbsMode(mStatus.Y_SELECT);
            SetAbsMode(mStatus.Z_SELECT);

            AxtPulseMethodeSet(mStatus.X_SELECT, (byte)ServoXDir);
            AxtPulseMethodeSet(mStatus.Y_SELECT, (byte)ServoYDir);
            AxtPulseMethodeSet(mStatus.Z_SELECT, (byte)ServoZDir);

            UnitPulse_StartStopSpeed(mStatus.X_SELECT, 0);
            UnitPulse_StartStopSpeed(mStatus.Y_SELECT, 0);
            UnitPulse_StartStopSpeed(mStatus.Z_SELECT, 0);


            AxtEncoderMethod(mStatus.X_SELECT, 3); //4채배
            AxtEncoderMethod(mStatus.Y_SELECT, 3); //4채배
            AxtEncoderMethod(mStatus.Z_SELECT, 3); //4채배

            AxtOriginSpeedSet(mStatus.X_SELECT, 20);
            AxtOriginSpeedSet(mStatus.Y_SELECT, 20);
            AxtOriginSpeedSet(mStatus.Z_SELECT, 20);
#endif
            return;
        }
Ejemplo n.º 3
0
        public void AlarmOperating(short m_nAxis, bool Flag)
        {
#if PROGRAM_RUNNING
            if (GetRunAxis(m_nAxis) == false)
            {
                return;
            }

            if (Flag == true)
            {
                if (CAXM.AxmSignalServoAlarmReset(m_nAxis, 0x01) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                {
                    MessageBox.Show("No1 Error - 알람 리셋중 에러가 발생하였습니다.");
                }
                ;
            }
            else
            {
                if (CAXM.AxmSignalServoAlarmReset(m_nAxis, 0x0) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                {
                    MessageBox.Show("No2 Error - 알람 리셋중 에러가 발생하였습니다.");
                }
                ;
            }
#endif
            return;
        }
Ejemplo n.º 4
0
        public bool AxtReadAlarm(short m_nAxis)
        {
#if PROGRAM_RUNNING
            /*
             * if (CAxtCAMCFS20.CFS20get_alarm_switch(m_nAxis) != 0)
             *      return true;
             * else    return false;
             */
            if (GetRunAxis(m_nAxis) == false)
            {
                return(true);
            }

            uint mStatus = 0;
            if (CAXM.AxmSignalReadServoAlarm(m_nAxis, ref mStatus) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
            {
                return(false);
            }

            if ((mStatus & 0x01) == 0)
            {
                return(false);
            }
            else
            {
                return(true);
            }
#else
            return(false);
#endif
        }
Ejemplo n.º 5
0
        public bool AxtMovingEndCheck(short m_nAxis)
        {
#if PROGRAM_RUNNING
            //return CAxtCAMCFS20.CFS20in_motion(m_nAxis);
            if (GetRunAxis(m_nAxis) == false)
            {
                return(true);
            }

            uint Result = 0;
            if (CAXM.AxmStatusReadInMotion(m_nAxis, ref Result) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
            {
                return(false);
            }

            if (Result == 0)
            {
                return(true); //이동 완료면 설정된다.
            }
            else
            {
                return(false);
            }
#else
            return(true);
#endif
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 펄스 엔코더 리턴.
        /// </summary>
        /// <returns>펄스 리턴</returns>
        public double GetEncPos()
        {
            double dPos = 0.0;

            CAXM.AxmStatusGetActPos(Para.iPhysicalNo, ref dPos);
            return(dPos);
        }
Ejemplo n.º 7
0
        public void Move(double pos, bool isRelative)
        {
            try
            {
                if (m_bIsUseAxis)
                {
                    uint duRetCode = 0;

                    duRetCode = CAXM.AxmMotSetAbsRelMode(m_nAxisNumber, Convert.ToUInt32(isRelative));
                    if (duRetCode != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                    {
                        MessageBox.Show(String.Format("AxmMotSetAbsRelMode return error[Code:{0:d}]", duRetCode));
                        return;
                    }

                    //++ 지정한 축을 지정한 거리(또는 위치)/속도/가속도/감속도로 모션구동하고 모션 종료여부와 상관없이 함수를 빠져나옵니다.
                    duRetCode = CAXM.AxmMoveStartPos(m_nAxisNumber, pos * UnitPerMM, Velocity * UnitPerMM, Acceleration * UnitPerMM, Deceleration * UnitPerMM);
                    m_fPosDst = pos;
                    m_eStat   = eAxis.eMove;
                    if (duRetCode != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                    {
                        MessageBox.Show(String.Format("AxmMoveStartPos return error[Code:{0:d}]", duRetCode));
                    }
                }
            }
            catch (Exception E)
            {
                LogFile.LogExceptionErr(E.ToString());
                throw E;
            }
        }
Ejemplo n.º 8
0
 public bool IsBusy()
 {
     try
     {
         if (m_bIsUseAxis)
         {
             uint duRetCode = 0;
             CAXM.AxmStatusReadInMotion(m_nAxisNumber, ref duRetCode);
             if (duRetCode == 0)
             {
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
         else
         {
             return(false);
         }
     }
     catch (Exception E)
     {
         LogFile.LogExceptionErr(E.ToString());
         throw E;
     }
 }
Ejemplo n.º 9
0
 // 지정거리이동 - AxmMoveStartPos
 // distance - 이동 거리
 public void MoveTo(double distance)
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveStartPos(Index, distance, HiVelocity, HiAcceleration, HiDeceleration));
     }
 }
Ejemplo n.º 10
0
 // 구동 급정지 - AxmMoveEStop
 public void MoveEStop()
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveEStop(Index));
     }
 }
Ejemplo n.º 11
0
 // 구동 감속 정지 - AxmMoveStop
 // deceleration - 감속 속도
 public void MoveStop(double deceleration)
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveStop(Index, deceleration));
     }
 }
Ejemplo n.º 12
0
 // 구동 감속 정지 - AxmMoveStop
 public void MoveStop()
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveStop(Index, HiDeceleration));
     }
 }
Ejemplo n.º 13
0
 // 구동 시작 - AxmMoveVel
 // velocity     - 구동 속도
 // acceleration - 가속 속도
 // deceleration - 감속 속도
 public void MoveStart(double velocity, double acceleration, double deceleration)
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveVel(Index, velocity, acceleration, deceleration));
     }
 }
Ejemplo n.º 14
0
 // 구동 시작 - AxmMoveVel
 public void MoveStart()
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveVel(Index, HiVelocity, HiAcceleration, HiDeceleration));
     }
 }
Ejemplo n.º 15
0
 // 원점 검출 구동 - AxmHomeSetStart
 public void HomeSeek()
 {
     lock (execLock)
     {
         Validate(CAXM.AxmHomeSetStart(Index));
     }
 }
Ejemplo n.º 16
0
        // Home Search

        public bool OriginMoveEnd(short m_nAxis)
        {
#if PROGRAM_RUNNING
            uint Result = 0;

            if (GetRunAxis(m_nAxis) == false)
            {
                return(true);
            }
            if (CAXM.AxmHomeGetResult(m_nAxis, ref Result) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
            {
                return(false);
            }
            if (Result == 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
#else
            return(true);
#endif
        }
Ejemplo n.º 17
0
 // 지정거리이동 - AxmMoveStartPos
 // distance     - 이동 거리
 // velocity     - 이동 속도
 // acceleration - 가속 속도
 // deceleration - 감속 속도
 public void MoveTo(double distance, double velocity, double acceleration, double deceleration)
 {
     lock (execLock)
     {
         Validate(CAXM.AxmMoveStartPos(Index, distance, velocity, acceleration, deceleration));
     }
 }
Ejemplo n.º 18
0
        public bool GantrySetEnable()
        {
            try
            {
                if (GantryMasterAxis == -1 || GantrySlaveAxis == -1 || GantryMasterAxis == GantrySlaveAxis)
                {
                    return(false);
                }

                uint res = CAXM.AxmGantrySetEnable(GantryMasterAxis, GantrySlaveAxis, GantrySlaveHomeUse,
                                                   GantrySlaveOffset * m_listAxis[GantrySlaveAxis].UnitPerMM,
                                                   GantrySlaveOffsetRange * m_listAxis[GantrySlaveAxis].UnitPerMM);
                if (res == (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS ||
                    res == (uint)AXT_FUNC_RESULT.AXT_RT_MOTION_ERROR_GANTRY_ENABLE)
                {
                    m_listAxis[GantrySlaveAxis].IsUseAxis = false;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception E)
            {
                LogFile.LogExceptionErr(E.ToString());
                throw E;
            }
        }
Ejemplo n.º 19
0
        public bool GantrySetDisable()
        {
            try
            {
                if (GantryMasterAxis == -1 || GantrySlaveAxis == -1 || GantryMasterAxis == GantrySlaveAxis)
                {
                    return(false);
                }

                uint res = CAXM.AxmGantrySetDisable(GantryMasterAxis, GantrySlaveAxis);
                if (res == (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception E)
            {
                LogFile.LogExceptionErr(E.ToString());
                throw E;
            }
        }
Ejemplo n.º 20
0
        /// <summary>
        /// 서보 온오프
        /// </summary>
        /// <param name="_bOn">온오프</param>
        public void SetServo(bool _bOn)
        {
            //const int iServoOnBit = 0 ;
            uint uiOn = _bOn ? (uint)1 : (uint)0;

            //Stop the Motor.
            Stop();

            //Servo On/Off.
            CAXM.AxmSignalServoOn(Para.iPhysicalNo, uiOn);
            //CAXM.AbUseBreak    xmSignalWriteOutputBit(Para.iPhysicalNo, iServoOnBit, uiOn);
            if (Para.bUseBreak)
            {
                SetY(Para.iBreakOffAdd, _bOn);
            }


            if (!_bOn)
            {
                SetHomeDone(false);
            }
            else
            {
                //가끔 장비껐다가 켜서 홈잡을때 겐트리가 안엮여서 병신짓 할때 있어서
                //서보 온에서 한번씩 해본다.
                //밖에 사이클홈에서 홈시작전에 확인 하여 알람 띄워보자.
                SetGantryEnable();
            }
        }
Ejemplo n.º 21
0
        // unit/pulse, Startstop speed setting
        private void UnitPulse_StartStopSpeed(short m_nAxis, short Speed)
        {
            //
#if PROGRAM_RUNNING
            if (GetRunAxis(m_nAxis) == false)
            {
                return;
            }
            if (m_nAxis == mStatus.X_SELECT)
            {
                //CAxtCAMCFS20.AxmMotSetMoveUnitPerPulse(m_nAxis, 5.0 , (XOneCycleToPulse * 1.0)); //볼 스크류 리드(1회전 이동거리) , (모터 1회전 펄스수 * 감속비)
                CAXM.AxmMotSetMoveUnitPerPulse(m_nAxis, YOneCycleToStroke, (int)(YOneCycleToPulse * 1.0)); //볼 스크류 리드(1회전 이동거리) , (모터 1회전 펄스수 * 감속비)
            }
            else if (m_nAxis == mStatus.Y_SELECT)
            {
                CAXM.AxmMotSetMoveUnitPerPulse(m_nAxis, ZOneCycleToStroke, (int)(ZOneCycleToPulse * 1.0)); //볼 스크류 리드(1회전 이동거리) , (모터 1회전 펄스수 * 감속비)
            }
            else if (m_nAxis == mStatus.Z_SELECT)
            {
                CAXM.AxmMotSetMoveUnitPerPulse(m_nAxis, XOneCycleToStroke, (int)(XOneCycleToPulse * 1.0)); //볼 스크류 리드(1회전 이동거리) , (모터 1회전 펄스수 * 감속비)
            }
            //0 축에 초기 속도를 1로 설정한다 설정한다 . Default : 1
            //모션이 시작될 때의 초기 속도를 지정, 초기 속도는 모션 구도의 기준점이 되므로 반드시 설정해야 한다.
            //int lAxisNo = 0;
            //double dMinVelocity = 1;

            if (CAXM.AxmMotSetMinVel(m_nAxis, Speed) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
            {
                MessageBox.Show("초기 속도 설정 오류 입니다.");
            }
#endif
            return;
        }
Ejemplo n.º 22
0
        //동기구동, 버그 있는듯. 갠트리로 대신 쓴다.
        //현재 동기구동 상태인지 확인하기 위해 uint로 리턴한다.
        //AXT_RT_SUCCESS 반환하면 동기구동상태
        public bool SetLinkEnable(int _iSlvMotrNo)
        {
            //GantryEnable 실행하고 확인하면 가끔 확인 안될때가 있어서 먼저 확인하고 실행하는 것으로 바꾼다.
            uint   uiHomeMathod = 0;
            double dOffset      = .0;
            double dOfsRange    = .0;
            uint   uiGantryOn   = 0;

            CAXM.AxmGantryGetEnable(Para.iPhysicalNo, ref uiHomeMathod, ref dOffset, ref dOfsRange, ref uiGantryOn);
            if (uiGantryOn != 0)
            {
                return(true);
            }

            uint uiRet = CAXM.AxmGantrySetEnable(Para.iPhysicalNo, _iSlvMotrNo, 0, 0, 999999);

            //System.Threading.Thread.Sleep(100);
            //uint    uiHomeMathod =  0;
            //double  dOffset      = .0;
            //double  dOfsRange    = .0;
            //uint    uiGantryOn   =  0;
            //CAXM.AxmGantryGetEnable(Para.iPhysicalNo, ref uiHomeMathod ,ref dOffset, ref dOfsRange ,ref uiGantryOn);
            //if (uiGantryOn != 0)
            //{
            //    return true;
            //}
            return(false);
        }
Ejemplo n.º 23
0
 // 원점 검출 방법 설정 - AxmHomeSetMethod
 // dir(원점검색 진행방향) : DIR_CCW(0)-반시계방향, DIR_CW(1)-시계방향
 // detect(검출Signal)    : PosEndLimit(0)-(+)Limit신호, NegEndLimit(1)-(-)Limit신호, HomeSensor(4)-Home신호
 // zPhase(Z상검출)       : DISABLE(0)-사용안함, (1)-(+)방향검출 , (2)-(-)방향검출
 // clearTime             : 원점 검색 Encoder 값 Set하기 위한 대기시간
 // offset                : 원점검출후 이동거리.
 public void SetHomeSeekType(
     AXT_MOTION_MOVE_DIR dir,
     AXT_MOTION_HOME_DETECT detect,
     UInt32 zPhase, double clearTime, double offset)
 {
     Validate(CAXM.AxmHomeSetMethod(Index, (int)dir, (UInt32)detect, zPhase, clearTime, offset));
 }
Ejemplo n.º 24
0
        public int GetContCrntIdx(int _iCoord)
        {
            int iIdx = 0;

            CAXM.AxmContiGetNodeNum(_iCoord, ref iIdx);
            return(iIdx);
        }
Ejemplo n.º 25
0
        //2축 제어 겐트리.
        public void SetGantryEnable()
        {
            uint   uiHomeMathod = 0;
            double dOffset      = .0;
            double dOfsRange    = .0;
            uint   uiGantryOn   = 0;

            CAXM.AxmGantryGetEnable(Para.iPhysicalNo, ref uiHomeMathod, ref dOffset, ref dOfsRange, ref uiGantryOn);

            if (uiGantryOn != 0)
            {
                SetGantryDisable();
            }

            if (Para.bGantryEnable)
            {
                uint uiRet = CAXM.AxmGantrySetEnable(Para.iPhysicalNo,
                                                     Para.iGantrySubAdd,
                                                     (uint)Para.eGantryMathod,
                                                     Para.dGantryOffset * m_dPulsePerUnit,
                                                     Para.dGantryOfsRange * m_dPulsePerUnit);
            }
            //프로그램 켜고 가끔 개별 홈 잡으면 서브축이 서보온이 안된상태일 경우가 있어서 야매로 이렇게 한다.
            //const int iServoOnBit = 0 ;
            //Servo On/Off.
            //iRet = AxmSignalWriteOutputBit(_iSlaveAxis, iServoOnBit, true);
        }
Ejemplo n.º 26
0
        //특수기능
        /// <summary>
        /// 하드웨어 트리거를 발생시킨다.
        /// </summary>
        /// <param name="_dPos">발생시킬 트리거 위치들</param>
        /// <param name="_dTrgTime">트리거 시그널의 시간us</param>
        /// <param name="_bActual">엔코더기준인지 커멘드 기준인지</param>
        /// <param name="_bOnLevel">트리거 레벨</param>
        public void SetTrgPos(double[] _dPos, double _dTrgTime, bool _bActual, bool _bOnLevel)
        {
            //====================트리거 함수 ===================================================================================
            // 주의사항: 트리거 위치를 설정할경우 반드시 UNIT/PULSE의 맞추어서 설정한다.
            //           위치를 UNIT/PULSE 보다 작게할 경우 최소단위가 UNIT/PULSE로 맞추어지기때문에 그위치에 출력할수없다.

            // 지정 축에 트리거 기능의 사용 여부, 출력 레벨, 위치 비교기, 트리거 신호 지속 시간 및 트리거 출력 모드를 설정한다.
            // 트리거 기능 사용을 위해서는 먼저  AxmTriggerSetTimeLevel 를 사용하여 관련 기능 설정을 먼저 하여야 한다.
            // dTrigTime : 트리거 출력 시간, 1usec - 최대 50msec ( 1 - 50000 까지 설정)
            // upTriggerLevel  : 트리거 출력 레벨 유무 => LOW(0), HIGH(1)
            // uSelect         : 사용할 기준 위치      => COMMAND(0), ACTUAL(1)
            // uInterrupt      : 인터럽트 설정         => DISABLE(0), ENABLE(1)

            // 지정 축에 트리거 신호 지속 시간 및 트리거 출력 레벨, 트리거 출력방법을 설정한다.
            // public static extern uint AxmTriggerSetTimeLevel(int lAxisNo, double dTrigTime, uint uTriggerLevel, uint uSelect, uint uInterrupt);
            // 0축에 트리거 신호의 레벨과 지속시간을 설정한다.
            double dTrigTime     = _dTrgTime;                    //1~50000(50ms)
            uint   uTriggerLevel = _bOnLevel ? (uint)1 : (uint)0;
            uint   uSelect       = _bActual ? (uint)1 : (uint)0; // Encorder or Command Position 을 기준으로 트리거 발생
            uint   uInterrupt    = 0;
            uint   dwRet         = CAXM.AxmTriggerSetTimeLevel(Para.iPhysicalNo, dTrigTime, uTriggerLevel, uSelect, uInterrupt);

            //int nAxisNo, int nTrigNum, ref double dTrigPos);
            //배열 인자에 관해서 모르겠다. ;;
            //나중에 찾아보자.
            CAXM.AxmTriggerOnlyAbs(Para.iPhysicalNo, _dPos.Length, _dPos);
            //CAXM.AxmTriggerOnlyAbs(mPara.iPhysicalNo,_dPos.Length, _dPos);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// 서보 온오프
        /// </summary>
        /// <param name="_bOn">온오프</param>
        public void SetServo(bool _bOn)
        {
            //const int iServoOnBit = 0 ;
            uint uiOn = _bOn ? (uint)1 : (uint)0;

            //Stop the Motor.
            Stop();

            //다이렉트케이블이 같이 엮겨 있을때 Machine에서 그냥 MT_SetY로 쓰기때문에 사용한하게 됨.
            if (Para.bUseBreak)
            {
                SetY(Para.iBreakOffAdd, _bOn);
            }

            //Servo On/Off.
            CAXM.AxmSignalServoOn(Para.iPhysicalNo, uiOn);
            //CAXM.AbUseBreak    xmSignalWriteOutputBit(Para.iPhysicalNo, iServoOnBit, uiOn);

            if (!_bOn)
            {
                SetHomeDone(false);
            }
            else
            {
                //가끔 장비껐다가 켜서 홈잡을때 겐트리가 안엮여서 병신짓 할때 있어서
                //서보 온에서 한번씩 해본다.
                //밖에 사이클홈에서 홈시작전에 확인 하여 알람 띄워보자.
                //동기구동을 Gantry 이용해서 거는데 Para.bGantryEnable 조건 없으면
                //Reset할때마다 GetLinkMode false 시켜서 조건 건다. 진섭.
                if (Para.bGantryEnable)
                {
                    SetGantryEnable();
                }
            }
        }
Ejemplo n.º 28
0
        /// <summary>
        /// 초기화 함수.
        /// </summary>
        /// <returns>초기화 성공여부</returns>
        public bool Init()
        {
            Para = new CParaMotorAxl();

            //통합 보드 초기화 부분.
            if (CAXL.AxlIsOpened() == 0)
            {                                    // 통합 라이브러리가 사용 가능하지 (초기화가 되었는지) 확인
                if (CAXL.AxlOpenNoReset(7) != 0) //초기화 사용 하지 않는 오픈.
                {                                // 통합 라이브러리 초기화
                    Log.ShowMessage("Motor", "AJIN AXL Lib Loading Error");
                    return(false);
                }
            }
            uint uStatus = 0;
            uint uRet    = CAXM.AxmInfoIsMotionModule(ref uStatus);

            if (uRet != 0)
            {
                Log.ShowMessage("Motor", "AJIN AXL Motion Module Loading Error");
                return(false);
            }

            //public static extern uint AxmInfoIsMotionModule(ref uint upStatus);



            return(true);
        }
Ejemplo n.º 29
0
        /// <summary>
        /// 홈이 지원 안되는 보드 같은경우 돌려주고 Update 함수 내부에서 처리 해야 한다.
        /// </summary>
        public void Update()
        {
            //uint uiSignal   = 0;
            //uint uiInMotion = 1;

            //CAXM.AxmStatusReadMechanical(Para.iPhysicalNo,ref uiSignal);

            //MotionStat.bHomeSnsr   = ((uiSignal >> 7) & 0x01) == 0x01;
            //MotionStat.bNLimSnsr   = ((uiSignal >> 1) & 0x01) == 0x01;
            //MotionStat.bPLimSnsr   = ((uiSignal >> 0) & 0x01) == 0x01;
            //MotionStat.bZphaseSgnl = ((uiSignal >> 8) & 0x01) == 0x01;
            //MotionStat.bAlarmSgnl  = ((uiSignal >> 4) & 0x01) == 0x01;

            //CAXM.AxmStatusReadInMotion(Para.iPhysicalNo, ref uiInMotion);
            ////MotionStat.bInPosSgnl  = ((uiSignal >> 5) & 0x01) == 0x01;
            //MotionStat.bInPosSgnl = uiInMotion == 0;

            //화면에 display
            MOTION_INFO MotionInfoTemp = MotionInfo;

            MotionInfoTemp.uMask = 0x1F; // 모든 모션상태반환.
            CAXM.AxmStatusReadMotionInfo(Para.iPhysicalNo, ref MotionInfoTemp);
            MotionInfo = MotionInfoTemp;

            //MOTION_INFO MotionInfo;
            //MotionInfo.uMask = 0x1F;// 모든모션상태반환
            //CAXM.AxmStatusReadMotionInfo(Para.iPhysicalNo,ref MotionInfo);
            MotionStat.bInPosSgnl  = ((MotionInfo.uDrvStat >> 0) & 0x01) != 0x01;
            MotionStat.bHomeSnsr   = ((MotionInfo.uMechSig >> 7) & 0x01) == 0x01;
            MotionStat.bNLimSnsr   = ((MotionInfo.uMechSig >> 1) & 0x01) == 0x01;
            MotionStat.bPLimSnsr   = ((MotionInfo.uMechSig >> 0) & 0x01) == 0x01;
            MotionStat.bZphaseSgnl = ((MotionInfo.uMechSig >> 8) & 0x01) == 0x01;
            MotionStat.bAlarmSgnl  = ((MotionInfo.uMechSig >> 4) & 0x01) == 0x01;
        }
Ejemplo n.º 30
-1
        public void Home()
        {
            if (m_bIsUseAxis)
            {
                SetServoOn(true);

                uint duRetCode = 0;

                duRetCode = CAXM.AxmHomeSetVel(m_nAxisNumber, 30 * m_dUnitperMM, 10 * m_dUnitperMM, 5 * m_dUnitperMM, 2 * m_dUnitperMM, 50 * m_dUnitperMM, 50 * m_dUnitperMM);
                if (duRetCode != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                {
                    MessageBox.Show(String.Format("AxmHomeSetVel return error[Code:{0:d}]", duRetCode));
                    return;
                }

                duRetCode = CAXM.AxmHomeSetStart(m_nAxisNumber);
                if (duRetCode != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
                {
                    MessageBox.Show(String.Format("AxmHomeSetStart return error[Code:{0:d}]", duRetCode));
                    return;
                }

                m_eStat = eAxis.eHome;
            }
        }