6

我想在医学环境中的 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 的作者)纠正我。名义属性的唯一目的是出于稳定性原因对数值问题进行缩放。

4

3 回答 3

4

@Jay_At_Play,您可能想再看看@MichaelTiller 分享的 Modelica Trac 网站。我刚刚讨论了一种可能会有所帮助的方法。但是,作为一个警告,is 是非标准的,并且与 Modelica 标准库不直接兼容。

(我想将此添加到原始问题下的评论中,但我没有声誉积分。)

于 2014-07-25T20:30:02.510 回答
3

据我所知,没有好的方法可以以便携的方式做到这一点。

Modelica 规范没有说明如何处理用户定义的单元,因此每个工具都以自己的方式(或不以自己的方式)。

我认为最好的方法是在模型或库中定义类型,即使您在某些工具中有警告。

在 Dymola 中,您可以通过以下方式消除警告:

Advanced.CheckUnits = false

在命令窗口中。

于 2014-07-17T02:49:34.277 回答
3

Dymola 中的 Modelica Medical 非 SI(显示)单位:

  1. 要支持医疗非 SI(显示)单位,请尝试扩展 Dymola 文件“C:\Program Files*\Dymola*\insert\displayunit.mos”,例如https://github.com/MarekMatejak/Physiolibrary/ blob/master/Physiolibrary/Resources/DisplayUnits/displayunit.mos

  2. 参数或变量的定义应始终将属性单位设置为 SI 单位,并且 displayUnit 可以是在 Dymola 文件“displayunit.mos”中定义转换的所有内容:

例如:

参数 Real systolicPressure(final unit="Pa", displayUnit="mmHg") = 16000;

参数真实舒张压(最终单位=“帕”,显示单位=“托”)= 10000;

Modelica 将始终以 SI 单位计算模型,但 Dymola 中的参数对话框和输出图将使用显示单位。所以要小心 - 文本代码中的每个值都必须是 SI 单位。

标称与转换没有直接关系。它们仅用于后面数值数学中的相对公差。

如果您在 Physiolibrary 显示单元中发现任何错误,请随时报告。谢谢!

于 2014-08-27T15:56:36.637 回答