//Home씨퀜스. /// <summary> /// 홈을 수행한다. /// </summary> /// <returns>수행 성공여부.</returns> public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst) { //원점복귀 작업을 수행합니다. cmmHomeMove() 함수는 모션이 완료되기 전까지 반환되지 않으며, //cmmHomeMoveStart() 함수는 모션을 시작시킨 후에 바로 반환됩니다. SetServo(true); //Home Mode //0 : ORG > Stop //1 : ORG > Stop > Back (Vr) > ORG-OFF > Foward(Vr) > ORG > Stop //2 : ORG > Slow down (Vini) > Stop on EZ Count //3 : ORG > Stop on EZ Count //4 : ORG > Stop > Back (Vr) > Stop on EZ Count //5 : ORG > Stop > Back (Vwork) > Stop on EZ //6 : EL > Stop > Back (Vr) > EL 0 > Stop //7 : EL > Stop > Back (Vr) > Stop on EZ count //8 : EL > Stop > Back (Vwork) > Stop on EZ count //9 : MODE0 > Operate till dev. counter 0 //10 : MODE3 > Operate till dev. counter 0 //11 : MODE5 > Operate till dev. counter 0 //12 : MODE8 > Operate till dev. counter 0 int iHomeMode = 0; if (Para.eHomeZMethod == Z_METHOD.HomeDirection) { if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor) { iHomeMode = 3; } if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor) { iHomeMode = 7; } if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor) { iHomeMode = 7; } if (Para.eHomeSignal == HOME_SIGNAL.ZPhase) { iHomeMode = 3; //이거는 없네;;; } } else if (Para.eHomeZMethod == Z_METHOD.NotHomeDirection) { if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor) { iHomeMode = 4; } if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor) { iHomeMode = 7; } if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor) { iHomeMode = 7; } if (Para.eHomeSignal == HOME_SIGNAL.ZPhase) { iHomeMode = 3; //이거는 없네;;; } } else { if (Para.eHomeSignal == HOME_SIGNAL.HomeSensor) { iHomeMode = 1; } if (Para.eHomeSignal == HOME_SIGNAL.NLimitSensor) { iHomeMode = 6; } if (Para.eHomeSignal == HOME_SIGNAL.PLimitSensor) { iHomeMode = 6; } if (Para.eHomeSignal == HOME_SIGNAL.ZPhase) { iHomeMode = 1; } } //Manual //long nHomeMode = 0; // 원점 복귀 모드 설정. 0 ~ 12 번 모드가 있습니다. //long nHomeDir = cmDIR_N; // 원점 복귀 방향. cmDIR_N: (-) 방향, cmDIR_P: (+) 방향 //long nEzCount = 0; // Encoder Z 상 카운트. ‘0’ 은 EZ 상 1 회 카운트를 의미합니다. //double fEscDist = 10.0f; // 원점 탈출 거리. 자동 원점 검색 기능에 사용되며, //// 최소 ‘1’ 이상의 값이어야 합니다. //double fOffset = 0.0f; // 원점 복귀 완료 후 Offset 값 (상대 거리) int iHomeDir = Para.bHomeNegDir ? 0 : 1; // 0 - N , 1 - P Cmmsdk.cmmHomeSetConfig(Para.iPhysicalNo, iHomeMode, iHomeDir, 1, Para.dHomeOffset * m_dPulsePerUnit); //iHomeClearMode //0 : Clears both position(C&F) at the moment ORG(/EL/EZ) signal works. //1 : Clears both position(C&F) after home completes. //2 : Set command smae as feedback after home completes. //-1 : Disable HomePosClearMode. int iHomeClearMode = 1; Cmmsdk.cmmHomeSetPosClrMode(Para.iPhysicalNo, iHomeClearMode); //Vr(Reverse Speed) //▶ Revel : cmmHomeSetSpeedPattern 함수의 인자이며, Reverse Speed 를 설정합니다. 복귀모드에 따라 Reverse Speed 를 //필요로 하는 모드가 있습니다. 앞의 복귀 모드 설명에서 Reverse Speed 는 Vr 로 표기되었습니다. //SpeedMode //0 또는 cmSMODE_C CONSTANT 속도모드 => 가감속을 수행하지 않습니다. //1 또는 cmSMODE_T TRAPEZOIDAL 속도모드 => 사다리꼴 가감속을 수행합니다. //2 또는 cmSMODE_S S-CURVE 속도모드 => S-CURVE 가감속을 수행합니다. Cmmsdk.cmmHomeSetSpeedPattern(Para.iPhysicalNo, (int)MotnDefines._TCmSpeedMode.cmSMODE_T, _dHomeVelFirst, _dHomeAccFirst, _dHomeAccFirst, _dHomeVelLast); //0 또는 cmDIR_N (-) 방향 //1 또는 cmDIR_P (+) 방향 int iFuncRet = Cmmsdk.cmmHomeMoveStart(Para.iPhysicalNo, iHomeDir); return(iFuncRet == MotnDefines.cmERR_NONE); }