失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Dmc雷赛板卡仿写(三):创建类

Dmc雷赛板卡仿写(三):创建类

时间:2019-09-19 20:43:05

相关推荐

Dmc雷赛板卡仿写(三):创建类

例程里面有两个类:

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_OBJECTpublic: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]IOHashm_inputs;IOHashm_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);}

如果觉得《Dmc雷赛板卡仿写(三):创建类》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。