查看: 4|回复: 0

HSEP 开发入门:打造你的第一个数据管理插件

[复制链接]

7

主题

0

回帖

35

积分

版主

积分
35
发表于 6 小时前 |天津| 显示全部楼层 |阅读模式
HSEP 核心概念:发布与订阅
HSEP 的核心是一个数据管理中心。作为开发者,你不需要关心数据从哪里来,要到哪里去,只需要关注两件事:
  • 发布 (Publish): 将你插件计算或生成的数据,通过唯一标识符“发布”到 HSEP 数据矩阵上。
  • 订阅 (Subscribe): 根据你的需求,通过唯一标识符“订阅” HSEP 上其他插件发布的数据。
这种模式极大地提升了系统的灵活性和可扩展性。
如何运行 HSEP
HSEP 主程序通过加载插件来执行具体任务。启动时,你需要通过命令行参数指定一个 XML 配置文件。
./bin/HSEP-Exec.exe -c ./conf/XXX.xml
这个 XXX.xml 配置文件是整个系统的“指挥中心”,你可以在其中:
  • 配置需要启动哪些插件 (DLL)。
  • 设置每个插件的运行频率等参数。
你开发完成的插件,只需将编译生成的 .dll 文件放入 HSEP 主目录下的 lib 文件夹中即可被识别和加载。
插件的生命周期
HSEP 为插件定义了一套清晰的生命周期,你可以在不同的阶段编写相应的逻辑代码。这套生命周期包含五个主要阶段:
  • startup: 启动阶段。通常用于读取配置、初始化资源等一次性操作。
  • initialize: 初始化阶段。在每个仿真周期开始时调用,用于准备本周期的数据。
  • freeze: 冻结阶段。在 initialize 和 run 之间调用,可用于处理一些中间状态。
  • run: 运行阶段。这是插件的核心逻辑所在,主要的计算和处理都在此进行。
  • shutdown: 关闭阶段。仿真结束时调用,用于清理资源、保存最终状态等。
动手实践:解析插件模板
HSEP 提供了 Example1.h 和 Example1.cpp 作为插件开发的模板。理解这个模板是开发的第一步。
1. 数据定义:Inputs 与 Outputs
在插件类中,有两个关键的内部类,它们是你与 HSEP 数据矩阵交互的接口。
  • class Inputs: 在这里定义你需要订阅的所有数据变量。
  • class Outputs: 在这里定义你需要发布的所有数据变量。
2. 核心函数:发布与订阅
数据的发布和订阅动作在两个特定的函数中完成。
  • subscribeInputs(): 在这个函数里,编写代码从 HSEP 订阅你在 Inputs 类中定义的变量。
  • publishOutputs(): 在这个函数里,编写代码将你在 Outputs 类中定义的变量发布到 HSEP。
3. 逻辑实现:生命周期函数
模板中的 startup, initialize, freeze, run, shutdown 都是虚函数,你可以根据自己的业务需求重写它们。
  • startup(): 模板中展示了如何在此阶段调用 readConfig() 来读取自定义配置,并使用 setModeComplete(true) 标记阶段完成。
  • initialize(), freeze(), run(): 这些函数的标准流程通常是:
    • m_udm.read(): 从数据矩阵读取最新数据。
    • handleRequestQueues(): 处理请求队列。
    • // Your processing goes here.: 在这里编写你的核心业务逻辑。
    • m_udm.commit(): 将更新后的数据提交回数据矩阵。
  • shutdown(): 用于执行清理工作。
4. 辅助功能:配置与日志
  • readConfig(): 这是一个空函数,供你实现读取插件私有配置文件的逻辑。
  • 日志输出: 在插件的任何地方,你都可以使用日志功能来输出调试或事件信息,非常方便排查问题。
  1. m_udm.log(TIF::Udm::Log::e_debug, "这是一个事件日志。");m_udm.log(TIF::Udm::Log::e_debug, "这是一个调试日志,我的数据路径是:" + getDataPath());
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:business@nimbusaether.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部