Пример #1
0
        public bool Init()
        {
            int iRet = 0;

            //포트 혹시 안열려 있으면 열고 열렸으면 리스트에 넣어둠.
            if (Para.iPortNo != 0 && !OpenPorts.Contains(Para.iPortNo)) //포트아이디가 0인경우 아직 세팅 안한상태.
            {
                //여기서 뻑나면 dll위치와 dll이름 64 32비트 여부 확인
                //iRet = EziMOTIONPlusRLib.FAS_OpenPort((byte)Para.iPortNo, 115200) ;

                iRet = EziMOTIONPlusRLib.FAS_Connect((byte)Para.iPortNo, 115200);
                if (iRet == 0)
                {
                    if (!bDisplayedErr)
                    {
                        bDisplayedErr = true;
                        Log.ShowMessage("EzServoPlusR", Para.iPortNo.ToString() + "Port Open Failed!");
                    }
                    return(false);
                }
                OpenPorts.Add(Para.iPortNo);
            }



            if (EziMOTIONPlusRLib.FAS_IsSlaveExist((byte)Para.iPortNo, (byte)Para.iMotorID) == 0)
            {
                return(false);
            }

            m_bConnected = true;

            return(true);
        }
Пример #2
0
        /// <summary>
        /// 현재 파라미터들을 아진 함수를 이용하여 세팅함.
        /// </summary>


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

            //포트관련. 원래 있던 포트는 다른애가 쓸수도 있어서 그냥 냅둔다.
            //한번 여기 타면 파일에 저장 되어서 다음에 켤때는 생성 안됌.
            if (!OpenPorts.Contains(Para.iPortNo))
            {
                m_bConnected = false;
                Init();
            }

            if (!m_bConnected)
            {
                return;
            }

            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 0, (int)9);               //레졸루션 10000 ;
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 1, (int)500000);          //맥스스피드.
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 2, (int)1);               //시작스피드
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 26, (int)0);              //인포지션밸류.

            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 28, Para.bDirection?1:0); //모터방향.
        }
Пример #3
0
        /// <summary>
        /// Command Encoder Target포지션 세팅.
        /// </summary>
        /// <param name="_dPos">세팅할 펄스</param>
        public void SetPos(double _dPos)
        {
            int iCmdPos = (int)_dPos;
            int iRet    = 0;

            iRet = EziMOTIONPlusRLib.FAS_SetCommandPos((byte)Para.iPortNo, (byte)Para.iMotorID, iCmdPos);
            iRet = EziMOTIONPlusRLib.FAS_SetActualPos((byte)Para.iPortNo, (byte)Para.iMotorID, iCmdPos);
        }
Пример #4
0
        /// <summary>
        /// 리셑 시그널 온오프 제어
        /// </summary>
        /// <param name="_bOn">온오프</param>
        public void SetReset(bool _bOn)
        {
            int iRet = 0;

            if (_bOn)
            {
                iRet = EziMOTIONPlusRLib.FAS_ServoAlarmReset((byte)Para.iPortNo, (byte)Para.iMotorID);
            }
        }
Пример #5
0
        /// <summary>
        /// -방향 조그 이동
        /// </summary>
        /// <param name="_dVel">초당 구동 속도 펄스</param>
        /// <param name="_dAcc">구동 가속율 펄스</param>
        /// <param name="_dDec">감속율 펄스</param>
        public void JogN(double _dVel, double _dAcc, double _dDec)
        {
            Stat.bJogP = false;
            EziMOTIONPlusRLib.VELOCITY_OPTION_EX Option = new EziMOTIONPlusRLib.VELOCITY_OPTION_EX();
            Option.BIT_USE_CUSTOMACCDEC = true;
            Option.wCustomAccDecTime    = (ushort)(_dVel * 1000 / _dAcc);
            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_MoveVelocityEx((byte)Para.iPortNo, (byte)Para.iMotorID, (uint)_dVel, 0, Option);
        }
Пример #6
0
        /// <summary>
        /// 홈센서 기준 절대 위치로 이동.
        /// </summary>
        /// <param name="_dPos">이동할 위치 펄스단위</param>
        /// <param name="_dVel">이동할 속도 펄스단위</param>
        /// <param name="_dAcc">이동할 가속 펄스단위</param>
        /// <param name="_dDec">이동할 감속 펄스단위</param>
        /// <returns>성공여부</returns>
        public void GoAbs(double _dPos, double _dVel, double _dAcc, double _dDec)
        {
            Stat.iTrgPos = (int)_dPos;
            EziMOTIONPlusRLib.MOTION_OPTION_EX Option = new EziMOTIONPlusRLib.MOTION_OPTION_EX();
            Option.BIT_USE_CUSTOMACCEL = true;
            Option.BIT_USE_CUSTOMDECEL = true;
            Option.wCustomAccelTime    = (ushort)(_dVel * 1000 / _dAcc);
            Option.wCustomDecelTime    = (ushort)(_dVel * 1000 / _dDec);
            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_MoveSingleAxisAbsPosEx((byte)Para.iPortNo, (byte)Para.iMotorID, (int)_dPos, (uint)_dVel, Option);
        }
Пример #7
0
        /// <summary>
        /// 종료 함수
        /// </summary>
        /// <returns>종료 성공여부</returns>
        public bool Close()
        {
            m_bConnected = false;

            if (Para.iPortNo != 0 && OpenPorts.Contains(Para.iPortNo)) //포트아이디가 0인경우 아직 세팅 안한상태.
            {
                EziMOTIONPlusRLib.FAS_Close((byte)Para.iPortNo);
                OpenPorts.Remove(Para.iPortNo);
            }

            return(false);
        }
Пример #8
0
        /// <summary>
        /// 홈을 수행한다.
        /// </summary>
        /// <returns>수행 성공여부.</returns>
        public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst)
        {
            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 17, (int)_dHomeVelFirst);                           //홈속도
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 18, (int)_dHomeVelLast);                            //홈 엣지스캔속도
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 19, (int)(1000 * _dHomeVelFirst / _dHomeAccFirst)); //홈 가감속 시간.


            int iVal = (int)Para.eHomeMethode;

            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 20, iVal);                                      //홈 잡는 방법. ?? 좀 이상하다 ;;
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 21, (int)1);                                    //-방향.
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 22, (int)(Para.dHomeOffset * m_dPulsePerUnit)); //홈잡고 오프셑
            iRet = EziMOTIONPlusRLib.FAS_SetParameter((byte)Para.iPortNo, (byte)Para.iMotorID, 23, (int)0);                                    //홈잡고 포지션 세팅값.


            iRet = EziMOTIONPlusRLib.FAS_MoveOriginSingleAxis((byte)Para.iPortNo, (byte)Para.iMotorID);


            return(iRet == EziMOTIONPlusRLib.FMM_OK);
        }
Пример #9
0
        /// <summary>
        /// 홈이 지원 안되는 보드 같은경우 돌려주고 Update 함수 내부에서 처리 해야 한다.
        /// </summary>
        public void Update()
        {
            if (!m_bConnected)
            {
                return;
            }

            uint   dwOutStatus  = 0;
            uint   dwInStatus   = 0;
            uint   dwAxisStatus = 0;
            int    lCmdPos      = 0;
            int    lActPos      = 0;
            int    lPosErr      = 0;
            int    lActVel      = 0;
            ushort wPosItemNo   = 0;


            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_GetAllStatus((byte)Para.iPortNo, (byte)Para.iMotorID,
                                                      ref dwInStatus,
                                                      ref dwOutStatus,
                                                      ref dwAxisStatus,
                                                      ref lCmdPos,
                                                      ref lActPos,
                                                      ref lPosErr,
                                                      ref lActVel,
                                                      ref wPosItemNo);

            if (iRet == EziMOTIONPlusRLib.FMM_OK)
            {
                Stat.bHomeSnsr = (dwAxisStatus & 0X00800000) != 0;
                Stat.bNLimSnsr = (dwAxisStatus & 0X00000004) != 0;
                Stat.bPLimSnsr = (dwAxisStatus & 0X00000002) != 0;

                Stat.bAlarmSgnl = (dwAxisStatus & 0X00000001) != 0;

                Stat.bInPosSgnl  = (dwAxisStatus & 0X00080000) != 0;
                Stat.bZphaseSgnl = (dwAxisStatus & 0X01000000) != 0;

                Stat.bHomeDone = (dwAxisStatus & 0X02000000) != 0;

                Stat.bServo = (dwAxisStatus & 0X00100000) != 0;

                Stat.bRun     = lActVel != 0;
                Stat.bHomming = (dwAxisStatus & 0X00040000) != 0;

                Stat.iCmdPos = lCmdPos;
                Stat.iEncPos = lActPos;
                Stat.iSpeed  = lActVel;

                if (Stat.bJogN || Stat.bJogP)
                {
                    Stat.iTrgPos = Stat.iCmdPos;
                }

                if (!Stat.bRun)
                {
                    Stat.bJogP = false;
                    Stat.bJogN = false;
                }
            }
        }
Пример #10
0
        /// <summary>
        /// 모터 감속 무시 긴급정지.
        /// </summary>
        public void EmgStop()
        {
            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_EmergencyStop((byte)Para.iPortNo, (byte)Para.iMotorID);
        }
Пример #11
0
        //Motion Functions.
        /// <summary>
        /// 모터 정지 명령.
        /// </summary>
        public void Stop()
        {
            int iRet = 0;

            iRet = EziMOTIONPlusRLib.FAS_MoveStop((byte)Para.iPortNo, (byte)Para.iMotorID);
        }
Пример #12
0
 /// <summary>
 /// 서보 온오프
 /// </summary>
 /// <param name="_bOn">온오프</param>
 public void SetServo(bool _bOn)
 {
     int iRet = EziMOTIONPlusRLib.FAS_ServoEnable((byte)Para.iPortNo, (byte)Para.iMotorID, _bOn?1:0);
 }