Modelica 医学非国际单位制教学模式
我想在医学背景下的Modelica模型中使用非SI单位。我在Dymola中使用Modelica。作为一名工程师,我更喜欢国际单位制。但我的模型参数来源于医学出版物,我希望避免转换错误。医疗单位还简化了与医生的沟通 例如,使用单位“毫米汞柱”(毫米汞柱)代替“帕”表示压力。压力变量在模型中定义如下:Modelica 医学非国际单位制教学模式,modelica,dymola,Modelica,Dymola,我想在医学背景下的Modelica模型中使用非SI单位。我在Dymola中使用Modelica。作为一名工程师,我更喜欢国际单位制。但我的模型参数来源于医学出版物,我希望避免转换错误。医疗单位还简化了与医生的沟通 例如,使用单位“毫米汞柱”(毫米汞柱)代替“帕”表示压力。压力变量在模型中定义如下: type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg") defineUnitConversion("Pa",
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(显示)单位:
如果您在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子句;它只用于图形。我所说的“不直接兼容”是指