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_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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值