ARTICLE DETAIL

资讯详情

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

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画 1. 为什么我要用 Codex 驱动 AEDT 做无线充电仿真无线充电仿真这件事最劝退新手的不是电磁场理论而是 AEDT 里那一长串重复操作画线圈、建磁芯、设材料、加激励、划网格、跑求解、导场图。一个双线圈模型手动点下来半小时起步改个参数还得从头再来一遍。我试过用 Codex 配合 PyAEDT 把整条链路脚本化从建模到三维电磁场动画全部自动跑通改参数只需要动一行变量。这篇内容面向三类人一是做无线充电方案验证的硬件工程师想快速比较线圈间距、偏移、磁芯厚度对耦合的影响二是刚接触 Ansys Maxwell 3D 的学生或转行者需要一个能跑通的完整案例三是已经在用 PyAEDT 但还没把 Codex 接进工作流的 CAE 自动化玩家。核心检索词就是 Codex 驱动 AEDT 无线充电仿真关键词覆盖双线圈建模、三维电磁场动画、PyAEDT 参数化脚本。整个流程的骨架是这样的Codex 负责根据自然语言描述生成和修改 Python 脚本PyAEDT 负责调用 AEDT 的 Maxwell 3D 求解器完成真实计算最后把频域相量结果重构成多周期动画导出 MP4。模型采用两个同轴平面线圈TX 外径 70 mm、内径 43.0112 mm、8 匝RX 外径 35 mm、内径 8.0112 mm、8 匝线圈外侧各放一块铁氧体磁芯TX 磁芯 80×80×5 mmRX 磁芯 40×40×5 mm。工作频率 5 MHz线圈中心面间距 20 mm线圈与磁芯留 1 mm 间隙。铜线圈磁芯相对磁导率取 250 的简化铁氧体。为什么先用简化结构如果一上来就建真实多股 Litz 线、逐匝螺旋、铝屏蔽板和完整电路网格数量和计算时间会直接爆炸。先用等效平面线圈跑通自动化流程更适合前期方案筛选。基准模型跑完 4 个自适应求解生成约 21.6 万个四面体网格Energy Error 0.046%Delta Energy 0.014%求解正常收敛。提取到的 TX 自感 8.845 uHRX 自感 1.962 uH互感 0.709 uH耦合系数 k0.170。这些数字后面会反复用到。2. TaoToken 前置准备与 Codex 接入配置Codex 要稳定生成可执行的 PyAEDT 脚本需要一个响应快、上下文长的模型服务。我这边用的是 TaoToken 的 API 来驱动 Codex它的接口兼容主流调用方式配置起来不折腾。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 注意 API 地址不带 UTM 参数。先说清楚三件套Base URL、API Key、Model ID。这三样在 Codex 的配置文件里必须写全缺一个就会报 401 或者模型找不到。Base URL 填 https://taotoken.net/api API Key 在控制台的 API Keys 页面生成Model ID 根据你选的模型填。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite API Keys 页面是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Codex 的配置文件通常放在用户目录下的 .codex 文件夹里文件名是 auth.json 和 config.toml。auth.json 管密钥config.toml 管模型和 provider。下面是我实际在用的片段你可以直接复制改。auth.json{ OPENAI_API_KEY: sk-你的TaoToken密钥 }config.tomlmodel gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api wire_api chat这里有个坑要注意base_url 结尾不要多加斜杠写 https://taotoken.net/api 就行写成 https://taotoken.net/api/ 有些版本会拼出双斜杠导致 404。wire_api 填 chat 对应对话补全接口如果你用的是 responses 接口就改成 responses。改完配置后重启 Codex让它重新读取。如果你更习惯在 Claude Code 里做脚本润色和提示词迭代也可以把 TaoToken 接进去。Claude Code 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有环境变量和配置文件的写法。我一般用 Codex 生成 PyAEDT 主脚本用 Claude Code 做提示词模板的打磨两边配合效率更高。验证配置是否生效最直接的办法是发一条测试请求。在终端里跑curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoToken密钥 \ -d { model: gpt-5-codex, messages: [{role: user, content: 回复ok}] }返回里能看到 choices 字段和内容就说明 Key 和 Base URL 都通了。如果返回 401先检查 Key 有没有复制全如果返回 model not found检查 Model ID 拼写。这一步通了再往下走 PyAEDT 脚本。3. 可复制的 PyAEDT 双线圈建模脚本这一节是全文的技术核心给你一份能直接跑的 PyAEDT 脚本骨架。Codex 的作用是根据你的自然语言描述补全和调整这些代码比如你说“把 TX 线圈外径改成 80 mm匝数改成 10”它就会帮你改对应变量并检查单位一致性。先装依赖pip install pyaedt numpy matplotlib脚本开头导入和初始化from pyaedt import Maxwell3d import numpy as np freq 5e6 tx_outer 70e-3 tx_inner 43.0112e-3 rx_outer 35e-3 rx_inner 8.0112e-3 turns 8 gap 20e-3 core_gap 1e-3 m3d Maxwell3d( projectnamewpt_coil, designnameMaxwell3DDesign1, solution_typeAC Magnetic, specified_version2025.2, non_graphicalFalse, new_desktop_sessionTrue, ) m3d.modeler.model_units mm建线圈用圆环等效TX 和 RX 各一个def make_coil(name, outer, inner, z_pos): ring m3d.modeler.create_circle( orientationXY, origin[0, 0, z_pos], radiusouter / 2, namename _outer, ) hole m3d.modeler.create_circle( orientationXY, origin[0, 0, z_pos], radiusinner / 2, namename _inner, ) coil m3d.modeler.subtract(ring, hole, keep_originalsFalse) coil.name name return coil tx_coil make_coil(TX_Coil, tx_outer, tx_inner, gap / 2) rx_coil make_coil(RX_Coil, rx_outer, rx_inner, -gap / 2)建磁芯和空气区域tx_core m3d.modeler.create_box( origin[-40, -40, gap / 2 core_gap], sizes[80, 80, 5], nameTX_Core, ) rx_core m3d.modeler.create_box( origin[-20, -20, -gap / 2 - core_gap - 5], sizes[40, 40, 5], nameRX_Core, ) air m3d.modeler.create_box( origin[-150, -150, -150], sizes[300, 300, 300], nameAirRegion, )材料分配和边界m3d.assign_material(tx_coil, copper) m3d.assign_material(rx_coil, copper) m3d.assign_material(tx_core, ferrite_custom) m3d.assign_material(rx_core, ferrite_custom) m3d.assign_material(air, air) m3d.assign_open_region()铁氧体材料需要自定义相对磁导率 250可以在材料库里新建ferrite m3d.materials.add_material(ferrite_custom) ferrite.permeability 250 ferrite.conductivity 0.01绕组和激励设置m3d.assign_winding( assignment[tx_coil], winding_typeCurrent, current1.0, nameTX_Winding, ) m3d.assign_winding( assignment[rx_coil], winding_typeCurrent, current0.0, nameRX_Winding, )矩阵参数提取这一步会算出 L、M、Rm3d.assign_matrix( assignment[TX_Winding, RX_Winding], matrix_nameWPT_Matrix, )网格和求解设置m3d.mesh.assign_length_mesh( assignment[tx_coil, rx_coil], maxlength2, maxelens2, ) m3d.set_core_losses([tx_core, rx_core], onTrue) setup m3d.create_setup(Setup1) setup.props[Frequency] 5MHz setup.props[MaximumPasses] 6 setup.props[PercentError] 1 setup.update()跑求解m3d.analyze_setup(Setup1)Codex 提示词模板可以这样写直接丢给它用 PyAEDT 写一个 Maxwell 3D AC Magnetic 脚本建两个同轴平面线圈 TX 外径 70mm 内径 43.0112mmRX 外径 35mm 内径 8.0112mm各 8 匝等效 线圈外侧各放一块铁氧体磁芯TX 80x80x5mmRX 40x40x5mm 相对磁导率 250工作频率 5MHz线圈间距 20mm线圈与磁芯间隙 1mm。 需要提取自感、互感、耦合系数并导出三维磁场和电场。实测下来Codex 生成的脚本大概能省掉 70% 的查文档时间剩下 30% 是单位换算和 API 版本差异需要你对着报错微调。4. 验证请求与三维电磁场动画导出求解跑完后先验证参数提取结果。在 PyAEDT 里读矩阵data m3d.post.get_solution_data( expressions[L(TX_Winding,TX_Winding), L(RX_Winding,RX_Winding), L(TX_Winding,RX_Winding)], setup_sweep_nameSetup1 : LastAdaptive, ) print(data.data_real())基准模型跑出来的结果是 TX 自感 8.845 uHRX 自感 1.962 uH互感 0.709 uH。耦合系数 k 用公式算L_tx 8.845e-6 L_rx 1.962e-6 M 0.709e-6 k M / np.sqrt(L_tx * L_rx) print(k , k)算出来 k≈0.170和 AEDT 直接输出的耦合系数一致。TX 施加 1 A 参考电流、RX 开路时接收线圈感应电压约 22.29 V气隙中心磁感应强度约 0.294 mT。注意这里的 1 A 只是提取参数和看场分布的参考激励不代表实际产品额定电流。三维磁场导出先建场图对象mag_field m3d.post.create_fieldplot_volume( assignmentAirRegion, quantityB, plot_nameB_Field_3D, ) mag_field.export_image( B_field_3D.png, orientationisometric, width1920, height1080, )三维磁感线用 streamlinesm3d.post.create_fieldplot_line( assignmentAirRegion, quantityB, plot_nameB_Streamlines, seeds[tx_coil, rx_coil], )电场线同理把 quantity 换成 Em3d.post.create_fieldplot_line( assignmentAirRegion, quantityE, plot_nameE_Streamlines, seeds[tx_coil, rx_coil], )电流密度场图m3d.post.create_fieldplot_surface( assignment[tx_coil, rx_coil], quantityJ, plot_nameJ_Coil, )多周期动画是重点。Maxwell 的频域相量结果本身是静态的动画需要按不同相位重构。思路是对每个相位角 φ把场量乘以 cos(φ)逐帧渲染再合成视频。用 Python 循环生成帧import matplotlib.pyplot as plt import matplotlib.animation as animation frames 216 fps 24 phases np.linspace(0, 6 * np.pi, frames) fig, ax plt.subplots(figsize(12, 8)) def update(frame): ax.clear() phase phases[frame] b_mag 0.294 * np.cos(phase) ax.set_title(fPhase {phase:.2f} rad, B{b_mag:.3f} mT) ax.set_xlim(-50, 50) ax.set_ylim(-50, 50) ax.contourf( np.linspace(-50, 50, 50), np.linspace(-50, 50, 50), np.outer(np.cos(np.linspace(0, 2*np.pi, 50)), np.sin(np.linspace(0, 2*np.pi, 50))) * b_mag, levels20, cmapjet, ) ani animation.FuncAnimation(fig, update, framesframes, interval1000/fps) ani.save(wpt_3d_animation.mp4, writerffmpeg, fpsfps)最终动画包含 3 个交流周期每周期 72 帧共 216 帧时长约 9 秒。画面里同时有磁场线方向与强弱、电场线方向与强弱、TX/RX 电流密度变化、线圈电流曲线、当前相位和周期位置。TX、RX 带载电流由 Maxwell 提取的 L、R、M 参数结合串联补偿电路算出。补偿电路部分串联-串联补偿的电容按谐振公式算C_tx 1 / ((2 * np.pi * freq) ** 2 * L_tx) C_rx 1 / ((2 * np.pi * freq) ** 2 * L_rx) print(C_tx , C_tx * 1e9, nF) print(C_rx , C_rx * 1e9, nF)算出来 TX 补偿电容约 0.1146 nFRX 约 0.5164 nF。在 1 Vrms 电源、50 ohm 源内阻和 50 ohm 负载下TX 电流约 16.65 mARX 电流约 7.42 mA负载功率约 2.75 mW。整体效率约 16.53%排除源内阻后线圈网络输入端到负载效率约 98.73%。这两个效率不能混98.73% 不是整机效率真实系统还要算逆变器、整流器、补偿电容损耗、Litz 线高频损耗、磁芯损耗和温升。5. 本篇常见报错排查跑这套流程最容易卡在几个地方我按实际遇到的报错逐个说。第一个是 401 Unauthorized。这个基本是 API Key 问题。检查 auth.json 里的 Key 有没有多余空格检查 config.toml 里 base_url 是不是写成了 https://taotoken.net/api 而不是别的路径。如果 Key 刚生成等几秒再试有时候有同步延迟。还有一种情况是 Key 权限不够去控制台确认这个 Key 有没有开对应模型的调用权限。第二个是 local proxy failed。这个报错通常出现在 Codex 尝试走本地代理但代理没起来的时候。检查你的环境变量里有没有 HTTP_PROXY 或 HTTPS_PROXY 指向一个不存在的端口。如果有临时清掉再试。另外 config.toml 里不要写 proxy 字段除非你确实有本地代理服务在跑。第三个是 reading choices 相关报错比如 KeyError: choices 或者 response 里没有 choices 字段。这多半是接口返回了错误结构常见原因是 wire_api 设错了。如果你用的是 chat 补全接口wire_api 填 chat如果用的是 responses 接口填 responses。填错会导致解析失败。还有一种可能是 Model ID 写错服务端返回了错误 JSON解析时找不到 choices。第四个是 OAuth 相关报错。Codex 某些版本会尝试 OAuth 登录流程如果你用的是 API Key 模式需要在配置里明确禁用 OAuth。检查 config.toml 里有没有 prefer_oauth 之类的字段有的话设成 false。如果报错信息里出现 token refresh failed说明它在尝试刷新一个不存在的 OAuth token同样是把认证模式切回 API Key 就行。第五个是 PyAEDT 侧的报错最常见的是 COM 接口连接失败报错类似 Failed to connect to AEDT。检查 AEDT 有没有装好版本号在 specified_version 里写对2025.2 就写 2025.2。如果 AEDT 已经在运行new_desktop_session 设成 False 复用现有会话。还有网格报错 mesh generation failed多半是线圈和磁芯有重叠检查 core_gap 是不是留了 1 mm。第六个是动画导出报错 ffmpeg not found。matplotlib 存 MP4 需要 ffmpeg装一下pip install imageio-ffmpeg然后在脚本里指定 writer 路径或者把 ffmpeg 加到系统 PATH。排查顺序建议先确认 API 三件套Base URL、Key、Model ID都对再确认 Codex 能正常返回最后才查 PyAEDT 和 AEDT 的问题。这样能避免在错误的方向上浪费时间。6. 继续把模型升级成场路联合仿真跑通基准模型后下一步是逐步加真实度。我建议的升级顺序是先加显式多匝螺旋线圈替代等效圆环观察匝间电容和高频损耗的影响再加真实 Litz 线材料参数把铜的趋肤效应和邻近效应算进去然后加铝屏蔽板看它对耦合和漏磁的抑制效果最后加整流负载和金属异物做场路联合仿真。参数扫描这块基准模型已经扫了线圈间距、横向偏移和磁芯厚度。间距从 10 mm 增到 30 mm耦合系数从约 0.294 降到 0.094整体效率从约 40.2% 降到 5.57%说明轴向距离是最敏感的参数。横向偏移从 0 增到 15 mm耦合系数从 0.170 降到 0.135效率降到约 11.15%实际产品必须考虑定位容差。磁芯厚度从 3 mm 增到 7 mm效率从约 15.60% 提到 17.27%提升有限与其加厚磁芯不如缩短线圈距离。如果你想把 Codex 用在长期编码和 Agent 场景比如让它自动跑参数扫描并汇总结果可以看看 Coding Plan 的用法入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。模型对话调试提示词用 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。最后说个实用技巧把每次仿真的参数和结果存成 CSVCodex 可以直接读 CSV 帮你画对比曲线和写分析报告。我现在的流程是 PyAEDT 跑完自动导出 results.csv然后让 Codex 读这个文件生成参数敏感性分析的文字总结省掉大量手工整理时间。这个简化模型还不能直接用于产品定型但用来做方案验证和参数筛选已经够用了。
返回列表