基础测试用例¶
前言¶
cnc_sdk是福建富昌维控电子科技股份有限公司开发的一款适用于旗下MC系列运动控制器的通用sdk
SDK信息¶
- 版本:2.0.0
- 文件MD5:
- x64:
- 0a9026de3394696745778b341d286a12 *CncApi.dll
- c014e74f4eef211c3d77b9e62b64b247 *CncApi.lib
- bdb34ca21c3c44f990c6ee13f146f0b9 *CncApid.dll
- b2a4b18c71c3362a58fe614ac9582183 *CncApid.lib
- x86:
- 89f6399273b6e589a7485c1b85c1b923 *CncApi.dll
- 42e4be016d72c8cf58631dc3640ca4af *CncApi.lib
- 451a97804224db534a7733221fa26d2f *CncApid.dll
- 3ec556ff1dc6d8935bf4444761e828e1 *CncApid.lib
- x64:
- 构建信息:
- 平台工具集:Visual Studio 2017 (v141)
- Windows SDK版本:10.0.17763.0
新建项目并附加函数库¶
在VS2017菜单“文件”→“新建”→ “项目”,启动创建项目向导

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

复制【cnc_sdk】到项目目录

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

进入项目的属性页面

在【VC++目录】选项中配置【包含目录】、【库目录】



在【链接器】-【输入】中配置【附加依赖项】

配置CncApi的lib库用以编译

【应用】并【确认】

编程¶
【源文件】新建一个main.cpp

查看函数手册,熟悉相关函数接口¶

| 类名 | 函数名 | 参数 | 功能 |
|---|---|---|---|
| CCommApi | connect | (const std::string &sIp, uint16_t uPort) | 连接控制器 |
| CProxyEntry | 管理类 | ||
| CProxyMotion | setEstop | bool | 急停/急停复位 |
| CProxyMotion | setEnable | bool | 使能/取消使能 |
| CProxyStatus | getMotionState | weconcnc::MACHINE_STATE_E | 获取当前状态 |
| CProxyStatus | getCoord | weconcnc::COORDINATE_T | 获取当前坐标 |
编写一个cnc_sdk的测试代码¶
#include <iostream>
#include <windows.h>
#include "CncApi.h"
using CNC_RTN = weconcnc::WECONCNC_ERROR_E;
using CNC_STA = weconcnc::MACHINE_STATE_E;
using CNC_COORD = weconcnc::COORDINATE_T;
int main() {
int nRtn = 0;
CNC_RTN enumRtn = CNC_RTN::WECONCNC_ERROR_SUCCESS;
weconcnc::CCommApi *m_pComm;
weconcnc::CProxyEntry *m_pEntry;
weconcnc::CProxyMotion *m_pMotion;
weconcnc::CProxyStatus *m_pStatus;
CNC_COORD coord;
m_pComm = new weconcnc::CCommApi();
/* 连接指定的控制器 */
nRtn = m_pComm->connect("192.168.54.98", 19995);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != nRtn) {
printf("connect failed!\n");
return -1;
}
/* 注册相关控制句柄 */
m_pEntry = new weconcnc::CProxyEntry(m_pComm);
m_pMotion = m_pEntry->getProxyMotion();
m_pStatus = m_pEntry->getProxyStatus();
/* 急停 */
printf("SET E-STOP");
enumRtn = m_pMotion->setEstop(true);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != enumRtn) {
printf(" ===> FAILED!\n");
}
else {
printf(" ===> SUCCESS!\n");
}
Sleep(500);
/* 获取状态 */
CNC_STA sta;
enumRtn = m_pStatus->getMotionState(sta);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS == enumRtn) {
printf("GET STA = %d\n", sta);
}
Sleep(500);
/* 急停复位 */
printf("RESET E-STOP");
enumRtn = m_pMotion->setEstop(false);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != enumRtn) {
printf(" ===> FAILED!\n");
}
else {
printf(" ===> SUCCESS!\n");
}
Sleep(500);
enumRtn = m_pStatus->getMotionState(sta);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS == enumRtn) {
printf("GET STA = %d\n", sta);
}
/* 关闭使能 */
printf("POWER OFF");
enumRtn = m_pMotion->setEnable(false);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != enumRtn) {
printf(" ===> FAILED!\n");
}
else {
printf(" ===> SUCCESS!\n");
}
Sleep(500);
enumRtn = m_pStatus->getMotionState(sta);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS == enumRtn) {
printf("GET STA = %d\n", sta);
}
/* 使能 */
printf("POWER ON");
enumRtn = m_pMotion->setEnable(true);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != enumRtn) {
printf(" ===> FAILED!\n");
}
else {
printf(" ===> SUCCESS!\n");
}
Sleep(500);
enumRtn = m_pStatus->getMotionState(sta);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS == enumRtn) {
printf("GET STA = %d\n", sta);
}
/* 获取当前位置信息 */
enumRtn = m_pStatus->getCoord(coord);
if (CNC_RTN::WECONCNC_ERROR_SUCCESS != enumRtn) {
printf("get coord failed!\n");
}
printf("X: %.3lf\nY: %.3lf\nZ: %.3lf\n", coord.getX(), coord.getY(), coord.getZ());
return 0;
}
编译

运行测试
可以看到正常读取控制器内容
