跳转至

电子齿轮比配置案例

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 连接控制器

电子齿轮比相关接口:

函数名 功能
setMotorRevo 设置伺服电子齿轮比分子
getMotorRevo 获取伺服电子齿轮比分子
setShaftRevo 设置伺服电子齿轮比分母
getShaftRevo 获取伺服电子齿轮比分子

3.电子齿轮比设置

  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. 获取设置电子齿轮比分子:

    函数定义:

    ①setMotorRevo

    定义:WECONCNC_ERROR_E setMotorRevo(int32_t nServo, int32_t nMotorRevo);

    说明:设置伺服电子齿轮比分子

    参数:【IN】int32_t nServo,伺服序号

    int32_t nMotorRevo,电子齿轮比分子的值

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

    ②getMotorReve

    定义: WECONCNC_ERROR_E getMotorRevo(int32_t nServo, int32_t &nMotorRevo);

    说明:获取伺服电子齿轮比分子

    参数:【IN】int32_t nServo,伺服序号

    int32_t nMotorRevo,电子齿轮比分子的值

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

    void getAndSetMotorRevo()
    {
        int32_t nServo = 0;
        int32_t nMotorRevo;
    
        weconcnc::CCommApi* pComm = new weconcnc::CCommApi();
        weconcnc::CProxyEntry* pEntry = new weconcnc::CProxyEntry(pComm);
        weconcnc::CProxySys* pSys = pEntry->getProxySys();
        weconcnc::WECONCNC_ERROR_E ret;
        ret = pSys->getMotorRevo(nServo, nMotorRevo);
        if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
            std::cout << "getMotorRevo failed!" << std::endl;
        } else {
        std::cout << "motor revo:" << nMotorRevo << std::endl;
        }
    
        ret = pSys->setMotorRevo(nServo, 1124);
        ret = pSys->getMotorRevo(nServo, nMotorRevo);
        if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
            std::cout << "setMotorRevo failed!" << std::endl;
        } else{
        std::cout << "motor revo:" << nMotorRevo << std::endl;
        }
    }
    
    3. 获取设置电子齿轮比分母:

    函数定义:

    ①setShaftRevo

    定义:WECONCNC_ERROR_E setShaftRevo(int32_t nServo, int32_t nShaftRevo);

    说明:设置伺服电子齿轮比分母

    参数:【IN】int32_t nServo,伺服序号

    int32_t nShaftRevo,电子齿轮比分母的值

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

    ②getShaftRevo

    定义:WECONCNC_ERROR_E getShaftRevo(int32_t nServo, int32_t &nShaftRevo);

    说明:获取伺服电子齿轮比分母

    参数:【IN】int32_t nServo,伺服序号

    int32_t nShaftRevo,电子齿轮比分母的值

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

    void getAndSetShaftRevo()
    {
        int32_t nServo = 0;
        int32_t nShaftRevo = 10000;
    
        weconcnc::CCommApi* pComm = new weconcnc::CCommApi();
        weconcnc::CProxyEntry* pEntry = new weconcnc::CProxyEntry(pComm);
        weconcnc::CProxySys* pSys = pEntry->getProxySys();
        weconcnc::WECONCNC_ERROR_E ret;
        ret = pSys->getShaftRevo(nServo, nShaftRevo);
        if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
            std::cout << "getMotorRevo failed!" << std::endl;
        } else{
            std::cout << "motor revo:" << nShaftRevo << std::endl;
        }
    
        ret = pSys->setShaftRevo(nServo, 1124);
        ret = pSys->getShaftRevo(nServo, nShaftRevo);
        if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
            std::cout << "setMotorRevo failed!" << std::endl;
        } else {
            std::cout << "motor revo:" << nShaftRevo << std::endl;
        }
    }
    
    4.使用Waux.h中的接口实现方式

  3. 声明用到的头文件(Waux.h)和定义控制器连接

    image18

  4. 相关函数接口

    (1)链接控制器,获取链接句柄。

指令 说明
WAux_OpenCom 串口连接控制器
WAux_OpenEth 以太网连接控制器
WAux_OpenPci PCI 卡连接
WAux_FastOpen 与控制器建立连接,指定连接的等待时间.

(2)设置电子齿轮比相关接口。

指令 说明
WAux_Direct_EncoderRatio 设置电子齿轮比
  1. 设置电子齿轮比示例
    #include <Waux.h>
    #include <winsock2.h>
    int main()
    {
        WSADATA wsaData;
        int iResult;
    
        /* 初始化 Winsock */
        iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (iResult != 0) {
            printf("WSAStartup failed with error: %d\n", iResult);
        }
    
    
        char pIp[] = "192.168.54.98";
        WMC_HANDLE handle = NULL;
        int ret = WAux_OpenEth(pIp, &handle);
        if (ERR_SUCCESS != ret) {
            std::cout << "WAux_OpenEth failed!" << std::endl;
        }
        else {
            std::cout << "WAux_OpenEth success!" << std::endl;
        }
    
        int32_t iaxis = 0;
        int32_t nMotorRevo = 2;
        int32_t nShaftRevo = 1;
        ret = WAux_Direct_EncoderRatio(handle, iaxis, nMotorRevo, nShaftRevo);
        if (ERR_SUCCESS != ret) {
            std::cout << "WAux_Direct_EncoderRatio failed!" << std::endl;
        }
        else {
            std::cout << "WAux_Direct_EncoderRatio success!" << std::endl;
        }
    }