Ejemplo n.º 1
0
 // 다축제어 라서 static이여야함.
 // 보간 구동을 위해 추가
 public void ContiSetAxisMap(int _iCoord, uint _uiAxisCnt, int [] _iaAxisNo)
 {
     //주의점:축맵핑할때는 반드시 작은 숫자부터 큰숫자를 넣는다. 여기서 제일 작은숫자 축이 마스터가 된다.
     //다축 모션보드는 한 보드 내에서 Axis 0 – 3 의 4 개의 축이 축그룹 1 로 구분되고 Axis4 – 7 4 개의 축이 축그룹 2 로 구분되고
     //Axis8 – 11 4 개의 축이 축그룹 3 으로 ….. 구분된다. 동일 그룹에 속하는 축들간의
     // 연속보간설정및구동함수Library User Manual Rev.2.0 직선보간 구동, 원호보간구동을 사용할 수 있지만, 서로 다른 축그룹에 속한 축들간의 직선보간구동과 원호보간구동은 사용할 수 없다. Coordinate 를 지정할 때 주의하여야 한다.
     CAXM.AxmContiWriteClear(_iCoord);
     CAXM.AxmContiSetAxisMap(_iCoord, _uiAxisCnt, _iaAxisNo);
 }
Ejemplo n.º 2
0
        public void MoveAnglePos(int[] m_nAxis, float Speed, float TargetStroke, float LeverLength)
        {
            // 현재 위치(0,0)에서 (100,100) 위치까지 (0,100)을 중심으로 원호 보간을 수행한다.
            int[]    lAxesNo = { m_nAxis[0], m_nAxis[1] };
            double[] dCenPos = new double[2];
            //double[] dEndPos = new double[2];
            int  lCoordinate = 0;
            uint uAbsRelMode = 1;
            //uint uProfileMode = 3;
            uint lSize = 2;

            CAXM.AxmContiWriteClear(lCoordinate);
            //CAXM.AxmContiBeginNode(lCoordinate);
            CAXM.AxmContiSetAxisMap(lCoordinate, lSize, lAxesNo);
            CAXM.AxmContiSetAbsRelMode(lCoordinate, uAbsRelMode); // 상대 위치 구동으로 설정
                                                                  //CAXM.AxmContiEndNode(lCoordinate);
                                                                  //double dCenterXPosition = LeverLength; // 0
                                                                  // dCenterYPosition = LeverLength; // 100
                                                                  //double dEndXPosition = 50;
                                                                  //double dEndYPosition = 50;

            //dCenPos[0] = dCenterXPosition + AxtReadPosition(mStatus.X_SELECT);
            //dCenPos[1] = dCenterYPosition + AxtReadPosition(mStatus.Y_SELECT);
            dCenPos[0] = 0;
            dCenPos[1] = LeverLength;
            //dEndPos[0] = dEndXPosition;
            //dEndPos[1] = dEndYPosition;

            double dMaxVelocity = Speed * 2;
            double dMaxAccel    = Speed;
            double dMaxDecel    = Speed * 2;
            uint   uCWDir       = 1; //[0] Ccw방향, [1] Cw방향

            float dAngle = (float)(TargetStroke / (Math.PI * LeverLength)) * 180F;

            dAngle = 180;
            //CAXM.AxmCircleCenterMove(lCoordinate, lAxesNo, dCenPos, dEndPos, dMaxVelocity, dMaxAccel, dMaxDecel,uCWDir);
            uint Status = CAXM.AxmCircleAngleMove(lCoordinate, lAxesNo, dCenPos, dAngle, dMaxVelocity, dMaxAccel, dMaxDecel, uCWDir);

            return;
        }