# 升级日志
## [1.9.125] - 2026-11-09 20:16:11

- 变更：**移除软件内置固件包**——安装包不再携带固件 .bin，固件升级来源收敛为「云端固件（nets3.cn）」与「本地 .bin」两源（默认云端）；固件版本发布改走云端 OTA / 本地 bin 手动升级，桌面版本与固件版本完全解耦、不再随固件改版配套发版
- 优化：安装包体积减少约 1.4MB；OTA 卡片「固件来源」由三态精简为两态，本地 .bin 文件名含版本号时同样显示版本对照

## [1.9.124] - 2026-11-09 20:08:51

- 优化：**变量表表头加列分隔竖线**——「设备与变量配置」与「实时变量」两张表的表头每列之间增加 1px 浅灰竖线（末列不加），列边界一眼可辨；数据行保持无竖线，不增加视觉噪声

## [1.9.123] - 2026-11-09 19:52:29

- 修复：**部署中途网关重启会导致变量表重复、部署被判失败**——网关重启后内存里尚未落盘的中间分块变量表丢失，而重试只重发失败的那一块（恰好是末块），末块被追加到重启后重新加载的旧表上（现场 6 个变量重复成 72 个，回读核验不一致）；现在遇到会话中断/超时会从部署第一步整份重做（现场快照只保存一次，保留部署前基线），最多重试 3 次，进度窗口明确提示「从头重新部署」
- 修复：**回读核验不一致时的错误引导**——此前提示「配置已写入网关，立即重启使配置生效」，重启只会让错误的半套配置生效；现在保留进度窗口并引导「恢复现场快照」，只有读回失败（配置可能已正确写入但读不出）才提示重启网关

## [1.9.122] - 2026-11-09 19:28:53

- 新增：**设备变量表列宽可拖动调整**——表头列分隔条拖拽调宽（双击分隔条复位该列），宽度记忆到本机下次打开保持；表头与数据行同步对齐

## [1.9.121] - 2026-11-09 18:57:23

- 新增：**内置固件包升级到 2.14.11**——修复网关 WiFi 连不上：2.14.10 的灵枢下行队列提前占用内部 DRAM，启动空闲堆从 53K 压到 44K，WiFi 驱动分配静态 RX 缓冲失败、30s 重试始终 OOM，WiFi 永不上线；队列存储区改 PSRAM 恢复 53K 基线，详见「固件日志」2.14.11
- 修复：**内置固件包指针与产物不一致**——固件包常量化文件名此前停在 2.14.7（目录内已是 2.14.10），OTA 卡片「一键升级」读取内置包会失败；本版起 FW_FILE 与 resources/firmware 内最新产物一致，随固件发版同步

## [1.9.120] - 2026-11-09 18:54:24

- 修复：**实时变量/趋势偶发全部为「—」或停止刷新**——监视轮询请求在桌面侧悬挂时整轮轮询会被在途守卫永久卡住且界面无提示；现为每个监视页请求加 10 秒上限、整轮 20 秒未收场自动重置管理口会话并继续轮询，变量页实时显示失败原因（恢复后自动清除）

## [1.9.119] - 2026-11-09 17:48:06

- 新增：**变量表批量修改**——勾选多个变量后点「批量修改」，可只勾选要改的参数（上报模式 / 上报周期 / 变化阈值 / 倍率 / 偏移 / 单位），未勾选的保持原值，只影响勾选的变量
- 新增：**变量表「上报」列**——周期上报显示「周期 Ns」、变化上报显示「变化 ≥阈值」，批量改完一眼可核对

## [1.9.118] - 2026-11-09 17:39:44

- 修复：**新建项目保存位置**——「项目目录」现在就是 .gateprj 的落点（此前误把所选目录当成文件路径再剥一段，文件写到了所选目录的上一级）；新建对话框新增「将保存为 …」路径预览
- 修复：**变量表导入支持多格式**——除 CSV（UTF-8/GBK 自适应）外，新增 Excel（.xlsx）与 JSON 导入，与本软件的导出格式互通（7 列语义一致、地址按当前设备协议族解析）

## [1.9.117] - 2026-11-09 17:30:39

- 优化：**有人云接入只需设备编号与设备密码**——MQTT 地址/端口、用户名、Client ID 与三个 Topic 全部按设备编号自动生成并在卡片内预览；产品 ID/设备 ID/设备密钥移入「高级设置」折叠（选填，一般无需填写），与新建项目向导口径一致；旧工程地址留空时自动回落到 cnb-tmqtt.usr.cn:1883

## [1.9.116] - 2026-11-09 17:13:55

- 新增：**变量表导出多格式选择**——设备管理变量表与实时变量页的「导出」现在可选 CSV（UTF-8）、CSV（GBK，兼容旧版 Excel 与只认 ANSI 的旧工具）、Excel（.xlsx，表头加粗、冻结首行）、JSON（结构化，便于脚本处理）；选中即下载到系统下载目录，GBK 版文件名带 -GBK 区分
- 修复：**CSV 变量表导入中文乱码**——中文 Windows Excel 默认导出 GBK 编码，导入原先固定按 UTF-8 解码，中文变量名与表头全部乱码；现按字节自适应识别（UTF-8 严试失败自动回退 GBK），GBK 文件的变量名/地址可正常解析

## [1.9.115] - 2026-11-06 15:47:43

- 新增：**固件升级卡第三源「云端固件」**——内置包/本地 .bin 之外可直接检查 nets3.cn 云端最新固件（含版本对照与升级提示），下载经 sha256 校验后复用原页内 OTA 推送一键升级
- 新增：**内置固件包升级到 2.14.7**——灵枢 v1.2 对接收口（信封解包/broker 归一化/毒配置回滚）、流式 GCM 软实现修复（ESP32 硬件 GCM 流式缺陷致密文 OTA 必败）、链③云下行 OTA 接线（ota.* 云映射全接+abort 收场）、N3FW 分发加密正式 KEK 化，详见「固件日志」

## [1.9.114] - 2026-10-20 15:21:46

- 修复：**二次全面审查 14 项修复**（重点）——新建项目向导跨网关配置污染双保险（上一版宣称的修复实际未落地，本次真实落盘并逐项验收）；网关清空告警后桌面旧条目常驻；切换网关时趋势数据串网关（持久 7 天污染）；**TAP 网卡名含空格时配置 IP 必失败**（重装网卡后「以太网 2」类名称是常态）；三菱 FX 的 X/Y 软元件 CSV 导出再导入丢行或错址；CSV 导入长标识符与工程撞车产生重复云 key；上报周期上限超固件容量静默回绕（每日→实际 5.8 小时）
- 修复：**内置固件包升级到 2.13.6**——FX 串口协议读恒失败/写误报失败、监视页大表丢页、心跳非法 JSON、看门狗中转任务死代码四连修，详见「固件日志」

## [1.9.113] - 2026-10-20 11:07:46

- 新增：**变量趋势图（本地先行版）**——变量页每行新增「趋势」，抽屉查看最近 1 小时曲线（1 秒采样，5/15/60 分钟窗口切换，悬停显示时间与数值，含末值/均值/最大/最小统计）；数据本地留存，重启应用后 1 小时内历史仍在；纯自绘画布零新增依赖
- 修复：**新建项目向导跨网关配置污染**——读取 A 网关配置后换地址读取 B 失败时，完成步骤可能把 A 的配置应用到 B；现失败即清空暂存，且完成时校验配置来源地址与当前一致（不一致提示重新读取）
- 修复：网关侧清空告警后桌面旧告警条常驻不消失——现跟随固件状态即时清空
- 优化：安装包内固件文件去重（-1.2MB）

## [1.9.112] - 2026-10-17 22:05:35

- 新增：**Lua 脚本日志独立显示**——脚本日志不再挤占告警条容量（固件 2.13.5 起走独立通道），与旧固件自动兼容
- 修复：数字输入框删空被当成 0 且永远无法留空——现在可以清空重输，所有数字字段适配
- 修复：中文变量名较多时「部署到网关」可能挂起——下发分块预算改按真实字节数计算（含自动化回归测试）
- 修复：官网在禁用 JavaScript 环境整页空白（抓取器/无 JS 浏览器可读）；隧道动画上下行错峰首次生效
- 内置固件包升级到 2.13.5

## [1.9.111] - 2026-10-15 08:52:30

- 修复：**变量标识符与网关 key 静默错位根治**——标识符上限从 50 收紧到 31，对齐固件存储（此前 32-50 字符的合法标识符在网关侧被静默截断，云平台/脚本按 id 取值会取不到）；存量超长标识符打开工程时自动按固件同款规则截断迁移（保留前 31 字符，与网关已有 key 对齐，不改变现网取值）；自动去重后缀同步受上限约束（此前重建出的 id 也可能超长）

## [1.9.110] - 2026-10-14 22:23:47

- 修复：**网关设置 OTA 卡片的「可升级到」版本一直显示「—」**（固件信息只在点开始升级时才加载，卡片从未主动读取）——现在进入维护页即加载内置固件版本；读取失败时卡片直接显示失败原因（此前静默显示「—」难排查）

## [1.9.109] - 2026-10-14 20:54:50

- 新增：**单变量上报策略设置**——变量弹窗与批量新增支持配置上报周期（秒）/变化阈值，补齐固件早已支持的能力入口；「从网关上载配置→再部署」不再把自定义上报策略静默重置（含自动化回归测试钉住该链路）
- 新增：**批量新增变量按设备协议结构化**——地址区域/软元件选择与单变量录入同款，三菱 X/Y 支持八进制
- 修复：CSV 点表导入三菱/欧姆龙设备地址解析失败；变量显示标签按协议族正确生成（此前 MC/FINS 等变量在部分路径恒显示 Modbus 4x 地址）
- 修复：OTA 会话接收缓冲加上限；TAP 授权窗口超时不再永久挂起；网关发现不再卡界面；macOS 双击项目文件冷启动不再丢路径
- 新增：**内置固件包升级到 2.13.4**（管理口七连修，详见「固件日志」）


## [1.9.108] - 2026-10-14 15:38:18

- 新增：**三菱 MC/FX、欧姆龙 FINS、HostLink 变量录入改 S7 式结构化选择**——「区地址手敲字符串」升级为「软元件区域（下拉带用途说明）+ 编号 + 地址预览」；X/Y 输入八进制并过滤非法字符，位软元件（X/Y/M）自动锁定为位类型，切回字软元件恢复通用类型；旧变量编辑自动按存储的软元件回填

## [1.9.107] - 2026-10-12 10:14:33

- 新增：**内置固件包升级到 2.13.3**——变量槽位并发防护根治、HostLink/FX 串口协议修复（此前先天无应答）、云上报大表修复、Lua 沙箱加固；OTA 后生效，详见「固件日志」
- 修复：设备页监视数据大表时逐轮卡顿——匹配改为一次建索引（同运行概览口径），变化闪烁改单定时器统一收
- 修复：重开窗口可能整体落在屏幕外（换接显示器后）——位置恢复补右下角校验
- 修复：非 Windows 环境子进程启动失败会崩掉主进程（五处 spawn 补错误处理），ping 可达性测试失败不再永久转圈
- 优化：模式切换按钮的读屏器选中态跟随实际模式（此前写死）；通知身份与打包 appId 对齐；脚本事件去重集加慢泄漏上限；Toast 注释与实现对齐

## [1.9.106] - 2026-10-12 00:39:27

- 修复：**网关心跳健壮性**——应答帧损坏/截断时断线检测对该网关永久失效（异常每 5 秒抛出且失败计数不累计），现异常入计数、断线自动重连照常触发
- 修复：**多网关在线时设备页/变量页状态串网关**——另一台网关的心跳帧会覆盖本页设备在线状态，现按网关过滤（与运行概览同口径）
- 修复：连接建立期间删除网关会「复活」其会话与心跳定时器，对着已删网关永久发包——连接完成后复核网关仍存在
- 修复：**CSV 点表导出→导入双向破损**——带标识符的新 7 列格式整表无法回导（1.4.58 回归），且地址列按显示标签导出却按原始编号导入（回导整体偏移），现语义逆转对齐
- 优化：**安装包瘦身**——清除包内约 45MB 无用依赖（界面库已被构建打包无需随包携带），安装包与更新下载缩小约 8MB；内部测试/原型/文档/工具运行记录不再随包分发
- 清理：已删除的服务器路由 /api/program 在桌面端的死代码残留（含升级日志内无跳转失效项）

## [1.9.105] - 2026-10-11 01:20:32

- 新增：Modbus 变量新增/编辑改 **S7 式结构化录入**——「功能码+裸地址」升级为「地址区域（保持/输入寄存器·线圈·离散输入分段选择）+ 编号 + 数据类型 + 地址预览」；选线圈/离散输入时数据类型自动锁定为位，切回寄存器区恢复全类型
- 修复：线圈/离散输入/输入寄存器变量的地址标签此前一律显示为 4x 区（如线圈 0x5 显示 40006），现按区域正确显示 Modicon 约定地址（00006/10006/30006/40006）

## [1.9.104] - 2026-10-11 01:08:55

- 修复：下拉框**选中后触发框不显示内容**——1.9.103 自绘弹层漏了选中项文本桥接组件，触发框选完仍空白
- 修复：设备管理页**空状态图标错位到左上角**——1.9.103 列表间距样式误伤空态布局，已收窄作用范围恢复居中

## [1.9.103] - 2026-10-11 00:56:12

- 优化：**下拉框弹出层全面重做**——自绘弹出列表替换系统弹层：实底卡片+细描边+柔和投影、跟随深浅主题、130 毫秒快速淡入；系统弹层无法动画的生硬感与在弹窗内被屏幕边缘裁切（左侧显示不全）的问题一并根治；键盘上下选择/首字母定位保留
- 优化：设备管理页**设备卡片实体化**——列表项从透明行改为实底卡片，静置即有细描边+轻微投影，悬停投影加深，选中蓝染+描边加深

## [1.9.102] - 2026-10-11 00:07:38

- 优化：**下拉框统一样式**——全局收编原生 select：去 Windows 系统默认箭头，换成跟随主题的细腻雪佛龙；悬停边框加深、聚焦钢蓝描边；弹出选项列表深浅色主题跟随（此前深色模式下弹白色系统列表）；远程编程页 TAP 网卡下拉、登录页服务器下拉与全应用下拉框外观统一

## [1.9.101] - 2026-10-10 23:58:46

- 修复：设备卡片选中/悬停底色**过于透明显虚**——改回不透明实底混合（选中为面板底色调入 10% 钢蓝，悬停为 4% 中性灰），卡片恢复扎实填充感

## [1.9.100] - 2026-10-10 23:39:17

- 优化：设备管理页**设备卡片样式精修**——去掉选中态左侧发光条，选中改为弱蓝染+细描边的安静样式（状态由协议图标、变量数徽标、在线点表达）；列表悬停从蓝罩改为中性灰；「N 变量」徽标从胶囊改为小圆角

## [1.9.99] - 2026-10-10 23:16:34

- 新增：**UI 质感精修第一批**（对标顶级工具 UI 的手艺层，不改变现有风格基因）——全部面板/卡片描边改为 1px 发丝线（浅色 8%/深色 9% 透明度，层次更细腻），输入框、下拉、按钮等功能控件保留清晰实色边框
- 优化：仪表盘状态卡、远程统计卡、底部状态栏的**数字改等宽数字**——轮询刷新时数值不再左右跳动
- 优化：字体栈升级——Windows 11 自动启用 Segoe UI Variable（更锐利的正文渲染），Win10 优雅回退
- 新增：统一键盘焦点环（Tab 键导航时显示钢蓝描边，鼠标点击不显示），全项目此前无系统化焦点样式

## [1.9.98] - 2026-10-10 00:54:58

- 变更：按用户反馈将切换过渡**恢复为 0.1 秒快速淡入淡出**（撤销 1.9.92/1.9.93 两轮切换动画升级——交叉淡化、进入上移弹性曲线、模式按钮过渡全部回退）；其余动画（列表增删、spinner、弹层）不受影响

## [1.9.97] - 2026-10-09 23:55:24

- 变更：按用户反馈回退 1.9.96——门户与远程编程登录页的粒子背景恢复为**各自独立**（切换时各自一片、重新生成）；1.9.95 的背景拉花修复保留不受影响

## [1.9.96] - 2026-10-09 21:48:52

- 优化：项目门户与远程编程登录页的**粒子背景合为同一片**——切换时背景连续不动（粒子位置、闪烁节奏完全延续），只有内容做过渡，不再出现粒子云整体换血的跳变；顺带窗口缩放时粒子云随比例平滑缩放而非重新随机撒点

## [1.9.95] - 2026-10-09 21:02:29

- 修复：远程编程登录页/项目门户的**粒子组网背景偶发拉花**——圆点被拉成竖向椭圆、连线拉成陡峭尖峰且不自愈。根因：画布背衬尺寸只在挂载和窗口缩放时对齐，面板自身尺寸变化（切模式/布局瞬态）后无人重排。现面板尺寸变化即时重排 + 每秒自检兜底，异常状态 1 秒内自愈
- 优化：粒子背景在页面被保活隐藏（切到本地工作台）时暂停绘制，切回时先对齐尺寸再恢复，减少后台开销

## [1.9.94] - 2026-10-08 00:30:00

- 修复：应用菜单「从网关上载配置」点击无响应（菜单 IPC 通道未桥接，独立审计发现的回归）
- 修复：切换网关后脚本编辑器残留上一台网关内容，保存会把 A 网关代码写进 B 网关工程——切网关即清空编辑上下文
- 修复：工程「保存」成功后关闭软件仍误弹「有未保存的内容」——保存成功正确复位未保存标记
- 新增：关闭守卫三重兜底——渲染层崩溃/卡死 10 秒看门狗强制放行、渲染进程崩溃自动放行
- 修复：应用菜单「从网关上载配置」语义对齐（绑定读取现场）并新增「复制配置到另一台网关」入口；「⚠️」等 emoji 文案清理
- 优化：动画统一第一批（14 项中的动画部分）——设备/脚本/规则核心列表增删淡入淡出+FLIP 补位、脚本执行与检查更新 loading spinner、设置弹窗页签过渡、Toast 堆叠补位、动效时长收敛 120-180ms
- 修复：主进程 IPC 边界兜底——设备发现失败不再永挂、send-command 超时上限对齐底层预算、主题变化重建更新窗口的引用竞态

## [1.9.93] - 2026-10-08 00:23:16

- 优化：切换过渡升级为**交叉淡化**——旧页悬浮原地淡出与新页淡入上移**同时进行**，全程画面有内容（此前 out-in 模式旧页走完到新页出现之间有一帧空白间隙）；菜单与内容区滚动结构不变

## [1.9.92] - 2026-10-07 21:54:58

- 优化：本地工作台 ↔ 远程编程切换过渡更流畅——进入侧改为「淡入+轻微上移」弹性缓出曲线（0.22s），模式切换按钮背景/颜色加平滑过渡；保留系统「减少动态效果」降级

## [1.9.91] - 2026-10-07 18:27:55

- 变更：顶栏「软件设置」按钮移至最右侧（连接中心之后、窗口控制之前）

## [1.9.90] - 2026-10-07 18:14:07

- 优化：更新提示「查看更新」打开设置弹窗后**自动检查一次更新**（直达更新界面且状态即时报出，无需再手动点「检查更新」）

## [1.9.89] - 2026-10-07 18:04:37

- 修复：软件更新窗口配色不跟随软件深浅主题（独立窗口此前固定浅色）——更新窗口配色随软件主题即时切换，深色模式下同为深色；支持「跟随系统」主题的系统偏好联动
- 修复：更新窗口「立即重启安装」多次点击会排出多个安装定时器——加防重入，点击一次后按钮不再响应

## [1.9.88] - 2026-10-07 17:39:54

- 变更：新建项目改为「选择目录 + 项目名称即文件名」——「选择位置」改为目录选择器，创建时立即在所选目录生成 `<项目名称>.gateprj`；不再需要首次保存时再选位置

## [1.9.87] - 2026-10-07 17:28:40

- 修复：无法打开 .gateprj 工程文件——1.5.0 格式迁移后文件读取校验仍只放行 .nets3（写侧白名单 1.9.85 已修，本次修读侧）；「打开项目」对话框与双击 .gateprj 关联现在都能正常打开
- 说明：与 1.9.85 的保存修复同源（读写两侧校验在格式迁移时均漏更新），读写白名单已抽公共模块并补齐回归测试

## [1.9.86] - 2026-10-07 17:13:05

- 变更：更新提示卡「下载新版」改为「查看更新」——点击后打开软件设置的更新界面（应用内下载进度/重启安装），不再跳转浏览器下载 exe

## [1.9.85] - 2026-10-07 16:27:51

- 修复：工程「保存」恒失败——1.5.0 工程格式迁移 .gateprj 后，主进程安全写白名单漏加新扩展名，写 .gateprj 一律被安全校验拒绝（保存/另存为/关闭守卫「保存并退出」全部受影响）；白名单补 .gateprj
- 说明：1.5.0~1.9.84 期间对工程文件的保存均会失败（.nets3 旧格式不受影响），此前保存过的工程数据以最近一次成功保存的版本为准

## [1.9.84] - 2026-10-07 16:13:32

- 变更：脚本存储模型——脚本保存在**工程文件**里（「保存到工程」按钮），随顶部「部署配置」统一下发到网关（与设备/变量/规则同一套部署链路）；脚本列表改读工程，无网关也能编写脚本；脚本不再直写网关（部署 upsert 脚本库，不清理网关侧多余副本）
- 说明：旧工程无脚本数据自动兼容；此前存在网关上的脚本不会被自动删除

## [1.9.83] - 2026-10-07 15:56:04

- 优化：未保存确认框升级三按钮——「取消」留在软件、「保存并退出」自动完成保存（工程配置写入本机工程文件、脚本保存到网关，任一失败则留守提示）、「直接退出」放弃修改退出

## [1.9.82] - 2026-10-07 15:29:15

- 新增：未保存内容关闭提醒——关闭软件时若有未保存的内容（工程配置改动/脚本编辑修改），弹窗列出并要求确认后才退出；无未保存内容时照常直接退出

## [1.9.81] - 2026-10-07 15:10:46

- 优化：项目门户背景加入远程编程页同款粒子组网动画（主题感知配色，跟随深浅主题；尊重系统「减少动态效果」设置，隐藏窗口自动暂停）
- 重构：粒子动画抽为公共组件，远程编程页与项目门户共用一份实现

## [1.9.80] - 2026-10-07 14:51:10

- 修复：软件设置弹窗内滚动时左侧菜单跟着滚走、升级日志的类型切换不固定——右侧内容区改为独立滚动（菜单与切换按钮固定可见），日志类型切换粘性顶置

## [1.9.79] - 2026-10-07 01:02:19

- 优化：软件设置弹窗固定为 720×460 紧凑尺寸（此前过占屏幕）

## [1.9.78] - 2026-10-07 00:49:15

- 变更：软件设置弹窗改为左侧菜单+右侧内容布局（参考主流桌面应用设置页），「关于」固定在菜单末位
- 新增：外观三卡片选择——浅色/深色/跟随系统，点击即切（「跟随系统」实时跟随系统深浅偏好）

## [1.9.77] - 2026-10-06 22:52:15

- 变更：软件设置改为顶栏按钮弹出的设置弹窗（原深色/浅色切换按钮位置），深色/浅色切换改为弹窗内的分段控件并**切换即时生效**（无需保存）；侧栏底部软件设置入口与 /settings 独立页面移除；应用菜单「关于」直达弹窗对应页签

## [1.9.76] - 2026-10-06 21:32:26

- 变更：软件设置与网关设置彻底分离——侧栏「系统设置」更名「软件设置」，只保留工作台偏好/关于/升级日志（纯本机软件项，无需网关）；「网关设置」页升级为四页签聚合（硬件参数/网关标识/部署策略/安全与维护），网关的全部设置集中一处，无网关时显示引导
- 说明：原系统设置里的网关标识/部署策略/安全与维护三个页签整体迁至「网关设置」，功能与数据不变

## [1.9.75] - 2026-10-06 20:29:37

- 修复：软件窗口无法拖动——1.9.69 曾把顶栏拖拽区收缩到左上角一小块（基于当时误判的「鼠标捕获泄漏」假设）；后续已根修真正的卡死原因（KeepAlive 嵌套/布局风暴/monaco 写入死锁），拖拽区本身无辜，现恢复整条顶栏可拖动（按钮与模式切换仍可正常点击）

## [1.9.74] - 2026-10-06 02:28:15

- 修复：脚本 nets3.log 输出在运行概览「最近事件」与右侧「待处理事件」中被标为「告警」并撑大告警计数——日志是信息不是告警；现显示为蓝色「日志」徽标且不计入待处理告警数（脚本日志与设备告警共用固件上报环，显示层语义分流）

## [1.9.73] - 2026-10-05 10:22:24

- 优化：全端体验打磨第一批（四路体验审查+独立审计，13 项）——弹窗/确认框/Tooltip 出场微过渡、输入框聚焦过渡与按钮按压反馈、侧栏 hover 过渡与 8 个导航项键盘可达（Tab+Enter）、告警条与远程编程页语义色硬编码全部令牌化、跨页小标与辅助字号统一、规则表单补四道完整性校验、云平台保存文案纠偏、设备/变量空态与导出反馈补全、设置页升级日志页隐藏无关保存按钮

## [1.9.72] - 2026-10-05 03:17:06

- 修复：选中脚本必卡死根修——Monaco 0.52.2 在本环境（Windows + Electron 39 / Chromium 140 + 软件渲染）下对编辑器任意一次写入调用都会使渲染主线程进入永不返回的原生任务（自动化复现实锤：任务时长 +4s 而任务数 +0、调试器打不断、多线程 CPU 满转，且与所有配置开关无关无法绕过）；编辑器回退 CodeMirror 6，1.9.63 全功能面（语法高亮/行号选行/搜索替换/注释切换/括号配对/自动闭合/Ctrl+S 保存/Ctrl+Enter 执行）与补全、悬浮文档全部保留，安装包瘦身约 2.2MB
- 优化：脚本 API 文档单一数据源（函数库面板与编辑器补全/悬浮共用），悬浮文档展示签名/参数/示例

## [1.9.71] - 2026-10-04 22:40:19

- 修复：脚本库与其它页面反复切换第二轮必冻结（多轮自动化复现实锤）——根因是 Monaco 自动布局的 ResizeObserver 在 KeepAlive 缓存往复时进入渲染引擎布局风暴（C++ 层冻结，CPU 不升高、调试器打不断）；改为手动布局（切回页面/窗口尺寸变化时重排），4 轮往复自动化复验零冻结

## [1.9.70] - 2026-10-04 19:16:52

- 修复：1.9.66 的「编辑器保活」因 KeepAlive/Transition 嵌套顺序错误从未生效——每次切页仍在销毁重建编辑器（切页卡死的真根因）；已对调为官方推荐顺序，保活真正生效，脚本页切走再回来编辑器原样恢复
- 修复：打开脚本后直接点「保存到网关」会把旧内容（首次为空串）覆盖写入网关、「执行」跑旧代码——Monaco setValue 同步事件被拦截导致编辑器内容未同步到内部状态（数据破坏级回归，1.9.64 引入）
- 修复：远程编程弹窗的会话日志在新会话期间恒为空（日志文件小于读取窗口时读偏移为负被吞）；「停止代理」后既有隧道继续存活；设置页每进一次累积一个更新状态监听器；若干低概率挂起/崩溃路径补兜底
- 说明：本版包含全项目深度审查（四路并行+逐条独立确认）修复的 14 项问题中的桌面端部分；建议一并 OTA 固件 2.13.2（Lua 子系统六连修）

## [1.9.69] - 2026-10-04 01:03:28

- 修复：单击被吞（要双击才进页面）、切页后整窗假死——无边窗顶栏整条拖拽区与 Monaco 的鼠标捕获冲突，触发 Windows 鼠标捕获泄漏后全窗口输入被吞；拖窗区收缩到左上角品牌块（拖动窗口改在左上角 NETS3 标识处按住）

## [1.9.68] - 2026-10-04 00:52:59

- 修复：切页后整窗冻结无响应（进程 CPU 0%，画面停帧非逻辑卡死）——禁用 GPU 硬件加速改软件渲染，绕开 Monaco 合成层+特定显卡驱动的合成器挂起；界面动画性能略降属预期

## [1.9.67] - 2026-10-03 23:18:26

- 优化：首次点击脚本库菜单冻结数秒（表现为"单击没反应要双击"）——Monaco 代码块约 3MB 首次点击才加载解析；改为启动后后台空闲预取，点击时零等待

## [1.9.66] - 2026-10-03 23:10:27

- 修复：从脚本库切到自动化规则页卡死——脚本库页改为保活（同远程编程页），切换不再销毁/重建 Monaco 编辑器（既绕开出问题销毁链路，切回也秒恢复）

## [1.9.65] - 2026-10-03 20:28:01

- 修复：升级 1.9.64 后脚本库点不开——Monaco 的语法 Worker 在打包产物（file:// 协议）下被浏览器内核禁止创建，编辑器初始化抛错炸掉页面；Worker 改为 base64 内联（file:// 合法），并给编辑器初始化加兜底（失败时页面可用并提示重启，不再白屏）

## [1.9.64] - 2026-10-03 20:18:01

- 新增：脚本编辑器切换为 **Monaco（VS Code 编辑器本体，MIT 开源）**——Minimap 缩略图、代码折叠、智能缩进、悬浮文档（停函数上弹说明）、参数签名提示（打括号弹参数）、行号整行选择/拖选、多光标列编辑全部开箱即得
- 保留：nets3 API 自动补全（补全项带文档）、Ctrl+S 保存 / Ctrl+Enter 执行 / Ctrl+/ 注释 / Ctrl+F 搜索、函数库面板、执行输出面板、深浅主题跟随
- 优化：编辑器卡升级为 VS Code 式「文件标签页+状态栏」一体布局，页面头部加脚本计数

## [1.9.63] - 2026-10-03 19:38:58

- 修复：从行尾拖选时"看着选 3 行实际删 4 行"——选区含起点行的行尾换行符不易察觉；新增 VS Code 式行选择：**点击行号选中整行、按住行号拖动整行块选**（选区含换行，删除即干净删除整行），Shift+点行号扩选；新增 Ctrl+Shift+K 删除当前行

## [1.9.62] - 2026-10-03 18:20:04

- 新增：脚本「函数库」面板——左栏「可用 API → 函数库」打开：按分类浏览变量读写/MQTT 推送/日志时间/string/math/全局函数/代码片段，每个函数带签名、参数表、返回值与可跑示例，点「插入到编辑器」落到光标处

## [1.9.61] - 2026-10-03 17:39:36

- 新增：脚本编辑器对齐 VS Code/PyCharm 日常体验——自动补全（Lua 关键字/标准库 string·math 成员/nets3 全部 API 带说明/常用代码片段，Ctrl+Space 呼出）、括号引号自动闭合、括号配对高亮、Ctrl+F 搜索替换面板、Ctrl+/ 注释切换、Ctrl+Enter 执行脚本
- 新增：VS Code 式状态栏——光标行列、语言/编码/缩进提示、字符计数（原工具条计数并入）

## [1.9.60] - 2026-10-03 14:36:50

- 修复：脚本列表点击无响应（升级 1.9.59 后）——MQTT 配置卡的新命令发到旧固件（2.12.x）时固件静默不回，管理口会话被挂满 30 秒超时窗口、期间所有命令排队假死；固件 2.13.1 改为对未知命令立即回错误响应，内置包已同步
- 说明：请 OTA 固件 2.13.1（一并包含 2.13.0 的 MQTT 推送能力）

## [1.9.59] - 2026-10-03 00:41:24

- 新增：脚本 MQTT 推送——脚本库页左栏「MQTT 推送」配置卡（broker 地址/端口/网卡/凭据，连接状态实时显示），脚本内 nets3.mqtt.publish(topic, payload) 异步发布、nets3.mqtt.connected() 查询；固件 2.13.0 配套（内置包已同步）
- 说明：需 OTA 固件 2.13.0 后使用；密码仅存网关，读取恒为掩码（不改留空即保留）

## [1.9.58] - 2026-10-02 23:41:29

- 修复：脚本日志在输出面板中顺序颠倒（固件告警环最新在前，面板按数组序追加成倒放）——改为按发生时间升序显示

## [1.9.57] - 2026-10-02 22:15:16

- 修复：同一秒内的多条脚本日志只显示一条——固件时间戳为秒级，去重键误把同秒不同内容的日志当重复；去重键改为时间戳+内容组合

## [1.9.56] - 2026-10-02 22:06:44

- 修复：脚本执行后 nets3.log 输出不进「执行输出」面板——状态监听依赖的响应式引用链在部分路径失效（历史日志可见、新日志不进），改双保险：保留首屏历史灌入 + 监听状态广播事件增量接收（网关侧告警环已验证正常写入）

## [1.9.55] - 2026-10-02 21:55:34

- 优化：脚本 nets3.log 输出改到脚本库页「执行输出」面板实时显示（钢蓝色区分执行状态），不再以琥珀警告样式挤占底部全局告警条（此前像出错提示，用户反馈）

## [1.9.54] - 2026-10-02 21:38:53

- 修复：脚本执行报「invalid option '%u' to 'lua_pushfstring'」——固件 nets3 API 错误消息用了 Lua 引擎不支持的 %u 格式符（读不存在变量即触发）；固件 2.12.2 修复，内置包同步（bin 版本串验证过）
- 说明：升级本版后请在「网关设置」OTA 固件 2.12.2；读不存在变量将正常返回「var N not found」提示

## [1.9.53] - 2026-10-02 21:22:27

- 修复：脚本库保存/执行/删除全部报「连接网关超时」——脚本页命令未携带当前网关地址，落到出厂默认 IP 192.168.1.88（网关实际在别处时连接必超时）；现与其他页面一致显式传当前网关地址，远程直读验证 0x43/0x44/0x45/0x46/0x42 全链通过

## [1.9.52] - 2026-10-02 17:00:39

- 修复：内置固件包 2.12.1 为改名假包（内容实为 2.12.0，未编译未 bump 源码）——已真编译 2.12.1 替换，bin 内版本串验证通过；OTA 升级本版后网关固件版本号才会真正到 2.12.1
- 修复：脚本库保存/执行报「未知错误」不透明——管理口错误信息现原样透出到执行输出（网关固件低于 2.11.0 无脚本命令时会明确提示）
- 说明：脚本保存/执行/删除需要网关固件 ≥2.11.0（0x42-0x46 命令），升级本版后在「网关设置」OTA 到 2.12.1 即可

## [1.9.51] - 2026-10-02 16:26:32

- 修复：脚本库编辑器与执行输出面板固定深色不随主题变化——编辑器底色/行号栏/选区改为跟随浅色/深色主题，Lua 语法配色按主题自动切换（浅色钢蓝系/深色亮色系），输出面板成功绿/失败红改用主题语义色

## [1.9.50] - 2026-10-02 15:50:50

- 新增：脚本库升级为双栏脚本 IDE——左侧脚本列表+API 速查，右侧 CodeMirror 编辑器（Lua 语法高亮/行号/历史/自动缩进/Ctrl+S 保存），底部执行输出面板显示每次执行的成败与错误详情
- 优化：新建/删除/切换脚本改用应用内弹窗并带未保存修改确认；新建脚本预填示例模板；字符计数 1900 上限实时显示

## [1.9.49] - 2026-10-02 15:36:58

- 修复：升级 1.9.48 后找不到脚本入口——侧栏「脚本库」菜单项与页面路由在上一版打包时遗漏（页面文件存在但无路由引用，等于未交付），本版补齐：侧栏「自动化规则」下方出现「脚本库」入口，点开即脚本编辑页

## [1.9.48] - 2026-10-02 05:17:13

- 新增：脚本库独立菜单——侧栏新增「脚本库」入口（自动化规则下方），脚本管理从系统设置迁出为独立页面（新建/编辑/保存/执行/删除）
- 优化：内置固件包同步 **2.12.1**（Lua 沙箱内存回收补强+脚本库管理口命令启用，实编 0 Error/0 Warning）

## [1.9.47] - 2026-10-02 05:01:54

- 新增：Lua 长稳观测设施（固件 2.12.0 M4）——LuaTask 每 60 秒自动执行周期基准脚本（表构造/遍历/字符串/日志），`[LuaBench]` 固定格式打点执行前后 PSRAM 与内部堆水位及失败计数
- 说明：烧 2.12.0 挂机 72 小时后按 `[LuaBench]` 行判读长稳（水位恒定+零失败=通过）；不影响采集与管理链路；内置固件包同步 2.12.0（arduino-cli 实编 0 Error/0 Warning）

## [1.9.46] - 2026-10-02 04:42:21

- 新增：系统设置 → 脚本库——网关 Lua 脚本管理（新建/编辑/保存/执行/删除，走管理口 0x43-0x46），规则动作「Lua 脚本」按名引用此处脚本
- 优化：内置固件包同步 **2.11.0**（含 ACT_LUA 规则动作，arduino-cli 实编 0 Error/0 Warning）

## [1.9.45] - 2026-10-02 03:39:38

- 新增：自动化规则新增「Lua 脚本」动作类型——规则命中时按脚本名执行网关脚本库中的脚本（可 `nets3.var.write` 联动采集变量并触发云上报）；脚本名经规则 JSON `scriptName` 字段下发

## [1.9.44] - 2026-10-02 02:46:21

- 新增：Lua 脚本 M2 固件侧——`nets3.var.read/write/meta`（按 id 读写采集变量并触发云上报链，write 不下发 PLC）、`nets3.log/now` API；管理口新增 0x42 内联脚本执行（JSON `{"code":"..."}` 同步返回结果，管理账号登录门控，执行超时 6s，沙箱四板斧兜底）
- 优化：内置固件包同步 **2.10.0**（含 nets3 API 与 0x42，arduino-cli 实编 0 Error/0 Warning）；桌面脚本编辑器与规则动作接入随后批次

## [1.9.43] - 2026-10-02 01:25:43

- 优化：内置固件包同步 **2.9.1**——Lua 沙箱内存回收补强（真机 M1 验证发现 mem-bomb 灌满 VM 后垃圾未回收，PSRAM 停留 255/256KB）：每轮脚本执行后强制全量 GC，GC 后仍超 128KB 自动重建 VM
- 说明：真机 Lua M1 闸门四用例已全部通过（hello/math/死循环超时杀/内存炸弹拒绝），脚本功能继续推进 M2（变量读写 API）

## [1.9.42] - 2026-10-02 00:11:08

- 修复：内置固件包 2.9.0 实为 2.8.0 产物——上一版打包时未重新编译固件，直接改名旧编译产物，导致 OTA「升级到 2.9.0」后网关仍显示 2.8.0；已重新编译真实 2.9.0（Lua 沙箱 M1）并替换
- 说明：已在网关上执行过本次 OTA 的设备会再次提示升级 2.9.0，重新执行一次即可到达真 2.9.0（Lua 沙箱 M1 版）

## [1.9.41] - 2026-10-01 23:41:14

- 新增：Lua 脚本沙箱最小集成（固件 2.9.0 M1 验证版）——Lua 5.4 全源码编译进固件，VM 内存走 PSRAM（256KB 上限），指令 hook 500ms 超时杀死循环，精简库只开 base/math/string；LuaTask 启动自检四用例并周期打点内存水位
- 说明：本版为 M1 沙箱验证版，脚本尚不可配置/接入变量 API（M2 待 M1 真机内存判据通过后实施）；内置固件包同步 2.9.0（arduino-cli 实编 0 Error/0 Warning，含 Lua 仅 +124KB）

## [1.9.40] - 2026-10-01 18:13:20

- 新增：采集协议支持三菱 FX 编程口串口协议（格式 4 带站号）——串口设备协议新增「三菱 FX 编程口」，覆盖 FX1N/2N/3U/3G 全系 485/232 直连
- 新增：FX 变量地址按软元件输入（如 D100 / M50 / X7，X/Y 八进制），支持位批量读（M/X/Y）与字批量读写（D/T/C/R），int16/uint16/int32/uint32/float32/bool；与 Modbus RTU 共用 485 总线参数
- 优化：内置固件包同步 **2.8.0**（含 FX 驱动，arduino-cli 实编 0 Error/0 Warning）；FX 帧构造测试随工具链提供（tools/fx_frame_test.py）

## [1.9.39] - 2026-10-01 15:27:43

- 新增：采集协议支持罗克韦尔 AB EtherNet/IP——设备协议新增「罗克韦尔 AB」（TCP 44818），覆盖 CompactLogix/ControlLogix 系（Micro850 原生 Modbus TCP 走既有协议，型号下拉有提示）
- 新增：AB 变量地址为 CIP Tag 符号名（如 MyDINT / Array[5]），类型 DINT/INT/REAL/BOOL；rack/slot 经设备表 S7 同款字段配置（背板路径）
- 优化：内置固件包同步 **2.7.0**（含 AB EIP 驱动，arduino-cli 实编 0 Error/0 Warning）；AB EIP 从站模拟器随工具链提供（tools/ab_eip_device.py）

## [1.9.38] - 2026-09-30 23:38:42

- 新增：采集协议支持欧姆龙 HostLink（C-mode 串口）——串口设备协议新增「欧姆龙 HostLink」，覆盖 CP1E/CJ1M/C 系串口直连；变量地址区字母 D/C/H（十进制），批量读与单字/双字写，FCS 校验
- 说明：HostLink 与 Modbus RTU 共用 485 总线参数，欧姆龙 PLC 侧需将串口格式配置为与总线一致；内置固件包同步 **2.6.0**（含 HostLink 驱动，实编 0 Error/0 Warning）

## [1.9.37] - 2026-09-30 22:51:51

- 新增：采集协议支持欧姆龙 FINS/TCP——设备协议新增「欧姆龙 FINS」（TCP 默认 9600），覆盖 NJ/CP/CJ 系网口
- 新增：FINS 变量地址按区输入（如 D100 / CIO50 / W10，区字母 D/C/W/H/A，十进制编号），支持 int16/uint16/int32/uint32/float32（双寄存器 FINS 大端）；FINS 从站模拟器随工具链提供（tools/fins_device.py）
- 优化：内置固件包同步 **2.5.0**（含 FINS 驱动，arduino-cli 实编 0 Error/0 Warning）

## [1.9.36] - 2026-09-30 13:21:56

- 新增：三菱 MC 按 PLC 型号区分——新增变量时选择具体型号（FX5U / FX3U+ENET / Q / L / iQ-R），型号决定默认端口（FX 系 5000、Q/L/iQ-R 2000）与软元件范围提示；各型号走同一 3E 驱动

## [1.9.35] - 2026-09-30 00:52:37

- 新增：采集协议支持三菱 MC（以太网 QnA 兼容 3E 二进制帧）——设备协议新增「三菱 MC」（TCP 默认 5000），覆盖 FX5U/Q/L/iQ-R 原生网口与 FX3U+ENET 模块
- 新增：MC 变量地址按软元件输入（如 D100/M50/X7，X/Y 八进制、W/B 十六进制），支持字软元件 D/W/R/ZR/T/C 与位软元件 X/Y/M/B，int16/uint16/int32/uint32/float32/bool
- 优化：内置固件包同步 **2.4.0**（含 MC 驱动，arduino-cli 实编 0 Error/0 Warning）；MC 3E 从站模拟器随工具链提供（tools/mc_device.py，无真机可全链路验证）

## [1.9.34] - 2026-09-29 23:16:09

- 修复：建立过程过渡状态错乱——步骤条曾出现「第一格未完成、后三格全绿」的颠倒画面，现强制依赖序（前序未就绪后序不得点亮）
- 修复：TAP IP 查询或自动配置若卡住会拖死整个发起流程——加 5s/8s 超时兜底，超时放行桥接启动，不再卡死在「检查 TAP 网络」
- 修复：结束会话后「已结束」提示与残留的在线指标并存——结束时桥状态全部复位

## [1.9.33] - 2026-09-29 22:40:47

- 修复：点击「发起编程会话」后按钮数秒无变化——状态机把「点击后到桥进程启动前」仍判为空闲态，阶段反馈没机会显示；点击瞬间即进入建立流程反馈（检查 TAP 网络…）
- 优化：模式切换闪屏——路由切换加入 0.1 秒淡入淡出过渡，掩盖旧页卸载与新页挂载之间的一帧空白

## [1.9.32] - 2026-09-29 22:23:48

- 新增：发起编程会话的建立过程实时阶段反馈——状态条与按钮逐步显示「检查 TAP 网络 → 配置 TAP IP·请在 UAC 弹窗确认 → 正在启动桥接 → 桥接建立中」，每个环节都可感知，等待期不再是无反馈的黑盒

## [1.9.31] - 2026-09-29 21:58:14

- 新增：模式切换即时反馈——点击「本地工作台 / 远程编程」瞬间目标按钮立即高亮且图标转圈，路由切换完成自动复位；等待期间 UI 始终有响应，不再出现点了没反应的空窗

## [1.9.30] - 2026-09-29 21:40:13

- 优化：点击「远程编程」响应迟缓——应用启动后趁空闲预取远程编程页代码块（原为点击时才加载解析），切换即时响应；登录态挂载时网关列表与绑定申请改为并行拉取，内容区出数据少等一个来回

## [1.9.29] - 2026-09-29 18:39:48

- 新增：内置固件包同步 **2.3.1**（0x04 状态帧新增 wifi_rssi 信号强度字段，arduino-cli 实编 0 Error/0 Warning）——OTA 卡片与固件日志随之更新，配合 1.9.28 的信号强度显示即可端到端使用

## [1.9.28] - 2026-09-29 17:10:03

- 新增：运行概览 WiFi 卡信号强度显示——三格信号柱（≥-60dBm 三格绿/≥-75 两格黄/更弱一格红）+ dBm 数值，悬停看完整读数
- 说明：需网关固件 2.3.1+（状态帧新增 wifi_rssi 字段）；旧固件下信号格不显示、页面其余不受影响，内置固件包随固件编译产出后另行同步

## [1.9.27] - 2026-09-29 16:43:45

- 新增：变量监控表格专项——表头点击排序（设备/名称/标识/地址/类型/实时值六列，升↓降切换，实时值按数值优先比较）
- 新增：列宽拖拽调整并记忆（表头右缘拖拽，重启软件保持），双表冻结表头同步跟随

## [1.9.26] - 2026-09-29 14:19:05

- 新增：远程编程页多网关快速切换——会话控制台新增「切换」按钮（多网关时显示），弹窗列出全部绑定网关（状态/SN/当前选中勾标）一键换目标；会话进行中不可切换，单网关项目不显示入口

## [1.9.25] - 2026-09-29 02:59:34

- 修复：每次发起会话都重复弹 UAC 配置 TAP——IP 查询输出被 PowerShell 进度流（CLIXML）污染恒判为未配置；改按网卡 GUID 链查询+压进度流+逐行容错提取，已配置 IP 的机器不再重复弹窗

## [1.9.24] - 2026-09-29 02:46:26

- 新增：发起远程编程会话时 TAP 网卡自动配置 IP——未配置的 TAP 自动下发记忆/默认 IP（192.168.0.200，弹一次 UAC），已配置则直接放行不再弹窗；配置过的 IP 记忆持久化，下次默认带出
- 优化：「配置 IP」按钮转为救急/改网段用途，博图连接指引同步更新为自动配置语义

## [1.9.23] - 2026-09-29 02:32:16

- 优化：TAP 检测回归最小形态——「检测本机网卡」按钮改为「重新检测」，仅重测 TAP 下拉并以提示反馈结果（检测到 N 个/未检测到），移除上一版的网卡列表面板与折叠展示

## [1.9.22] - 2026-09-29 02:12:10

- 优化：本机网卡检测只聚焦 TAP 虚拟网卡——TAP 行置顶高亮（未配 IP 的显示「未配置 IP」提示），本机其他网卡折叠为「本机其他网卡 N」可展开，不再刷屏
- 优化：网卡列表限高滚动（最长 208px），不再把下方内容推出一屏；同网段提示移出列表外

## [1.9.21] - 2026-09-29 01:45:10

- 新增：远程编程页「检测本机网卡」——TAP 网卡区一键枚举本机全部 IPv4 网卡（名称/IP/掩码），TAP 卡高亮标注、当前选中卡加亮，装完 TAP 驱动可即时重测不必重启软件

## [1.9.20] - 2026-09-29 01:24:15

- 优化：UI 优化第一批——运行概览/设备管理/云端通道/系统设置共 31 处旧版硬编码色（Element 时代残留灰、红绿黄）全部收敛到应用设计令牌，深色主题下这些位置不再出现突兀的固定色；会话日志终端保持刻意的深色控制台风格不变

## [1.9.19] - 2026-09-28 23:32:20

- 优化：侧栏信息架构——「添加网关」移到网关列表末尾（紧跟最后一个网关卡，空列表时排在引导提示后），标题行回归纯状态显示
- 优化：「系统设置」改为卡片式页脚入口，与网关卡片同族视觉，替换原全宽色带
- 修复：更新可用通知卡上移到状态栏上方，不再遮挡右下角在线状态与版本号

## [1.9.18] - 2026-09-28 22:23:21

- 修复：系统设置不再要求先创建网关——入口移到侧栏最底部（软件级），无网关也可打开
- 优化：系统设置内部分为「当前网关」（网关标识/部署策略/安全与维护，按网关保存）与「软件」（工作台偏好/关于/升级日志，全局生效）两级；无网关时自动落到工作台偏好，网关级页显示添加引导，工作台偏好在无网关时也可保存

## [1.9.17] - 2026-09-28 21:31:49

- 修复：远程编程页桥接步骤条与会话日志区贴在一起——日志区补回与容器边缘的留白间距

## [1.9.16] - 2026-09-28 21:25:15

- 优化：远程编程页布局压缩为一屏展示——会话类型卡与指标条收紧、日志区高度调整、TAP 配置/可达性测试/博图指引三列并排
- 修复：TAP 网卡名称较长时显示不全——下拉悬停可见完整名称

## [1.9.15] - 2026-09-28 21:07:35

- 新增：远程编程页结构调整为三大功能区——「网关总览」（绑定数/在线数/远程编程次数/累计时长统计卡+网关状态列表，一键「去编程」）、「网关管理」（绑定与解绑维护）、「远程编程」（会话发起与控制）
- 新增：远程编程页会话类型选择——网口远程编程（当前可用）与串口远程编程（RS485 透传，即将上线）双卡片入口，为串口远程编程版本预留 UI
- 优化：TAP 网卡配置与博图连接指引并入远程编程页，编程准备与操作同屏完成

## [1.9.14] - 2026-09-28 17:52:05

- 新增：远程编程页信息架构重做——左侧新增菜单栏，内容按功能拆为「编程会话 / 我的网关 / TAP 与指引」三个页面，菜单栏底部为用户状态区（账号信息+退出登录）
- 优化：会话日志改为全宽展示；绑定网关与绑定申请归入「我的网关」页，TAP 配置与博图连接指引归入「TAP 与指引」页

## [1.9.13] - 2026-09-28 17:37:28

- 新增：系统设置「网关标识」卡的网关 ID 改为网关 SN 码——在线读取网关硬件产测烧录的序列号（管理口 0x41），带一键复制按钮；云端绑定/报修可直接复制使用

## [1.9.12] - 2026-09-28 17:22:18

- 移除：本地工作台侧栏的「远程编程」入口——与顶栏模式切换重复，远程编程统一从顶栏进入

## [1.9.11] - 2026-09-28 16:05:36

- 新增：模式切换来源记忆——从门户进入远程编程后，点「本地工作台」回到门户；从工作台页面进入则回到原页面（远程编程会话保活不受影响）

## [1.9.10] - 2026-09-28 13:26:52

- 修复：门户页顶栏主题切换与窗口控制按钮挤在左侧、右侧留白——面包屑隐藏后操作区失去右推占位，补齐与远程模式同款的右对齐处理

## [1.9.9] - 2026-09-28 13:17:22

- 修复：项目门户页显示异常——页面坍缩在左窄列、右侧空白、描述文字被裁断。根因：外壳重构后门户路由复用工作区网格，侧栏不渲染但 260px 首列仍占位，门户视图被挤进窄列；补齐与远程模式同款的门户单列覆盖
- 优化：门户页剥离自带的旧顶栏与状态栏（品牌区/主题切换/窗口控制/版本栏），统一由应用外壳提供，消除双顶栏叠加

## [1.9.8] - 2026-09-28 04:12:24

- 优化：远程编程登录按钮由亮蓝渐变改为应用标准钢蓝纯色（悬停加深、投影同步收敛），观感更稳重

## [1.9.7] - 2026-09-28 04:00:16

- 优化：软件更新提示重做——顶部横幅改为右下角通知卡（对标 VS Code / GitHub Desktop 的更新提示形态），不再与软件标题栏重叠冲突；卡片含更新内容摘要与「下载新版 / 稍后」操作，深浅主题自动适配
- 优化：更新通知点「稍后」后，同一版本在本轮使用中不再重复弹出，直到出现更新的版本才再次提醒

## [1.9.6] - 2026-09-28 03:40:50

- 移除：硬件参数页「远程编程中转」手动配置卡——云端绑定流程下网关侧中转配置在激活/产测时已预置，手动配置入口不再需要（固件 0x2C/0x2D 能力保留，极端场景可串口直发）


## [1.9.5] - 2026-09-28 03:29:07

- 新增：项目门户顶栏同款模式切换——本地工作台/远程编程从门户即可直达，两大界面全局独立切换
- 优化：门户模式隐藏项目上下文（面包屑/保存/读取现场/部署配置等），进入项目后才显示


## [1.9.4] - 2026-09-28 03:07:47

- 优化：登录卡片重设计——移除顶部渐变饰条，软件图标居中置顶+居中排版+毛玻璃卡面（backdrop-blur），观感对齐主流 SaaS 登录页


## [1.9.3] - 2026-09-28 03:01:20

- 优化：登录卡片品牌标识统一使用软件图标


## [1.9.2] - 2026-09-28 02:55:54

- 优化：登录卡片视觉重做——卡内品牌行（渐变 mark+NETS3 Gateway Commander）、顶部渐变饰条、全宽渐变登录按钮、输入框聚焦光圈；浅色/深色主题粒子背景分别配色并随主题切换实时变色


## [1.9.5] - 2026-09-28 02:44:36

- 优化：登录页改为整块主题背景——移除深色分栏面板，粒子画布铺满整个登录区并跟随软件浅色/深色主题切换配色；登录卡浮层居中，内容不再被挤出可视区


## [1.9.4] - 2026-09-28 02:28:00

- 修复：登录页粒子动效未启动——启动流程在未登录时提前返回跳过了粒子初始化，现挂载即启动


## [1.9.3] - 2026-09-28 02:20:07

- 优化：登录品牌面板粒子特效重做——节点更亮（含呼吸闪烁的枢纽节点）+ 邻近连线增强；移除光晕效果


## [1.9.2] - 2026-09-28 02:10:22

- 优化：登录品牌面板新增粒子组网动效——漂移节点+邻近连线（与官网粒子特效同源），DPR 自适应、标签页隐藏暂停、reduced-motion 静态降级


## [1.9.1] - 2026-09-28 02:01:36

- 修复：更新窗口「更新内容」数据源错误——改从更新包 releaseNotes 解析多版本内容（跨版本升级显示途经全部版本的真实条目），不再依赖旧版本内置日志导致显示占位文案；releaseNotes 嵌入扩为最近 16 个版本块


## [1.9.0] - 2026-09-28 01:46:59

- 优化：登录页品牌面板动态背景——双层钢蓝柔光极缓漂移叠加点阵，纯 CSS 动画（prefers-reduced-motion 自动降级为静态）


## [1.8.9] - 2026-09-28 01:41:48

- 修复：非最大化窗口下远程编程页不随高度撑满——1.8.1 的 display:block 掐断了 flex 高度链，改回纵向 flex 容器，登录卡与底栏在任意窗口尺寸都贴合


## [1.8.8] - 2026-09-28 01:35:49

- 修复：远程编程页高度改弹性链直通（content→remote-page→登录卡逐级撑满），登录卡精确贴合底部状态栏，任何窗口尺寸无缺口无滚动


## [1.8.7] - 2026-09-28 01:29:44

- 优化：登录页尺寸弹性填充——登录卡随窗口高度自动撑满到底，不再留底部缺口；表单宽度微调


## [1.8.6] - 2026-09-28 01:21:14

- 优化：登录页服务器改为下拉选择（默认 nets3.cn 官方中继），移除手输框；登录卡片撑满可视区，消除下方死空间


## [1.8.5] - 2026-09-28 01:08:48

- 修复：远程模式顶栏操作区（主题/窗口键）塌到左侧——面包屑隐藏后失去 flex 弹性占位，改为显式右对齐；页头恢复 flex 布局，账号条右对齐不再横贯全宽


## [1.8.4] - 2026-09-28 00:44:36

- 修复：顶栏模式切换恢复绝对定位真居中（流内居中受两侧内容宽度影响会偏移）；≤1440px 窗口自动隐藏面包屑防止与切换按钮重叠


## [1.8.3] - 2026-09-28 00:27:53

- 修复：远程模式下「读取现场」未随本地专属操作隐藏
- 优化：顶栏模式切换改为流内居中——窄窗口不再与面包屑/操作按钮重叠


## [1.8.2] - 2026-09-28 00:04:59

- 修复：桥接会话存活但界面显示「未在会话」——启动时自动检测并接管进行中的桥接会话（按日志 SN 匹配网关），首轮轮询增加 8 秒宽限窗防 helper 未就绪被误判断开
- 优化：会话日志转译补全——TLS 加密确认与网关心跳事件不再显示原始 JSON；网关卡片名称与序列号相同时不再重复显示


## [1.8.1] - 2026-09-27 23:27:11

- 修复：远程编程模式内容被钉进侧栏网格列导致挤成窄条——远程模式强制单列全宽布局


## [1.8.0] - 2026-09-27 03:48:43

- 新增：双模式外壳——顶栏居中新增「本地工作台 / 远程编程」模式切换按钮，远程编程升级为独立顶层界面（全宽显示、隐藏项目面包屑与本地专属操作）；模式切换保留会话状态，本地模式提示远程会话占用


## [1.7.0] - 2026-09-27 03:25:35

- 优化：远程编程页按高保真原型整体重构——登录页品牌双栏、网关卡片点选式目标选择、会话控制台从弹窗改为页面内嵌（状态头随状态着色/元信息 chip/四指标条含上行下行迷你走势图/桥接建立步骤条/网关中断警示/左侧 TAP 与可达性操作/右侧实时日志终端）、绑定申请折叠卡、加载骨架与空态卡


## [1.6.2] - 2026-09-26 23:30:20

- 优化：远程编程页全面回归应用设计系统——所有自绘样式改用 --nets-* 设计令牌（钢蓝 accent/中性边框/小圆角），移除渐变与外来亮蓝，自动适配深色主题；会话日志控制台配色同步对齐


## [1.6.1] - 2026-09-26 21:57:35

- 优化：远程编程页布局整合——账号/刷新/退出登录收进主面板头，网关状态、其他网关、绑定申请合并为单一面板分区展示，消除多卡堆叠的杂乱感；空绑定申请不再显示独立卡片


## [1.6.0] - 2026-09-26 21:42:30

- 优化：远程编程页信息架构重设计——在线网关升级为全宽 Hero 状态面板（大状态灯+名称+固件/会话时长/流量指标块+醒目发起会话按钮），其余网关收进紧凑列表；空绑定申请不再占据整卡；SN 与名称相同时不再重复显示


## [1.5.9] - 2026-09-26 20:58:32

- 优化：远程编程页整体重设计——网关表格改卡片网格（在线状态灯/固件徽章/会话进行中卡片高亮显示实时流量与时长），绑定申请改行卡列表，对齐主界面视觉语言

## [1.5.8] - 2026-09-26 20:43:22

- 新增：远程编程会话弹窗新增实时「会话日志」控制台——TAP 接入/会话在线/设备上下线/收发帧计数/可达性测试结果按级别着色实时滚动（对齐官网 MOD·01 面板风格），界面事件与网关 helper 日志同屏

## [1.5.7] - 2026-09-26 20:22:50

- 修复：点击「立即重启安装」偶发安装器报「GatewayCommander 无法关闭」——安装前先收尾 L2 桥/helper 进程树并兜底强制退出，保证文件锁释放
- 优化：软件更新窗口视觉重设计——应用图标+版本路径（当前版本→新版本）+白卡分类日志+新按钮样式，对齐主界面风格

## [1.5.6] - 2026-09-26 19:33:03

- 修复：打开旧版 .nets3 工程后「保存」自动迁移为 .gateprj 格式（同目录同名，原 .nets3 文件保留作备份），不再永远写回旧格式

## [1.5.5] - 2026-09-26 15:53:31

- 新增：更新就绪弹出独立「软件更新」窗口——展示新版本号与当前版本，列出自当前版本以来全部版本的分类更新内容，支持「立即重启安装」或「稍后」（退出时自动安装）；同一版本只自动提醒一次
- 优化：版本日志解析兼容日期带秒/不带秒两种格式

## [1.5.4] - 2026-09-26 15:22:45

- 新增：升级日志随更新推送——更新包元数据内嵌本次版本日志，更新下载完成后「软件更新」卡直接展示新增/优化/修复分类内容
- 新增：系统设置新增「版本日志」入口，可查看完整历史升级日志
- 优化：官网页脚新增「版本日志」在线查阅入口

## [1.5.3] - 2026-09-25 01:18:49

- 新增：云端通道页改版为「平台单选」——在有人云与 ThingsBoard（通用 MQTT）之间二选一，页面注明「同一时刻仅启用一个云平台；更多平台持续接入中」；切换平台时提示另一平台将停止上报（保存并部署后生效），停用平台的配置保留在本机，切回无需重填
- 优化：对齐网关固件 2.3.0 单云语义——部署仅下发唯一活动平台，上传网关配置时只回显活动平台并保留本地停用平台配置；管理口 0x22 云配置载荷与固件新结构逐字段核对（真机读写回验证通过）

## [1.5.2] - 2026-09-24 22:25:11

- 优化：应用内自动更新端到端实测通过——1.5.1 安装版经 nets3.cn 更新源自动发现本版本并后台下载，重启后完成安装；本版本用于打通自动更新交付链路，功能与 1.5.1 一致

## [1.5.1] - 2026-09-24 21:50:00

- 新增：应用内自动更新——启动后自动检查新版本并后台下载，就绪后可一键「重启更新」，不操作则退出软件时自动安装
- 新增：系统设置 → 关于 NETS3 新增「软件更新」卡，可手动检查更新、查看下载进度与结果；更新包经 nets3.cn 官方源 HTTPS 分发并做完整性校验

## [1.5.0] - 2026-09-24 14:46:49

- 新增：远程编程（异地 TIA 直连现场 PLC）——云端账号登录后一键建立 L2 桥接会话，博图可搜索/下载/监控现场 PLC，会话内含可达性测试、实时上下行流量与网关心跳
- 新增：网关绑定流程——用户填序列号申请，管理员后台审核发放一次性授权码，填码完成绑定
- 新增：中继通道 TLS 加密（桌面端到服务器，抓包验证）；安装时自动检测并安装 TAP 虚拟网卡
- 新增：项目文件扩展名 .gateprj（旧 .nets3 兼容打开）
- 修复：远程编程链路稳定性系列问题——握手失步、L2 桥静默、TAP 写卡死、高负载断线、设备发现组播被拦；内置固件包更新至 2.2.0（详见固件日志）
- 优化：管理后台新增绑定审核与强制断开；会话记录落库可查

## [1.4.71] - 2026-09-24 04:00:57

- 新增：远程编程中继链路 TLS 加密——桌面数据面 helper 默认经 TLS 连接中继 (系统根证书校验 nets3.cn)，会话弹窗显示「TLS 已加密」徽标 (仅加密实际生效时点亮)
- 优化：兼容旧环境——TLS 握手失败时自动回退明文连接一次，不影响旧版中继/特殊网络环境下的远程编程使用

## [1.4.70] - 2026-09-23 23:23:54

- 优化：TAP 打开失败诊断增强——逐候选设备路径记录失败原因, 可区分驱动半死态 (Code 31) 与路径缺失

## [1.4.69] - 2026-09-23 23:11:50

- 修复：博图「可访问设备/兼容设备」搜索不到 PLC——远程编程桥接的上行白名单放行 PROFINET DCP (0x8892) 与 LLDP (0x88CC)，TIA 组播发现请求现可穿透隧道；按 IP 定向访问不受影响

## [1.4.68] - 2026-09-23 22:37:58

- 新增：远程编程会话流量实时监控——上行/下行速率 (B/s) 与累计字节实时显示 (L2 桥 helper 字节计数直通)
- 修复：可达性测试输出乱码——不再直接展示系统 ping 的 OEM 编码文本, 改为解析回包数/延迟/TTL 后拼装本地化结果

## [1.4.67] - 2026-09-23 22:21:22

- 优化：安装 TAP 虚拟网卡改为覆盖式——安装时先移除已有 tap0901 设备（含损坏/第三方变体）再装全新驱动，不再因存量网卡不可用而跳过；远程编程运行中的自动修复同步改为移除+重装（单次授权完成）

## [1.4.66] - 2026-09-23 22:07:11

- 修复：TAP 自动修复在 Program Files 安装路径下失败——含空格路径被 PowerShell 拆碎, 现内嵌引号整体传递; 修复过程输出重定向到临时文件并在失败提示中带回实际原因

## [1.4.65] - 2026-09-23 21:52:45

- 修复：远程编程 TAP 自动修复未触发——helper 退出码经 PowerShell 启动器被吞 (5 变 1)，现显式透传；检测到虚拟网卡全部不可用时自动提权安装新网卡并重连的链路已打通
- 优化：TAP 诊断增强——尝试失败时记录实际打开的设备路径，便于远程定位驱动兼容性问题

## [1.4.64] - 2026-09-23 21:40:33

- 修复：部分电脑远程编程报「TAP 适配器不可用 / SET_MEDIA_STATUS 参数错误」——helper 现在逐个尝试所有虚拟网卡并按参考实现对齐设备打开方式（多候选路径/共享模式/规范异步 IOCTL）；全部不可用时自动弹管理员授权安装新虚拟网卡并重连，无需手动处理

## [1.4.63] - 2026-09-23 20:40:56

- 新增：网关绑定流程——桌面端「远程编程 → 绑定网关」填序列号申请，管理员在后台「绑定审核」批准并发放授权码，用户填码完成绑定；支持解绑与换绑，全程审计
- 新增：项目文件扩展名改为 .gateprj（旧 .nets3 项目文件兼容打开）
- 新增：远程编程会话卡片可达性测试按钮；网关在线状态与心跳实时显示
- 修复：远程编程连接稳定性系列问题——配对后无法建桥、会话数秒内静默掉线、桌面端偶发无响应断开、TIA 下载高负载导致网关离线；实测博图 TIA 下载与监控正常
- 修复：管理后台「强制断开」按钮报错与编程会话记录残留显示
- 优化：内置固件包更新至 2.1.2（详见固件日志）；服务端新增帧级错误日志，孤儿会话自动回收

## [1.4.62] - 2026-09-12 12:19:47

- 优化：内置固件包更新至 1.3.16——Modbus 读功能码扩展（FC01/02/04）、DLT645 多表地址、RS485 校验位配置生效、登录锁定模块化，详见固件日志

## [1.4.60] - 2026-09-12 00:26:17 - 2026-09-12 00:26:17

- 新增：桌面测试网（vitest）——标识符合规、部署编排等 12 项自动化测试接入发版门禁；新增 `npm run audit` 依赖漏洞检查脚本
- 优化：有人云点表导出 xlsx 生成库迁移至持续维护的 exceljs（xlsx 存在无修复版的高危漏洞），导出格式不变

## [1.4.59] - 2026-09-11 18:47:42

- 修复：中文名变量生成的标识符带下划线尾巴（如「int值」→「int_」「int值值值值」→「int_______」）——清洗规则改为剔除非法字符并收紧下划线；存量的不合规标识符在下次保存/导入时自动重建

## [1.4.58] - 2026-09-11 15:45:11

- 修复：设备管理导出变量表没有标识符列、导出的文件再导入后标识符错乱——导出/导入升级为可往返格式（名称,标识符,地址,类型,倍率,偏移,单位），字段引号安全、表头自动跳过、标识符合法性自动兜底

## [1.4.57] - 2026-09-11 12:12:28

- 修复：安装包版本号与软件内显示不一致（1.4.56 安装包显示 1.4.55）——版本号需在构建前更新，本版起发版流程已修正；功能与 1.4.56 完全一致（标识符合规性检查）

## [1.4.56] - 2026-09-11 11:52:44

- 新增：标识符合规性检查——保存工程和导入点表时自动校验所有变量标识符（字母/数字/下划线、字母或下划线开头、≤50 字符），非法/空/重复的标识符自动重建并在保存提示中列出，保证有人云上报 key 始终合法

## [1.4.55] - 2026-09-11 11:33:36

- 优化：内置固件包更新至 1.3.15——断网续传（发布失败自动入缓存、恢复后限速补发、上行时间戳改 NTP epoch）、单变量上报策略生效（周期/变化阈值）、看门狗闭环（任务停摆写黑匣子自动重启），详见固件日志

## [1.4.54] - 2026-09-11 11:11:47

- 修复：有人云默认服务器域名笔误更正为 cnb-tmqtt.usr.cn；存量工程打开「云端通道」页时自动纠正旧值并标记未保存

## [1.4.53] - 2026-09-11 11:03:16

- 修复：连接网关时密码输入框被其他窗口盖住无法输入——鉴权/确认等系统弹窗置顶显示
- 修复：新建网关向导选择了有人云并完成配置后，自动添加的却是通用 MQTT（确认分支漏实现有人云）
- 优化：有人云「服务器地址」可编辑（默认 cnb-tmqt.usr.cn，以控制台显示的接入地址为准）
- 修复：有人云点表导出标识符不合法——本地无标识符的变量回退时自动清洗为合法格式（字母/数字/下划线），非法值自动生成 v_<序号>

## [1.4.52] - 2026-09-11 10:40:56

- 优化：彻底移除 element-plus 依赖——全部轻提示/确认框/输入框改用自绘 UiToast 与统一模态组件，视觉 100% 收敛到 NETS3 主题，安装包更小
- 优化：网关日志窗口升级为运维面板——容量 200→5000 条，新增级别过滤、关键字过滤、导出 .log 文件（长会话排查不再被淹没）

## [1.4.51] - 2026-09-11 02:17:24

- 优化：全部小窗口（对话框/确认框/轻提示）UI 统一化——圆角统一 10px、页脚与卡片同语言、各页字段与备注条同一观感、软件内原生确认框（写入/删除等弹窗）外观对齐主题不再突兀

## [1.4.50] - 2026-09-11 02:05:39

- 优化：内置固件包更新至 1.3.14——多专家安全体检修复：恢复出厂/重启改为需登录（堵住未认证接管链）、有人云读写应答恒为 null、ModbusTCP 写 32 位帧截断、OTA 防同机干扰、SPIFFS 挂载失败不再格式化等，详见固件日志

## [1.4.49] - 2026-09-11 00:20:00

- 修复（多专家体检）：读取现场/向导后云平台配置原样带出缺失的启用字段，下次部署会把全部云通道静默禁用——已统一补全
- 修复：0x03 分页循环上限未跟固件同步（21页×15条=315 < 512），超 315 个变量的工程监控与导出标识静默截断
- 修复：多网关工程下一个网关的实时轮询会饿死其他网关（含断线探测失效）；未授权弹窗期间轮询守卫竞态
- 修复：部署时规则的动作目标变量已删除的规则不再被误启用（此前只检查条件变量）
- 修复：恶意网关发送畸形帧流可致软件崩溃——帧解码改迭代扫描并加接收缓冲上限
- 优化：网络层 0x05 重启/0x06 恢复出厂不再免鉴权直发（配合固件 1.3.14，自动登录透明兼容）；写入保护注记对比度提升；离线设备整卡降透明度

## [1.4.48] - 2026-09-11 00:58:57

- 新增：自绘协议图标集——S7（PLC 芯片）、ModbusTCP（寄存器+网络）、ModbusRTU（串行波形+端子）、DLT645（电能表）、透传（双向箭头）各配专属图标，设备卡片与工作区标题按协议自动匹配显示；另附网关/寄存器/规则三个通用图标备用

## [1.4.47] - 2026-09-11 00:48:22

- 优化：设备列表卡片视觉重构——协议图标头像化并叠加在线状态点、变量计数徽章化、地址单行显示不再折行、操作按钮弱化悬停显现、选中态底色+描边+左侧强调条

## [1.4.46] - 2026-09-11 00:36:15

- 修复：设备管理变量表头同款问题——表头独立于滚动区占满整行（含滚动条沟槽），与数据行列宽严格对齐

## [1.4.45] - 2026-09-11 00:24:26

- 修复：变量监控表头滚动条沟槽区域露白——灰底改涂在表头容器上，整行含沟槽完全覆盖

## [1.4.44] - 2026-09-11 00:13:40

- 修复：变量监控表头被右侧滚动条占位截断——表头行独立于滚动区，灰色表头延伸覆盖滚动条区域、占满整行，滚动条从表头下缘开始，两侧列宽严格对齐

## [1.4.43] - 2026-09-11 00:03:43

- 优化：变量监控表头占满整行——固定表格布局 + 显式列宽，表头与数据行同宽，消除表头右侧的空白；长内容自动省略号

## [1.4.42] - 2026-09-10 23:39:04

- 优化：内置固件包更新至 1.3.13——写入保护期保持云端连接（静默期 MQTT 心跳不断、broker 不踢线、写入后数据无缝接续），配合上位机的「写入保护中」状态显示，详见固件日志

## [1.4.41] - 2026-09-10 23:23:31

- 新增（需配合固件 1.3.13）：写入变量/部署期间概览页云端连接显示「写入保护中（暂停上报）」琥珀色注记，数值保持在线不再闪 0/1——固件侧静默期保持 MQTT 心跳与连接，broker 不再超时踢线，写入后云端数据无缝接续，详见固件日志

## [1.4.40] - 2026-09-10 23:03:17

- 修复：OTA 升级偶发失败（提示「管理口密码验证失败」）——升级开始前先挂起实时刷新并等在途查询排空，不再与升级连接抢占管理口；配合固件 1.3.12 同源连接接管后彻底消除该竞态

## [1.4.39] - 2026-09-10 21:53:08

- 优化：内置固件包更新至 1.3.11——修复有人云「假在线」死角（下发静默/WiFi 抖动后云端永久停报而诊断显示正常，现自动恢复上报并立即补发；真断开记录诊断事件；重连 5 秒退避），详见固件日志

## [1.4.38] - 2026-09-10 21:43:35

- 新增：变量监控/设备管理分页器升级——首页/末页按钮、显示总页数、输入页码直达跳转
- 新增：浮点变量小数位精度——设备管理添加/编辑浮点变量时可设 0-6 位小数，变量监控与设备页实时值按精度显示
- 新增：有人云导出弹窗连续地址选择——输入地址区间（如 M200.0 ~ M201.2）一键勾选/清除，或勾选首行后 Shift 点末行连续选中
- 修复（需配合固件 1.3.11）：云平台离线但诊断仍显示正常的「假在线」问题——固件侧详见固件日志

## [1.4.37] - 2026-09-10 21:01:10

- 新增：有人云导出上限按平台版本动态匹配——弹窗内可选基础版（100）/高级版（300）/企业版（500）/旗舰版（1000），勾选校验随版本联动，所选版本随工程保存

## [1.4.36] - 2026-09-10 20:52:51

- 新增：有人云点表导出前可勾选变量——弹窗支持搜索、按设备筛选、全选/反选，已选计数实时校验有人云单次导入 100 条上限（0 个或超限时导出按钮置灰）

## [1.4.35] - 2026-09-10 20:34:02

- 新增：概览页右侧「运行状况」面板显示网关运行时长（每秒自增，支持天级格式），与下方运行摘要同源

## [1.4.34] - 2026-09-10 20:22:16

- 修复：有人云点表导出的变量标识不对——本地旧工程标识为空时回退成了变量名，平台变量收不到上报数据；现导出前自动从网关拉取固件侧权威标识（需网关在线），失败时仍用本地值并提示
- 修复：概览页「云端连接」长期显示 0/1，与实际连接状态不同步——离开监视页后状态帧停止刷新所致
- 优化：实时数据全程保活——切页不再重新等待刷新，任何页面停留期间实时值与网关状态持续更新，页面切换即现

## [1.4.33] - 2026-09-10 19:53:18

- 修复：有人云「导出点表」文件导入有人云报格式不对——现按官方「变量导入」Excel 模板生成（.xlsx，工作表「变量导入」，数据格式/存储方式/读写方式均填官方合法枚举值，可直接批量导入）

## [1.4.32] - 2026-09-10 18:52:48

- 新增：变量监控页在线写入——每行实时值旁的写入按钮（悬停显现）可直接向 PLC 下发目标值，bool 变量填 0/1，TCP/S7 同步返回写入结果、RS485 异步下发（需配合网关固件 1.3.10）
- 优化：内置固件包更新至 1.3.10（新增管理口在线写变量命令，详见固件日志）

## [1.4.31] - 2026-09-10 18:19:47

- 修复：导出点表 CSV 失败（写入白名单未放行 .csv 导出文件）
- 优化：内置固件包更新至 1.3.9（修复上位机在线期间有人云上报与 S7 轮询被下发静默冻结的问题——本条是有人云离线不上传的根因，详见固件日志）

## [1.4.30] - 2026-09-10 17:16:49

- 优化：设备管理页也运行实时轮询——实时值与变量标识符在设备页与变量监控页同步刷新（此前只有变量监控页轮询，设备页两列恒为「—」造成"没有数据"的误解）

## [1.4.29] - 2026-09-10 16:48:23

- 修复：变量监控实时值与变量标识列长期为「—」——需配合网关固件 1.3.8（W5500 大帧分包，详见固件日志）
- 新增：变量标识符自动回填显示——网关 1.3.7+ 为空标识符自动生成的 v_<id> 随监视数据同步到本地工程并随保存持久化，历史导入的变量无需重新导入
- 修复：变量监控页搜索框图标与占位文字重叠（样式未穿透子组件）
- 优化：诊断中心离线时的空态提示居中显示

## [1.4.28] - 2026-09-10 15:38:53

- 修复：诊断中心文案与状态误报——「网口」统一为「以太网」；云平台显示工程配置名（如「有人」）而非内部槽位号；管理口「新连接接管旧会话」是自动重连的正常行为，不再标为降级（常驻黄牌误导）
- 优化：诊断中心默认收起为计数徽章（不再挤占主视口）；未启用的功能链默认隐藏、可点「未启用 N」展开；无事件行不再显示无意义的「0s 前」；时间量词改为 秒/分钟/小时前；分组标题加accent竖线强化层级

## [1.4.27] - 2026-09-10 14:40:41

- 优化：诊断中心界面重构——条目按「网络 / 连接与认证 / 现场采集 / 云平台 / 系统服务」分组展示；顶部新增 正常/降级/故障 计数徽章与「仅看异常」过滤；故障行红色高亮、长原因悬浮显示全文、时间格式化为秒/分/时前

## [1.4.26] - 2026-09-10 14:04:11

- 新增：运行概览「诊断中心」面板——实时展示网关 19 条功能链（网口/WiFi/NTP/认证/S7/ModbusTCP/RTU/5 路云平台/OTA/变量存储/部署快照/规则引擎等）的 状态、错误码、具体原因、发生时间，未登录也可读取；出异常先看诊断中心即可定位
- 优化：内置固件包更新至 1.3.7（含变量标识符自动回填 v_<id>，CSV 导入/历史工程的变量自动获得有人云上报标识符）

## [1.4.25] - 2026-09-10 11:16:54

- 修复：网关重启（部署生效/OTA 升级）后软件永久显示「会话已重置」、实时值不再刷新，须重启软件才能恢复——根因是重启后的旧连接变僵尸未被识别，手动重连也无法重建；现显式连接强制换新会话、心跳/监视用 6 秒短超时快速识别死连接、心跳异常计次触发自动重连
- 修复：变量监控页实时值全部为「—」而设备状态显示正常——0x03 分页响应含中文名时超出网关 4KB 帧上限被截断成非法数据被静默丢弃（需配合网关固件 1.3.5）
- 新增：云端通道「测试连接」对域名拼写错误（被解析到 127.0.0.1）给出明确提示
- 优化：内置固件包更新至 1.3.5（S7 数据日志轮转窗口 + 0x03 分页截断修复，详见固件日志）

## [1.4.24] - 2026-09-10 08:34:22

- 修复：新增的设备/变量在保存工程或切换网关后静默丢失（界面与工程文件数据脱钩）——现已完整保存
- 修复：删除当前选中的网关后，其设备表可能被同步/部署到其他网关（跨网关配置污染）
- 修复：设备管理页设备在线状态进入页面后不再刷新（一直显示进页瞬间的快照）
- 修复：菜单「项目树」「固件升级」点击无反应
- 修复：OTA 验证过的密码未关联到当前网关会话，升级重启后监视/部署全部要求重新登录；密码错误时不再自动反复重试（避免触发网关防爆破锁定）
- 修复：部署期间变量实时轮询仍并发运行，争抢网关唯一管理口连接导致部署偶发超时
- 修复：网线/网关意外断开后界面一直显示「已连接」；两台设备站号相同时变量监视数据可能串到对方设备
- 修复：规则引用变量按位置寻址，删除/新增变量后规则错指——现按稳定标识跟随变量，引用已删变量的规则在部署时自动停用并提示
- 优化：内置固件包更新至 1.3.4（全面审计修复：超 16 台设备内存越界、变量表断电丢失窗口、S7/DLT645 协议缺陷等 30 余项，详见固件日志）

## [1.4.23] - 2026-09-09 22:46:58

- 修复：1.4.22 安装包实际未包含 1.3.2 固件（发版流程漏拷固件文件），本包补上——内置固件为含诊断日志的 1.3.2 正式版（S7 读失败错误码 / MQTT 连接失败状态码）
- 优化：内置固件包更新至 1.3.2

## [1.4.22] - 2026-09-09 22:40:00

- 新增：密码输入框显隐切换（小眼睛）——WiFi 密码、云平台设备密码等密码框可点击眼睛图标查看明文
- 优化：配套固件 1.3.2 失败诊断——S7 块读失败打印错误码与参数（定位 PLC 未启用 PUT/GET 等），MQTT 连接失败打印状态码（区分网络/凭据问题），失败不再静默

## [1.4.21] - 2026-09-09 22:10:00

- 新增：显式管理口登录——连接网关后自动探测鉴权状态，未登录时弹出密码框（可见的登录入口，不再依赖隐式弹窗）；登录成功后监视数据与部署立即恢复
- 优化：静默轮询遇未授权时每分钟至多弹窗一次索取密码（不再无限静默失败让页面全显离线）

## [1.4.20] - 2026-09-09 21:35:00

- 修复：管理口密码未登录时，变量监控/设备状态的静默轮询被网关拒绝后永远静默失败，页面全部显示「离线/超时」——现在检测到未授权会每分钟至多弹窗一次索取密码，输入正确后数据流自动恢复

## [1.4.19] - 2026-09-09 20:43:23

- 修复：管理口密码输错后软件无限重发错误密码，叠加网关防爆破锁定导致持续无法连接——现在密码确认错误时清除本机缓存、停止自动重连并明确提示，输入正确密码后即恢复
- 新增：管理口会话准入风险分级（固件 1.3.1）——OTA 传输/已登录会话进行中拒绝新连接；未认证的旧会话（心跳/监视/崩溃残留）被新连接立即接管，僵尸会话不再阻塞新客户端 60 秒
- 优化：内置固件包更新至 1.3.1（含上述会话准入分级）

## [1.4.18] - 2026-09-09 19:12:27

- 优化：配套固件 1.3.0 架构升级——Tag 数据库居中（南北向解耦）、统一设备驱动接口（S7/ModbusTCP/ModbusRTU）、变量表迁移 PSRAM（容量就绪 1024 点）、变量级质量位
- 优化：OTA 分块传输日志降噪（每 50 块记 1 条，不再刷屏数百行）
- 优化：运行概览仪表盘指标改为真实口径——堆空闲/最大连续块、固件分区、NVS 条目、SPIFFS 用量，新增存储/内存健康自检告警
- 优化：内置固件包更新至 1.3.0（含流式配置导出/变量表 SPIFFS 持久化/状态帧 v2 等全部 1.2.15-1.3.0 修复）

## [1.4.17] - 2026-09-09 12:42:31

- 修复（重要）：启动时的遗留 NVS 回收误将变量表的活跃存储清空——变量表每次重启后归零（只能存活一次重启），S7/云平台随之失联。本版起变量表常驻 NVS 不再被清除
- 注意：升级本版后需重新部署一次配置（历史部署的变量已被旧版清除），此后重启/断电不再丢失
- 优化：内置固件包更新至 1.2.14（含 1.2.13 崩溃修复与 1.2.14 变量表持久化修复）

## [1.4.16] - 2026-09-08 23:16:53

- 新增：工程文件 (.nets3) 保存云平台/WiFi 密码，重开工程免重填。⚠️ 工程文件含明文密码——务必不要提交 git 或外传（安全红线不变）；「网关导出 JSON」发给他人的文件仍剥离密码；部署时空密码网关侧保留现有值的行为不变

## [1.4.15] - 2026-09-08 22:47:12

- 优化：下游设备轮询全面重构——S7/ModbusTCP 变量按地址合并分块读（138 个连续 bool 由 138 次总线事务降至约 10 次），网口轮询改时间片步进（管理口响应等待上限降为单事务时长），RS485 改设备级分块突发（修复每周期每设备只轮到一个变量、实际刷新率为标称值 1/N 的缺陷）
- 修复：S7 的 float32/int32 变量误按 2 字节读取导致数值错误，现按类型正确宽度（4 字节）读取
- 修复：串口任务误轮询 TCP/S7 绑定变量导致看门狗告警刷屏
- 优化：内置固件包更新至 1.2.12（含上述全部固件修复）

## [1.4.14] - 2026-09-08 20:05:34

- 优化：TCP/S7 设备「测试连接」结果文案改为「本机可达 X ms」并注明网关侧连通以轮询状态为准——测试从上位机发起，与网关侧轮询是两条网络路径，消除「测试在线但设备离线」的误解

## [1.4.13] - 2026-09-08 19:48:53

- 修复：搜索连接到换了 IP 的网关后，项目条目地址不同步——心跳仍打旧地址并反复拆掉可用会话（日志表现为「已连接新地址」但心跳全部「连接网关超时」）；现在按 MAC 匹配后自动把条目地址同步为发现地址
- 修复：云端通道页 0 个平台时「添加平台」占位卡与「还没有云平台」空状态同屏显示、占位卡按钮被裁切——占位卡现仅在已有平台时显示

## [1.4.12] - 2026-09-08 19:33:41

- 修复：网口 IP 应用后字节序反置（192.168.0.88 上线成 88.0.168.192）——固件统一 IPv4 转换约定，网口 IP/掩码/网关/DNS 重启后按正确地址生效；同批次固件还修复了网页设置页 IP 显示反序、保存写入错误值的问题
- 新增：设备搜索跨网段可达——固件发现应答改为广播回程，网关自身 IP 配置错误或与本机跨网段时仍能被搜到；搜索框对跨网段网关提供「一键添加本机同网段地址」（管理员授权新增副地址，不改现有网络），打通「网关配错网段无法直连修复」的死循环
- 优化：内置固件包更新至 1.2.8（含上述固件修复）

## [1.4.11] - 2026-09-08 18:32:38

- 修复：网口静态 IP 从未生效——固件 1.2.6 起 ETH 初始化读取 NVS 配置（eth_ip/掩码/网关/DNS），网页与管理口配置的网口地址重启后正确应用；未配置的字段回退默认值。⚠️ 升级此版后，网关将以 NVS 中已保存的网口 IP 上线（原一直用出厂默认 192.168.1.88）
- 优化：内置固件包更新至 1.2.6（含上述固件修复）

## [1.4.10] - 2026-09-08 17:58:16

- 修复：大配置工程部署后读回校验报「读回失败」（response too large）——固件 1.2.5 大帧改为流式发送，配置导出上限 16KB→64KB，部署后核验恢复正常
- 优化：部署写入全部成功但读回核验失败时，主动询问「立即重启使配置生效」——避免硬件配置（IP/串口参数）滞留网关 NVS 永不生效
- 新增：连接网关时检测同一 IP:端口 配置在多个网关条目并告警（双条目同时连接会互相挤掉网关会话）
- 优化：内置固件包更新至 1.2.5（含上述固件修复）

## [1.4.9] - 2026-09-08 15:23:14

- 优化：变量监视页大表卡顿——监视数据匹配由全表线性扫描改为索引直查，数值批量写入取代逐条写入（大幅减少页面重算次数），数值变化闪光改为批量清除

## [1.4.8] - 2026-09-08 15:00:53

- 修复：OTA 密码验证与升级终止命令未携带网关会话标识，被网关单会话机制拒绝，密码验证始终报「会话已重置」——现与监控连接共用同一会话，密码可正常校验
- 优化：内置固件包更新至 1.2.4（会话接入时重置空闲计时，消除新连接被误判空闲而立即释放的问题）

## [1.4.7] - 2026-09-08 08:59:52

- 修复：网关存在离线下游设备（如未接线的 S7 PLC）时，OTA 升级与配置部署频繁报「会话已重置」——固件 1.2.3 在升级/下发期间整体暂停下游轮询与云上报，结束后自动恢复；离线设备重连改为指数退避（5s 起步，最长 5 分钟）
- 修复：部署含过小轮询周期（<100ms）的老工程时自动提升到 100ms，从源头避免离线设备连接风暴
- 优化：内置固件包更新至 1.2.3（含上述固件修复）；OTA 过程增加逐帧诊断日志便于排障

## [1.4.6] - 2026-09-07 22:14:41

- 修复：OTA 登录偶发「无响应」——登录请求超时后自动重试一次（LOGIN 幂等）；固件侧对无会话的响应丢弃增加串口留痕

## [1.4.5] - 2026-09-07 12:34:32

- 修复：MAC 地址仅在 UDP 搜索添加时可得、软件重启后丢失——固件状态帧新增 MAC 字段（v1.2.2），网关在线时自动回填到网关标识并随工程持久化

## [1.4.4] - 2026-09-07 11:52:16

- 修复：部署后部分设备/变量丢失（回读核验不一致）——工程文件里的设备 id 是时间戳浮点数，直接下发被固件 uint8 截断后多台设备撞号互相覆盖。现在部署文档内的设备 id 按位置分配（1,2,3...），回读核验的通信参数指纹同样按位置对齐

## [1.4.3] - 2026-09-07 11:22:17

- 修复：命令超时后会话未销毁——迟到的响应会串进后续命令造成协议错位；现在超时即销毁会话，下次请求自动重建
- 修复：登录超时被误报为「unauthorized」导致密码提示循环；现按真实原因提示

## [1.4.2] - 2026-09-07 01:04:13

- 修复：OTA 开始时偶发「连接网关失败」——释放管理口会话到网关恢复监听存在毫秒级窗口，OTA 连接重试 3 次（间隔 1 秒）跨越该窗口

## [1.4.1] - 2026-09-07 00:14:03

- 修复：设备轮询间隔下限从 20ms 提升至 100ms——过低的轮询间隔会在下游设备离线时形成连接失败风暴，挤占网关内存导致管理口无响应

## [1.4.0] - 2026-09-06 21:05:25

- **架构升级：管理口传输改为持久会话**——一条认证连接承载全部命令（心跳/监视/部署/读回），连接建立后登录一次；网关侧同版本（v1.2.0）配套升级为单会话模型，会话存活期间拒绝新连接抢占。OTA 竞态、部署无响应、心跳抢占三类问题在传输层结构性消除
- 修复：大变量表部署「登录/响应超时」——管理口命令超时预算提升至 30 秒（网关整表落盘期间停摆数秒），部署命令超时自动重试一次，失败步骤在日志中留痕
- 优化：内置固件包更新至 v1.2.2——变量表/快照迁移 SPIFFS、分块只在末块落盘、启动自动回收遗留 NVS 命名空间（修复设备配置保存失败）、恢复出厂同步清 SPIFFS；状态帧携带 MAC；CSV 导入支持 S7 地址（M200.0/MD126/DB1.DBX0.0）
- 修复：凭据推送去重失效导致日志被监视轮询刷屏；监视轮询不再逐帧记录 HEX

## [1.3.28] - 2026-09-06 16:26:20

- 修复：大变量表部署「登录/响应超时」——网关写入大变量表时全量重写存储（flash 擦写期间管理口停摆数秒），短连接 6 秒登录预算不够，后续步骤排队超时。管理口命令超时预算提升至 30 秒
- 优化：部署命令超时自动重试一次（各步骤均为幂等全量写，重试安全）；失败的命令现在也会在网关日志中留痕（此前失败的步骤完全隐身）
- 优化：内置固件包更新至 v1.1.18——变量表迁移 SPIFFS + 分块只在末块落盘（根治每块全量重写存储的写放大，大表部署不再停摆）

## [1.3.27] - 2026-09-06 15:52:23

- 修复：网关日志被监视轮询刷屏——凭据去重集合从未生效（推送后未登记），每条命令都重复推送一次凭据 IPC 并打日志；监视轮询（0x03）的完整 HEX 响应也不再逐帧记录（数据本身已在面板呈现，失败仍可见）

## [1.3.26] - 2026-09-06 15:38:37

- 优化：心跳机制自适应让路——网关管理口只有一颗监听 socket，心跳与其他命令并发会被网关「停旧迎新」掐断在途操作（OTA/部署卡死的同源竞态）。现在心跳发送前自查：最近 4.5 秒内有其他管理口往返（监视轮询/部署/读回等，存活已被证明且面板数据由那些响应携带）则自动跳过本次；链路静默时恢复正常 5 秒探活。OTA/部署的长操作暂停保护保留作为双保险

## [1.3.25] - 2026-09-06 15:23:51

- 修复：部署偶发步骤无响应/中断——与 OTA 卡死同源：心跳每 5 秒一条新连接会抢占网关管理口，掐断在途写入。现在部署+回读核验期间暂停该网关的心跳/监视定时器（与 OTA 同一保护），结束后恢复

## [1.3.24] - 2026-09-06 14:59:40

- 修复：CSV 导入变量地址全部归零——导入解析只认 Modbus 纯数字地址，S7 地址（M200.0 / MD126 / DB1.DBX0.0 等）被解析为 0 且地址标签错挂 Modbus 4xxxx 格式；现在 S7 设备导入自动解析 M/I/Q/DB 区地址（含位/字节/字/双字），非法地址行明确跳过并提示数量
- 修复：CSV 带 UTF-8 BOM 时首列表头/数据被污染

## [1.3.23] - 2026-09-06 14:28:34

- 修复：大变量表工程部署卡死「网关无响应 (35 秒超时)」——设备分块原按固定 25 条切分，大变量表下单块 JSON 约 4.8KB 超过网关 4KB 接收帧上限，网关凑不齐帧永不回包；现按字节分块（每块 ≤1.8KB），任意变量规模均可部署
- 优化：部署进度实时显示当前正在写入的步骤（此前飞行中步骤显示为空）

## [1.3.22] - 2026-09-06 13:58:03

- 修复：部署成功后软件假死（「下载完成」确认框可见但点击无反应）——部署进度模态未关闭时弹出的确认框被模态焦点陷阱锁定；现在先关闭进度窗口再弹确认框

## [1.3.21] - 2026-09-06 13:51:17

- 修复：部署后「回读核验 — 下游设备、设备通信参数、采集变量与本地草稿不一致」且部分设备/变量丢失——本地工程存在重复设备 id 时（本地新建与「读取现场」同步撞号），固件按稳定 id 匹配会把先写入的设备整体覆盖。现在部署前自动修复重复/缺失的设备 id，新建设备时也强制 id 唯一

## [1.3.20] - 2026-09-06 13:25:34

- 修复：部署「快照保存失败，可能是NVS空间不足」——部署快照从 20KB 的 NVS 分区整体迁移到网关 1.4MB 的 SPIFFS 分区（文件式存储，带魔数/版本/长度校验），配置任意规模下快照与回滚均可靠
- 新增：内置固件包更新至 v1.1.16（SPIFFS 快照 + 串口 [SNAP] 分步诊断）

## [1.3.19] - 2026-09-06 11:45:54

- 修复：部署后「回读核验 — 无法读取部署后的现场配置」——固件 1.1.14 起配置导出改用 16KB 大帧（此前 4KB 帧上限，配置增长即溢出）；回读失败现在显示真实原因并自动重试 3 次
- 新增：内置固件包更新至 v1.1.15（16KB 配置导出大帧，并按 W5500 单次 write 上限 2KB 改为 ≤1KB 分块发送——配置超过 2KB 后被截断导致的回读超时/连接堆积一并解决）

## [1.3.18] - 2026-09-06 11:30:35

- 修复：部署配置卡在「保存现场快照（NVS 空间不足）」——实为网关对未写过的配置命名空间（云通道/设备表）直接判失败；固件 1.1.13 起缺失命名空间按空配置快照，全新/部分配置网关可正常部署
- 新增：内置固件包更新至 v1.1.13（含快照分步串口诊断与 NVS 余量输出）

## [1.3.17] - 2026-09-06 10:55:56

- 修复：OTA 升级被心跳掐断——心跳每 5 秒新建一条连接，会抢占网关管理口把升级会话拦腰切断（**历代 OTA 中途失败的总根因**）。现在升级期间自动暂停该网关的心跳/监视定时器，结束后恢复
- 新增：内置固件包更新至 v1.1.12——网关侧升级期间拒绝新连接抢占管理口（双保险，外部流量也无法中断升级）；升级会话全程步骤日志（连接/登录/分块各环节可观测）

## [1.3.16] - 2026-09-06 02:08:34

- 修复：OTA 升级中途卡死「网关无响应 (35 秒超时)」——传输改为**单一持久连接**跑完全部数据块（此前每 2KB 重连一次，555 次重连触发网关侧连接竞态），并支持块级自动重发
- 新增：内置固件包更新至 v1.1.11——网关侧同步修复死连接不释放导致的管理口假死，升级中断后网关不再需要断电恢复

## [1.3.15] - 2026-09-06 01:31:54

- 新增：内置固件包更新至 v1.1.10——网关从 v1.1.9 可一键 OTA 升级；固件启动横幅带编译时间戳，串口可核对真机产物
- 修复：固件改版与软件内置包的配套发版机制（此前固件已升、软件内置包滞留旧版，导致 OTA 卡片提示"网关固件比软件附带的更新"且无法一键升级）

## [1.3.14] - 2026-09-06 01:02:39

- 优化：升级过程窗口在密码验证通过后才打开（准备/验证阶段不再出现空窗），失败时窗口保留失败日志供查看
- 新增：升级中可点「终止升级」向网关发送 0x33 中止指令（网关保持原固件），窗口解除锁定
- 修复：升级日志再次乱序（1.3.12 之后被回退复用 1.3.10/1.3.11）——重编号为严格递增，全量条目回填秒级时间戳，版本管理规范固化进 AGENTS.md 与发布流程

## [1.3.13] - 2026-09-06 00:29:35

- 修复：网关换 IP 后（恢复出厂/手动改址/对方改址），连接中心 IP 直连会新建重复网关条目——现在单网关项目直连时自动原地更新地址并连接，不再产生重复卡片

## [1.3.12] - 2026-09-06 00:01:03

- 修复：升级过程窗口改为全屏固定遮罩模态（此前在面板网格内内联渲染）——升级期间全屏锁定，进度条/日志独立滚动并自动到底
- 修复：主进程 send-command 增加 35 秒硬超时兜底——网关侧任务卡死时不再永久挂起，界面能收到明确失败反馈

## [1.3.11] - 2026-09-05 23:41:19

- 修复：升级日志版本顺序错乱与 1.3.0 条目重复——已重排为严格降序并合并重复条目（此前的版本号在多轮快速修复中被乱序分配：1.3.10 之后又用了 1.3.7）

## [1.3.10] - 2026-09-05 22:28:22

- 修复：升级日志自动滚动缺少 nextTick 导入引发的运行时报错（1.3.9 升级模态窗口的回归修复）

## [1.3.9] - 2026-09-05 22:04:11

- 新增：固件升级过程模态窗口——进度条、实时日志流、阶段提示（准备固件/传输/校验/完成），升级期间锁定其他操作防止误打断
- 优化：升级完成或失败后窗口保留日志供查看，可手动关闭

## [1.3.8] - 2026-09-05 21:46:11

- 修复（配套固件 1.1.9）：OTA 升级卡死/密码验证后无反应的**根本原因**——管理口服务在每轮循环里对已管理的连接重复执行「停止旧连接+替换对象」，导致同一连接的第二帧起数据全部被丢弃。现在只在新连接时替换，连接内正常连续处理
- 配套修复：登录会话内所有命令（含 OTA 0x30/0x31/0x32/0x33）恢复正常响应

## [1.3.7] - 2026-09-05 22:40:40

- 修复（真正根因）：网关设置页的表单同步 watch 在每次输入时就把 eth.ip 写进项目的网关连接地址——用户改完 IP 还没点保存，连接/预检就已经指向新 IP 导致立即失联，之后的一切操作全部失败
- 现在：连接地址只在「部署配置 + 重启网关成功重连」后由部署流程切换（_pendingIp 机制）；设置页保存只写本地草稿

## [1.3.6] - 2026-09-05 21:05:37

- 修复：向导/对话框内触发密码验证时弹窗不显示的问题——程序式弹窗（密码框、确认框）被应用自绘对话框盖住（层级 2000 vs 9990），全局提升 Element Plus 弹层层级后正常置顶显示
- 该修复同时作用于：添加网关读取配置、OTA 密码验证、所有在对话框内弹出的确认框

## [1.3.5] - 2026-09-05 20:52:43

- 修复：网关设置页修改 IP 后点击保存导致立即失联——IP 变更现在保存到本地草稿（不再立即切换连接地址），部署预检会明确提示 IP 将变更，部署完成后重启网关时自动先用新 IP 重连（旧 IP 兜底），成功后自动更新项目里的网关地址
- 说明：网关的静态 IP 在重启后才生效（固件设计），因此改 IP 的完整流程 = 修改保存 → 部署配置 → 重启网关

## [1.3.4] - 2026-09-05 18:30:47

- 修复：升级预检字段名不匹配导致网关明明在线却提示「无法连接」——预检结果判定字段已与实现对齐（success）

## [1.3.3] - 2026-09-05 18:15:08

- 修复：内置固件模式下点击「上传并升级」无反应——残留的本地文件校验在无文件时静默返回，已移除；同时内置固件加载移至页面挂载时机并增加诊断日志

## [1.3.2] - 2026-09-05 17:52:39

- 修复：安装版里「可升级到 v—」的问题——内置固件包改经安装目录 resources 分发（extraResources），主进程按安装路径读取，不再依赖打包内部的资源地址

## [1.3.1] - 2026-09-05 17:37:28

- 优化：固件升级卡片新增醒目的版本对比行——「网关当前 → 可升级到」一目了然，并实时显示状态（有新固件可升级 / 已是最新 / 网关固件更新）

## [1.3.0] - 2026-09-05 15:58:32

- 新增：**软件内置固件包**——固件 .bin 随安装包分发，OTA 升级不再需要用户单独找固件文件
- 新增：固件升级卡片显示版本对比（网关当前版本 vs 软件附带版本），确认弹窗同步提示升级方向
- 保留：本地 .bin 文件升级作为高级选项；双重验证（二次确认 + 密码校验）不变
- 配套固件 1.1.8（OTA 链路验证版本）
- 修复：连接中心在线但固件升级提示"请先连接网关"的状态不一致问题——升级前的可达性检查改用 TCP 直连预检（2 秒超时），不再依赖旧式连接标志
- 说明：升级本身无需保持"长连接"，只要网关可达即可执行

## [1.2.9] - 2026-09-05 15:24:04

- 修复：升级日志的网关固件日志区此前只显示到当前运行版本为止，看不到完整历史——现在显示全部版本记录，并逐条标注状态（网关当前固件 / 待升级 / 已包含在当前固件）

## [1.2.8] - 2026-09-05 14:28:37

- 修复（配套固件 1.1.7）：固件内残留的 v1.0.0 版本描述统一为 NETS3_FW_VERSION 单源——启动横幅、头部注释不再出现过期版本号，OTA 密码验证针对的就是该修复版本

## [1.2.7] - 2026-09-05 14:11:10

- 优化：升级日志拆分为「网关固件日志 / 上位机日志」两个子标签，各自独立展示——固件日志再长也不会把软件日志顶下去

## [1.2.6] - 2026-09-05 13:50:42

- 优化：固件日志改为软件内置、按网关型号维护的数据源（不再内嵌于固件占用空间，也不再依赖 0x34 命令）——后续支持新型号网关时，为该型号补充固件日志即可在软件中展示

## [1.2.5] - 2026-09-05 13:31:02

- 新增：升级日志页新增「网关固件日志」分区——变更记录直接从网关实时拉取（管理口 0x34 命令，配套固件 1.1.6）
- 意义：只升级固件、不更新上位机时，新固件的修复记录也能在软件里直接看到，不再依赖上位机重新打包

## [1.2.4] - 2026-09-05 12:43:53

- 修复（配套固件 1.1.5）：OTA 密码锁定可能显示数百秒剩余时间的假锁定问题——锁定跨重启后最长恢复为 30 秒

## [1.2.3] - 2026-09-05 12:04:58

- 新增：固件升级卡片新增「本固件包含的修复与功能」折叠区——展示网关当前固件版本的修复记录（配套固件 1.1.4）
- 优化：OTA 密码锁定时提示剩余解锁秒数（配套固件 1.1.4）

## [1.2.2] - 2026-09-05 11:32:08

- 新增（安全）：固件升级双重验证——点击升级后先弹出二次确认（显示目标网关与固件文件信息），再弹出管理口密码验证窗口（每次升级都必须手动输入密码与网关校验，不使用本机缓存）；连续 3 次错误自动取消，密码错误过多会触发网关侧锁定

## [1.2.1] - 2026-09-05 11:12:58

- 优化：添加有人云平台时只显示其必需参数（设备编号 + 设备密码）——服务器与上报/下发 Topic 按有人云官方约定自动生成，不再显示 MQTT 专属的 Broker/端口/Topic 填写项

## [1.2.0] - 2026-09-05 01:50:38

- 优化：云端通道平台不再预置——由用户自行添加（通用 MQTT / 有人云二选一），添加有人云时自动填充服务器地址与上报/下发 Topic
- 新增：每个平台卡片独立的「导出点表」——有人云导出官方变量导入 CSV（可直接导入有人云平台批量建点），通用 MQTT 导出含 Broker/Topic 约定的 JSON 点表
- 优化：MQTT 的 Client ID 留空时自动使用网关 ID，无需手工填写

## [1.1.6] - 2026-09-05 01:32:17

- 优化：变量监控表格的滚动条不再与表头行挤在一起——滚动条使用独立沟槽并改为细圆角样式，表头保持固定
- 设备管理页表格同步应用相同的滚动条样式优化

## [1.1.5] - 2026-09-05 01:24:40

- 新增（安全）：网关出厂预置默认管理口密码 **nets3admin**——首次启动和恢复出厂后自动生效，管理口保护始终在线，不再存在无密码态
- 新增：连接/读取配置时，若网关仍在使用出厂默认密码会明确提醒修改
- 变更：「关闭保护」按钮改为「恢复默认密码」——管理口保护不再提供关闭选项；升级强制密码 + 配置读写鉴权永久有效
- 配套固件 1.1.2（需串口烧录一次）

## [1.1.4] - 2026-09-05 01:05:46

- 修复：新建项目的文件名现在始终跟随项目名称（此前沿用了选择路径时的旧名，修改项目名不生效）；项目名中的非法字符自动替换
- 修复：Windows 下双击 .nets3 文件现在能直接打开项目——冷启动、应用运行中重复打开均支持；应用改为单实例运行，重复打开会唤起已有窗口
- 说明：旧版双击打开链路在 Windows 上从未生效（open-file 事件仅限 macOS）

## [1.1.3] - 2026-09-05 00:52:57

- 优化：项目还没有网关时，运行概览/设备管理/变量监控等网关页面不再显示空白数据，改为引导页面——一键打开连接中心或添加网关；系统设置不受影响

## [1.1.2] - 2026-09-05 00:43:39

- 修复（安全）：固件升级在未选择/未连接网关时也能开始——现在必须先选中并连接网关，且升级指令仅发往选中网关，不再隐式回退默认 IP
- 新增（安全）：升级强制要求网关已设置管理口密码（配套固件 1.1.1）——未设置密码时固件直接拒绝并引导设置，杜绝无密码裸奔升级
- 新增：OTA 传输 30 秒无活动自动放弃并恢复下游轮询（断网/关页面不再导致网关卡在升级态）

## [1.1.1] - 2026-09-05 00:36:49

- 修复：连接中心搜索局域网——网关实际已被搜到但结果未在界面显示（结果此前只进向导列表），现在直接在对话框内展示并可一键连接；无结果时给出明确提示

## [1.1.0] - 2026-09-04 23:11:56

- 新增：**网口 OTA 固件升级**——系统设置选择 .bin 文件即可通过以太网直接升级固件，无需拆机串口烧录。传输走管理口通道（启用管理密码后受鉴权保护），带进度百分比显示、MD5 校验、块序校验；双分区机制保底，升级失败自动保持原固件运行
- 新增：升级中显示实时进度；传输期间网关自动暂停下游轮询避免超时
- 配套固件 1.1.0（需一并烧录一次旧方式固件后，后续均可网口升级）

## [1.0.10] - 2026-09-04 22:43:35

- 新增：窗口尺寸与位置记忆——自由调整后的窗口大小/位置下次打开保持一致，最大化状态也会恢复；外接显示器拔掉后自动回到可见区域
- 修复：版本号显示不再"各自为政"——Welcome 页与固件版本全部改为动态来源（应用版本取自安装包元数据，固件版本取自网关实时上报），升级后不会再看到旧版本号
- 修复：打开项目后网关自动选中——优先恢复上次选中的网关，否则选第一个；侧栏/顶栏/下载目标三处选中态同步
- 修复：双击 .nets3 文件打开项目的链路断裂问题（事件未桥接到界面）
- 固件配套：固件版本号单源化（NETS3_FW_VERSION），状态上报新增 fw_ver 字段

## [1.0.9] - 2026-09-04 21:44:09

- 修复：向导「从网关读取」完成后窗口不再卡住——配置改为一次读取、完成后立即进入工作台；读取失败也会明确提示并可继续
- 修复：弹窗在任意缩放倍率（100%-150%）或小窗口下内容不再被底部按钮栏切断——标题与操作按钮固定，仅内容区滚动
- 优化：完成页摘要现在显示网关真实的云端配置（此前显示的是向导占位值）

## [1.0.8] - 2026-09-04 18:17:10

- 新增：界面缩放设置（系统设置 → 工作台偏好）——高分屏且系统缩放为 100% 时界面偏小，可选 100% / 110% / 125% / 150%，立即生效并保存本机
- 修复：开发服务在部分环境只绑定 IPv6 导致浏览器/QA 脚本无法访问，显式绑定 IPv4

## [1.0.7] - 2026-09-04 17:02:17

- 修复：连接中心搜索结果另起一行显示，不再挤开"搜索局域网"按钮
- 修复：连接策略开关统一为应用标准开关组件（此前自绘样式与组件类名冲突导致样式异常）
- 修复：读取现场覆盖确认框从 Element 默认样式替换为应用统一对话框风格

## [1.0.6] - 2026-09-04 16:49:57

- 优化：连接中心视觉与确认的原型完全对齐——在线数移至标题旁、搜索区改为蓝色主按钮加说明文字、断开/取消改为描边按钮

## [1.0.5] - 2026-09-04 16:42:09

- 优化："关于"与"升级日志"收纳进系统设置页，作为两个独立标签，去除重复的独立关于页
- 优化：应用菜单"关于"跳转到系统设置的关于标签；系统设置内的版本信息改为动态显示

## [1.0.4] - 2026-09-04 16:12:17

- 修复：连接中心"连接策略"开关恢复为左文右开关的横向行布局
- 新增：左侧导航新增"关于与日志"入口，软件版本和升级日志一眼可达（版本也显示在底部状态栏右下角）

## [1.0.3] - 2026-09-04 16:02:28

- 新增：连接中心面板——网关卡片化列表（状态 pill + 失败原因 + 重试/取消）、局域网搜索、手动 IP 直连聚合在一个入口
- 新增：连接前 TCP 快速预检（2 秒超时），失败直接提示 IP 不可达等具体原因
- 新增：断线自动重连（指数退避 5s→60s 封顶，最多 5 次），顶栏连接图标显示连接中旋转状态
- 新增：连接策略可配置并保存在本机——自动重连 / 打开项目自动连上次网关 / 连接后自动读取现场 / 连接前预检

## [1.0.2] - 2026-09-04 15:22:03

- 修复：变量监控页状态列改为设备级在线状态——未接设备时如实显示"超时"，不再因管理口在线而误报"正常"
- 修复：有人云通道补齐显示读/写下发 Topic（sys/read_data、sys/write_data），第三方网关下发配置一目了然
- 优化：关于页只保留软件版本信息，网关固件版本归位到运行概览"运行摘要"
- 优化：应用菜单"关于"现在直接跳转关于页，升级日志更容易找到

## [1.0.1] - 2026-09-04 14:54:10

- 新增：添加网关向导云平台步骤支持选择平台类型（通用 MQTT / 有人云 / 暂不配置），有人云填设备编号与密码即可
- 新增：在线连接对话框全新引导式空状态，一键搜索局域网或添加网关
- 优化：网关设置页改为统一的全宽卡片布局，不再双列混排
- 新增：关于页"升级日志"面板，每个版本修复的问题一目了然
- 新增：顶栏全局日志按钮，任何页面都能一键打开网关日志
- 优化：运行概览去掉与右侧重复的快捷操作区
- 修复：云端通道页平台卡片改为每平台独占一行，卡片内容不再被截断
- 新增：设备管理页对齐 v15 B 原型——变量搜索、状态列、测试连接（TCP 真实握手 / RTU 读取网关在线状态）、每页条数切换、设备变量数徽标
- 优化：设备变量分页栏改为"第 X-Y 条，共 N 条"文案，单页也显示页码

## [1.0.0] - 2026-08-31

- 首发：v15 B 视觉结构迁移完成，包含运行概览、设备管理、变量监控、云端通道、自动化规则、网关设置、系统设置与关于页
