# 单位表达式
除非另作说明,Modelica 单位表达式的语法和语义符合BIPM的国际标准单位制 (SI),其取代了 ISO 31/0-1992《关于数量、单位和符号的一般原则》和 ISO 1000-1992《SI 单位及对其乘积以及某些其它单位的推荐用法》遗憾的是,这些标准未定义单位表达式的正式语法。有一些建议,Modelica 采用了这些建议。
注意
本文档使用美式拼写 "meter",而BIPM发布的SI规范使用英式拼写 "metre"。
Modelica 使用的单位表达式的语法举例:"N.m", "kg.m/s2", "kg.m.s-2" "1/rad", "mm/s"。
# 单位表达式的语法
Modelica 单位字符串语法不允许注释或空白,且单位字符串需匹配 unit-expression 规则:
unit-expression :
unit-numerator [ "/" unit-denominator ]
unit-numerator :
"1" | unit-factors | "(" unit-expression ")"
unit-denominator:
unit-factor | "(" unit-expression ")"
无量纲量的度量单位用 "1" 表示。SI 标准未定义乘除运算的优先级,也不允许除号(/ )右侧出现多个单位(因结果会有歧义);需将除数用括号括起,或用负指数替代除法。例如,"J/(kg.K)" 应写成 "J.kg-1.K-1" 。
unit-factors :
unit-factor [ "." unit-factors ]
SI 标准规定,乘法运算符可用空格或点表示。SI 标准要求此点符号略高于基线(如 · ,非 ASCII 字符 );ISO 标准也优先用 · ,但 Modelica 支持 ISO 替代方案(普通基线点 .)。
例如,Modelica 不支持用 "Nm" 表示牛米,需写成 "N.m" 。
unit-factor :
unit-operand [ unit-exponent ]
unit-exponent :
[ "+" | "-" ] UNSIGNED-INTEGER
SI 标准使用上标表示指数运算,因此未定义任何用于指数运算的运算符符号。单位因子(unit-factor)由单位操作数(unit-operand)组成,其后可能跟有一个带符号的整数,该整数被解释为指数。单位操作数和可能的单位指数之间不得有空格。
unit-operand :
unit-symbol | unit-prefix unit-symbol
unit-prefix :
"y" | "z" | "a" | "f" | "p" | "n" | "μ" | "m" | "c" | "d" |
"da" | "h" | "k" | "M" | "G" | "T" | "P" | "E" | "Z" | "Y"
unit-symbol :
unit-char { unit-char }
unit-char :
NON-DIGIT
要求识别 SI 单位制的基本单位和导出单位,但工具也可额外支持用户定义的单位符号。规定的单位符号不使用希腊字母,例如像 Ω 这样的单位需拼写成 “Ohm” 。类似地,“度” 需拼写成 “deg” ,无论是单独使用(用于角度,如 “deg” ),还是作为温度单位的一部分(如 “degC”、“degF”、“degRk” ,分别对应摄氏、华氏、兰金温度)。
单位操作数应先被解释为单位符号(unit-symbol),若解释失败,再尝试解释为带单位前缀(unit-prefix)的操作数。单位符号和可能的单位前缀之间不得有空格,前缀的值需符合 ISO 标准。字母 “μ” 用作表示 “微” 前缀的符号。
工具可将 “Ohm” 显示为 Ω ,将前缀 “μ” 显示为 μ 。像 “m2” 这样的指数可显示为 m² 。角度单位 “deg”(无论是单独表示角度,还是用于温度,如 “degC” 可显示为 °C)可显示为 ° 。需注意,BIPM 对使用这些符号的格式有具体建议。
示例:单位表达式 “m” 表示米,而非毫(10⁻³),因为前缀不能单独使用。毫米需用 “mm” 表示,平方米(m²)需写成 “m2” 。
表达式 “mm2” 表示 (10⁻³ m)² = 10⁻⁶ m² 。需注意,指数运算包含前缀。
单位表达式 “T” 表示特斯拉,但需注意字母 “T” 也是表示 “太拉” 前缀的符号,其乘数为 10¹² 。