#pragma once
|
|
#include "MotorControlInfo.h"
|
#include "CHThreadPools/TimerThreadPools.h"
|
#include "MotionThread.h"
|
|
#include <vector>
|
typedef std::vector<long> VectorLong;
|
typedef std::vector<long>::iterator VectorLongIt;
|
typedef std::vector<int> VectorInteger;
|
typedef std::vector<int>::iterator VectorIntegerIt;
|
// typedef std::vector<double> VectorDouble;
|
// typedef std::vector<double>::iterator VectorDoubleIt;
|
|
|
class AFX_EXT_CLASS CMotorControl : public CTimerThreadPools, public IMotionThread2Parent
|
{
|
public:
|
CMotorControl(int nIndex, DWORD dwPeriod=100,int nThreadCount = 1);
|
virtual ~CMotorControl(void);
|
void SetMC2P(IMotorControl2Parent* pMC2P) { m_pMC2P = pMC2P; }
|
BOOL GetConnected() const { return m_bConnected; }
|
const CMotorControlInfo* GetControlInfo() { return &m_ControlInfo; }
|
|
virtual BOOL StartThread();
|
virtual void StopThread();
|
virtual void TimerThreadProcess(PVOID pParameter);
|
|
public:
|
// CMotorControl
|
virtual int Connect(const CMotorControlInfo* pControlInfo) = 0;
|
virtual void Disconnect() = 0;
|
virtual BOOL ReadAddressValue(int nAddress, long &nValue) = 0;
|
virtual BOOL WriteAddressValue(int nAddress, long nValue) = 0;
|
virtual BOOL ReadAddressValue(int nAddress, float &fValue) = 0;
|
virtual BOOL WriteAddressValue(int nAddress, float fValue) = 0;
|
virtual BOOL ReadAddressValue(int nAddress, double &dValue) = 0;
|
virtual BOOL WriteAddressValue(int nAddress, double dValue) = 0;
|
|
protected:
|
virtual BOOL ReadAddressValue(long nAddress, long *pArrayData, int nArrayCount) = 0;
|
virtual BOOL WriteAddressValue(long nAddress, long *pArrayData, int nArrayCount) = 0;
|
virtual BOOL ReadAddressValue(long nAddress, float *pArrayData, int nArrayCount) = 0;
|
virtual BOOL WriteAddressValue(long nAddress, float *pArrayData, int nArrayCount) = 0;
|
|
protected:
|
virtual BOOL ReadAxisPosition(float *pAxisPos, int nAxisCount);
|
virtual BOOL ReadAxisStatus(long *pAxisStatus, int nAxisCount);
|
virtual BOOL ReadThetaAxisPosition( float& fAxisPos);
|
virtual BOOL ReadThetaAxisStatus(long& nAxisStatus);
|
|
public:
|
// common
|
virtual BOOL CommonSetAutoStop();
|
|
// axis
|
virtual BOOL AxisManualGo(int nAxisIdx, double dPosition);
|
virtual BOOL AxisJogPlus(int nAxisIdx);
|
virtual BOOL AxisJogMinus(int nAxisIdx);
|
virtual BOOL AxisJogStop(int nAxisIdx);
|
virtual BOOL AxisManualGoSpeed(int nAxisIdx, double dSpeed);
|
virtual BOOL AxisJogSpeed(int nAxisIdx, double dSpeed);
|
virtual BOOL AxisManualGoAccel(int nAxisIdx, int nAccel);
|
|
// gantry
|
virtual BOOL GantryManualGo(int nGantryIdx, const VectorDouble& vectorPos);
|
virtual BOOL GantryManualGo(int nGantryIdx, const VectorDouble& vectorPos, int nMoveType);
|
virtual BOOL GantryManualGo(int nGantryIdx, double dPosX, double dPosY);
|
|
// review
|
virtual BOOL GantryAutoGo(int nGantryIdx, const VectorDouble& vectorPosX, const VectorDouble& vectorPosY, BOOL bCommand=FALSE);
|
|
//Wsi
|
virtual BOOL GantryWsiAutoGo(int nGantryIdx, const VectorDouble& vectorPosX, const VectorDouble& vectorPosY, BOOL bCommand=FALSE);
|
|
// get status
|
virtual int GetStatus( int& nStatusCode, CString& strStatusMessage );
|
|
|
public:
|
// common
|
BOOL CommonSetAfDelayTime(long nTime = 0);
|
BOOL CommonSetImageDelayTime(long nTime = 0);
|
BOOL CommonSetWsiDelayTime(long nTime = 0);
|
BOOL CommonSetAutoGoAll();
|
BOOL CommonSetAutoMeasureGoAll();
|
BOOL CommonSetAutoWsiGoAll();
|
|
void SetUseWsi(BOOL bUse) { m_bUseWsi = bUse; }
|
|
// all axis
|
BOOL AxisJogStop();
|
BOOL AxisManualGoSpeed(double dSpeed);
|
BOOL AxisJogSpeed(double dSpeed);
|
BOOL AxisManualGoAccel(int nAccel);
|
BOOL IsAxisMotionEnd();
|
|
BOOL AxisManualGoEnd(int nAxisIdx, double dPosition);
|
BOOL AxisManualGo(const VectorInteger& vectorAxis, const VectorDouble& vectorPosition);
|
BOOL IsAxisMotionEnd(int nAxisIdx);
|
|
// axis theta
|
virtual BOOL AxisThetaManualGo(double dPosition);
|
virtual BOOL AxisThetaJogPlus();
|
virtual BOOL AxisThetaJogMinus();
|
virtual BOOL AxisThetaJogStop();
|
|
BOOL AxisThetaManualGoEnd(double dPosition);
|
BOOL AxisThetaManualGoSpeed(double dSpeed);
|
BOOL AxisThetaJogSpeed(double dSpeed);
|
BOOL AxisThetaManualGoAccel(int nAccel);
|
BOOL IsAxisThetaMotionEnd();
|
|
// gantry
|
BOOL GantryManualGoEnd(int nGantryIdx, const VectorDouble& vectorPos);
|
BOOL GantryManualGoEnd(int nGantryIdx, const VectorDouble& vectorPos, int nMoveType);
|
BOOL GantryManualGoEnd(int nGantryIdx, double dPosX, double dPosY);
|
BOOL GantrySetCollisionPosition(int nGantryIdx, double dPosX, double dPosY,int nFirstIn=1);
|
const int GetGantryCollisionXAddr(int nGantryIdx);
|
BOOL GantrySetTwoGantrySyncModeSend(bool bUse);
|
|
// review
|
BOOL GantryAutoGo(int nGantryIdx);
|
BOOL GantrySetMoveCount(int nGantryIdx, long nCount);
|
BOOL GantryGetMoveCount(int nGantryIdx, long& nCount);
|
BOOL GantryGetTriggerCount(int nGantryIdx, long& nCount);
|
|
// measure
|
BOOL GantryMeasureAutoGo(int nGantryIdx, const VectorDouble& vectorPosData, BOOL bCommand=FALSE);
|
BOOL GantryMeasureAutoGo(int nGantryIdx);
|
BOOL GantrySetMeasureMoveCount(int nGantryIdx, long nCount);
|
BOOL GantryGetMeasureMoveCount(int nGantryIdx, long& nCount);
|
BOOL GantryGetMeasureTriggerCount(int nGantryIdx, long& nCount);
|
|
// wsi
|
BOOL GantryWsiAutoGo(int nGantryIdx);
|
BOOL GantrySetWsiMoveCount(int nGantryIdx, long nCount);
|
BOOL GantryGetWsiMoveCount(int nGantryIdx, long& nCount);
|
BOOL GantryGetWsiTriggerCount(int nGantryIdx, long& nCount);
|
BOOL GantryWsiNextPosMove(int nGantryIdx, long nNextIdx);
|
|
// Software Trigger Command
|
BOOL SoftWareTriggerCmd(int nGantryIdx, long lCmd);
|
|
// Command Ack
|
BOOL AxisThetaManualGoAck(long &lAck);
|
BOOL AxisThetaManualGoAck(long &lAck, DWORD nWaitTime);
|
BOOL GantryManualGoAck(int nGantryIdx, long &lAck);
|
BOOL GantryManualGoAck(int nGantryIdx, long &lAck, DWORD nWaitTime);
|
BOOL GantryAutoGoAck(int nGantryIdx, long& lAck);
|
BOOL GantryAutoGoAck(int nGantryIdx, long& lAck, DWORD nWaitTime);
|
BOOL GantryMeasureAutoGoAck(int nGantryIdx, long &lAck);
|
BOOL GantryMeasureAutoGoAck(int nGantryIdx, long &lAck, DWORD nWaitTime);
|
BOOL GantryWsiAutoGoAck(int nGantryIdx, long &lAck);
|
BOOL GantryWsiAutoGoAck(int nGantryIdx, long &lAck, DWORD nWaitTime);
|
|
BOOL IsGantryMotionEnd(int nGantryIdx);
|
BOOL IsMotionEnd();
|
|
BOOL RemoveAllAutoGoCount(int nGantryIdx);
|
|
BOOL GetAxisLimitPosition(int nAxisIdx, double& dPlusLimit, double& dMinusLimit);
|
|
|
protected:
|
virtual void Process_AxisMotionEnd(const CMotionData& motionData);
|
virtual void Process_GantryMotionEnd(const CMotionData& motionData);
|
virtual void Process_ThetaMotionEnd(const CMotionData& motionData);
|
|
// axis
|
int GetAxisGantryIndex(int nAxisIdx);
|
int GetAxisPositionAddr(int nAxisIdx);
|
int GetAxisStatusAddr(int nAxisIdx);
|
int GetAxisGoPositionAddr(int nAxisIdx);
|
int GetAxisGoPositionCommonAddr(int nAxisIdx);
|
int GetAxisJogCommandAddr(int nAxisIdx);
|
int GetAxisManualGoSpeedAddr(int nAxisIdx);
|
int GetAxisManualGoAccelAddr(int nAxisIdx);
|
int GetAxisJogSpeedAddr(int nAxisIdx);
|
|
// theta axis
|
int GetAxisThetaPositionAddr();
|
int GetAxisThetaStatusAddr();
|
int GetAxisThetaGoPositionAddr();
|
int GetAxisThetaJogCommandAddr();
|
int GetAxisThetaManualGoAddr();
|
int GetAxisThetaManualGoAckAddr();
|
int GetAxisThetaManualGoSpeedAddr();
|
int GetAxisThetaManualGoAccelAddr();
|
int GetAxisThetaJogSpeedAddr();
|
int GetAxisThetaJogAccelAddr();
|
|
// gantry
|
int GetGantryAxisCount(int nGantryIdx);
|
int GetGantryManualGoAddr(int nGantryIdx);
|
int GetGantryManualGoAckAddr(int nGantryIdx);
|
int GetGantryCollisionPositionXAddr(int nGantryIdx);
|
int GetGantryCollisionPositionYAddr(int nGantryIdx);
|
|
|
int GetGantryAutoGoAddr(int nGantryIdx);
|
int GetGantryAutoGoAckAddr(int nGantryIdx);
|
int GetGantryMoveCountAddr(int nGantryIdx);
|
int GetGantryTriggerCountAddr(int nGantryIdx);
|
|
int GetGantryMeasureAutoGoAddr(int nGantryIdx);
|
int GetGantryMeasureAutoGoAckAddr(int nGantryIdx);
|
int GetGantryMeasureMoveCountAddr(int nGantryIdx);
|
int GetGantryMeasureTriggerCountAddr(int nGantryIdx);
|
|
int GetGantryWsiAutoGoAddr(int nGantryIdx);
|
int GetGantryWsiAutoGoAckAddr(int nGantryIdx);
|
int GetGantryWsiMoveCountAddr(int nGantryIdx);
|
int GetGantryWsiTriggerCountAddr(int nGantryIdx);
|
int GetGantryWsiMotionEndAddr(int nGantryIdx);
|
int GetGantryWsiNextPosMoveAddr(int nGantryIdx);
|
|
// Software Trigger Address
|
int GetSoftwareTriggerAddr(int nGantryIdx);
|
int GetSoftwareTriggerCmdAddr(int nGantryIdx);
|
int GetImageSnapCompleteAddr(int nGantryIdx);
|
|
static BOOL TransformIP_CStringToDWORD(const CString& strServerIP, DWORD& dwServerIP);
|
|
BOOL GetUseWsi() { return m_bUseWsi; }
|
|
public:
|
virtual void IMT2P_RunThreadProcess(const CMotionData& motionData);
|
|
protected:
|
|
|
protected:
|
IMotorControl2Parent* m_pMC2P;
|
CMotorControlInfo m_ControlInfo;
|
CMotionThread* m_pMotionThread;
|
|
protected:
|
int m_nIndex;
|
DWORD m_dwPeriod;
|
BOOL m_bConnected;
|
|
// var
|
int m_nAxisCount;
|
|
long *m_pAxisStatus;
|
float *m_pAxisPosition;
|
long *m_pAxisStatusPrev;
|
float *m_pAxisPositionPrev;
|
|
long *m_pAxisStatusAddr;
|
long *m_pAxisPositionAddr;
|
|
// axis theta
|
long m_axisThetaStatus;
|
long m_axisThetaStatusPrev;
|
float m_axisThetaPosition;
|
float m_axisThetaPositionPrev;
|
|
// review enable
|
long m_nAutoEnable;
|
long m_nAutoEnablePrev;
|
|
/*< LYW 20220704 - #4220 ADD Start >*/
|
long m_nMotorAlive;
|
long m_nMotorAlivePrev;
|
DWORD dwLastAliveTick;
|
/*< LYW 20220704 - #4220 ADD End >*/
|
|
// wsi signal
|
long m_nWsiMotionEndPrev;
|
BOOL m_bUseWsi;
|
bool m_nWsiMotionEndPrev2;
|
};
|