我想在医学环境中的 Modelica 模型中使用非 SI 单位。我在 Dymola 中使用 Modelica。作为一名工程师,我更喜欢 SI 单位。但是我的模型参数来自医学出版物,我想避免转换错误。医疗单位还简化了与医生的沟通。
例如,使用单位“mmHg”(毫米汞柱)代替“Pa”表示压力。压力变量在模型中定义如下:
type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")
转换模型以进行仿真会为模型中的每个非 SI 变量产生以下警告(总共约 300 个警告):
Could not decode the unit symbol "mmHg" appearing in the unit string "mmHg"
如果对模型的更改导致新的警告,则几乎无法检测到。因此我需要教 Modelica 单位“mmHg”。
我目前对该主题的了解:
- Modelica 语言规范 3.3,第 19 章单位表达式:“可以支持用户定义的单位符号。” 然而,该文件并未对此进行详细说明。
- 用户可以定义用于模拟 GUI 的显示单位(Real 属性“displayUnit”),只要在 Dymola 目录下的“displayunit.mos”文件中定义转换系数,如下所示:
defineUnitConversion("Pa", "mmHg", 760/101325);
这不是一种选择,因为它会降低模型的可移植性。它必须在每台运行模型并需要管理员权限(我没有)的计算机上手动执行。
提前感谢您的帮助,非常感谢!
编辑(可能对将来遇到此问题的任何人有所帮助):
发布时的版本:Modelica Standard Library 3.2, Dymola Version 2014 (64-bit) 2013-03-25
我忘记在我目前关于该主题的知识中添加以下内容:Physiolibrary 2.1.1 为 GUI 定义了 displayUnits。对于编码,作者使用以下技巧:
type Pressure = Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415);
这样,Modelica 将压力类型的变量处理为单位帕斯卡 (N/m2),但将代码中输入的每个值除以给定的标称值。
更正:
在本节中,我之前说过生理库使用 Real 属性nominal 进行单位转换。不是这种情况。感谢 Marek Matejak(Physiolibrary 的作者)纠正我。名义属性的唯一目的是出于稳定性原因对数值问题进行缩放。