READMESource: main@f50888df
multisim-toolkit
一个把 NI Multisim 14.3 变成可编程对象的 DSH 插件 + skill。
它同时是两样东西,装在同一个仓库里:
- 一个 DSH 插件(Host 侧 Cordis bundle)—— 仓库根目录的
package.json/cordis.patch.yml/index.js/lib//worker/,注册 9 个msim_*工具; - 一份 skill ——
SKILL.md+references/,教模型怎么正确使用这些工具,以及所有踩过的坑。
DSH Host (node)
└── index.js 注册 msim_* 工具 + 一段系统提示词
└── spawn 32-bit python worker/msim_worker.py --port N --token T
└── 常驻进程(独占 COM 公寓),TCP + 行 JSON
├── com.* msim_com.py → Multisim Automation (COM)
├── gui.* msim_gui.py → 可见窗口(Win32 消息)
├── spice.* msim_deck.py → DoCommandLine + 网表
│ msim_spice.py / msim_raster.py
└── design.* msim_ms14.py → .ms14 容器(离线只读)
└── bin/blast_harness.exe (PKWare DCL)
能力一览
| 工具 | 做什么 |
|---|---|
msim_status |
自检:worker 位数、COM 版本、GUI 进程 |
msim_circuit |
新建 / 打开 / 保存 .ms14,读当前电路信息 |
msim_inspect |
读元件、输入、输出、变体、段落、电路参数、RLC 值 |
msim_edit |
改 RLC 值、电路参数、活动变体,替换库器件 |
msim_analyze |
瞬态 / DC / AC 扫频 / 单频 AC / 命令文件,以及启停仿真 |
msim_export |
原理图图片、网表、BOM、设计片段 |
msim_gui |
驱动可见窗口:启动、截图(四档裁剪)、拖入网表、清数据库告警、另存为、发按键、跑分析、抓波形窗 |
msim_spice |
把网表直接喂给 Multisim 的 SPICE 引擎,返回表格 + CSV + 图 |
msim_design |
不启动 Multisim,离线读取 .ms14 里的元件、值、仪器设置 |
多数操作在首次 Connect()(约 6 秒,Multisim 启动开销)之后是毫秒级——实测 10 次连续读操作 median 0.000s。
安装
前提:
- Windows,已安装 Multisim 14.3(
C:\Program Files (x86)\National Instruments\Circuit Design Suite 14.3\); - 一个 32 位 Python 3.11–3.13 并装了 pywin32(Multisim 的 Automation API 是 32 位 COM 服务器,64 位解释器
Connect()会E_ACCESSDENIED); - DSH(本插件是 Host-only bundle,不需要浏览器端代码)。
方式一:直接从 GitHub 装
dsh plugin --profile <你的 profile> add github:llyy-t/multisim-toolkit
方式二:从本地 clone 装
powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -Action check # 体检
# 然后把 install.ps1 -Action install 打印出来的那行 plugin_manager(...) 贴进 DSH 会话
验证:msim_status({ connect: true }) —— 期望 worker.pythonBits: 32、com.version: Multisim 14.3。
也可以不经过 DSH,直接跑离线自检:
python scripts\selfcheck.py --design "C:\path\to\some.ms14"
插件配置(可选):
- id: multisim-toolkit
name: 'dsh-multisim-toolkit'
config:
pythonPath: 'C:\Users\me\.dsh\multisim-mcp\py32\python.exe'
startTimeoutMs: 30000
文档
| 文件 | 内容 |
|---|---|
SKILL.md |
面向模型:先选通道,再动手;最贵的几条判断;参数速查 |
references/com-automation.md |
COM 面完整参考:每个方法、枚举值、8 类失败的症状与规避、类型库注册信息 |
references/spice-channel.md |
SPICE 通道:语法、用 B 源写数字门、子电路、4 个致命坑、9 种分析命令 |
references/gui-and-files.md |
可见窗口(含 Save As 三个真实根因、分析对话框操作链)与 .ms14 容器格式、元件值三种形态 |
PLUGIN.md |
插件本体说明与全部实测边界(安装/自测/协议入口) |
worker/PROTOCOL.md |
插件内部模块契约(要改代码时读) |
docs/README.md |
四档截图对比 + 实机电路图/波形图样例的生成命令 |
这个仓库为什么值得看
除了"又一层包装",这里有几条别人不太容易自己撞出来的实测结论:
- Multisim 的 COM 服务器与客户端同生命周期——Python 进程一退出,
multisim.exe就消失。所以必须常驻 worker,不能每条命令起一个短命进程。 app.OpenFile()对 SPICE 网表会让 Multisim 静默崩溃(无任何可捕获错误)。网表只能通过WM_DROPFILES注入到可见窗口。- GUI 另存为不能靠
WM_SETTEXT——它只改编辑框的显示文本,不改对话框内部状态,Multisim 仍按旧名字写盘,会静默覆盖同名文件。必须用SendInput+KEYEVENTF_UNICODE逐字符输入并在保存前回读校验。 - 数据库告警框的文字藏在跨进程 Edit 控件里,
GetWindowText读到空串,必须用WM_GETTEXT;这些模态框会吞掉之后所有按键。 .ms14是 36 字节魔数 +u64长度 + 若干段 PKWare DCL "implode" 数据,zlib/bz2/lzma/cabinet.dll 全都解不开;用 Mark Adler 的blast.c编译出的薄壳解压,毫秒级。.ms14里元件值的"真正来源"是CiaParamList.parameters,另一条<doubles>数组是可能已过期的遗留初值(实测某电阻doubles还是 1000,parameters已经是2.2k);&UNI..._uc<hex>的_uc后缀是进程内指针号,不可逆。- 截图
crop=content的墨迹判据必须是"暗 或 有彩度"——只按"暗"判断会漏掉全部蓝色导线(Multisim 的连线是纯蓝(0,0,255))。 - Multisim 的仿真菜单是 BCG 自绘的,
GetMenu()返回 0、投递WM_COMMAND会把进程打崩;但alt+s之后按 3 次VK_DOWN再回车能稳定打开「Analyses and Simulation」,进去之后里面的控件全是标准 Win32 控件,可以按消息操作。 - 仿真结果画在一个独立的
图示仪视图窗口里,跟电路图不是同一个窗口——要「实机电路截图 + 实机波形截图」就得分别截两次。
能力边界
诚实地说,这个插件不能凭空在原理图上放元件、画连线——Multisim 的 Automation API 没有对应方法,Win32 合成鼠标画线也不可靠。新电路的可行路径只有两条:
- 写网表,拖进可见窗口,Multisim 会自动还原成带真实库器件和连线的可编辑原理图;
- 直接生成/修改
.ms14(容器格式已破解,但写回收尚未实现)。
许可
MIT,见 LICENSE。第三方组件的许可见 THIRD-PARTY-NOTICES.md:worker/bin/blast.c / blast.h 来自 zlib(zlib license,Mark Adler)。
本项目与 National Instruments 无关,不包含也不分发任何 NI 软件;它只是驱动你本机已装好的 Multisim。
No comments yet. Be the first to write one.