public bool Inposition() { // send command and read recv buffer EMCL.ERAETech_EMCL_IsPositionReached(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); return(0 < m_nRetValue ? true : false); }
public bool IsHome() { // send command and read recv buffer EMCL.ERAETech_EMCL_GetHomeSwitchStatus(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); return(0 < m_nRetValue ? true : false); }
public int GetActSpeed() { // send command and read recv buffer EMCL.ERAETech_EMCL_GetActualSpeed(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); return(m_nRetValue); }
/// <summary> /// 홈동작 완료 확인. /// </summary> /// <returns>홈동작 완료여부</returns> public bool GetHomeDone() { int iRet = 0; EMCL.ERAETech_EMCL_Sync_GetRefSearchStatus(m_iPortID, (byte)Para.iPhysicalNo, ref iRet); return(iRet == 0); }
/// <summary> /// -방향 조그 이동 /// </summary> /// <param name="_dVel">초당 구동 속도 펄스</param> /// <param name="_dAcc">구동 가속율 펄스</param> /// <param name="_dDec">감속율 펄스</param> public void JogN(double _dVel, double _dAcc, double _dDec) { int iRet = 0; //EMCL.ERAETech_EMCL_Sync_SetMaxAcceleration(m_iPortID, (byte)Para.iPhysicalNo, (int)_dAcc, ref iRet); //if (iRet != 0) //{ // Log.ShowMessage("EMCL_"+Para.iPhysicalNo.ToString()+"Axis" , GetErrMsg(iRet)); //} EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, 5, 0, 0, (int)_dAcc, ref iRet); //3번째 인자가 가감속 설정하는 부분 가속 = 5, 감속 = 17 if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, 17, 0, 0, (int)_dDec, ref iRet); //3번째 인자가 가감속 설정하는 부분 가속 = 5, 감속 = 17 if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } EMCL.ERAETech_EMCL_Sync_RotateLeft(m_iPortID, (byte)Para.iPhysicalNo, (int)_dVel, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
/// <summary> /// 홈센서 기준 절대 위치로 이동. /// </summary> /// <param name="_dPos">이동할 위치 펄스단위</param> /// <param name="_dVel">이동할 속도 펄스단위</param> /// <param name="_dAcc">이동할 가속 펄스단위</param> /// <param name="_dDec">이동할 감속 펄스단위</param> /// <returns>성공여부</returns> public void GoAbs(double _dPos, double _dVel, double _dAcc, double _dDec) { int iRet = 0; //EMCL.ERAETech_EMCL_Sync_SetMaxAcceleration(m_iPortID, (byte)Para.iPhysicalNo, (int)_dAcc, ref iRet); EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, 5, 0, 0, (int)_dAcc, ref iRet); //3번째 인자가 가감속 설정하는 부분 가속 = 5, 감속 = 17 if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, 17, 0, 0, (int)_dDec, ref iRet); //3번째 인자가 가감속 설정하는 부분 가속 = 5, 감속 = 17 if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } EMCL.ERAETech_EMCL_Sync_SetMaxPositionSpeed(m_iPortID, (byte)Para.iPhysicalNo, (int)_dVel, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } EMCL.ERAETech_EMCL_Sync_MoveToPosition(m_iPortID, (byte)Para.iPhysicalNo, 0, (int)_dPos, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
public void AlarmReset() { int nVal = 0; EMCL.ERAETech_EMCL_Sync_ResetPosError(m_nPort, Convert.ToByte(m_nModuleID), ref nVal); EMCL.ERAETech_EMCL_ResetAlarm(m_nPort, Convert.ToByte(m_nModuleID)); }
public int SearchStatus() { // send command and read recv buffer EMCL.ERAETech_EMCL_GetRefSearchStatus(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); return(m_nRetValue); }
public bool ComOpen(string strCom, int nBaud) { string sPortNum = strCom.Replace("COM", ""); m_nPort = Convert.ToInt32(sPortNum); EMCL.ERAETech_EMCL_OpenComm(m_nPort, Convert.ToInt32(nBaud)); return(EMCL.ERAETech_EMCL_IsPortOpen(m_nPort)); }
public void MoveStop(int nAcc) { // send command and read recv buffer EMCL.ERAETech_EMCL_SetMaxAcceleration(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nAcc)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); // send command and read recv buffer EMCL.ERAETech_EMCL_Stop(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
/// <summary> /// 홈시퀜스를 중단한다. /// </summary> public void StopHome() { int iRet = 0; EMCL.ERAETech_EMCL_Sync_StopRefSearch(m_iPortID, (byte)Para.iPhysicalNo, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
public void JogMove_N(int nSpeed, int nAcc) { // send command and read recv buffer EMCL.ERAETech_EMCL_SetMaxAcceleration(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nAcc)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); // send command and read recv buffer EMCL.ERAETech_EMCL_RotateLeft(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nSpeed)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
/// <summary> /// 서보 온오프 /// </summary> /// <param name="_bOn">온오프</param> public void SetServo(bool _bOn) { int iRet = 0; EMCL.ERAETech_EMCL_Sync_SetServoOn(m_iPortID, (byte)Para.iPhysicalNo, _bOn ? 1 : 0, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
public void SetZero() { // send command and read recv buffer EMCL.ERAETech_EMCL_SetZeroPosition(m_nPort, Convert.ToByte(GlobalVariable.LoadlockMotor.nModule)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); // send command and read recv buffer EMCL.ERAETech_EMCL_SetEncoderZeroPosition(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
public void MoveStart(int nTargetPos, int nAcc, MoveMode mode) { // send command and read recv buffer EMCL.ERAETech_EMCL_SetMaxPositionSpeed(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nAcc)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); Thread.Sleep(10); // send command and read recv buffer EMCL.ERAETech_EMCL_MoveToPosition(m_nPort, Convert.ToByte(m_nModuleID), (byte)mode, Convert.ToInt32(nTargetPos)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); Thread.Sleep(10); }
//Motion Functions. /// <summary> /// 모터 정지 명령. /// </summary> public void Stop() { //혹시병신짓 하면 Acc설정해 보자. int iRet = 0; EMCL.ERAETech_EMCL_Sync_Stop(m_iPortID, (byte)Para.iPhysicalNo, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
/// <summary> /// 홈을 수행한다. /// </summary> /// <returns>수행 성공여부.</returns> public bool GoHome(double _dHomeVelFirst, double _dHomeVelLast, double _dHomeAccFirst) { SetServo(true); int iRet = 0; //홈찾는 방법 EMCL.ERAETech_EMCL_Sync_SetSearchMode(m_iPortID, (byte)Para.iPhysicalNo, (int)Para.eHomeMode, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return(false); } //가감속 EMCL.ERAETech_EMCL_Sync_SetMaxAcceleration(m_iPortID, (byte)Para.iPhysicalNo, (int)_dHomeAccFirst, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return(false); } //첫번째 속도. EMCL.ERAETech_EMCL_Sync_SetRefSearchSpeed(m_iPortID, (byte)Para.iPhysicalNo, (int)_dHomeVelFirst, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return(false); } //마지막 속도. EMCL.ERAETech_EMCL_Sync_SetRefSwitchSpeed(m_iPortID, (byte)Para.iPhysicalNo, (int)_dHomeVelLast, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return(false); } //요이 땅. EMCL.ERAETech_EMCL_Sync_StartRefSearch(m_iPortID, (byte)Para.iPhysicalNo, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return(false); } return(true); }
public void MoveHome(int nRefSpeed) { // send command and read recv buffer EMCL.ERAETech_EMCL_SetRefSearchSpeed(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nRefSpeed)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); // send command and read recv buffer EMCL.ERAETech_EMCL_SetRefSwitchSpeed(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(nRefSpeed)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); // send command and read recv buffer EMCL.ERAETech_EMCL_StartRefSearch(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
/// <summary> /// 리셑 시그널 온오프 제어 /// </summary> /// <param name="_bOn">온오프</param> public void SetReset(bool _bOn) { if (!_bOn) { return; } int iRet = 0; EMCL.ERAETech_EMCL_Sync_ResetAlarm(m_iPortID, (byte)Para.iPhysicalNo, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); } }
/// <summary> /// Command Encoder Target포지션 세팅. /// </summary> /// <param name="_dPos">세팅할 펄스</param> public void SetPos(double _dPos) { int iRet = 0; EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, (byte)EMCL.MotorCmd.EMCL_MVP, (byte)EMCL.AxisParam.AXIS_PARAM_ACTUAL_POS, 0, (int)_dPos, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return; } EMCL.ERAETech_EMCL_Sync_SendCommand(m_iPortID, (byte)Para.iPhysicalNo, (byte)EMCL.MotorCmd.EMCL_MVP, (byte)EMCL.AxisParam.AXIS_PARAM_ENCODER_POS, 0, (int)_dPos, ref iRet); if (iRet != 0) { Log.ShowMessage("EMCL_" + Para.iPhysicalNo.ToString() + "Axis", GetErrMsg(iRet)); return; } }
/// <summary> /// 홈이 지원 안되는 보드 같은경우 돌려주고 Update 함수 내부에서 처리 해야 한다. /// 파익스는 네트워크 타입이라 너무 느려서 업데이트에서 한번만 스캔하여 담아두고 /// </summary> public void Update() { if (Para.iPhysicalNo != 0) { return; } int iEncPos = 0; for (int i = 0; i < m_iMaxMotor; i++) { EMCL.ERAETech_EMCL_GetAllStatus(m_iPortID, (byte)i, ref MotorStat[i]); //EMCL.ERAETech_EMCL_GetRefSearchStatus(m_iPortID, (byte)i); EMCL.ERAETech_EMCL_Sync_GetEncoderPos(m_iPortID, (byte)i, ref iEncPos); MotorEncPos[i] = (double)iEncPos; } }
/// <summary> /// 초기화 함수. /// </summary> /// <returns>초기화 성공여부</returns> public bool Init() { Para = new CParaMotorEmcl(); if (m_bInit == false) { m_bInit = true; //통합 보드 초기화 부분. m_iPortID = 1; //9600 //14400 //19200 //38400 //57600 //115200 m_iBoudRate = 57600; EMCL.ERAETech_EMCL_OpenComm(m_iPortID, m_iBoudRate); if (!EMCL.ERAETech_EMCL_IsPortOpen(m_iPortID)) { Log.ShowMessage("EMCL", "Port Open Error PortNo =" + m_iPortID.ToString()); //return false ; } m_iMaxMotor = EMCL.ERAETech_EMCL_GetNodeCount(m_iPortID, 10);//포트에 몇개의 모터가 달려 있는지...확인 10개까지 확인해 본다. if (m_iMaxMotor == 0) { m_iMaxMotor = 10; //Log.ShowMessage("EMCL", "Motor Connected Error PortNo =" + m_iPortID.ToString()); } MotorStat = new EMCL.MotorStatus[m_iMaxMotor]; MotorEncPos = new double[m_iMaxMotor]; } return(true); }
public void HomeStop() { // send command and read recv buffer EMCL.ERAETech_EMCL_StopRefSearch(m_nPort, Convert.ToByte(m_nModuleID)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
public void SetHomeRef(HomeRefMode RefMode) { EMCL.ERAETech_EMCL_SetSearchMode(m_nPort, Convert.ToByte(m_nModuleID), Convert.ToInt32(RefMode)); EMCL.ERAETech_EMCL_WaitAndGetReply(m_nPort, ref m_nRetValue); }
public bool IsComPortCheck() { return(EMCL.ERAETech_EMCL_IsPortOpen(m_nPort)); }
public void GetAllStatus(ref EMCL.MotorStatus moStatus) { EMCL.ERAETech_EMCL_GetAllStatus(m_nPort, Convert.ToByte(m_nModuleID), ref moStatus); }
public bool ComClose(string strCom) { EMCL.ERAETech_EMCL_CloseComm(-1); return(true); }
public void SetResolution(int nValue) { EMCL.ERAETech_EMCL_SetMicroStep(m_nPort, Convert.ToByte(m_nModuleID), nValue); }
/// <summary> /// 종료 함수 /// </summary> /// <returns>종료 성공여부</returns> public bool Close() { EMCL.ERAETech_EMCL_CloseComm(-1);//해당포트를 닫는다 -1 이면 모든 포트 닫음. return(true); }
public void ServoOff() { EMCL.ERAETech_EMCL_SetServoOn(m_nPort, Convert.ToByte(m_nModuleID), 0); }