例程里面有两个类:
dmcaxis,dmcio
//dmcio类
#pragma once
#include <QString>
#include <QJsonObject>
#include "global.h"
class DmcIO
{
public:
QString name;
int id;
int cardNum;
int bitNum;
bool state;
bool isUsed = true;
QString highName;
QString lowName;
QString cnName;
QString groupName;
bool isCAN;
inline QJsonObject toJSonObject()
{
QJsonObject ob;
ob.insert(DataID,id);
ob.insert(IO_Name, name);
ob.insert(IO_CardNum, cardNum);
ob.insert(IO_BitNum, bitNum);
ob.insert(IO_State, state);
ob.insert(IO_IsUsed, isUsed);
ob.insert(IO_HighName, highName);
ob.insert(IO_LowName, lowName);
ob.insert(IO_CnName, cnName);
ob.insert(IO_Group,groupName);
return ob;
}
};
//axis有关的dmcaxis类
#pragma once
#include <QString>
#include "global.h"
class DmcAxis
{
public:
int axisID = 0;
QString axisName;
QString cnName;
QString motorType;
int cardNum;
int axisNum;
double minVel;
double maxVel;
double accVel;
double decVel;
double stopVel;
double sPara;
double equiv;
double lead;
int homeMode;
double homeMinVel;
double homeMaxVel;
double homeAccVel;
double homeDecVel;
double homeOffsetPos;
QString currentPosName;
bool currentPosState;
int posMode = 1;
int msTimeout = 30000;
bool isDelay = true;
bool deviceInitState;
int cardCount;
double pos;
int state;
int stateMachine;
bool equivResult;
bool homeConfigResult;
bool configResult;
bool enableResult;
bool homeResult;
bool pMoveResult;
bool vMoveResult;
bool clearAxisErrorResult;
int posNum = 1;
//寄存器参数
double ez_logic;
double el_enable;
double el_logic;
double el_mode;
double alm_enable;
double alm_logic;
inline QJsonObject toJSonObject()
{
QJsonObject ob;
ob.insert(DataID,axisID);
ob.insert(Axis_AxisName, axisName);
ob.insert(Axis_CnName, cnName);
ob.insert(Axis_CardNum, cardNum);
ob.insert(Axis_AxisNum, axisNum);
ob.insert(Axis_Minvel, minVel);
ob.insert(Axis_MaxVel, maxVel);
ob.insert(Axis_AccVel, accVel);
ob.insert(Axis_DecVel, decVel);
ob.insert(Axis_StopVel, stopVel);
ob.insert(Axis_SPara, sPara);
ob.insert(Axis_Equiv, equiv);
ob.insert(Axis_Lead, lead);
ob.insert(Axis_HomeMode, homeMode);
ob.insert(Axis_HomeMinVel, homeMinVel);
ob.insert(Axis_HomeMaxVel, homeMaxVel);
ob.insert(Axis_HomeAccVel, homeAccVel);
ob.insert(Axis_HomeDecVel, homeDecVel);
ob.insert(Axis_HomeOffSetPos, homeOffsetPos);
ob.insert(Axis_PosMode, posMode);
ob.insert(Axis_MsTimeOut, msTimeout);
ob.insert(Axis_IsDelay, isDelay);
ob.insert(Axis_MotorType,motorType);
ob.insert(Axis_EZ_logic,ez_logic);
ob.insert(Axis_EL_enable,el_enable);
ob.insert(Axis_EL_logic,el_logic);
ob.insert(Axis_EL_mode,el_mode);
ob.insert(Axis_ALM_enable,alm_enable);
ob.insert(Axis_ALM_logic,alm_logic);
return ob;
}
};
class DmcPosition
{
public:
int posID;
int axisID;
QString axisName;
QString posName;
QString notes;
};
class DmcModel
{
public:
int modelID;
QString modelName;
QString notes;
};
存放json类型的数据存储在全局变量中(例如ob.insert(DataID,axisID)中的DataID,global.h)
#ifndef GLOBAL_H
#define GLOBAL_H
#define DataID "ID" //这是共有的参数
//*******DMC Axis*************(对应DmcIO类中的一些参数)
#define Axis_AxisName "axisName"
#define Axis_CnName "cnName"
#define Axis_CardNum "cardNum"
#define Axis_AxisNum "axisNum"
.....
//*******DMC IO***************(对应DmcAxis类的一些参数)
#define IO_Name "IOName"
#define IO_CardNum "cardNum"
#define IO_BitNum "bitNum"
#define IO_State "state"
....
使用方式:
以一个接口类做例子:
#ifndef FUNCDMC_H
#define FUNCDMC_H
//添加库的头文件
#include <QObject>
#include <windows.h>
#include <LTDMC.h>
//用于轴卡io信息map遍历
#include <QObject>
#include <QString>
#include <QMap>
//添加板卡类的文件
#include "dmcaxis.h"
#include "dmcio.h"
using AxisName = QString;
using AxisHash = QMap<AxisName, DmcAxis*>;
using IOName = QString;
using IOHash = QMap<IOName, DmcIO*>;
class funcdmc : public QObject
{
Q_OBJECT
public:
funcdmc(QObject* parent = nullptr);
~funcdmc();
//数据库的一些添加修改删除
//........
public:
//板卡基本功能api
//判断轴是否在运动
Q_INVOKABLE int GetAxisStateMachine(QString axisName);
//获取io口input的值
Q_INVOKABLE int GetInbit(QString inputName);
//获取io口output的值
Q_INVOKABLE int SetOutbit(QString outputName, int on_off);
private:
AxisHash m_axises; //轴名得到轴的信息 m_axises[axisName]
IOHash m_inputs;
IOHash m_outputs;
};
#endif
步骤1:添加头文件,在类前添加using的hash表
步骤2:private实例化
步骤3:在接口函数里面进行取值调用
int funcdmc::GetAxisStateMachine(QString axisName)
{
int cardNum;
int axisNum;
//根据轴名从数据库中读取卡号,轴号
cardNum = m_axises[axisName]->cardNum;
axisNum = m_axises[axisName]->axisNum;
if (dmc_check_done(cardNum, axisNum) == 0) //已经在运动中
return 0;
}
int funcdmc::GetInbit(QString inputName)
{
int cardNum;
int bitNum;
cardNum = m_inputs[inputName]->cardNum;
bitNum = m_inputs[inputName]->bitNum;
bool isused = m_inputs[inputName]->isUsed;
if (!isused)
return 0;
return dmc_read_inbit(cardNum, bitNum);
}
int funcdmc::SetOutbit(QString outputName,int on_off)
{
int cardNum;
int bitNum;
cardNum = m_outputs[outputName]->cardNum;
bitNum = m_outputs[outputName]->bitNum;
return dmc_write_outbit(cardNum, bitNum, on_off);
}