跳转至

hal引脚监控应用案例

1.新建项目并附加函数库

(1)在VS2017菜单“文件”→“新建”→ “项目”,启动创建项目向导。

image1

  1. 选择开发语言为“Visual C++”和程序类型“空项目”。
    image2

  2. 找到厂家提供的SDK库,路径如下(64位release库为例)。
    image3

    image4

函数库具体路径如下

image5

image6

  1. 复制【cnc_sdk】到项目目录。

image7

为了保证可以在VS调试器中运行,将相关平台的dll库复制到代码目录(如,项目名称为CncSdkDemo,则放在【{你的工程目录}\CncSdkDemo\CncSdkDemo】目录下),这里以64位平台为例

(将【{你的工程目录}\CncSdkDemo\CncSdkDemo\cnc_sdk\lib\x64】下的“CncApi.dll”和“CncApid.dll”复制到【{你的工程目录}\CncSdkDemo\CncSdkDemo\

image8

(5)进入项目的属性页面。

image9 在【VC++目录】选项中配置【包含目录】、【库目录】
image10 image11 image12 在【链接器】-【输入】中配置【附加依赖项】,需要用到CncApi.lib

image13 【确认】并【应用】
image14 2.编程

(1)【源文件】新建一个main.cpp
image15 image16 (2)查看函数手册,熟悉相关函数接口

image17 连接控制器接口:

函数名 功能
connect 连接控制器

hal引脚值获取相关接口:

函数名 功能
getAllPin 设置伺服电子齿轮比分子
getPin 获取伺服电子齿轮比分子
setPinValue 设置伺服电子齿轮比分母

3.hal引脚值相关操作

1.连接控制器

void connect()
{
    weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
    std::string ipAddress = "192.168.54.98";
    uint16_t port = 9995;
    weconcnc::WECONCNC_ERROR_E result = commApi->connect(ipAddress, port);
}
2.获取hal引脚值:

获取hal引脚值有三种方式:

①getAllPin(std::vector\<PIN_DATA_T> &vecPinData): 获取所有引脚的数据。

参数: vecPinData,所有引脚的详细数据,包括类型、名称、值,具体参见PIN_DATA_T定义

返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

void getAllPin()
{
    weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
    std::vector<weconcnc::PIN_DATA_T> allPins;
    weconcnc::WECONCNC_ERROR_E ret = pIO->getAllPin(allPins); 
    if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "get pinData failed!" << std::endl;
    }
    else {
        for (auto& pin : allPins)
        switch (pin.nPinType) {
            case weconcnc::PIN_TYPE_BIT:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.bitValue << std::endl;
                break;
            case weconcnc::PIN_TYPE_FLOAT:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.fltValue << std::endl;
                break;
            case weconcnc::PIN_TYPE_S32:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.s32Value << std::endl;
                break;
            case weconcnc:: PIN_TYPE_U32:   
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.u32Value << std::endl;
                break;
        }
    }
}
②getPin(std::vector\<std::string> vecPinName, std::vector\<PIN_DATA_T> &vecPinData): 根据多个引脚名称获取对应的引脚数据。

参数: vecPinName,引脚名称队列

vecPinData, 引脚值,具体参见PIN_DATA_T定义

返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

void getPin()
{
    weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
    std::vector<std::string> pinNames = { "axis.0.motor-pos-fb", "axis.1.motor-pos-fb", "axis.2.motor-pos-fb" };
    std::vector<weconcnc::PIN_DATA_T> pinDatas;

    weconcnc::WECONCNC_ERROR_E ret = pIO->getPin(pinNames, pinDatas);
    if (ret != weconcnc::WECONCNC_ERROR_SUCCESS) {
        std::cout << "get pinData failed!" << std::endl;
    } else {
        for (auto& pin : pinDatas)
            switch (pin.nPinType) {
            case weconcnc::PIN_TYPE_BIT:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.bitValue << std::endl;
                break;
            case weconcnc::PIN_TYPE_FLOAT:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.fltValue << std::endl;
                break;
            case weconcnc::PIN_TYPE_S32:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.s32Value << std::endl;
                break;
            case weconcnc::PIN_TYPE_U32:
                std::cout << pin.nPinType << "  " << pin.sName << " = " << pin.PinValue.u32Value << std::endl;
                break;
            }
    }
}
③getPin(std::string sPinName, PIN_DATA_T &stPinData): 根据单个引脚名称获取其数据。

参数: vecPinName,引脚名称队列

vecPinData, 引脚值,具体参见PIN_DATA_T定义

返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义

Void getPin()
{
    weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
    weconcnc::PIN_DATA_T pinData;
    std::string pinName = "axis.0.motor-pos-fb";
    weconcnc::WECONCNC_ERROR_E ret = pIO->getPin(pinName, pinData);
    if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "get pinData failed!" << std::endl;
    }
    else {
        std::cout << "get pinData succeed : " << std::to_string(pinData.PinValue.fltValue) <<  std::endl;
    }
}