日语论文参考文献网站网络营销是什么
网上已经有些大佬给出了解决方案,但是基本有两种,一种内部函数,另外一种就是导出程序的刀轨文件找坐标计算。使用内部函数进行操作,可以自己学习,不做解释。下面只是针对第二种进行说明,参考胡君老师的教程。
自己封装的函数:
//获取最低的Z的深度值
static double GetOperMinZz(tag_t groupTag);// 读取文本文件内容 fileNamePath: 文件路径 vTextStrs: 存储读取内容的字符串向量 mode: 读取模式,0 - 读取所有行,1 - 跳过空行
static int ReadTextStrs(string fileNamePath, vector<string> &vTextStrs, int mode = 1);
//寻找字符串并返回位置,如果没有找到,返回-1
static int StrFind(string str, string s);
//取中间文本
static string StrSubmid(string str, string startStr, string endStr);//获取最低的Z的深度值
double LiangFuns::UserUFBaseFun::GetOperMinZz(tag_t groupTag)
{tag_t setup_tag = NULL_TAG;UF_SETUP_ask_setup(&setup_tag);//获得当前dll所在的路径GetDllPanthAndName()string strNCfile = UserUFBaseFun::GetDllPanthAndName(1) + "//666.nc";UF_SETUP_generate_program(setup_tag, groupTag, "MILL_3_AXIS", strNCfile.c_str(), UF_SETUP_OUTPUT_UNITS_METRIC);vector<string> vTextDatas;UserUFBaseFun::ReadTextStrs(strNCfile, vTextDatas);double minZzVal = 0.0;for (int i = 0; i<vTextDatas.size(); i++){//HuUFBase::print(vTextDatas[i]);string strLineDate = vTextDatas[i];if (UserUFBaseFun::StrFind(strLineDate, " Z") != -1){string strVal = UserUFBaseFun::StrSubmid(strLineDate, " Z", " ");double zVal = atof(strVal.c_str());//HuUFBase::print(zVal);if (zVal<minZzVal)minZzVal = zVal;}}//HuUFBase::print(minZzVal);remove(strNCfile.c_str());return minZzVal;
}// 读取文本文件内容 fileNamePath: 文件路径 vTextStrs: 存储读取内容的字符串向量 mode: 读取模式,0 - 读取所有行,1 - 跳过空行
int LiangFuns::UserUFBaseFun::ReadTextStrs(string fileNamePath, vector<string>& vTextStrs, int mode)
{ifstream file(fileNamePath);if (!file.is_open()){cerr << "无法打开文件: " << fileNamePath << endl;return -1; // 文件打开失败}string line;while (getline(file, line)){if (mode == 1){if (line.empty())continue; // 跳过空行// 去掉行首空格并获取第一个非空字符string temptrimstr = line.erase(0, line.find_first_not_of(" ")).substr(0, 1);// 如果行不是注释行(不以#、!、/、*开头),则添加到vTextStrs中if (temptrimstr != "#" && temptrimstr != "!" && temptrimstr != "/" && temptrimstr != "*" && temptrimstr != "%")vTextStrs.push_back(line); // 添加有效行}else if (mode == 0){vTextStrs.push_back(line);}}file.close();return 0; // 成功
}//寻找字符串并返回位置,如果没有找到,返回-1
int LiangFuns::UserUFBaseFun::StrFind(string str, string s)
{if (str.find(s) != string::npos)return (int)str.find(s);elsereturn -1;
}//取中间文本
string LiangFuns::UserUFBaseFun::StrSubmid(string str, string startStr, string endStr)
{int intStartIdx = str.find(startStr) + startStr.length();int intEndIdx = intStartIdx + str.substr(intStartIdx, str.length() - intStartIdx).find(endStr);return str.substr(intStartIdx, intEndIdx - intStartIdx);
}
函数调用:
//加工设置的TAGtag_t setup_tag = NULL_TAG;UF_SETUP_ask_setup(&setup_tag);//获得根组的TAGtag_t programRootgroup = NULL_TAG;UF_SETUP_ask_program_root(setup_tag, &programRootgroup);//获取成员列表int count = 0;tag_t * list = NULL;UF_NCGROUP_ask_member_list(programRootgroup, &count, &list);vector<vector<string>> vVProgrmDatas;for (int i = 0; i<count; i++){vector<string> vTempDatas;//获取程序组名字string strGroupName = UserUFBaseFun::GetTagName(list[i]);if (strGroupName == "NONE")continue;//UserUFBaseFun::PrintMessage(strGroupName);int count2 = 0;tag_t * list2 = NULL;UF_NCGROUP_ask_member_list(list[i], &count2, &list2);if (count2 <= 0)continue;//获取刀具名字tag_t toolTag = NULL_TAG;UF_OPER_ask_cutter_group(list2[0], &toolTag);string strToolName = UserUFBaseFun::GetTagName(toolTag);//获取转数进给率double spindleVal = 0.0;UF_PARAM_ask_double_value(list2[0], UF_PARAM_SPINDLE_RPM, &spindleVal);UF_PARAM_feedrate_t feed_value;UF_PARAM_ask_subobj_ptr_value(list2[0], UF_PARAM_FEED_CUT, &feed_value);double feedVal = feed_value.value;string strZhuansu = UserUFBaseFun::double_toString(spindleVal, 2, true);string strJingeilv = UserUFBaseFun::double_toString(feedVal, 2, true);//获取部件余量double stockVal = 0.0;UF_PARAM_ask_double_value(list2[0], UF_PARAM_STOCK_PART, &stockVal);string strYuliang = UserUFBaseFun::double_toString(stockVal, 2, true);//获得加工时间double operTimes = UserUFBaseFun::GetOperTime(list[i]);string strOperTime = UserUFBaseFun::double_toString(operTimes, 2, true);//获取最低的Z深度值double operMinZz = UserUFBaseFun::GetOperMinZz(list[i]);string strOperMinZz = UserUFBaseFun::double_toString(operMinZz, 2, true);vTempDatas.push_back(strGroupName);vTempDatas.push_back(strToolName);vTempDatas.push_back(strZhuansu);vTempDatas.push_back(strJingeilv);vTempDatas.push_back(strYuliang);vTempDatas.push_back(strOperTime);vTempDatas.push_back(strOperMinZz);vVProgrmDatas.push_back(vTempDatas);vTempDatas.clear();}