/// <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(); }
/// <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); //링 카운터 설정. //360도로 쓸때 UI에 360을 입력 하면 360이 되야 되는 순간에 0으로 클리어 됌. //홈 서치 시에는 해당 기능을 Disable 하고 홈서치 완료 후 Enable 해야 정상적으로 사용이 가능합니다 . <==메뉴얼에 나와있는건데 일단 안해본다. uint uiRet; if (Para.dSetMaxPos != 0) { uiRet = CAXM.AxmStatusSetPosType(Para.iPhysicalNo, 1, (Para.dSetMaxPos * _dPulsePerUnit) - 1, 0); } else { uiRet = CAXM.AxmStatusSetPosType(Para.iPhysicalNo, 0, (Para.dSetMaxPos * _dPulsePerUnit) - 1, 0); } if (Para.bGantryEnable) { SetLinkEnable(Para.iGantrySubAdd); } else { SetLinkDisable(Para.iGantrySubAdd); } }