#include "StdAfx.h" #include "CHMotorControls/MotorControl_Umac.h" #include "Runtime.h" CMotorControl_Umac::CMotorControl_Umac(int nIndex, DWORD dwPeriod, int nThreadCount) : CMotorControl(nIndex, dwPeriod, nThreadCount) { m_uDeviceID = 0; } CMotorControl_Umac::~CMotorControl_Umac(void) { //AfxMessageBox(_T("CMotorControl_Umac")); Disconnect(); } // CMotorControl int CMotorControl_Umac::Connect(const CMotorControlInfo* pControlInfo) { if (pControlInfo==NULL) return 0; // set motor control info m_ControlInfo = *pControlInfo; OpenRuntimeLink(); m_uDeviceID = _ttoi(m_ControlInfo.GetConnectionPort()); // Power Umac Open m_bConnected = DeviceOpen(m_uDeviceID); // alloc m_nAxisCount = 0; for (int nG_Idx=0; nG_IdxGetMotorAxisAddrCount(); } if (m_nAxisCount<1) { return 0; } if (m_pAxisStatus) delete [] m_pAxisStatus; m_pAxisStatus = new long[m_nAxisCount]; memset(m_pAxisStatus, 0, sizeof(long)*m_nAxisCount); if (m_pAxisPosition) delete [] m_pAxisPosition; m_pAxisPosition = new float[m_nAxisCount]; memset(m_pAxisPosition, -1, sizeof(float)*m_nAxisCount); if (m_pAxisStatusPrev) delete [] m_pAxisStatusPrev; m_pAxisStatusPrev = new long[m_nAxisCount]; memset(m_pAxisStatusPrev, 0, sizeof(long)*m_nAxisCount); if (m_pAxisPositionPrev) delete [] m_pAxisPositionPrev; m_pAxisPositionPrev = new float[m_nAxisCount]; memset(m_pAxisPositionPrev, -1, sizeof(float)*m_nAxisCount); if (m_pAxisStatusAddr) delete [] m_pAxisStatusAddr; m_pAxisStatusAddr = new long[m_nAxisCount]; if (m_pAxisPositionAddr) delete [] m_pAxisPositionAddr; m_pAxisPositionAddr = new long[m_nAxisCount]; int nAxisIndex = 0; for (int nG_Idx=0; nG_IdxGetMotorAxisAddrCount(); nA_Idx++) { CMotorAxisAddr *ANode = pGNode->GetMotorAxisAddr(nA_Idx); if (ANode==NULL) continue; m_pAxisPositionAddr[nAxisIndex] = ANode->m_nPositionAddr; m_pAxisStatusAddr[nAxisIndex] = ANode->m_nStatusAddr; nAxisIndex++; } } m_axisThetaStatus = 0; m_axisThetaPosition = 0.f; m_axisThetaStatusPrev = 0; m_axisThetaPositionPrev = -999.f; m_bConnected = TRUE; return 1; } void CMotorControl_Umac::Disconnect() { if (m_bConnected==FALSE) return; DeviceClose(m_uDeviceID); m_bConnected = FALSE; } BOOL CMotorControl_Umac::GantryManualGo(int nGantryIdx, const VectorDouble& vectorPos, int nMoveType) { UINT nManualAddr = GetGantryManualGoAddr(nGantryIdx); if (nManualAddr==MOTOR_ADDRESS_NONE) return FALSE; int nAxisCount = 0; for (int i=0; i