Modelica 医学非国际单位制教学模式

Modelica 医学非国际单位制教学模式,modelica,dymola,Modelica,Dymola,我想在医学背景下的Modelica模型中使用非SI单位。我在Dymola中使用Modelica。作为一名工程师,我更喜欢国际单位制。但我的模型参数来源于医学出版物,我希望避免转换错误。医疗单位还简化了与医生的沟通 例如,使用单位“毫米汞柱”(毫米汞柱)代替“帕”表示压力。压力变量在模型中定义如下: type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg") defineUnitConversion("Pa",

我想在医学背景下的Modelica模型中使用非SI单位。我在Dymola中使用Modelica。作为一名工程师,我更喜欢国际单位制。但我的模型参数来源于医学出版物,我希望避免转换错误。医疗单位还简化了与医生的沟通

例如,使用单位“毫米汞柱”(毫米汞柱)代替“帕”表示压力。压力变量在模型中定义如下:

type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")
defineUnitConversion("Pa", "mmHg", 760/101325);
转换模型进行模拟会对模型中的每个非SI变量产生以下警告(总共约300个警告):

如果对模型的更改导致新的警告,则几乎无法检测到。因此,我需要教Modelica单位“mmHg”

我目前对该主题的了解:
-Modelica语言规范3.3,第19章单元表达式: “可以支持用户定义的单位符号。” 然而,本文件并未对此进行详细说明。
-用户可以定义在模拟GUI中使用的显示单位(真实属性“displayUnit”),只要在Dymola目录的“displayUnit.mos”文件中定义了转换因子,如下所示:

type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")
defineUnitConversion("Pa", "mmHg", 760/101325);
这不是一个选项,因为它降低了模型的可移植性。它必须在运行该模型并需要管理员权限(我没有)的每台计算机上手动执行

提前感谢您的帮助,非常感谢

编辑(可能对将来遇到此问题的人有所帮助):
发布时的版本:Modelica标准库3.2,Dymola版本2014(64位)2013-03-25

我忘了将以下内容添加到我目前对该主题的了解中: Physiolibrary 2.1.1定义了GUI的显示单元。对于编码,作者使用以下技巧:

type Pressure =  Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415);
通过这种方式,Modelica将压力类型变量处理为单位帕斯卡(N/m2),但将代码中输入的每个值除以给定的标称值

更正

在本节中,我之前说过,Physiolibrary使用真实属性nominal进行单位转换。事实并非如此。感谢Marek Matejak(物理图书馆的作者)纠正我的错误。属性nominal的唯一目的是为了稳定性而对数值问题进行缩放。

据我所知,没有一种好的方法可以通过便携方式实现这一点

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

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

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

Advanced.CheckUnits = false

在命令窗口中。

@Jay\u At\u Play,您可能想再看看@MichaelTiller共享的内容。我刚刚讨论了一种可能有用的方法。但是,作为警告,is是非标准的,并且与Modelica标准库不直接兼容

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

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

  • 要支持医疗非SI(显示)设备,请尝试扩展Dymola文件“C:\Program Files*\Dymola*\insert\displayunit.mos”,例如

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

  • 例如:

    参数实际系统压力(最终单位=“Pa”,显示单位=“mmHg”)=16000

    参数实际舒张压(最终单位=“Pa”,显示单位=“torr”)=10000

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

    名词与转换没有直接联系。它们只用于数值数学中的相对公差


    如果您在Physiolibrary显示单元中发现任何错误,请立即报告。谢谢大家!

    我真的没有答案给你,但你会发现一个相关的讨论。@MichaelTiller:这很有帮助,在某种程度上回答了我的问题。根据相关讨论,似乎不可能定义用户定义单位和SI基本单位之间的关系。至少我现在知道我可以停止在互联网上搜索一个不存在的解决方案:)非常感谢!谢谢你的更新,非常感谢。我喜欢你的方法:)这绝对是未来实现的一个选择!由于缺乏声望,我不能认为你的回答有用。很抱歉回复太晚,我最近一直忙于考试准备。我今天下载了你的FCSys包,详细查看了你的单元实现,发现了你所说的“不直接兼容”是什么意思。Dymola中的模型检查产生错误“缺少基类Modelica.Icons.TypesPackage”。我可以简单地删除与您的MSL扩展有关的“扩展”行吗?如果缺少的软件包是正确的单元实现所必需的,您能给我一份副本吗?再次感谢你的帮助!我真的很喜欢你基于国际标准的清洁装置实施:)…也在你的FCSys文件中。你写的数量“单位检查方法已经建立[Mattsson2008,Broman2008,Aronsson2009],理论上可以应用于尺寸检查”。你说的“理论上”是什么意思?单位检查是否如Adrian Pop所描述的那样被停用,或者Dymola的单位检查现在起到了尺寸检查的作用?谢谢,@Jay_At_Play。该错误(“缺少基类Modelica.Icons.TypesPackage”)可能是由于MSL版本(需要3.2.1)引起的。是,您可以删除该extends子句;它只用于图形。我所说的“不直接兼容”是指