You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.3 KiB
C

2 years ago
// MotionControllerBase.h: interface for the CMotionControllerBase class.
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include "Motor.h"
#include "hardwareini.h"
#include "DllDefines.h"
2 years ago
class IODLLCLASS CMotionControllerBase : public CCard
{
friend UINT MotionThreadFn(LPVOID pParam);
protected:
int m_CardType{ -1 };
int m_nNoOfCard{ 0 };
int m_index{ 0 };
std::string m_szCardName{ "" };
2 years ago
public:
CMotionControllerBase(int index, const std::string& pMutexName);
2 years ago
virtual ~CMotionControllerBase();
void SetCardInfo(int nCardType, const std::string& cardName);
int GetCardType() const;
std::string GetCardName() const;
2 years ago
virtual BOOL Init(int& nNoOfMtr) = 0;
virtual void Close();
// get the IOs status of the motor
virtual unsigned short GetMotionIOStatus(const CMtrProfile& mtrProfile);
// get Motion status of motor
virtual int GetMotionStatus(const CMtrProfile& mtrProfile);
// get Motor Pos value
virtual double GetMtrPos(const CMtrProfile& mtrProfile);
// get position error value
virtual double GetPosErr(const CMtrProfile& mtrProfile);
// check if motor is at home sensor position
virtual BOOL IsHomed(const CMtrProfile& mtrProfile);
// check motor in position signal
virtual BOOL IsInPosition(const CMtrProfile& mtrProfile);
// check if motor negative/ccw limit is triggered
virtual BOOL IsNegLimHit(const CMtrProfile& mtrProfile);
// check if motor positive/cw limit hit
virtual BOOL IsPosLimHit(const CMtrProfile& mtrProfile);
// check if motor driver alarm
virtual BOOL IsMotorAlarm(const CMtrProfile& mtrProfile);
// check if motor is ready
virtual BOOL IsMotorReady(const CMtrProfile& mtrProfile);
// check if motor is on
virtual BOOL IsMtrOn(const CMtrProfile& mtrProfile);
BOOL TestIOStatus(const CMtrProfile& mtrProfile, unsigned short bitmask) const;
2 years ago
struct signal_mask
{
// home signal bit mask
unsigned short m_usHomeBitMask;
// index signal bit mask
unsigned short m_usIndexBitMask;
// CW Limit signal bit mask
unsigned short m_usCWLimitBitMask;
// CCW Limit signal bit mask
unsigned short m_usCCWLimitBitMask;
// Motor Ready signal bit mask
unsigned short m_usReadyBitMask;
// Motor On signal bit mask
unsigned short m_usOnBitMask;
// Alarm signal bit mask
unsigned short m_usAlarmBitMask;
// In Position signal bit mask
unsigned short m_usInPositionBitMask;
signal_mask()
{
m_usHomeBitMask = 0;
m_usIndexBitMask = 0;
m_usCWLimitBitMask = 0;
m_usCCWLimitBitMask = 0;
m_usReadyBitMask = 0;
m_usOnBitMask = 0;
m_usAlarmBitMask = 0;
m_usInPositionBitMask = 0;
}
} m_structSignalMask;
void RegisterMotor(const CMtrProfile& mtrProfile, CMotorBase* pMotor);
void UnRegisterMotor(const CMtrProfile& mtrProfile);
CMotorBase* GetMotor(const CMtrProfile& mtrProfile) const;
2 years ago
protected:
CMutex m_mutexMotion;
CHardwareIni m_iniHardware;
2 years ago
std::map<int, CMotorBase*> m_motors;
};