v2025.July: 状态注册为Status

【v2025.July 精简公告】CSM v2025.July 已发布并推送至 VIPM。本期最重要的特性:CSM 框架正式支持将状态注册为 Status,模块可将自身状态以 Status 形式广播,其他模块通过订阅即可响应状态变化,实现低耦合的模块间联动。

2025 年 7 月的 CSM 更新已经推送到 VIPM。Communicable State Machine Framework - Package List. 如果你觉得 CSM 对你有帮助,请在 GitHub/Gitee 上 star 对应的仓库!也欢迎有经验的 LabVIEW 高手参与到 CSM 的开发中来。

版本亮点

  • 重大新特性:状态注册为 Status#236#475#481#482#487#490#491):CSM 框架现支持将状态注册为 Status,其他模块可通过订阅机制响应状态变化,实现低耦合的模块间观察者模式。
  • Macro: Initialize 完成后才处理外部消息#488):避免初始化未完成时就收到外部消息导致的竞态问题,提升启动可靠性。
  • CSM - List Submodules.vi 新增递归选项(#485),支持深层子模块枚举。
  • API String 修复嵌套 Cluster 类型的遍历顺序问题(#86)。
  • TCP Router 维护更新,全局日志监控迁移至队列 API。

按仓库变更

1. Communicable-State-Machine

功能改动(重点)

核心(Core)

  • [important] #236#475#481#482#487#490#491 CSM 框架正式支持将状态注册为 Status。模块可注册指定状态,当该状态被执行时,其他已订阅该 Status 的模块会自动收到通知并触发对应回调,实现模块间低耦合联动。
  • [important] #488 Macro: Initialize 执行完成后,CSM 才开始处理外部消息,确保模块完全初始化后再对外服务。

API

  • [update] #485 CSM - List Submodules.vi 新增”递归”选项,可枚举所有层级的子模块。

CSM Loop Support

  • [fix] #479 修复异步消息在 loop 停止前无法获取响应的问题。

2. CSM-API-String-Arguments-Support

功能改动(重点)

  • [fix] #86 修复嵌套 Cluster 类型的遍历顺序:从深度优先(depth-first)改为广度优先(breadth-first),确保 Cluster 元素顺序正确。

3. CSM-TCP-Router-App

功能改动(重点)

  • [update] 将全局日志监控迁移至队列 API。
  • [fix] 修复 TCP Safe Read.vi 中的一处 bug。

4. 其他仓库

  • CSM-INI-Static-Variable-Support:本期无 v2025.July 发布,已忽略。
  • CSM-MassData-Parameter-Support:本期无 v2025.July 发布,已忽略。
  • CSM-Continuous-Meausrement-and-Logging:本期无 v2025.July 发布,已忽略。

按功能变更

1. 功能新增

  • 状态注册为 Status 特性#236 等),CSM 原生支持观察者模式的模块间联动。
  • CSM - List Submodules.vi 支持递归枚举(#485)。

2. 改进优化

  • CSM 模块完成 Macro: Initialize 后才接收外部消息,启动时序更安全(#488)。
  • TCP Router 全局日志监控迁移至队列 API,与核心保持一致。

3. 问题修复

  • 修复 CSMLS 异步消息在 loop 未停止时无法获取响应(#479)。
  • 修复 API String 嵌套 Cluster 深度优先遍历顺序错误(#86)。
  • 修复 TCP Router TCP Safe Read.vi 中的 bug。

破坏性变更

  • Macro: Initialize 行为变更#488):现在 CSM 模块在 Macro: Initialize 完全完成之前不处理外部消息。如果项目中存在依赖”在其他模块初始化期间即可发消息”的逻辑,升级后请重新审查这些时序假设。
  • 其余本期无破坏性变更。

升级指引

  1. 直接通过 VIPM 更新即可完成本次升级。
  2. 重点回归多模块协同启动场景,确认 Macro: Initialize 时序变更(#488)不影响现有逻辑。
  3. 新的”状态注册为 Status”特性可显著简化模块间监听/订阅场景的代码,建议在新功能开发中优先采用。

完整变更来源

Release

结尾

欢迎大家使用并提出反馈!如有问题,请在 GitHub 上提交 Issue,或加入社区讨论。