跳转至

基础测试用例

前言

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
  • 构建信息:
    • 平台工具集: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;
}

编译

运行测试

可以看到正常读取控制器内容