十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Creo 制造模型参数创建没生效?用 TaoToken 接入的 Codex 查 ProParameterCreate

Creo 制造模型参数创建没生效?用 TaoToken 接入的 Codex 查 ProParameterCreate Creo 制造模型参数创建没生效用 TaoToken 接入的 Codex 查 ProParameterCreate这段 Pro/Toolkit 代码看起来没有语法问题ProMdlCurrentGet拿到当前模型ProMfgAssemGet取到制造装配ProMdlToModelitem转出proItem给new_value.type设成PRO_PARAM_STRING再用wcscpy往new_value.value.s_val里写12345最后调ProParameterCreate建一个叫「零件代号」的字符串参数并且用if (status PRO_TK_NO_ERROR)包了一层判断。可编译通过、运行也不弹错回到 Creo 的制造模型参数表里看要么压根没有这一行要么多出一个空值参数这就很难受了。我这次的排查路径不是反复改代码试而是用 TaoTokenhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入 Codex让它把这段源码逐行读出来对照头文件语义定位。这里要说清楚TaoToken 只提供 Key 和模型通道不参与 Pro/Toolkit 的任何建模动作参数建不建得上最终还是由 Creo 的 API 返回值说话。一、现象ProParameterCreate 走了制造模型的参数表却是空的先把现象拆细因为「没生效」至少有三种不同表现排查方向完全不一样。第一种是参数确实没建上。ProParameterCreate返回的不是PRO_TK_NO_ERROR但代码里只用if判了一次status被反复赋值覆盖最后一次赋的是ProParameterCreate的返回值可你没有把它打印出来、也没有对它做分支于是错误码被吞掉了。你能看到的只有「参数表里没有」看不到究竟是不合法入参、参数已存在、还是权限不足。第二种是参数建上了但建错了对象。制造模型ProMfg和它对应的制造装配ProAssembly是两个概念ProMfgAssemGet拿到的model是那个装配。如果ProMdlToModelitem的入参用的是model而不是modelmfg那么proItem指向的 owner 就是装配参数会被挂到装配上。你如果只盯着制造模型的参数表看自然什么都看不到——参数其实存在只是长在另一个模型上。第三种是参数建上了、对象也对但值是空的或乱码。这种最典型的原因是ProParamvalue的联合体成员和type不配套或者字符串缓冲、长度没对齐。题目里那段代码把注释掉的ProWstringCopy(strmfg.GetBuffer(), new_value.value.s_val, ii)扔在一边改用wcscpy(new_value.value.s_val, _T(12345))同时上面还留着一句被注释的new_value.value.d_val 12;。这三行代码其实在互相打架原本想写 double后来改成写字符串但长度和缓冲区的关系没人再核对过。我遇到的现场是第三种加第一种的混合参数行出现了值是空的status打印出来也不是PRO_TK_NO_ERROR。所以后面的排查我没有再凭感觉改而是让 Codex 把「谁指向谁、哪个字段配哪种类型、返回值有哪几类」全部列出来。二、前置TaoToken 提供 Key 与通道Codex 负责读代码Pro/Toolkit 这类二次开发代码难点不在语法在语义ProMdl、ProMfg、ProAssembly这几个类型在头文件里定义得很接近编译器能过运行期才出问题ProParamvalue是个带 type 标签的联合体写错成员不会报错只会写进一块语义不对的内存。这类问题靠搜索引擎翻帖子效率很低因为别人贴的代码往往和你手上的 SDK 版本、Creo 版本不一致。我的做法是先把「上下文」喂进去再让 Codex 帮我做静态审读。上下文包括四样完整的这段函数、ProParamvalue在你本机 protoolkit 头文件里的声明、ProParameterCreate的函数原型与注释、以及ProMdlToModelitem的原型。头文件那两段一定要用你自己安装目录里的不要用网上的因为数组维度、返回码枚举在不同版本里会变。接入这一步只做两件事在 TaoToken 官网注册账号然后在控制台创建一个 Key。Key 只用于让 Codex 走 TaoToken 的通道不会写入任何 Creo 工程也不会改变 Pro/Toolkit 的构建方式。这一步不需要装插件、不需要改 Creo 的启动配置、不需要动 protk.dat。有一点要提前说清楚避免误解Codex 在这件事里的角色是「读代码 解释结构 列出可能的返回码分支」它不会替你修改模型也不应该让它凭空生成一段你没验证过的 Pro/Toolkit 代码直接扔进项目。凡是涉及 API 调用顺序的结论最终都要回到头文件注释和实际运行的返回值上确认。三、可复制配置Codex 的 config.toml 与 API Key 环境变量Codex 的配置走config.toml不是在界面里点。配置文件默认在用户目录下的.codex/config.toml。把下面这段按需替换后写进去即可重点是base_url必须是https://taotoken.net/api不要在后面接/v1也不要带任何查询参数model_provider taotoken model gpt-5-codex model_reasoning_effort high [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api responsesKey 用环境变量传不要硬编码进文件。Windows 的 PowerShell 里可以这样设$env:TAOTOKEN_API_KEY YOUR_API_KEYmacOS 或 Linux 的 shellexport TAOTOKEN_API_KEYYOUR_API_KEY几个容易填错的地方。model要填你在 TaoToken 控制台模型列表里实际看到的 ID不要照抄别人的wire_api如果填responses跑不通可以改成chat再试具体以接入文档为准。另外要确认你的环境里没有残留的OPENAI_API_KEY或旧 provider 配置Codex 读取时的优先级可能会让你以为改的是新配置实际还走着老地址。配置文件保存后在工程目录下起 Codex。如果不想污染默认配置也可以在config.toml里加一个 profile 段用codex --profile taotoken显式指定。四、验证让 Codex 对着 ProParamvalue 与 ProParameterCreate 逐行核对配置完成后先做一次最轻量的验证确认通道是通的起一个 Codex 会话让它读一下当前目录的文件列表或者简单解释一段本地文本。这一步只验证「能稳定读到本地产物、能返回结果」不要一上来就让它分析整份 Pro/Toolkit 代码。通道确认没问题后把这段函数和两个头文件声明一起给 Codex然后按下面的顺序追问。第一问请它把new_value的内存布局和type/value两个字段的关系讲清楚特别指出PRO_PARAM_STRING对应的是哪一个联合体成员以及s_val的数组维度是多少。第二问让它把wcscpy那行和被注释的ProWstringCopy那行放在一起对比源串的实际字符数、目标缓冲区容量、第三个参数的含义分别是什么哪种写法会越界哪种写法会因为长度参数语义不同而截断或漏掉终止符。第三问请它列出ProParameterCreate在这个 SDK 版本里可能返回的几种ProError并说明每一种通常对应什么原因。这三问的价值在于它逼着你去翻头文件而不是停留在「返回值不是 NO_ERROR 所以失败」这种结论上。我那次核对出来的关键点有三个ProMdlToModelitem的入参拿的是model而不是modelmfgproItem的归属对象就已经错了s_val是宽字符数组wcscpy不检查边界源串长度必须严格小于数组容量返回码被赋值覆盖后没有分支导致真正的失败原因不可见。接下来让 Codex 只做一件事给出「最小修改清单」每条修改都要写明依据是哪一行头文件声明而不是给你一段新代码。改完之后回到 Creo重新编译 dll、重启或重新加载应用再打开制造模型的参数表核对「零件代号」是否出现、值是否是你要写入的字符串。这一步必须人工确认不要只看日志。五、本篇常见错排查s_val、返回码、proItem 三处最容易踩把这次排查过的东西整理成清单按出现概率从高到低排。第一字符串缓冲与长度不匹配。注释掉ProWstringCopy本身没错错在换用wcscpy之后没有人再确认s_val的容量。宽字符数组的容量单位是wchar_t不是字节wcscpy会把源串连同结尾的终止符一起写进去所以源串字符数加一必须小于数组维度。如果s_val的维度是 32你写12345是安全的但如果后面改成从CString里取用户输入的中文参数名长度立刻就会超。另外ProWstringCopy的第三个参数在部分版本里是「要复制的字符数」不含终止符这个语义一定要看头文件注释不要凭记忆推断。第二返回码只赋值不细分。status在同一段代码里被ProMdlToModelitem和ProParameterCreate连续覆盖两个调用的错误被压成了一个变量。更糟的是if (status PRO_TK_NO_ERROR)只区分了「成功」和「非成功」非成功时没有任何输出。建议的做法是每个 API 调用后立刻判断并打印数值化的错误码参数已存在、入参非法、权限不足、一般性错误这些分支要分开看处理方式完全不同——参数已存在时你可能只需要ProParameterModify或ProParameterValueSet去更新值。第三proItem的来源对象不对。ProMfgAssemGet返回的是制造装配句柄用它去ProMdlToModelitem参数就挂到装配上了。制造模型的参数要建在制造模型本身所以这里应该用ProMdlCurrentGet拿到的那个句柄。类型别名相近编译器不会拦你只能靠人逐行核对。第四new_value.type与联合体成员不一致。代码里先注释了d_val又用s_val赋值如果type因为复制粘贴还留在PRO_PARAM_DOUBLE上读出来的就是浮点解释后的垃圾值。改类型之后一定要回头确认赋值语句用的是同一个成员。第五参数表看不到但参数存在。除了挂错对象还有一种情况是当前窗口显示的模型和参数所属模型不是同一个或者模型处于只读状态、没有进入修改模式此时创建会失败或写不进去。重新加载 dll 之后记得重新打开一次制造模型再核对。第六编译产物没更新。Pro/Toolkit 的 dll 被 Creo 加载后未必会自动重载改完代码只重新编译、不重启或不做增量注册跑的仍然是旧版本这时候任何排查都是在看历史结果。六、继续排障与接入入口如果你手上也是类似的情况先别急着改代码按上面第四节的三问顺序把ProParamvalue的字段语义、ProWstringCopy的长度含义、ProParameterCreate的返回码分支确认清楚大部分「参数没生效」会自己浮出水面。需要 Key 和接入配置的话控制台里创建https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcreo_proparamCodex 的base_url、wire_api等字段的具体写法以接入文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcreo_proparam。只想先在网页里验证一下模型通不通可以直接用模型对话https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcreo_proparam。如果这类 Pro/Toolkit 代码审读是长期工作每天都要反复读头文件、对返回码可以看 Coding Plan 的额度方式https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcreo_proparam。最后再强调一次边界TaoToken 在这里只是把 Key 和通道给到 CodexProParameterCreate建没建上、建在哪个模型上、值对不对全靠 Creo 的返回值和参数表来判定。
返回列表