public void AxtOriginSpeedSet(short m_nAxis, ushort Speed) { #if PROGRAM_RUNNING int nHmDir = 0; //단계 이동 방향 0 - Cw , -0 - ccw 즉 값에 (-) 기호가 있는가 없는가에 따라 방향이 설정됨 uint uHomeSignal = (int)AXT_MOTION_HOME_DETECT.HomeSensor; uint uZphas = 0; //z상 검출 유무 , 1 - 검출 , 0 - 검출 안함 double uHomeClrTime = 20000.0; //원점 검색 Encoder 값 설정하기 위한 대기 시간 double uHomeOffet = 0; //원점 이동후 설정한 오프셋 값 만큼킁 이동 if (GetRunAxis(m_nAxis) == false) { return; } if (CAXM.AxmHomeSetMethod(m_nAxis, nHmDir, uHomeSignal, uZphas, uHomeClrTime, uHomeOffet) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS) { return; } double[] rSpeed = new double[4]; double[] Accel = new double[4]; double[] AccelTime = new double[4]; Accel[0] = 100; Accel[1] = 80; Accel[2] = 2; Accel[3] = 1; rSpeed[0] = (double)Speed; rSpeed[1] = (double)Speed; rSpeed[2] = 10; rSpeed[3] = 5; if (CAXM.AxmHomeSetVel(m_nAxis, rSpeed[0], rSpeed[1], rSpeed[2], rSpeed[3], Accel[0], Accel[3]) != (uint)AXT_FUNC_RESULT.AXT_RT_SUCCESS) { return; } #endif return; }
/// <summary> /// 홈을 수행한다. /// </summary> /// <returns>수행 성공여부.</returns> public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst) { SetServo(true); // 해당 축의 원점검색을 수행하기 위해서는 반드시 원점 검색관련 파라메타들이 설정되어 있어야 됩니다. // 만약 MotionPara설정 파일을 이용해 초기화가 정상적으로 수행됐다면 별도의 설정은 필요하지 않다. // 원점검색 방법 설정에는 검색 진행방향, 원점으로 사용할 신호, 원점센서 Active Level, 엔코더 Z상 검출 여부 등을 설정 한다. // 주의사항 : 레벨을 잘못 설정시 -방향으로 설정해도 +방향으로 동작할수 있으며, 홈을 찾는데 있어 문제가 될수있다. // (자세한 내용은 AxmMotSaveParaAll 설명 부분 참조) // 홈레벨은 AxmSignalSetHomeLevel 사용한다. // HClrTim : HomeClear Time : 원점 검색 Encoder 값 Set하기 위한 대기시간 // HmDir(홈 방향): DIR_CCW (0) -방향 , DIR_CW(1) +방향 // HOffset - 원점검출후 이동거리. // uZphas: 1차 원점검색 완료 후 엔코더 Z상 검출 유무 설정 0: 사용안함 , 1: Hmdir과 반대 방향, 2: Hmdir과 같은 방향 // HmSig : PosEndLimit(0) -> +Limit // NegEndLimit(1) -> -Limit // HomeSensor (4) -> 원점센서(범용 입력 0) int iDir = Para.bHomeNegDir ? 0 : 1; CAXM.AxmHomeSetMethod(Para.iPhysicalNo, iDir, (uint)Para.eHomeSignal, (uint)Para.eHomeZMethod, Para.dHomeClrTime, Para.dHomeOffset * m_dPulsePerUnit); CAXM.AxmHomeSetVel(Para.iPhysicalNo, _dHomeVelFirst, _dHomeVelFirst, _dHomeVelLast, _dHomeVelLast, _dHomeAccFirst, _dHomeAccFirst); CAXM.AxmHomeSetStart(Para.iPhysicalNo); /* * 원점검색구동 원점검색구동 원점검색구동 원점검색구동 원점검색구동 원점검색구동 * 하드웨어 초기화 , 파라미터 설정 , 서보온의 과정으로 모션구동에 모션구동에 작업이 준비되어 있다 하더라도 좌표계의 방 향만 설정되어 있을 뿐 좌표계의 좌표계의 기준이 되는 원점은 설정이 설정이 되어 있지 않은 상태이다 상태이다 . 기구부가 사용자가 원하는 일정한 위치로 이송되기 위해서는 정확한 원점이 보장되어야 한다 . 원점검색을 하는 방법에는 크게 신호검색구동함수를 이용하는 방법과 원점검색함수를 이용하는 이용하는 방법이 있다 . 신호검색을 신호검색을 이용하여 홈검색을 수행하기 위해서는 상당히 번거로운 잡업들이 이루어지게 이루어지게 되기 때문에 이러한 과정을 과정을 더 편하게 하기 위해 홈검색 함수를 제공한다 . 원점검색함수를 원점검색함수를 이용하기 위해서는 AxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethoAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethodAxmHomeSetMethod 함수와 AxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVelAxmHomeSetelAxmHomeSetVelAxmHomeSetVelAxmHomeSetVel 함수를 이용하여 홈검색에 필요한 데이터들을 설정해주고 AxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStartAxmHomeSetStart 함수를 호출하여 홈검색 을 시 작하면 된다 . * 원점검색함수는 개별적인 쓰레드를 생성하여 작동하므로 , 만약 여러 축의 원점검색을 해야 하는 경우라면 , 각 각의 원점검색명령을 열거해서 열거해서 사용하면 된다 . * 원점검색 방법 및 속도 설정 * 원점검색은 기구부에 따라 여러 가지 신호검색 순서가 발생할 발생할 수 있지만 , AXL , AXL, AXL 의 원점검색 원점검색 함수는 아래의 7단 계 원점검색 시퀀스로 이루어지며 이루어지며 , -방향으로 원점검색 실행할 실행할 경우 원점검색단계는 다음과 다음과 같다 . . * 다축구동Library User Manual Rev.2.0 * 62 AJINEXTEK CO.,LTD. * 1단계 : -방향으로 이동하면서 이동하면서 홈센서의 Rising Edge Rising Edge Rising EdgeRising Edge Rising EdgeRising Edge신호를 검색하여 감속정지 * (홈센서가 이미 HIGH HIGH HIGH HIGH HIGH 상태라면 1단계를 생략 ) * 2단계 : +방향으로 이동하면서 이동하면서 홈센서의 Falling Edge신호를 검색하여 감속정지 * 3단계 : -방향으로 이동하면서 이동하면서 홈센서의 Rising Edge신호를 검색하여 급정지 * < Z < Z < Z < Z 상 검색을 사용하지 않은 경우 > * 4단계 : +방향으로 이동하면서 이동하면서 홈센서의 Falling EdgeFalling EdgeFalling EdgeFalling EdgeFalling Edge Falling EdgeFalling Edge Falling EdgeFalling Edge신호를 검색하여 급정지 * 5단계 : -방향으로 이동하면서 이동하면서 홈센서의 Rising Edge Rising Edge Rising EdgeRising Edge Rising EdgeRising Edge신호를 검색하여 급정지 * <Z 상 검색을 사용한 경우 > * 4단계 : +방향으로 이동하면서 이동하면서 Z 상의 Falling EdgeFalling EdgeFalling EdgeFalling EdgeFalling Edge Falling EdgeFalling Edge Falling EdgeFalling Edge신호를 검색하여 급정지 * 5단계 : -방향으로 이동하면서 이동하면서 Z 상의 Rising Edge Rising Edge Rising EdgeRising Edge Rising EdgeRising Edge신호를 검색하여 급정지 * 6단계 : Offset : Offset: Offset: Offset: Offset: Offset: Offset: Offset값이 있다면 OffsetOffsetOffsetOffsetOffsetOffset값 만큼 추가 이동 * 7단계 : : 사용자 설정 시간동안 시간동안 대기 후 위치값을 0으로 설정 * StepStepStepStep별 원점검출 원점검출 원점검출 원점검출 속도설정의 속도설정의 속도설정의 속도설정의 속도설정의 이해 (Z (Z (Z 상 검색을 사용할 사용할 사용할 경우 ) * Library User Manual Rev.2.0 다축구동 * AJINEXTEK CO.,LTD. 63 * ① VelFirst, AccFirst사용 * HmDir 방향으로 원점센서를 고속 검출하고 HAccF 감속도로 감속정지 * ② VelSecond, AccSecond사용 * HmDir 반대 방향으로 원점센서의 Down Edge를 검출하고 HAccF 감속도로 감속정지 * ③ VelThird사용 * HmDir 방향으로 원점센서의 Up Edge를 검출하고 급정지 * ④ VelLast 사용 * HmDir 반대 방향으로 Z상의 Down Edge를 검출하고 급정지 * ⑤ VelLast 사용 * HmDir 방향으로 Z상의 Up Edge를 검출하고 급정지 * Offset 값 설정의 이해 * 기구적인 원점센서 검출이 완료된 후 특정 위치로 옮겨 원점을 설정해야 될 경우 HOffset에 값을 지정하면 * 원점 센서 검출이 완료된 후 자동으로 해당 Offset만큼 이동 완료 후 원점을 재 설정하게 된다. 이때 주의할 * 것은 (+)나 (-)Limit 을 벗어나지 않는 범위에서 Offset을 지정해야 된다. 그렇지 않을 경우 원점검색을 정상 * 적으로 수행할 수 없습니다. */ return(true); }
// 원점 검출 스탭별 속도 설정 - AxmHomeSetVel // vel1 : 1단계 고속 원점 검출 속도-원점 검출 후 감속정지 // vel2 : 2단계 원점 검출 속도-1단계와 반대방향으로 원점 검출 후 감속정지 // vel3 : 3단계 원점 검출 속도-2단계와 반대방향으로 원점 Up Edge 신호 검출 후 급정지 // vel4 : 4단계 Encoder Z상 Up/Down Edge 검출 속도-Z상 검출 사용시 유효함 // accel1 : 1단계 고속 원점 검출 가감속도 // accel2 : 2단계 이후 원점 검출 가감속도 public void SetHomeSeekVelocity( double vel1, double vel2, double vel3, double vel4, double accel1, double accel2) { Validate(CAXM.AxmHomeSetVel(Index, vel1, vel2, vel3, vel4, accel1, accel2)); }
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; } }