运动控制系统机械状态设置案例¶
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 | 连接控制器 |
机械状态相关接口:
| 函数名 | 功能 |
| getMotionState | 该接口将读取机器电源状态 |
| getOpMode | 该接口将读取当前操作模式 |
| getError | 该接口将获取当前系统运行的错误信息 |
| setEstop | 该接口设置当前系统的急停状态 |
| setEnable | 该接口设置当前系统的使能状态 |
| setOpMode | 该接口设置当前系统的模式 |
3.机械状态的获取及设置¶
- 连接控制器
- 获取机械状态
getMotionState:
void updateMotionState()
{
weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
weconcnc::MACHINE_STATE_E motionState;
weconcnc::CProxyStatus *proxyStatus = weconcnc::CProxyStatus::getInstance(commApi);
weconcnc::WECONCNC_ERROR_E result = proxyStatus->getMotionState(motionState);
if (result == weconcnc::WECONCNC_ERROR_SUCCESS) {
std::cout << "Motion State: " << motionState << std::endl;
}
}
void updateOpMode()
{
weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
weconcnc::CProxyStatus *proxyStatus = weconcnc::CProxyStatus::getInstance(commApi);
weconcnc::OP_MODE_E mode;
weconcnc::WECONCNC_ERROR_E ret = proxyStatus->getOpMode(mode);
if (ret != weconcnc::WECONCNC_ERROR_SUCCESS){
std::cout << "get failed " << std::endl;
} else {
std::cout << "OpMode: " << mode << std::endl;
}
}
void **updateErrorMessage**()
{
weconcnc::CCommApi \*commApi = new weconcnc::CCommApi();
weconcnc::CProxyStatus\* pStatus =
weconcnc::CProxyStatus::getInstance(commApi);
std::queue\<std::string\> queErrInfo;
weconcnc::WECONCNC_ERROR_E ret = pStatus-\>getError(*queErrInfo*);
if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
std::cout \<\< "failed!" \<\< std::endl;
}
while (!queErrInfo.empty()) {
std::cout \<\< queErrInfo.front() \<\< std::endl;
queErrInfo.pop();
}
}
void on_setEstopButton_clicked()
{
weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
weconcnc::CProxyMotion *proxyMotion = weconcnc::CProxyMotion::getInstance(commApi);
weconcnc::WECONCNC_ERROR_E ret = weconcnc::WECONCNC_ERROR_SUCCESS;
bool bEnable = true;
ret = proxyMotion->setEstop(bEnable);
}
void on_setEnableButton_clicked()
{
weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
weconcnc::CProxyMotion *proxyMotion = weconcnc::CProxyMotion::getInstance(commApi);
weconcnc::WECONCNC_ERROR_E ret = weconcnc::WECONCNC_ERROR_SUCCESS;
bool bEnable = true;
ret = proxyMotion->setEnable(bEnable);
}
void on_setOpMode_clicked()
{
weconcnc::CProxyMotion *pMotion = new weconcnc::CProxyMotion::getInstance(commApi);
weconcnc::OP_MODE_E mode = weconcnc::MODE_MANUAL;
weconcnc::WECONCNC_ERROR_E ret = weconcnc::WECONCNC_ERROR_SUCCESS;
ret = pMotion->setOpMode(mode);
if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
std::cout << "set optional mode failed!" << std::endl;
}
}