Commit Graph

34 Commits

Author SHA1 Message Date
caoqianming 2d80266422 fix(opcua): trigger reconnect on BadTimeout and tighten subscription params
Remove the special-case that silently ignored BadTimeout in the
subscription status callback. BadTimeout means the server has already
dropped the subscription, so reconnect must be triggered immediately
rather than waiting for the heartbeat check.

Also reduce lifetime_count (120→15) and max_keep_alive_count (10→5)
so failures are detected within 15s instead of 120s, while still
satisfying the OPC UA spec requirement of lifetime >= 3×keepalive.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 12:50:55 +08:00
caoqianming 0b9b7aef7d fix(opcua): relax subscription timeout handling 2026-03-24 12:28:23 +08:00
caoqianming 920e37f759 feat(web): add inline point chart panel 2026-03-20 10:54:20 +08:00
caoqianming bf548161a6 feat: 心跳检测设置为4秒 2026-03-20 09:58:15 +08:00
caoqianming 8eb1d6671a perf(connection): reduce subscription lock contention 2026-03-17 08:28:55 +08:00
caoqianming 7e6c7a7e4c feat(reconnect): add retry backoff and manual reconnect 2026-03-17 08:15:54 +08:00
caoqianming f33c96a4e5 fix(opcua): default point quality to Good when status is absent
Made-with: Cursor
2026-03-16 09:57:37 +08:00
caoqianming 503aefc4cb refactor(event): rename ReloadEvent to AppEvent and split event channels
Clarify event semantics by renaming ReloadEvent to AppEvent and route control vs telemetry traffic through dedicated channels. This keeps control events isolated from high-frequency PointNewValue updates while preserving the existing send() call pattern.

Made-with: Cursor
2026-03-13 14:44:30 +08:00
caoqianming 5fa63ad6dd fix(opcua): stabilize reconnect loop and coalesce telemetry events
Always clear reconnect-in-progress markers after reconnect attempts so heartbeat-triggered retries are not blocked. Reduce high-frequency event overhead by coalescing consecutive point updates in the event worker and processing only the latest value per source/client handle.

Made-with: Cursor
2026-03-13 14:26:50 +08:00
caoqianming 63bcf679c2 fix(opcua): reconnect when subscription becomes invalid 2026-03-09 08:58:40 +08:00
caoqianming 0893c9783c fix: 修复心跳检查中订阅状态判断逻辑,避免启动时误触发重连 2026-03-06 13:51:47 +08:00
caoqianming 5dc1081c90 改进心跳检测中的订阅状态检查,通过读取服务器节点属性来验证订阅是否真正有效 2026-03-06 12:57:22 +08:00
caoqianming afab910780 在 DataChangeCallback 中添加 BadNoSubscription 错误检测 2026-03-06 10:58:27 +08:00
caoqianming d4d5749ccc 优化 OPC UA event_loop 监控和重连机制 2026-03-06 10:01:18 +08:00
caoqianming 76b6e17927 feat: save event_loop handle to avoid ghost session 2026-03-06 09:38:14 +08:00
caoqianming b197607d5f refactor: 添加 allocate_client_handle 函数封装句柄分配逻辑 2026-03-06 09:22:55 +08:00
caoqianming a2208e8958 perf: 将 poll_points 改为 Arc<Vec<PollPointInfo>> 以减少 clone 开销 2026-03-06 09:16:18 +08:00
caoqianming 487d3cdf26 refactor: 优化 unsubscribe_points_from_source 中 status 锁粒度,使用 get_session 函数 2026-03-06 09:13:30 +08:00
caoqianming 4d88bcbce3 refactor: 优化 heartbeat 中 status 锁粒度,使用 get_session 函数 2026-03-06 09:09:42 +08:00
caoqianming afac9f1eb9 fix: 修复 poll task 中 results 和 poll_points 可能错位的 bug 2026-03-06 09:04:50 +08:00
caoqianming 8e4abd0af9 feat: 添加重连保护机制修复重复重连问题 2026-03-06 09:01:15 +08:00
caoqianming ee3ee273b2 refactor: merge set_pool and start_reconnect_task into set_pool_and_start_reconnect_task 2026-03-05 14:01:40 +08:00
caoqianming 0f37c9435e feat: 实现心跳检测和自动重连功能 2026-03-05 13:27:13 +08:00
caoqianming 494cf1d656 优化连接流程:connect_from_source自动处理订阅,简化main.rs 2026-03-05 11:18:30 +08:00
caoqianming a2217a991c 重构ConnectionManager:简化get_session方法,移除pool依赖,重命名new_with_pool为new 2026-03-05 11:13:10 +08:00
caoqianming a63433e757 优化点取消订阅逻辑:从轮询列表中移除所有传入点,并记录订阅点和轮询点的移除数量 2026-03-05 11:01:20 +08:00
caoqianming 8230536c73 refactor: 在 connect 方法中启动统一轮询任务,移除 start_polling_for_points 方法 2026-03-05 10:52:27 +08:00
caoqianming a6be0827d0 refactor: 统一轮询任务实现,移除 scan_interval_s 字段 2026-03-05 09:30:30 +08:00
caoqianming 6f62d753a5 修复编译警告:将 PollPointInfo 改为公开,移除未使用的字段 2026-03-04 11:26:38 +08:00
caoqianming 475ac02322 重构:将 poll_task_handles 和 poll_points 合并为一个双向映射,使用 PollPointInfo 结构 2026-03-04 11:24:13 +08:00
caoqianming b22225ad72 重构:将 poll_points_by_source 的内层 HashSet 移动到 ConnectionStatus 中,简化数据结构 2026-03-04 11:16:08 +08:00
caoqianming 8127d04855 refactor: 将 PointValueChange 重命名为 PointNewValue 2026-03-03 16:56:37 +08:00
caoqianming a82921193c PointNewValue 2026-03-03 16:44:53 +08:00
caoqianming 44f4a794d3 feat: 软件第一个版本 2026-03-03 13:32:05 +08:00