hal引脚监控应用案例¶
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 | 连接控制器 |
hal引脚值获取相关接口:
| 函数名 | 功能 |
| getAllPin | 设置伺服电子齿轮比分子 |
| getPin | 获取伺服电子齿轮比分子 |
| setPinValue | 设置伺服电子齿轮比分母 |
3.hal引脚值相关操作¶
1.连接控制器
void connect()
{
weconcnc::CCommApi *commApi = new weconcnc::CCommApi();
std::string ipAddress = "192.168.54.98";
uint16_t port = 9995;
weconcnc::WECONCNC_ERROR_E result = commApi->connect(ipAddress, port);
}
获取hal引脚值有三种方式:
①getAllPin(std::vector\<PIN_DATA_T> &vecPinData): 获取所有引脚的数据。
参数: vecPinData,所有引脚的详细数据,包括类型、名称、值,具体参见PIN_DATA_T定义
返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义
void getAllPin()
{
weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
std::vector<weconcnc::PIN_DATA_T> allPins;
weconcnc::WECONCNC_ERROR_E ret = pIO->getAllPin(allPins);
if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
std::cout << "get pinData failed!" << std::endl;
}
else {
for (auto& pin : allPins)
switch (pin.nPinType) {
case weconcnc::PIN_TYPE_BIT:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.bitValue << std::endl;
break;
case weconcnc::PIN_TYPE_FLOAT:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.fltValue << std::endl;
break;
case weconcnc::PIN_TYPE_S32:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.s32Value << std::endl;
break;
case weconcnc:: PIN_TYPE_U32:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.u32Value << std::endl;
break;
}
}
}
参数: vecPinName,引脚名称队列
vecPinData, 引脚值,具体参见PIN_DATA_T定义
返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义
void getPin()
{
weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
std::vector<std::string> pinNames = { "axis.0.motor-pos-fb", "axis.1.motor-pos-fb", "axis.2.motor-pos-fb" };
std::vector<weconcnc::PIN_DATA_T> pinDatas;
weconcnc::WECONCNC_ERROR_E ret = pIO->getPin(pinNames, pinDatas);
if (ret != weconcnc::WECONCNC_ERROR_SUCCESS) {
std::cout << "get pinData failed!" << std::endl;
} else {
for (auto& pin : pinDatas)
switch (pin.nPinType) {
case weconcnc::PIN_TYPE_BIT:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.bitValue << std::endl;
break;
case weconcnc::PIN_TYPE_FLOAT:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.fltValue << std::endl;
break;
case weconcnc::PIN_TYPE_S32:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.s32Value << std::endl;
break;
case weconcnc::PIN_TYPE_U32:
std::cout << pin.nPinType << " " << pin.sName << " = " << pin.PinValue.u32Value << std::endl;
break;
}
}
}
参数: vecPinName,引脚名称队列
vecPinData, 引脚值,具体参见PIN_DATA_T定义
返回值: WECONCNC_ERROR_E,请参见WECONCNC_ERROR_E定义
Void getPin()
{
weconcnc::CProxyIO *pIO = weconcnc::CProxyIO::getInstance(pComm);
weconcnc::PIN_DATA_T pinData;
std::string pinName = "axis.0.motor-pos-fb";
weconcnc::WECONCNC_ERROR_E ret = pIO->getPin(pinName, pinData);
if (weconcnc::WECONCNC_ERROR_SUCCESS != ret) {
std::cout << "get pinData failed!" << std::endl;
}
else {
std::cout << "get pinData succeed : " << std::to_string(pinData.PinValue.fltValue) << std::endl;
}
}