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.
112 lines
4.0 KiB
C++
112 lines
4.0 KiB
C++
#pragma once
|
|
// STL
|
|
#include <array>
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
// third party
|
|
#include "gclib.h"
|
|
#include "gclibo.h"
|
|
// ETEL
|
|
#ifdef WITH_ETEL
|
|
#include "dsa30.h"
|
|
#endif
|
|
|
|
// project
|
|
#include "utility.h"
|
|
#include "DebugSetting.h"
|
|
#include "Hardware.h"
|
|
|
|
class CMtrProfile;
|
|
|
|
class CCard
|
|
{
|
|
public:
|
|
CCard();
|
|
virtual ~CCard();
|
|
|
|
int GetOutputCardInitIndex(int nCardType, int nCardNo);
|
|
int GetInputCardInitIndex(int nCardType, int nCardNo);
|
|
void SetOutputCardInitIndex(int nCardType, int nCardNo, int nIndexNo);
|
|
void SetInputCardInitIndex(int nCardType, int nCardNo, int nIndexNo);
|
|
long GetOutputStatusSize() const;
|
|
BOOL GetOutputStatus(int nCardType, int nCardNo, int nPoint);
|
|
void SetOutputStatusSize(long lSize);
|
|
// Update the Output Status for read back
|
|
void SetOutputStatus(int nCardType, int nCardNo, int nPoint, BOOL bLogic);
|
|
|
|
// set / get Advantech Device Number
|
|
UINT_PTR GetAcmDeviceHandle(int nCardNo);
|
|
void SetAcmDeviceHandle(int nCardNo, UINT_PTR hDevHandle);
|
|
//
|
|
GCon GetGalilCardHandle(int nCardType, int nCardNo);
|
|
void SetGalilCardHandle(int nCardType, int nCardNo, GCon hDMC);
|
|
int Get7296PortNo(int nPoint);
|
|
BOOL GetOutputStatus(int nIndex) const;
|
|
std::vector<BOOL> GetOutputStatus();
|
|
|
|
// Advantech : to get device number which is need to open the device handle
|
|
ULONG GetAcmDeviceNum(ULONG DevType, ULONG BoardID, ULONG MasterRingNo, ULONG SlaveBoardID);
|
|
//
|
|
void RegisterAxisHandle(const CMtrProfile& mtrProfile, UINT_PTR hAxis);
|
|
UINT_PTR GetAxisHandle(const CMtrProfile& mtrProfile);
|
|
|
|
// Adlink EtherCAT master
|
|
long GetAdlinkECATBoardId();
|
|
void SetAdlinkECATBoardId(long lBoardId);
|
|
|
|
bool m_bTraceData{ false };
|
|
|
|
bool m_bBenchDebug{ false };
|
|
//
|
|
CDebugSetting m_benchDebugSetting;
|
|
|
|
protected:
|
|
// for 8134
|
|
static std::array<HANDLE, 32> m_hMotionIntArr; // each axis has 1 int event
|
|
// for 8164
|
|
static std::array<HANDLE, 32> m_h8164MotionIntArr; // each axis has 1 int event
|
|
// for Galil Optima series
|
|
static std::array<HANDLE, 32> m_hGalilMotionIntArr; // each axis has 1 int event
|
|
|
|
// Advantech EtherCAT - cater up to 64 axis / card max 16 card
|
|
static std::array<std::array<HANDLE, 64>, 16> m_hAdvantechMotionIntArr; // each axis has 1 int event
|
|
|
|
// Advantech Card Handle - cater 16 card
|
|
static std::array<UINT_PTR, 16> m_hAcmDeviceHandle; // each card has 1 handle
|
|
|
|
// Adlink ECT
|
|
static long m_lAdlinkECATBoardId; // to store the board ID of Adlink ECAT card;
|
|
|
|
#ifdef WITH_ETEL
|
|
// ETEL - per axis handle
|
|
static std::array<DSA_DRIVE*, MAX_ETEL_AXIS> m_ETEL_DSA_DRIVE; // cater up to 32 ETEL Axis
|
|
#endif
|
|
|
|
private:
|
|
// track the input cards initialised Index
|
|
// currently this is used for AdLink PCI IO Cards
|
|
// for up to 6 different type of cards with 16 cards in each type per system
|
|
static std::array<std::array<int, MAX_CARD_FOR_EACH_TYPE>, MAX_CARD_TYPE> m_nInputCardIndex;
|
|
|
|
// track the output cards initialised Index
|
|
// currently this is used for AdLink PCI IO Cards
|
|
// for up to 6 different type of cards with 16 cards in each type per system
|
|
static std::array<std::array<int, MAX_CARD_FOR_EACH_TYPE>, MAX_CARD_TYPE> m_nOutputCardIndex;
|
|
|
|
// tracking of output point status for read back purpose
|
|
// cater for 6 different output cards type
|
|
// 16 cards per type
|
|
// 144 points per card
|
|
// static bool m_nOutputStatus[MAX_CARD_TYPE][MAX_CARD_FOR_EACH_TYPE][MAX_POINTS_FOR_EACH_CARD];
|
|
// for output tracking
|
|
static std::vector<BOOL> m_bOutputArray;
|
|
//
|
|
// track the Galil cards initialised handle
|
|
// currently this is used for Galil Cards only
|
|
// for up to 5 different type of cards with 5 cards in each type per system
|
|
static std::array<std::array<GCon, 5>, 5> m_hdmcGalil;
|
|
|
|
static std::map<unsigned int, UINT_PTR> m_mapAxisHandle;
|
|
};
|