OpenModelica为何允许输入型端口互连?如何限制为仅输入输出连接?
输入端口互连的出现原因
OpenModelica的连接规则默认对齐Modelica语言原生规范,本身没有全局强制要求只能输入接输出,核心是为了兼容不同建模场景:
- 物理域建模用到的双向连接器(比如电气引脚、机械法兰)本身没有输入/输出属性,天然支持同类型端口互连,规范不会对这类连接做限制
- 对于带
input/output限定符的信号类端口,OpenModelica默认检查等级较为宽松,仅会在连接引发方程冲突、变量缺少绑定的时候才报错,若两个输入端口都有外部参数赋值、没有出现逻辑冲突,默认不会拦截这类连接
限制仅允许输入-输出连接的方法
可以通过以下配置实现严格的连接类型校验:
- 调整编译检查等级:在OMEdit可视化界面中依次进入
工具->选项->仿真面板,将Modelica语法检查等级设置为严格;如果用命令行编译,添加参数--strict=true即可,开启后编译器会主动拦截所有输入-输入、输出-输出的信号端口连接,直接抛出错误 - 自定义端口添加连接约束:如果是自己封装的信号端口,可以在连接器的代码声明中添加
allowConnect注解,比如给输入端口添加allowConnect = {Modelica.Blocks.Interfaces.OutPort}的规则,明确限定仅能和对应类型的输出端口建立连接 - 模型全局开启严格连接校验:在顶层模型的声明代码中加入
__OpenModelica_strictConnections = true;,即可对当前模型内所有信号端口生效严格的输入-输出配对限制
内容的提问来源于stack exchange,提问作者user17543659
相关产品推荐
相关产品推荐

