Modelica延迟算子缓冲内存:OpenModelica环形缓冲区存储规则及C访问问询
OpenModelica 环形缓冲区机制相关问题解答
1、变量存储触发规则
OpenModelica 仿真运行时默认不会自动将所有模型变量存入环形缓冲区,只有两种场景会触发对应存储操作:
- 模型中显式调用
delay()、hold()等需要读取历史时刻变量值的内置算子时,仅算子依赖的对应变量会被分配专属环形缓冲区,缓冲区大小由延迟时长、仿真步长共同决定,仅存储变量必要区间的历史值 - 手动开启全量变量历史存储的仿真调试配置(默认关闭,多用于后处理场景)时,所有模型变量的历史值才会被写入环形缓冲区或磁盘缓存
无上述配置且未使用历史值相关算子时,变量仅保留当前仿真步的计算值,不会占用环形缓冲区存储空间。
2、外部C函数访问规则
可以通过外部C函数访问对应环形缓冲区,需要遵循OpenModelica仿真运行时的接口规范:
- 编译模型时需要添加
--emitSymbols参数,暴露运行时内部数据结构的符号表 - 环形缓冲区的控制结构体、数据存储地址均定义在OpenModelica仿真运行时的
simulation_runtime.h头文件中,自定义外部C函数需要引入该头文件,通过「模型命名空间+变量名」的全量名称即可获取对应缓冲区的访问句柄 - 仅建议对绑定
delay算子的专用环形缓冲区执行读操作,不要直接修改缓冲区内容,否则会打断delay算子的正常计算逻辑,引发不可预期的仿真错误
内容的提问来源于stack exchange,提问作者Alireza Masoom
相关产品推荐
相关产品推荐

