运动的暂停恢复和速度倍率设置案例

运动的暂停恢复和速度倍率设置

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

运动的暂停和恢复对应的函数接口

指令原型 WECONCNC_ERROR_E pauseProgram()
指令说明 暂停当前系统正在运行的程序
输入参数
输出参数
返回值 WECONCNC_ERROR_E
指令原型 WECONCNC_ERROR_E resumeProgram();
指令说明 恢复运行当前系统暂停中的程序
输入参数
输出参数
返回值 WECONCNC_ERROR_E
  1. 按照设置的位置距离进行对应的连续插补运动,通过停止运动按钮的事件处理函数来停止当前的运动。
    #include <iostream>
    #include <windows.h>
    #include "CncApi.h"
    
    int main()
    {
    
        weconcnc::CCommApi *pComm = new weconcnc::CCommApi();
        weconcnc::CProxyEntry *pEntry = new weconcnc::CProxyEntry(pComm);
        weconcnc::CProxyMotion *pMotion = pEntry->getProxyMotion();
        weconcnc::CProxyIO *pIo = pEntry->getProxyIO();
    
        weconcnc::WECONCNC_ERROR_E ret = weconcnc::WECONCNC_ERROR_SUCCESS;
    
        std::string sIp = "192.168.54.98";
        ret = pComm->connect(sIp, 9995);
        if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
            std::cout << "connect failed!" << std::endl; 
            return -1;
        }
    
        ret = pMotion->resetProgram();
        if (WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "reset program failed!" << std::endl;
        return -2;
        }
    
        std::string sFromFile = "C://fileName.txt";
    
        ret = pMotion->downloadGcode(sFromFile);
        if (WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "download gcode file failed!" << std::endl;
        return -3;
        }
    
        ret = pMotion->openProgram(sFromFile );
        if (WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "open program failed!" << std::endl;
        return -4;
        }
    
        int32_t nStartLine = 0;
    
        ret = pMotion.runProgram(nStartLine);
        if (WECONCNC_ERROR_SUCCESS != ret) {
        std::cout << "run program failed!" << std::endl;
        return -5;
        }
        //运动暂停
        ret = pMotion->pauseProgram(); 
        if (WECONCNC_ERROR_SUCCESS != ret) { 
        std::cout << "stop program failed!" << std::endl;
        return -1; 
        }
    
        //运动恢复
        ret = pMotion->resumeProgram(); 
        if (WECONCNC_ERROR_SUCCESS != ret) { 
        std::cout << "resume program failed!" << std::endl; 
        return -1; 
        }
    
        return 0;
    }
    
  2. 编译

image18

使用Waux.h中的接口实现方式

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

image19

  1. 链接控制器,获取链接句柄。
指令 说明
WAux_OpenCom 串口连接控制器
WAux_OpenEth 以太网连接控制器
WAux_OpenPci PCI 卡连接
WAux_FastOpen 与控制器建立连接,指定连接的等待时间.
指令原型 int32 __stdcall WAux_Pause(WMC_HANDLE handle)
指令说明 暂停控制器内部运行的 BASIC 程序。
输入参数 handle 连接句柄。
输出参数
返回值 int32 成功返回值为 0
指令原型 int32 __stdcall WAux_Resume(WMC_HANDLE handle)
指令说明 继续控制器内部运行的 BASIC 程序。
输入参数 handle 连接句柄。
输出参数
返回值 int32 成功返回值为 0

2.控制器连接

#include "Waux.h"
#include <iostream>
#include <windows.h>
using namespace weconcnc;

void commandCheckHandler(const char *command, int ret)
{
    if (ret)//非0则失败
    {
        printf("%s fail!return code is %d\n", command, ret);
    }
}
int main()
{
    char *ip_addr = (char *)"127.0.0.1"; //控制器IP地址
    ZMC_HANDLE handle = NULL; //连接句柄
    int ret = WAux_OpenEth(ip_addr, &handle); //连接控制器
    if (ERR_SUCCESS != ret)
    {
        printf("控制器连接失败!\n");
        handle = NULL;
        Sleep(2000);
        return -1;
    }
    printf("控制器连接成功!\n");

    const char * filename= ".\\ECAT 初始化.bas"; 
    //下载程序到 ROM 中 0-RAM 1-ROM 
    ret = WAux_BasDown(handle,filename,1);//把 ECAT 初始化 bas 文件下载到控制器里面进行初 
    始化,该程序下载后,经过 7S 延时(等待驱动器上电预留时间)进行 Ethercat 总线初始化 
    commandCheckHandler("WAux_BasDown",ret); 
    Sleep(500);//延时 500ms 等等程序下载到控制器 
    //PUL_AxisStart,PUL_AxisNum,Bus_AxisStart 为 ECAT 初始化.bas 文件定义的三个全局变量 
    float GetUserVar; 
    commandCheckHandler("WAux_BasDown",ret); 
    printf("设置前 Bus_AxisStart=%f\n",GetUserVar); 
    commandCheckHandler("WAux_BasDown",ret); 
    printf("设置后 Bus_AxisStart=%f\n",GetUserVar);\
    Sleep(2000); 

    //运动暂停
    ret = WAux_Pause(handle);
    if (ERR_SUCCESS != ret)
    {
        printf("运动暂停失败!\n");
        handle = NULL;
        Sleep(2000);
        return -1;
    }

    //运动恢复
    ret = WAux_Resume(handle);
    if (ERR_SUCCESS != ret)
    {
        printf("运动恢复失败!\n");
        handle = NULL;
        Sleep(2000);
        return -1;
    }

    ret = WAux_Close(handle); //关闭连接 
    commandCheckHandler("WAux_Close", ret) ;//判断指令是否执行成功 
    printf("connection closed!\n"); 
    handle = NULL; 

    return 0;
}