电子齿轮比配置案例¶
1.新建项目并附加函数库
(1)在VS2017菜单“文件”→“新建”→ “项目”,启动创建项目向导。

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

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


函数库具体路径如下


- 复制【cnc_sdk】到项目目录。

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

(5)进入项目的属性页面。
在【VC++目录】选项中配置【包含目录】、【库目录】
在【链接器】-【输入】中配置【附加依赖项】,需要用到CncApi.lib
【确认】并【应用】
2.编程
(1)【源文件】新建一个main.cpp
(2)查看函数手册,熟悉相关函数接口

连接控制器接口:
| 函数名 | 功能 |
| connect | 连接控制器 |
电子齿轮比相关接口:
| 函数名 | 功能 |
| setMotorRevo | 设置伺服电子齿轮比分子 |
| getMotorRevo | 获取伺服电子齿轮比分子 |
| setShaftRevo | 设置伺服电子齿轮比分母 |
| getShaftRevo | 获取伺服电子齿轮比分子 |
3.电子齿轮比设置
- 连接控制器
-
获取设置电子齿轮比分子:
函数定义:
①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定义
3. 获取设置电子齿轮比分母: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; } }函数定义:
①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定义
4.使用Waux.h中的接口实现方式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; } } -
声明用到的头文件(Waux.h)和定义控制器连接

-
相关函数接口
(1)链接控制器,获取链接句柄。
| 指令 | 说明 |
| WAux_OpenCom | 串口连接控制器 |
| WAux_OpenEth | 以太网连接控制器 |
| WAux_OpenPci | PCI 卡连接 |
| WAux_FastOpen | 与控制器建立连接,指定连接的等待时间. |
(2)设置电子齿轮比相关接口。
| 指令 | 说明 |
| WAux_Direct_EncoderRatio | 设置电子齿轮比 |
- 设置电子齿轮比示例
#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; } }