Releases: Karl-Dai/PmuSim
PmuSim v0.9.0
PmuSim v0.9.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.9.0_aarch64.dmg |
| macOS Intel | PmuSim_0.9.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.9.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.9.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.9.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.9.0_amd64.AppImage |
| Linux deb | PmuSim_0.9.0_amd64.deb |
| Linux rpm | PmuSim-0.9.0-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.9.0_aarch64.dmg |
| macOS Intel | PmuSub_0.9.0_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.9.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.9.0_x64_en-US.msi |
| Linux AppImage | PmuSub_0.9.0_amd64.AppImage |
| Linux deb | PmuSub_0.9.0_amd64.deb |
| Linux rpm | PmuSub-0.9.0-1.x86_64.rpm |
Highlights / 亮点
- 🎛️ 主站速率下拉新增「10 Hz」合法档位:补齐 IEEE C37.118 对 50Hz 系统的标准上送率,从此下拉不再从 25Hz 直接跳到 200Hz,常用的低速率一键可选 / New "10 Hz" legal entry in the master's rate dropdown: it fills in the standard IEEE C37.118 reporting rate for 50 Hz systems, so the dropdown no longer jumps straight from 25 Hz to 200 Hz — the common low rate is now one pick away.
- ⚙️ 与 25/50/100/200 同等走正常路径:选中即下发 CFG-2(PERIOD=500),无确认框、无「异常」标签,readback 回显
(10.0Hz);后端/watch/readback/i18n/默认档位零改动,纯靠既有链路 / It flows through the normal path exactly like 25/50/100/200: picking it pushes a CFG-2 (PERIOD=500) with no confirm dialog and no "abnormal" tag, and the readback shows(10.0Hz). Backend, watcher, readback, i18n and the default rate are all unchanged — it rides the existing path. - 🧪 新增对称无头组件回归测试,全量前端测试 12/12 通过 / Added a symmetric headless component regression test; the full frontend suite is 12/12 green.
Added 新增
- 主站速率下拉新增
10 Hz合法档位,置于最前(顺序10 / 25 / 50 / 100 / 200 / 0(异常)),映射 CFG-2PERIOD=500(hzToPeriod(10)=round(5000/10)=500)。10Hz 落入既有正常档位的applyNormalRate防抖路径:streaming 时实时下发 CFG-2,未连接时由后续握手带下去,不触发 0Hz 的异常确认框 / New10 Hzlegal entry in the master rate dropdown, placed first (order10 / 25 / 50 / 100 / 200 / 0(abnormal)), mapping to CFG-2PERIOD=500(hzToPeriod(10)=round(5000/10)=500). 10 Hz falls into the existing normal-rateapplyNormalRatedebounce path: it pushes a CFG-2 live while streaming and is carried into the next handshake while disconnected, never triggering the 0 Hz abnormal confirm dialog.
Tests 测试
- 在既有
frontend/tests/config-info-panel.0hz.test.ts追加一条 vitest 用例(复用其invoke/askmock 与脚手架,DRY):streaming 时选 10Hz → 不弹确认框,且下发send_cfg2_cmd(period:null)+send_cfg2(period:500);TDD 先红后绿,vue-tsc通过,全量前端测试 12/12 通过 / Added one vitest case to the existingfrontend/tests/config-info-panel.0hz.test.ts(reusing itsinvoke/askmocks and scaffolding, DRY): selecting 10 Hz while streaming fires no confirm dialog and issuessend_cfg2_cmd(period:null)+send_cfg2(period:500); written test-first (red→green),vue-tscpasses, full frontend suite 12/12 green.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.8.1
PmuSim v0.8.1
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.8.1_aarch64.dmg |
| macOS Intel | PmuSim_0.8.1_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.8.1_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.8.1_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.8.1_arm64-setup.exe |
| Linux AppImage | PmuSim_0.8.1_amd64.AppImage |
| Linux deb | PmuSim_0.8.1_amd64.deb |
| Linux rpm | PmuSim-0.8.1-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.8.1_aarch64.dmg |
| macOS Intel | PmuSub_0.8.1_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.8.1_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.8.1_x64_en-US.msi |
| Linux AppImage | PmuSub_0.8.1_amd64.AppImage |
| Linux deb | PmuSub_0.8.1_amd64.deb |
| Linux rpm | PmuSub-0.8.1-1.x86_64.rpm |
Highlights / 亮点
- 📊 「上传速率」改为按数据帧 SOC/FRACSEC 报文时间戳反推,而非浏览器墙钟到达时间:消除 webview 事件循环抖动与网络挤帧导致的虚高(100Hz 流不再显示 102),读数反映子站给帧打的真实时标速率 / The master's "upload rate" is now derived from each data frame's own SOC/FRACSEC timestamp instead of browser wall-clock arrival time, eliminating the inflation from webview event-loop jitter and network bunching (a 100 Hz stream no longer reads 102) — the figure reflects the rate the substation actually time-stamped its frames at.
- 🛡️ 报文时间倒退(子站重启 / GPS 校时 / SOC 回绕)自动重置滑窗,避免旧时间戳全落入新窗造成的瞬时虚高 / A backward jump in the frame timestamp (substation restart / GPS resync / SOC wrap) now resets the sliding window, preventing the transient spike stale timestamps would otherwise cause.
- 🧪 新增 7 例 vitest 覆盖报文时间换算与帧率滑窗 / Added 7 vitest cases covering the timestamp-to-ms conversion and the frame-rate sliding window.
Added 新增
frontend/src/lib/rate.ts新增纯函数frameTimeMs(soc, fracsec, measRate):按 V3 §8.11 将 SOC/FRACSEC 换算为绝对毫秒,屏蔽 FRACSEC 高 8 位时标质量码,measRate<=0退化整秒防除零 / New pure helperframeTimeMs(soc, fracsec, measRate)infrontend/src/lib/rate.ts: converts SOC/FRACSEC to absolute milliseconds per V3 §8.11, masking the high 8 FRACSEC bits (time-quality) and degrading to whole seconds whenmeasRate<=0to avoid divide-by-zero.
Changed 改进
useFrameRate.tick改为接收数据帧报文时间(ms)而非内部读performance.now();usePmuEvents在DataFrame分支用frameTimeMs(soc, fracsec, measRate)计算时标并传入,measRate取该 IDCODE 的 CFGTIME_BASE(缺省 1e6);滑窗逻辑增加报文时间倒退检测 → 重置,停流/断链归零路径不变 /useFrameRate.ticknow takes the frame's timestamp (ms) instead of readingperformance.now()itself;usePmuEventscomputes it viaframeTimeMs(soc, fracsec, measRate)in theDataFramebranch (measRatefrom that IDCODE's CFGTIME_BASE, default 1e6); the sliding window adds backward-timestamp detection → reset, while the stop/disconnect zeroing paths are unchanged.ConfigInfoPanel最新时间戳显示复用同一frameTimeMs,消除与帧率换算两份 fracsec→ms 逻辑漂移的风险 /ConfigInfoPanel's latest-timestamp display now reuses the sameframeTimeMs, removing the risk of the two fracsec→ms conversions drifting apart.
Tests 测试
- 新增
frontend/tests/use-frame-rate.test.ts(vitest)7 场景(换算 / 高位屏蔽 / 除零 / 滑窗 / 旧帧剔除 / 倒退重置 / 清零),TDD 先红后绿;vue-tsc类型检查通过,全量前端测试 11/11 通过 / Addedfrontend/tests/use-frame-rate.test.ts(vitest), 7 scenarios (conversion / high-bit masking / divide-by-zero / window / eviction / backward-reset / clear), written test-first (red→green);vue-tscpasses and the full frontend suite is 11/11 green.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.8.0
PmuSim v0.8.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.8.0_aarch64.dmg |
| macOS Intel | PmuSim_0.8.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.8.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.8.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.8.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.8.0_amd64.AppImage |
| Linux deb | PmuSim_0.8.0_amd64.deb |
| Linux rpm | PmuSim-0.8.0-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.8.0_aarch64.dmg |
| macOS Intel | PmuSub_0.8.0_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.8.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.8.0_x64_en-US.msi |
| Linux AppImage | PmuSub_0.8.0_amd64.AppImage |
| Linux deb | PmuSub_0.8.0_amd64.deb |
| Linux rpm | PmuSub-0.8.0-1.x86_64.rpm |
Highlights / 亮点
- 🎛️ 主站速率下拉新增「0 Hz (异常场景)」一键档位:选中即注入非法上送周期 PERIOD=0(子站应 NACK),先弹原生确认框、取消自动回退,把最常用的异常场景从「勾选+手填」降为一次点选 / New "0 Hz (abnormal)" entry in the master's rate dropdown: picking it injects an illegal reporting period PERIOD=0 (the substation should NACK), guarded by a native confirm dialog with auto-revert on cancel — turning the most common abnormal case from "check a box + type a value" into a single pick.
- 🐛 修复 V2 双 IDCODE 子站握手中途丢会话致永不开流:真实网关 CFG-1 报站名标签、命令帧报真实通信 IDCODE,主站对两者都重命名会话致握手第 3 步找不到会话而中止;现每步按对端地址重解析,真机验证稳定开流 / Fixed a V2 dual-IDCODE substation losing its session mid-handshake and never streaming: a real gateway reports a name label in CFG-1 but its true comms IDCODE in command frames; the master re-keyed on both and the handshake aborted at step 3. The session is now re-resolved by peer address at every step — verified streaming stably on real hardware.
- 🧪 新增 0Hz 无头组件测试(vitest + happy-dom)4 场景 + V2 双 IDCODE 握手回归测试 / Added a 4-scenario headless component test for the 0 Hz flow (vitest + happy-dom) plus a V2 dual-IDCODE handshake regression test.
Added 新增
- 主站速率下拉新增
0 Hz (异常场景)档位,作为注入 PERIOD=0 的一键快捷入口:streaming 时选中并确认即实时下发 CFG-2(PERIOD=0),未连接时由后续「连接/启动」握手带下去;取消则回退上一档且不下发(suppressRateWatch防回退误发);现有「异常注入」勾选区保留不动,后端零改动(复用既有send_cfg2+ 子站 NACK 链路)/ New0 Hz (abnormal)entry in the master rate dropdown as a one-click PERIOD=0 injector: while streaming, confirming it pushes a CFG-2 (PERIOD=0) live; while disconnected it's carried into the next connect/start handshake; cancelling reverts to the prior rate with no send (suppressRateWatchguards a stray resend). The existing "abnormal injection" area is untouched and the backend is unchanged (reuses the existingsend_cfg2+ substation-NACK path). - 抽出纯函数
frontend/src/lib/rate.ts的hzToPeriod(0Hz 特判为 PERIOD=0,绕开 1000/hz 除零)+ 单测;新增 i18n 文案(rateAbnormalTag/inject0Title/inject0Confirm)与@tauri-apps/plugin-dialog依赖 / Extracted a purehzToPeriodhelper infrontend/src/lib/rate.ts(0 Hz special-cased to PERIOD=0, avoiding the 1000/hz division) with a unit test; added i18n strings (rateAbnormalTag/inject0Title/inject0Confirm) and the@tauri-apps/plugin-dialogdependency. - 主站
resolve_peer_idcode:握手步骤 2~5 与跳过-CFG-2 的 OpenData 前,均按(peer_host, peer_port)重解析当前会话 IDCODE,扛任意次中途重命名;无头复现工具crates/pmusim-app/examples/v2_master_repro.rs/ Masterresolve_peer_idcode: re-resolves the current session IDCODE by(peer_host, peer_port)before handshake steps 2–5 and the skip-CFG-2 OpenData, tolerating any number of mid-flight re-keys; plus a headless repro toolcrates/pmusim-app/examples/v2_master_repro.rs.
Fixed 修复
- V2 双 IDCODE 子站(CFG-1 报站名标签
pmuTag、命令帧报通信 IDCODEq1234567)握手中途被二次重命名,致install_ack_waiter找不到会话、报「CFG-2 帧: session 已消失」而中止、永不发 OpenData(连上无数据);修复后握手每步重解析会话,且mgmt_read_loop仅允许 config 帧给占位会话定身份、不覆盖命令帧已确立的真实 IDCODE,消除 label↔comms-id 横跳 / A V2 dual-IDCODE substation (name labelpmuTagin CFG-1, comms IDCODEq1234567in command frames) was re-keyed twice mid-handshake, soinstall_ack_waiterlost the session, aborted with "CFG-2 frame: session gone", and never sent OpenData (connected but no data). The handshake now re-resolves the session at every step, andmgmt_read_looponly lets a config frame name a placeholder session (never overriding the real IDCODE established by a command frame) — eliminating the label↔comms-id flapping.
Tests 测试
- 新增
frontend/tests/config-info-panel.0hz.test.ts(vitest + happy-dom + @vue/test-utils):真实挂载ConfigInfoPanel.vue、mockinvoke/ask,驱动速率下拉验证 0Hz watcher 四条路径(确认下发 PERIOD=0 / 取消回退不下发 / 未连接保持选中 / 正常档位防抖下发),4/4 通过 / Addedfrontend/tests/config-info-panel.0hz.test.ts(vitest + happy-dom + @vue/test-utils): mountsConfigInfoPanel.vue, mocksinvoke/ask, and drives the rate dropdown to verify the four 0 Hz watcher paths (confirm → PERIOD=0 sent / cancel → revert with no send / disconnected → stays selected / normal rate → debounced send) — 4/4 passing. - 新增 V2 双 IDCODE 握手回归测试
v2_dual_idcode_handshake_reaches_streaming(修复前红、修复后绿)/ Added the V2 dual-IDCODE handshake regression testv2_dual_idcode_handshake_reaches_streaming(red before the fix, green after).
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.7.0
PmuSim v0.7.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.7.0_aarch64.dmg |
| macOS Intel | PmuSim_0.7.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.7.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.7.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.7.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.7.0_amd64.AppImage |
| Linux deb | PmuSim_0.7.0_amd64.deb |
| Linux rpm | PmuSim-0.7.0-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.7.0_aarch64.dmg |
| macOS Intel | PmuSub_0.7.0_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.7.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.7.0_x64_en-US.msi |
| Linux AppImage | PmuSub_0.7.0_amd64.AppImage |
| Linux deb | PmuSub_0.7.0_amd64.deb |
| Linux rpm | PmuSub-0.7.0-1.x86_64.rpm |
Highlights / 亮点
- 🧪 受控注入 V4:主站可「跳过 CFG-2」仅凭 CFG-1 直接开流,演示规约层面 CFG-2 并非开流的硬前置 / Controlled injection (V4): the master can skip CFG-2 and start streaming using only CFG-1 — showing CFG-2 is not a hard prerequisite for data flow at the protocol level.
- 🛰️ 印证「子站无 CFG-2 也推流、主站凭 CFG-1 即可解码」:子站收到 OpenData 即推流(本无 CFG 门控),主站用 CFG-1 的维度成功解出相量/模拟量/数字量 / Demonstrates "substation streams without CFG-2, master decodes via CFG-1": the substation streams the moment it gets OpenData (no CFG gate), and the master decodes phasors/analogs/digitals from CFG-1 dimensions.
- 🖱️ 主站「异常注入」区新增「连接(跳过 CFG-2)」入口,作为正常「连接」之外的另一启动方式;事件区标注「跳过 CFG-2,仅凭 CFG-1 开流」 / New "Connect, skip CFG-2" entry in the master's injection area as an alternative to the normal connect; the event log marks "skipped CFG-2, streaming via CFG-1 only".
Added 新增
- 主站新增
skip_cfg2_open命令与握手do_skip_cfg2_open:召唤 CFG-1 → 跳过下传/召唤 CFG-2 → 直接 OpenData(走内部路径,天然绕过手动 OpenData 的握手门控,不改门控、不加状态) / Master gains theskip_cfg2_opencommand anddo_skip_cfg2_openhandshake: request CFG-1 → skip all CFG-2 → OpenData directly (via the internal path, naturally bypassing the manual-OpenData gate; gate and session states unchanged). - 新事件
Cfg2Skipped(后端 + 前端 types/事件展示/中英 i18n)作为跳过 CFG-2 的可见注入标记 / NewCfg2Skippedevent (backend + frontend types / event-log display / 中英 i18n) as a visible injection marker for the skip. - 集成测试
v3_master_skips_cfg2_streams_via_cfg1:断言全程无 CFG-2 交换、有Cfg2Skipped,且凭 CFG-1 维度解出DataFrame/ Integration testv3_master_skips_cfg2_streams_via_cfg1: asserts no CFG-2 exchange occurs,Cfg2Skippedis emitted, and aDataFrameis decoded from CFG-1 dimensions.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.6.0
PmuSim v0.6.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.6.0_aarch64.dmg |
| macOS Intel | PmuSim_0.6.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.6.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.6.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.6.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.6.0_amd64.AppImage |
| Linux deb | PmuSim_0.6.0_amd64.deb |
| Linux rpm | PmuSim-0.6.0-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.6.0_aarch64.dmg |
| macOS Intel | PmuSub_0.6.0_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.6.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.6.0_x64_en-US.msi |
| Linux AppImage | PmuSub_0.6.0_amd64.AppImage |
| Linux deb | PmuSub_0.6.0_amd64.deb |
| Linux rpm | PmuSub-0.6.0-1.x86_64.rpm |
Highlights / 亮点
- 🧪 受控异常注入 V3:主站可直发「非法上送周期」的 CFG-2(原始 PERIOD,含 0 与越界值),绕过 Hz→PERIOD 换算,用来验证子站对规约未定义周期的应对 / Controlled abnormal injection (V3): the master can now push a CFG-2 carrying an illegal reporting period (raw PERIOD, including 0 / out-of-range), bypassing the Hz→PERIOD conversion — for exercising how a substation handles a period the spec never defines.
- 🛡️ 子站校验上送周期:下传 CFG-2 时若 PERIOD 非法(0)则回 NACK 拒绝,不再盲目接受坏配置 / Substation now validates the reporting period on an incoming CFG-2 — an illegal PERIOD (0) is rejected with a NACK instead of being silently accepted.
- 📣 拒绝过程全程可见:子站事件区实时展示「已回 NACK 拒绝」(含原因),主站端 NACK 不再被静默吞掉而是上抛错误提示 / The rejection is fully visible end-to-end: the substation event log shows the NACK (with reason) live, and on the master side a NACK is no longer swallowed silently but surfaced as an error.
Added 新增
- 主站「异常注入」入口:配置面板新增勾选项,展开后可填原始 PERIOD 值并一键「注入」直发 CFG-2,按钮仅在会话处于 streaming / cfg2_sent 时可用 / Master "abnormal injection" entry: a checkbox in the config panel reveals a raw-PERIOD field and an Inject button that sends the CFG-2 directly; enabled only while the session is in
streaming/cfg2_sent. pmusim-core新增ConfigFrame::illegal_period_reason,集中判定上送周期是否非法(PERIOD=0)/pmusim-coregainsConfigFrame::illegal_period_reason, centralizing the check for an illegal reporting period (PERIOD = 0).- 子站新增
Cfg2Rejected { reason }事件,前端事件区以错误样式展示拒绝原因 / New substationCfg2Rejected { reason }event; the frontend event log renders the rejection reason in an error style. - 端到端测试新增
v3_master_pushes_period_zero_gets_nacked,覆盖主站推送 PERIOD=0 → 子站 NACK 的完整链路 / Added the end-to-end testv3_master_pushes_period_zero_gets_nackedcovering the full master-pushes-PERIOD-0 → substation-NACK path.
Changed 改进
- 子站收到下传 CFG-2 时先校验上送周期再决定接受/拒绝,而非无条件接受 / On an incoming CFG-2 the substation validates the reporting period before accepting, rather than accepting unconditionally.
Fixed 修复
- 主站在没有 ack waiter 时收到 NACK 不再静默丢弃,改为 emit Error 上抛 UI,避免拒绝结果"消失" / On the master, a NACK arriving with no ack waiter is no longer silently dropped — it now emits an Error to the UI so the rejection isn't lost.
- 异常注入的原始 PERIOD 增加 u16 上界校验(>65535 会回绕成 0),非法取值直接提示而不误发 / The raw-PERIOD field is now bounds-checked against u16 (values >65535 would wrap to 0); an illegal value is flagged instead of being sent by mistake.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.5.0
PmuSim v0.5.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below.
主站 PmuSim — PMU Master Station
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.5.0_aarch64.dmg |
| macOS Intel | PmuSim_0.5.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.5.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.5.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.5.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.5.0_amd64.AppImage |
| Linux deb | PmuSim_0.5.0_amd64.deb |
| Linux rpm | PmuSim-0.5.0-1.x86_64.rpm |
子站 PmuSub — PMU Substation (data sender)
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSub_0.5.0_aarch64.dmg |
| macOS Intel | PmuSub_0.5.0_x64.dmg |
| Windows x64 (NSIS) | PmuSub_0.5.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSub_0.5.0_x64_en-US.msi |
| Linux AppImage | PmuSub_0.5.0_amd64.AppImage |
| Linux deb | PmuSub_0.5.0_amd64.deb |
| Linux rpm | PmuSub-0.5.0-1.x86_64.rpm |
Highlights / 亮点
- 🛰️ 全新 PMU 子站(数据发送方)模拟器 PmuSub:独立桌面应用,可与主站本地互测,不再需要真实子站或半成品脚本 / New PMU substation (data-sender) simulator PmuSub — a standalone desktop app you can test the master against locally, no real substation or half-broken script needed.
- 📦 一次发布两个安装包:主站
PmuSim_*与子站PmuSub_*同 tag 随 release 一起分发 / Both apps ship from one release — masterPmuSim_*and substationPmuSub_*installers attached to the same tag. - 🟡 修复主站「假已连接」:TCP 连上但子站未回 CFG-1 时显示琥珀色「连接中」,真正收到 PMU 帧才转绿「已连接」 / Fixed the master's false "已连接": amber 连接中 (connecting) while the TCP socket is up but no CFG-1 has arrived; green 已连接 (connected) only after a real PMU frame.
- 📖 README 全面重做:SVG banner、中/EN 实拍截图、握手演示 GIF、引导式快速上手、FAQ/路线图/贡献 / README fully redesigned: SVG banner, 中/EN screenshots, handshake demo GIF, guided Quick Start, FAQ / Roadmap / Contributing.
Added 新增
- PMU 子站模拟器
pmusim-sub(产品名 PmuSub):独立 Tauri 2 App,支持 V2/V3 双协议、命令响应全握手、可配置正弦相量数据生成(Δf/ROCOF)、中/英双语界面、CFG-2 配置预设(JSON 保存/加载),与主站对标可本地互测 / Substation simulatorpmusim-sub(product PmuSub): standalone Tauri 2 app — V2/V3 dual protocol, full command-response handshake, configurable sinusoidal phasor data generation (Δf/ROCOF), bilingual 中/EN UI, CFG-2 config presets (JSON save/load); designed to interop-test against the master locally. - 会话新增「连接中」状态(idcode 仍是占位
host:port时),与「已连接」(子站已回帧、re-key 为真实 IDCODE)区分 / Newconnectingsession state (while the idcode is still the placeholderhost:port), distinct fromconnected(substation has replied and the session re-keyed to its real IDCODE).
Changed 改进
- 发布流程同时构建并附带子站安装包:
release.yml新增非阻塞release-subjob(macOS×2 / Windows x64 / Linux),build-release-notes下载表拆分为「主站 PmuSim / 子站 PmuSub」两节。子站无 in-app updater,故不签名、不进 update manifest / Release pipeline now also builds the substation:release.ymlgains a non-blockingrelease-subjob (macOS×2 / Windows x64 / Linux); the release-notes download table splits into 主站 PmuSim / 子站 PmuSub. The sub has no in-app updater, so it is unsigned and excluded from the update manifest. - README.md / README_CN.md 精简重构,协议大表折叠进
<details>,新增 FAQ / 路线图 / 贡献指南 / 致谢;旧 simpmufep 截图替换为当前 PmuSim 实拍 / README.md / README_CN.md restructured leaner — protocol tables folded into<details>, new FAQ / Roadmap / Contributing / Acknowledgments; stale simpmufep screenshot replaced with current PmuSim captures.
Fixed 修复
- 主站「假已连接」:子站命令端口能 TCP accept 但不是真 PMU(不回 CFG-1)时,状态栏曾一直绿字「已连接」直到心跳超时。现占位会话(
host:port)显示琥珀色「连接中」,仅在子站真正回帧后才转绿 / Master false "已连接": when a command port accepts TCP but isn't a real PMU (never returns CFG-1), the status stayed green "已连接" until heartbeat timeout. Placeholder sessions (host:port) now read amber 连接中; green only after the substation actually replies.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.4.0
PmuSim v0.4.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below:
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.4.0_aarch64.dmg |
| macOS Intel | PmuSim_0.4.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.4.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.4.0_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.4.0_arm64-setup.exe |
| Linux AppImage | PmuSim_0.4.0_amd64.AppImage |
| Linux deb | PmuSim_0.4.0_amd64.deb |
| Linux rpm | PmuSim-0.4.0-1.x86_64.rpm |
Highlights / 亮点
- 🌐 中/英界面运行时切换: 标题栏
中 / EN开关, 首次按系统语言自动判断, 选择本地记忆, 全部 UI 文案与语义标签即时切换 / Runtime 中/English UI toggle in the title bar; first run follows the OS locale, the choice is remembered locally, and all UI text + semantic labels switch live. - 🔌 修正 V2 (2006) 数据端口字段: 重新暴露并正名为「本地侦听端口」(主站作为数据通道服务端的本地绑定口) / Fixed the V2 (2006) data-port field — re-exposed and renamed to "本地侦听端口" (the master's local bind port as data-pipe server).
- 💄 配置面板金属铭牌化重做, 标题栏品牌名统一为 PmuSim / Config panel restyled with a metal-nameplate header; title-bar product name unified to PmuSim.
Added 新增
- 中/英界面切换: 标题栏
中 / EN开关, 首次按系统语言自动判断(navigator.language), 选择记忆在本地(localStorage, 同步读取无闪屏); 覆盖全部 UI 文案与前端语义标签(STAT 解码 / 触发原因 / 开关量 / 会话状态)。零新依赖, 自研useI18ncomposable, 82 个翻译 key 双语对齐 / Runtime 中/English UI toggle in the title bar; first run follows the OS locale (navigator.language), the choice is remembered inlocalStorage(synchronous read, no flash); covers all UI text and frontend semantic labels (STAT decode / trigger reason / digital state / session state). Dependency-free in-houseuseI18ncomposable, 82 translation keys aligned across both locales.
Changed 改进
ConfigInfoPanel: V2 (2006) 也显示数据端口字段并命名为「本地侦听端口」(默认 命令端口+1, 可编辑) —— V2 主站是数据通道的服务端, 在本地bind此端口等子站主动上送; V3 (2011) 仍显示「数据端口」(主站外连子站的远程数据口)。修正 0.3.x simpmufep UI 重做时把端口字段可见性反转、V2 本地侦听端口被一并隐藏的问题 /ConfigInfoPanel: V2 (2006) now also shows the data-port field, labeled "本地侦听端口" (defaults to command-port + 1, editable) — the V2 master is the data-pipe server and binds this local port for the substation to push to; V3 (2011) keeps "数据端口" (the remote substation port the master dials out to). Fixes the 0.3.x simpmufep redesign hiding the V2 local-listen port.ConfigInfoPanel由 fieldset/legend 改为.panel金属铭牌表头结构, 事件日志面板同步 flex 布局 /ConfigInfoPanelmigrated from fieldset/legend to a.panelmetal-nameplate header layout; event-log panel updated to a matching flex layout.- 标题栏产品名由 simpmufep 统一为 PmuSim / Title-bar product name unified from simpmufep to PmuSim.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.3.1
PmuSim v0.3.1
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below:
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.3.1_aarch64.dmg |
| macOS Intel | PmuSim_0.3.1_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.3.1_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.3.1_x64_en-US.msi |
| Windows ARM64 (NSIS) | PmuSim_0.3.1_arm64-setup.exe |
| Linux AppImage | PmuSim_0.3.1_amd64.AppImage |
| Linux deb | PmuSim_0.3.1_amd64.deb |
| Linux rpm | PmuSim-0.3.1-1.x86_64.rpm |
Highlights / 亮点
- 🪟 新增 Windows on ARM (aarch64) 原生安装包, ARM 设备不再依赖 x64 仿真, 且同样支持应用内自动更新 / Native Windows on ARM (aarch64) installer — ARM devices no longer rely on x64 emulation and get in-app auto-update too.
Added 新增
- Windows on ARM (aarch64) NSIS 安装包: release 矩阵新增
aarch64-pc-windows-msvc交叉编译, 产出PmuSim_<ver>_arm64-setup.exe并纳入windows-aarch64updater manifest / Windows on ARM (aarch64) NSIS installer: the release matrix now cross-compilesaarch64-pc-windows-msvc, producingPmuSim_<ver>_arm64-setup.exeand registering it under thewindows-aarch64updater key.
Internal 内部
- arm64 矩阵 leg 设为
continue-on-error(首次交叉编译容错): 该 leg 失败也不会拖垮其余平台发版或把 release 卡在 draft / The arm64 matrix leg iscontinue-on-error(first cross-compile, fault-tolerant) so its failure can't block the other platforms or leave the release stuck as a draft.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.3.0
PmuSim v0.3.0
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
🇨🇳 中国大陆用户: 首次从旧版升级若失败, 请直接从镜像下载安装包 (新版本起更新检查会自动走 proxy):
https://ghfast.top/https://github.com/Karl-Dai/PmuSim/releases/latest
🌍 Users in mainland China: if the in-app updater fails on first upgrade from a previous version, download installers from the mirror above (later versions will auto-fallback through proxies).
下载 / Downloads
下方资产里按平台选择 / Pick the asset for your platform below:
| 平台 / Platform | 文件名 / Asset |
|---|---|
| macOS Apple Silicon | PmuSim_0.3.0_aarch64.dmg |
| macOS Intel | PmuSim_0.3.0_x64.dmg |
| Windows x64 (NSIS) | PmuSim_0.3.0_x64-setup.exe |
| Windows x64 (MSI) | PmuSim_0.3.0_x64_en-US.msi |
| Linux AppImage | PmuSim_0.3.0_amd64.AppImage |
| Linux deb | PmuSim_0.3.0_amd64.deb |
| Linux rpm | PmuSim-0.3.0-1.x86_64.rpm |
Highlights / 亮点
- 🔄 应用内自动更新: 启动静默检查 + 标题栏「检查更新」按钮; 6h 节流, 24h snooze 同版本 / In-app auto-update: silent check on startup + "检查更新" button in the title bar; 6h throttle, 24h snooze per version.
- 🇨🇳 国内三镜像 + GitHub 四路回退, 直连失败也能装到最新版 / Four-way endpoint fallback (ghfast.top / gh-proxy.com / gh.idayer.com + GitHub) so mainland users still pick up updates when the direct GitHub link is blocked.
- 🔐 GitHub Actions 用 minisign 签名 updater 产物, app 端验签后才安装 / Updater artifacts are minisign-signed in GitHub Actions; the app verifies signatures before installing — no MITM via the CN proxies.
- 📝 Release body 自动从 CHANGELOG 渲染: 平台下载表 + 本版本变更 + macOS Gatekeeper 提示 / Release body now auto-renders from CHANGELOG via
scripts/build-release-notes.mjs— platform download table, version section, and macOS Gatekeeper note all included. - 💄 配置/数据面板小幅 UI 收敛: label 去冒号, 端口字段加
inputmode=numeric, 速率/读回值并排 / Minor UI polish on the config & data panels: colons dropped from labels, port fields opt into numeric IME, sample-rate readback inlined next to the dropdown.
Added 新增
tauri-plugin-updater接入, 新增check_for_update / install_update / snooze_update三个 command (crates/pmusim-app/src/update.rs) / Wiredtauri-plugin-updater; new commandscheck_for_update / install_update / snooze_update(crates/pmusim-app/src/update.rs).- 标题栏「检查更新」按钮 +
UpdateDialog.vue(markdown 渲染 + 进度条 + 错误重试) / Title-bar "检查更新" button +UpdateDialog.vue(lightweight markdown rendering, progress bar, retry-on-error). scripts/gen-update-manifest.mjs+scripts/build-release-notes.mjs: 拉 release assets, 生成 4 份latest-pmusim{,-cn1,-cn2,-cn3}.jsonupdater manifest, 渲染富格式 release body /scripts/gen-update-manifest.mjs+scripts/build-release-notes.mjs: pull release assets, emit fourlatest-pmusim{,-cn{1,2,3}}.jsonupdater manifests, render the rich release body.crates/pmusim-app/capabilities/default.json: updater/process/store/dialog 权限 /crates/pmusim-app/capabilities/default.jsongranting updater/process/store/dialog permissions.
Changed 改进
.github/workflows/release.yml: 加TAURI_SIGNING_PRIVATE_KEYenv +includeUpdaterJson: false, 新增publish-manifestjob 跑 manifest 生成 + release body 渲染 /.github/workflows/release.ymlnow signs updater bundles (TAURI_SIGNING_PRIVATE_KEY), skips tauri-action's clobber-pronelatest.json, and runs a newpublish-manifestjob to emit signed manifests and replace the release body.crates/pmusim-app/tauri.conf.json:createUpdaterArtifacts: true, 配置 4 个 updater endpoints (CN proxy 优先, GitHub 兜底), 嵌入 minisign 公钥 /crates/pmusim-app/tauri.conf.jsonenablescreateUpdaterArtifacts, lists four updater endpoints (CN proxies first, GitHub last), embeds the minisign pubkey.- 版本号统一到 0.3.0 (Cargo.toml / tauri.conf.json / frontend/package.json 之前在 0.1.0 与 0.2.0 之间错位) / Version unified to 0.3.0 across Cargo.toml, tauri.conf.json and frontend/package.json (they had drifted between 0.1.0 and 0.2.0).
- ConfigInfoPanel / DataTablePanel: label 去冒号, 端口字段
inputmode=numeric, 速率行加.ctl-with-suffix容器 /ConfigInfoPanel/DataTablePanel: colons removed from labels, port inputs useinputmode="numeric", sample-rate row wrapped in.ctl-with-suffix.
macOS 首次启动 / First launch on macOS
首次双击 .app 会被 Gatekeeper 拦截("Apple 无法验证…")。放行: 打开
系统设置 → 隐私与安全性, 滚到底点 仍要打开; 或终端执行
xattr -dr com.apple.quarantine "/Applications/PmuSim.app"。
First launch is blocked by Gatekeeper ("Apple could not verify…"). To allow:
System Settings → Privacy & Security, scroll to bottom, click Open Anyway; or
run xattr -dr com.apple.quarantine "/Applications/PmuSim.app" in Terminal.
完整变更历史 / Full changelog: CHANGELOG.md
之前版本 / Previous releases: https://github.com/Karl-Dai/PmuSim/releases
PmuSim v0.2.0
Downloads
PmuSim — PMU 主站模拟器 / PMU Master Station Simulator
See the assets below to download for your platform.