// 다축제어 라서 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); }
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; }