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.

304 lines
7.9 KiB
C

#pragma once
#include <vector>
#include "nlohmann/json.hpp"
#include "HardwareConfiguration.h"
#include "DllDefines.h"
/**
* @brief json format
* @summary
* {
* "InputCard":[
* {
* "Type": "7851",
* "NumOfCard": 1,
* "CardCfg": [
* {
* "Channels": [
* [ 0,0,0,0,0],
* [ 0,0,0,0,0],
* [ 0,0,0,0,0],
* [ 0,0,0,0,0]
* ]
* }
* ]
* }
* ],
* "OutputCard":[
* {
* "Type": "7434",
* "NumOfCard": 1
* }
* ],
* "MotionCard":[
* {
* "Type": "8164",
* "NumOfCard": 2
* },
* {
* "Type": "ADLINK_APS",
* "NumOfCard": 1,
* "DistributedMotionCfg":[
* {
* "Type": "7856",
* "CardCfg":[
* {
* "Address": 1,
* "HSLSpeed": 1,
* "HSLHubNumber": 2,
* "MotionNetSpeed":3
* }
* ]
* }
* ]
* }
* ],
* "EncoderCard":[
* {
* "Type": "8133",
* "NumOfCard": 1
* }
* ],
* "Galil":{
* "TriggerPulseWidth":2,
* "NewHomeBySensor":false
* }
*
* }
**/
namespace nsHardware
{
3 months ago
using stMotionNetCfg = struct _stMotionNetCfg
{
// for Adlink motionnet & advantech ethercat
int Address{ -1 };
// for motionet
int HSLSpeed{ 2 }; // 1=3Mbps, 2=6Mpbs, 3=12Mbps
int HSLHubNumber{ 0 }; // 0-7
int MotionNetSpeed{ 3 };
};
3 months ago
using stDistributedMotionCfg = struct _stDistributedMotionCfg
{
std::string Type{ "ERROR" };
std::vector<stMotionNetCfg> CardCfg;
};
3 months ago
using stDIOCardCfg = struct _stDIOCardCfg
{
// For 7296 DIO
std::vector<std::vector<int>> Channels{};
};
3 months ago
using stGalilCardCfg = struct _stGalilCardCfg
{
int TriggerPulseWidth{ 2 };
bool NewHomeBySensor{ false };
};
3 months ago
using stHardwareCfg = struct _stHardwareCfg
{
std::string Type{ "ERROR" };
int NumOfCard{ 0 };
// for DIO 7296
std::vector<stDIOCardCfg> CardCfg{};
// For Distrbuted Motion (MotionNet / Advantech Ethercat)
std::vector<stDistributedMotionCfg> DistributedMotionCfg{};
};
3 months ago
using stHardware = struct _stHardware
{
std::vector<stHardwareCfg> InputCard;
std::vector<stHardwareCfg> OutputCard;
std::vector<stHardwareCfg> MotionCard;
std::vector<stHardwareCfg> EncoderCard;
// custom obtion for Galil Card
stGalilCardCfg Galil;
};
}
namespace nsHardware
{
using namespace nlohmann;
template <typename T>
inline void getValue(const nlohmann::json& j, const std::string& fieldname, T& value)
{
if (j.contains(fieldname))
{
j.at(fieldname).get_to(value);
}
}
void from_json(const json& j, stMotionNetCfg& x);
void to_json(json& j, const stMotionNetCfg& x);
void from_json(const json& j, stDistributedMotionCfg& x);
void to_json(json& j, const stDistributedMotionCfg& x);
void from_json(const json& j, stDIOCardCfg& x);
void to_json(json& j, const stDIOCardCfg& x);
void from_json(const json& j, stGalilCardCfg& x);
void to_json(json& j, const stGalilCardCfg& x);
void from_json(const json& j, stHardwareCfg& x);
void to_json(json& j, const stHardwareCfg& x);
void from_json(const json& j, stHardware& x);
void to_json(json& j, const stHardware& x);
inline void from_json(const json& j, stMotionNetCfg& x)
{
getValue(j, "Address", x.Address);
getValue(j, "HSLSpeed", x.HSLSpeed);
getValue(j, "HSLHubNumber", x.HSLHubNumber);
getValue(j, "MotionNetSpeed", x.MotionNetSpeed);
}
inline void to_json(json& j, const stMotionNetCfg& x)
{
j = nlohmann::json{
{ "Address", x.Address },
{ "HSLSpeed", x.HSLSpeed },
{ "HSLHubNumber", x.HSLHubNumber },
{ "MotionNetSpeed", x.MotionNetSpeed }
};
}
inline void from_json(const json& j, stDistributedMotionCfg& x)
{
getValue(j, "Type", x.Type);
getValue(j, "CardCfg", x.CardCfg);
}
inline void to_json(json& j, const stDistributedMotionCfg& x)
{
j = nlohmann::json{
{ "Type", x.Type },
{ "CardCfg", x.CardCfg }
};
}
inline void from_json(const json& j, stDIOCardCfg& x)
{
getValue(j, "Channels", x.Channels);
}
inline void to_json(json& j, const stDIOCardCfg& x)
{
j = nlohmann::json{
{ "Channels", x.Channels }
};
}
inline void from_json(const json& j, stGalilCardCfg& x)
{
getValue(j, "TriggerPulseWidth", x.TriggerPulseWidth);
getValue(j, "NewHomeBySensor", x.NewHomeBySensor);
}
inline void to_json(json& j, const stGalilCardCfg& x)
{
j = nlohmann::json{
{ "TriggerPulseWidth", x.TriggerPulseWidth },
{ "NewHomeBySensor", x.NewHomeBySensor }
};
}
inline void from_json(const json& j, stHardwareCfg& x)
{
getValue(j, "Type", x.Type);
getValue(j, "NumOfCard", x.NumOfCard);
getValue(j, "CardCfg", x.CardCfg);
//
getValue(j, "DistributedMotionCfg", x.DistributedMotionCfg);
}
inline void to_json(json& j, const stHardwareCfg& x)
{
j = nlohmann::json{
{ "Type", x.Type },
{ "NumOfCard", x.NumOfCard },
{ "CardCfg", x.CardCfg },
{ "DistributedMotionCfg", x.DistributedMotionCfg }
};
}
inline void from_json(const json& j, stHardware& x)
{
getValue(j, "InputCard", x.InputCard);
getValue(j, "OutputCard", x.OutputCard);
getValue(j, "MotionCard", x.MotionCard);
getValue(j, "EncoderCard", x.EncoderCard);
//
getValue(j, "Galil", x.Galil);
}
inline void to_json(json& j, const stHardware& x)
{
j = nlohmann::json{
{ "InputCard", x.InputCard },
{ "OutputCard", x.OutputCard },
{ "MotionCard", x.MotionCard },
{ "EncoderCard", x.EncoderCard },
//
{ "Galil", x.Galil }
};
}
}
class IODLLCLASS CHardwareJson : public CHardwareConfiguration
{
public:
// ctor
CHardwareJson();
virtual ~CHardwareJson();
// Inherited via CHardwareConfiguration
/**
* @brief For DIO 7496 to configure io point type (input / output)
* @summary 0 = None, 1 = Input, 2 = Output
*
* @param nCardType 1-n
* @param nCardNo 1-n
* @param nNoOfChannel up to 5
* @param [out] npChannelArray
* @param nWhatCard
*
* @returns true = successfull
*/
3 months ago
bool GetChannelConfig(int nCardType, int nCardNo, int nNoOfChannel, std::vector<int>& vecChannelArray, int nWhatCard) override;
int GetSharing(int nCardType, int nCardNo, int nWhatCard) override;
int GetNoOfDifferentCardType(int nWhatCard) override;
std::string GetCardName(int nCardTypeNo, int nWhatCard) override;
int GetNoOfCard(int nCardTypeNo, int nWhatCard) override;
private:
void Load();
std::vector<nsHardware::stHardwareCfg>& CHardwareJson::GetHardware(int nWhatCard);
nsHardware::stHardware m_hardware;
// Inherited via CHardwareConfiguration
int GetNoOfModels(int nCardTypeNo, int nWhatCard) override;
std::string GetModelName(int nCardTypeNo, int nModelNo, int nWhatCard) override;
int GetModelNoOfCards(int nCardTypeNo, int nModelNo, int nWhatCard) override;
int GetAddress(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard) override;
int GetSpeed(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard) override;
int GetHSLSpeed(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard) override;
int GetHSLHubNumber(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard) override;
// Inherited via CHardwareConfiguration
int GetGalilTriggerPulseWidth() override;
// Inherited via CHardwareConfiguration
bool GetGalilNewHomeBySensor() override;
};