# 附录 D Modelica 修订历史
本附录描述了Modelica语言设计的历史及其贡献者。本附录仅因历史原因呈现,不具规范性。本文档的当前版本可从 https://modelica.org/documents (opens new window) 获取。
# Modelica 3.6
Modelica 3.6 后续将进行投票以获批准。Modelica 3.6 规范由汉斯・奥尔松(Hans Olsson)编辑。
# Modelica 3.6 的主要变更
以下 Modelica 变更提案是 3.6 版中添加的向后兼容扩展:
- 未定义修改(MCP - 0009),7.2.7 节。工单 #3167,包含 #2936 中的变更,并在 #3315 中阐明。
- 选择性 Modelica 扩展(MCP - 0032),7.4 节。工单 #3166,包含 #2375、#2422、#2506、#2507、#2948 和 #3006 中的变更。
- Modelica 的多语言支持(MCP - 0035),13.6 节。工单 #2956,包含 #3126、#3131 和 #3177 中的变更。
此外,specification.modelica.org 登录页面更新了搜索功能,#2911 修正 #2404。
已解决的其他问题有:
- 弃用 Real 到 Integer 的字符串格式化 #3328。
- 改进幂运算的定义 #3285。
- 阐明预定义类型名称,#3325 关闭 #2813。
- 仅限制块中的公共连接器,#3318 关闭 #3309。
- 改进迭代器示例 #3317。
- 从文本定义中移除 extends FilledShape,#3316 关闭 #2157。
- 阐明每个 #3314 关闭 #3052。
- 阐明选项的查找 #3307。
- 用隐式迭代器约束数组赋值 #3306 关闭 #3250。
- 参考连接器平衡限制 #3305 关闭 #3260。
- 修正:connect - clause 重命名为 connect - equation #3304。
- 通过添加类型说明符修正示例 #3303。
- 别声称 String 支持 String,因为事实并非如此,#3288 关闭 #3264。
- 阐明时钟仅由方程确定,#3283 关闭 #3265。
- 阐明封装的短类定义,#3282 关闭 #3270。
- 修正一篇论文的失效链接,#3281。
- 阐明 when 方程与时钟化 when 的区别,#3279 关闭 #3001。
- 清理与连接方程相关的术语,#3277 关闭 #3273。
- 阐明 String 命名参数组合,#3262。
- 规定 extent 和 preserveAspectRatio 使用相同逻辑,#3253 关闭 #3219。
- 别给人留下未定义行为是错误的印象,#3248。
- 阐明一个 when 子句不能为同一个变量激活多个 reinit,#3246。
- 更深入阐述可扩展连接器,#3241 关闭 #3147。
- 调整 smoothOrder 的非规范性描述,#3237 关闭 #3200。
- 阐明传递给外部函数的受保护组件的作用,#3236 关闭 #3188。
- 为 shiftSample 添加示例,#3233 关闭 #3040。
- 将时钟化离散时间表达式添加到离散时间部分,#3231 关闭 #3116。
- 阐明记录类型兼容性,#3230 关闭 #3145。
- 将 zerosAllMatching 扩展到记录,#3229 关闭 #3210。
- 移除 choiceStart 值并说明替代方案,#3226。
- 修复与函数应用相关的硬编码交叉引用,#3221。
- 阐明 elsewhen,#3217 和 #3228 关闭 #3216。
- 修正无效引用,#3218。
- 在展示输入和输出列表时也提及输出,#3215。
- 阐明之前的参数表达式,#3214 关闭 #3074。
- 用于限制连接数量的注解,#3212 和 #3129 关闭 #3117。
- 禁止参数与输入的组合,#3211 关闭 #3141。
- 添加 directorySelector,#3207。
- 解释 abs 无事件的说明,#3202。
- 阐明统一资源标识符(URIs)也应被转换,#3201 关闭 #3199。
- 阐明可扩展连接器的非规范性文本,#3197 和 #3195 关闭 #3194。
- 移除 arrayLayout,因多数工具未实现,#3196 关闭 #3189。
- defaultComponentName 中必须忽略 trailing “1”,#3186 关闭 #3151。
- 给出获取组件其他名称的流程,#3182 关闭 #3151。
- 阐明类型中不能包含方程或算法,#3180 关闭 #3157。
- 阐明“operator”,#3179 关闭 #3171。
- 阐明 IconMap 和 DiagramMap “extent”的旧有情况,#3160 关闭 #3150。
- 说明离散时间 Real 变量方程潜在的隐式性质,#3159。
- 避免定义“simulator(模拟器)”这一术语,#3152。
- 定义初始化和仿真,#3146。
- 在时钟示例中提供更优替代方案,#3144 关闭 #3143。
- 更清晰说明 noEvent 在函数内部能产生影响,#3142 关闭 #3136。
- 多返回赋值的可变性规则(说明),#3135。
- 说明离散方程的 DAE 表示,#3134 关闭 #3127。
- 说明嵌套记录,#3130 关闭 #3128。
- 不要求所有条件连接器都必须连接,#3129 关闭 #3117。
- 类不是特化类,#3121。
- 改进运算符优先级的描述,#3119 关闭 #3110。
- 说明时钟系统中未时钟化采样的问题,#3099。
- 泛化通过实例调用函数,#3097 关闭 #3089。
- 允许同时指定 choices 和 choicesAllMatching(说明),#3096 关闭 #3084。
- 让转换示例更清晰(说明),#3095 关闭 #3081。
- 允许为已定义的运算符记录使用 “flow”,#3094。
- 简化 Modelica 代码示例的逻辑,#3092 关闭 #3080。
- 说明同步代码中异常情况的逻辑,#3090。
- 空数组的微小修正,#3087。
- 规定所有字符串可为Unicode,#3079 关闭 #3070。
- 将首选视图字符串称为“view”,#3071。
- 将图标添加到视图列表,#3067 关闭 #2987。
- 说明 pure,#3066 关闭 #2971。
- 让 GenerateEvents 暗示内联,#3065 关闭 #2986。
- 说明 reinit,#3063 关闭 #3001。
- 说明度数格式化,#3048 关闭 #3020。
- 允许在图形中引用导数,#3046 关闭 #3044。
- 定义表达式可变性时使用组件可变性,#3039。
- 说明我们做“网络物理系统”,与 modelica.org 一致,#3037。
- 说明数组范围运算符,#3031 关闭 #3028。
- 移除无关的补偿语句,#3022。
- 改进初始化的文本,#2961 关闭 #2947。
- 明确离散时间变量,#2989。
- 正确使用导入名称,#2980 关闭 #2974。
- 改进外部函数调用的示例,#3010。
- 在 when 算法中将方程转换为赋值,#2998。
- 清理与“未提供”相关的表述(在 “同步语言元素” 中),#2946。
- 说明 URI 是绝对 URI,之后可能改变,#2930 关闭 #2701。
- 不再重复说明非离散时间是连续时间,#2923 关闭 #2891。
- 移除 GenerateEvents 注解中过时的MSL引用,#2914。
- 将隐含的离散值方程规则重新表述为非规范性说明,#2907。
- 改进字符串分配函数的描述,#2903 关闭 #2838。
- 不将预定义类型的值呈现为有名称,#2902 关闭 #2869。
- 解释提供逆函数的潜在歧义,#2901 关闭 #2866。
- 约束 equalityConstraint 的维度,#2898 关闭 #2886(更新以恢复非严格不等式用于 equalityConstraint,#2909)。
- 修正“提议不内联”的描述,#2894。
- 改进差分方程与算法的变体,#2890 关闭 #2814。
- 说明图形标题和标识符的空默认值,#2889 关闭 #2851。
- 说明 Dialog 注解的默认值,#2888 关闭 #2854。
- 说明离散情况并移除关于 Pantelides 的奇怪表述,#2887。
- 说明导数示例文本,#2881。
- 说明连续时间算法,#2875 关闭 #2817。
- 改进源目录示例,#2874 关闭 #2847。
- 允许转换使用可选分号,#2870 关闭 #2801。
- 增加版权年份,#2863。
- 说明 noDerivative 和 zeroDerivative,#2864 关闭 #2840。
- 增加对逆和导数的限制,#2863 关闭 #2837。
- 说明外部对象必须不依赖自身,#2862 关闭 #2845。
- 清理无数组维度的“变量约束”示例,#2857 关闭 #2855。
- 不将 Dialog 称为“菜单”,#2849。
- 不再说 promote 不是 Modelica 函数,#2844 关闭 #2843。
- 使用宏和恰当引用,#2834。
- 清理 Dialog 注解的描述,#2819 关闭 #2476。
- 移除字符串连接中对 '+' 的错误引用,#2810。
- 移除旧术语表中关于 “部分展平” 的不正确定义,#2807 关闭 #2787。
- 从 3.5 切换到 3.6-dev,#2791 和 #2794。
- 更好地整合 “瞬时方程 / 语句” 术语,#2788。
- 说“variable value”而非“value-attribute”,#2786。
- 在列表中将 connect 视为关键字,#2785。
- 改进表述风格,包括修正排版:
- 更新参考书目条目,#3338 关闭 #3337。
- 修正微小排版错误,#3333。
- 修正列表中的缩进错误,#3331。
- 统一“e.g.”和“i.e.”的标点,#3329 关闭 #3235。
- 简化 Transformation 注解的表述,#3326 关闭 #3273。
- 解释代码片段周围的引号,#3324 关闭 #3191。
- 清理 absoluteValue 格式化,#3301。
- 将when方程的限制拆分为两个列表,#3292。
- 添加“if and only if”中缺失的 “if”,#3289。
- 修正 if 子句的格式,#3276。
- 修正语法(‘is’ -> ‘are’),#3272 关闭 #3271。
- 将‘cat’添加到文档索引,#3268。
- 修正“T”缺失的格式,#3267。
- 解决 LaTeXML 中表格问题的变通方法,#3208 和 #3205 关闭 #3156。
- 将‘time’添加到文档索引,#3203。
- 移除多余的分号,#3193 关闭 #3192。
- 阐明示例中 BaseProperties 的描述,#3190。
- 避免 StateSelect 定义的字符串中出现不良前导空格,#3185。
- 修正代码列表中的错误缩进,#3181 和 #3183。
- 修正拼写错误(‘GraphicsItem’ -> ‘GraphicItem’),#3176。
- 正确使用‘may be’,#3174 关闭 #3165。
- 对 for 方程列表进行微小清理,#3170。
- 库注解支持数组,而非元组,#3132。
- 移除 trailing 空白,#3124。
- 添加 trailing 分号,#3120。
- 清理积分列表,#3114。
- 在 spatialDistribution() 定义的阐明中,将 y 改为 x,#3113。
- 添加 preferredView 规范中缺失的 closing,#3112。
- 修正与 versionDate 及相关内容的列表缩进,#3105。
- 修正版本注解的缩进,#3104。
- 修正椭圆伪代码记录定义的缩进,#3085。
- 修正过长的列表行,#3082。
- 让章节名称的第一部分更重要并缩短,#3073 并在 #3100 中缩短。
- 改进注释中的定义,#3064 关闭 #2992。
- 修正“Connectors and Connections”章节中的微小问题,#3061。
- 移除参考文献“url”条目中不正确的‘&’转义,#3059 关闭 #3056。
- 为 openpropd 提供更稳定的链接,#3058 关闭 #3055。
- 从网页链接中移除前导的‘www’,#3057 关闭 #3054。
- 移除对 inverse 注解的过度索引,#3050 关闭 #3047。
- 改进符号表示的描述,#3045 关闭 #3044。
- 收紧连接集与文档索引的关联,#3043 修正 #3041。
- 修正拼写错误,#3032 和 #3036。
- 确保 HTML 中的 Modelica 代码是等宽字体,#3034。
- 在 operatorsandexpressions.tex 中按句子换行,#3030。
- 移除示例中 smooth 未使用的参数‘p’,#3029。
- 修正单数中括号的问题,#3027 关闭 #3026。
- 修正同伦的拼写错误,#3016。
- 清理“Unit Expressions”章节,#3013。
- 清理文件层次列表,#3011。
- 修正日期引用中的年份,#3002。
- 修正 when、elsewhen 和 when initial() 的格式,#3000。
- 统一语法中的引号(并移除一个多余的分号),#2990 关闭 #2988。
- 对作用域章节进行小清理,#2982。
- 修正拼写错误(‘subsample’ -> ‘subSample’),#2979。
- 以大写字母开头的项目符号项,#2976。
- 交叉引用多个 extends 规则及相关清理,#2978。
- 对与方程和语句相关的内容进行大多无关紧要的清理,#2975。
- 修正 delay 规范中的拼写错误,#2973。
- 使语法的关键字与 Modelica 的关键字对齐,#2972。
- 移除未知来源的复制粘贴内容,#2970 关闭 #2968。
- 修正 air2 的错误(在 #2916 中引入 ),#2969 关闭 #2966。
- 调整语气并将样式指南应用到下一段,#2964 关闭 #2963。
- 移动并添加对常量有声明方程的规则引用,#2960 关闭 #2945。
- 在句子开头添加内联代码的样式指南章节,#2959 关闭 #2943。
- 收集函数的注解,#2922 关闭 #2895。
- 应用样式指南,#2916 关闭 #2713。
- 在 extends 后添加空白,#2913。
- 清理“Matching Function”,#2910。
- 修正连接器示例中的换行,#2906 和 #2905。
- 修正 C 代码中错误的反斜杠,#2897。
- 添加规范文档样式指南,#2884 关闭 #2713。
- 为 derivative 注解设置样式,#2883。
- 修复最近引入的导数示例中的空白错误,#2880。
- 拆分描述 ExternalObject 的第一项,#2879。
- 与 Modelica.StateGraph 保持更一致,#2876 关闭 #2839。
- 恢复“在列表中对 < 描述文本> 使用尖括号”,#2868 关闭 #2867。
- 添加缺失的复数‘s’,#2860。
- 对与冒号(:)维度相关的内容进行微小格式清理,#2856。
- 更系统地使用 or 图注解 Axis 和 Curve,#2850。
- 清理与词汇约定相关的格式,#2846。
- 对导数注解的内联代码和数学内容进行微小清理,#2836。
- 对齐词法规则的重复部分,#2831。
- 保护 LaTeX 后的空格,#2829。
- 修正版本 3.5 的拼写错误,#2828。
- 清理列表中的省略号和尖括号,#2812。
- 避免过长的行,#2800 关闭 #2796。
- 将‘MODELICAPATH’添加到索引,#2808。
- 修正参考文献中的拼写错误,#2803。
- 在附加‘th’到序数词时,用冒号代替破折号,#2793。
- 在数组索引列表中用注释代替文本转义,#2789。
- 修正 C 列表的问题,#2784(已在 3.5 中添加)。
- 在列表中不将‘nondiscrete’视为关键字,#2783。
- 构建系统和 LaTeX 的改进(含变通方法):
- 构建 PDF 时仅加载 cmap.sty,#3323。
- 将通配符添加到清理目标,#3319。
- 添加关于最近修复的 LaTeXML 问题的注释,#3308。
- 不从 Docker 镜像中移除 curl,#3299。
- 支持连字的搜索和复制,#3296、#3294 关闭 #3286。
- 更新到 textlive 2022,#3148。
- 使用 listings.sty 选项 upquote=true 解决 LaTeX 代码的 LaTeX 问题,#3123 关闭 #3122。
- 处理 fancyhdr 关于过小 headheight 的警告,#3086。
- 更新关于 LaTeXML 问题 1719 的状态,#3083。
- 将 HTML 入口页命名为 index.html,#3077 关闭 #3076。
- 适当增大尺寸,对注释使用 smalliffpdf,#3072。
- 调整 CSS 用于 :target:before,#3069 关闭 #2967。
- 解决 LaTeXML 中 tabbing 环境周围的换行问题,#3042 关闭 #3009。
- 为 LaTeXML 添加空格以修正 -2 的格式,#3025 和 #3033 关闭 #3024。
- (持续集成 )在 git 提交前设置用户名,#3021。
- 生成 HTML 时避免在行内仅出现“0”,#2993 关闭 #2991。
- 更新关于 LaTeXML 问题的注释(现已在 master 分支修复 ),#2983。
- (持续集成)解决标记为 markdown 的图片因无 ssh-agent 无法加载的问题,#2939。
- 让菜单悬停在 iOS Safari 上生效,#2934。
- 不在页面页眉中使用块链接,#2933。
- 添加元视口标签以解决文本过小问题,#2932。
- 将构建推送到 github-pages 而非通过 SSH 上传,#2925。
- 将 newtxtt.sty 添加到 LaTeXML 持续集成构建,#2908。
- 在 LaTeXML 问题修复后,添加带 TODO 的注释,#2882。
- 在 README.md 中添加徽标,#2877、#2873 和 #2833。
- 避免当前 HTML 跳转目标被页面页眉遮挡,#2841。
- 移除 HTML 页脚到参考文献和索引的链接,#2832。
- 从 README.md 中移除 Travis CI 徽章,#2821。
- 为生成的 PDF 添加关键字,#2802。
- 更新关于 LaTeXML 问题 1400(现已修复 )的注释,#2800。
- 改进首页导航栏,#2799。
- 将选项 pdfusetitle 传递给 hyperref.sty,#2797 关闭 #2795。
# Modelica 3.5
Modelica 3.5 最后编辑于 2020 年 12 月 31 日,后续将进行投票以获批准。Modelica 3.5 规范由汉斯·奥尔松(Hans Olsson)编辑。
# Modelica 3.5 的主要变更
以下 Modelica 变更提案是 3.5 版本中添加的向后兼容扩展:
- 规范格式变更(MCP-0018):规范的开发格式改为使用 LaTeX 排版;并通过 https://github.com/modelica/ModelicaSpecification (opens new window) 进行问题追踪。
- 预定义绘图的注解(MCP-0033),工单 #2710。
- 泛化文本标记中的链接,工单 #2692。
- 规定 Axis 单元用于刻度标签,工单 #2633。
- 定义空 Axis 单元的含义,工单 #2632。
- 详述图形的继承,工单 #2588。
- 阐明首尾换行符会被忽略,工单 #2581。
- 使图形标题可选,工单 #2580。
- 阐明图形的曲线和单位,工单 #2579。
- 阐明 Figure 和 Plot 标识符的唯一性,工单 #2544。
- 放宽 Plot 标识符的唯一性,工单 #2537。
- 更新为含 HTML 标题、子图标题及标识符,工单 #2663。
其他已解决问题:
- 文档整体改进(因切换到 LaTeX 更易实现 )。
- 添加了真正的参考文献,但本章不含论文;#2740。
- 移除参考文献中的死链,可能时使用 DOI,工单 #2502。
- 各章引言现为非规范性内容,#2366。
- 更新索引以引用术语的主要定义,移除术语表以避免重复工作;#2726。
- 清理连字符和破折号,#2628。
- 微小英语语言改进,包括移除 “allows to” 和 “may not”,工单 #2685、#2683 及其他。
- 将非规范性文本移至单独段落,工单 #2336。
- 一致使用不同引号符号,工单 #2508。
- 修复与格式、持续集成、示例及维护仓库相关的微小问题(此处未列出 )。
- 改进的函数。
- 阐明不纯函数作为函数参数的情况,工单 #2756。
- 阐明函数中的公共变量必须是输入或输出,工单 #2730。
- 更改 C 函数的输入以符合常量正确性,工单 #1955。
- 阐明外部对象是类,工单 #2705。
- 弃用“builtin”外部语言,避免引用 Modelica.Math 部分,工单 #2662。
- 阐明无输出的函数,工单 #2692。
- 替换过时语法构造“class-name”的用法,工单 #2708。
- 更新函数参数为分数的示例,工单 #2663。
- 扩展函数逆并阐明,工单 #2478。
- 阐明在参数绑定方程中使用不纯函数的后果,工单 #2475。
- 从函数声明模板中移除已弃用的赋值,工单 #2439。
- 修正示例中指定函数二阶导数的表达式,工单 #2401。
- 阐明函数输入的可变性限制,工单 #2243。
- 阐明在 Windows 上处理 lib.dll 的情况,工单 #2252。
- 阐明函数组件,工单 #2255。
- 阐明对象文件不是库文件,工单 #2257。
- 阐明 ModelicaAllocateString,工单 #2279。
- 阐明外部对象的内存管理,工单 #2524。
- 为 C 代码引入 ModelicaAllocateString,工单 #2417。
- 改进 ModelicaAllocateString 用于 C 代码,工单 #2403。
- 阐明同步 Modelica。
- 阐明时钟不能在函数中调用,函数中不能包含时钟变量,且它们不可向量化,工单 #2177 和工单 #2390。
- 阐明时钟不是 hold 的有效输入,工单 #2174。
- 阐明合理时钟仅在有翻译时时钟的上下文中才有意义,工单 #2386。
- 阐明不同时钟分区应分离,工单 #2365。
- 重写合理性为正,工单 #2512。
- 阐明离散状态的术语,工单 #2051。
- 阐明时钟信号使用 held 外推,而非 constant,工单 #2007。
- 阐明时钟构造函数是参数化的,工单 #2294。
- 阐明时钟构造函数可接受命名参数,时钟分区必须参数化,工单 #2294。
- 限制 noClock 不接受 Clock 作为输入,工单 #2335。
- 一致使用“Event Clock”,工单 #2336。
- 阐明总线时钟可用于时钟分区,工单 #2179。
- 阐明 Real Clock 构造函数的间隔参数,工单 #2180。
- 阐明求解器方法对时钟构造函数的影响,通过重写算法,工单 #2182。
- 阐明时钟构造函数的措辞,工单 #2194。
- 阐明无法区分已标记的运算符。工单 #2236。
- 阐明hold和backSample仅接受组件表达式。工单 #2270。
- 阐明状态机。
- 移除状态机的颜色推荐。工单 #2650。
- 阐明(针对状态机的)多个输出连接。工单 #2735。
- 阐明非活动方程。工单 #2734。
- 定义分层的 tickInState 和 timerInState。工单 #2407。
- 修正nextResetStates的两种变体以阐明重置处理。工单 #2200。
- 转换,曾用于 Modelica 标准库 4.0.0,因此进行了阐明,并为未来稍作扩展。
- 将 convertMessage 扩展到类的元素。工单 #2516。
- 阐明 convertClassif 用于枚举和字符串,并限制允许的类型。工单 #2451。
- 进一步阐明转换规则。工单 #2522。
- 通过给予 convertModifiers 优先级来避免歧义。工单 #2409。
- 阐明转换的继承。工单 #2178。
- 添加并阐明其他特定注解。
- 注解 SourceDirectory,它是导出源代码的起始点。工单 #2145。
- 阐明用于分层组件的 Evaluate 注解。工单 #2288。
- 添加用于错误模型的测试用例注解。工单 #2340。
- 阐明 HTMLAIMatching。工单 #2693。
- 阐明通道编码内容。工单 #2503。
- 允许对类使用受限形式的 Dialog 注解。工单 #2617。
- 阐明 connectorSizing。工单 #2539。
- 改进 Documentation 注解(含 MCP - 0033)的描述。工单 #2994。
- 阐明参数对话框中的顺序。工单 #2310。
- 阐明 URI 片段。工单# 2445。
- 规定 Dialog 组没有默认值。工单 #2476。
- 阐明带箭头线条的纵横比。工单 #2528。
- 阐明类的保护可防止“复制”。工单 #2350。
- 扩展位映射以允许 svg 格式。工单 #174。
- 阐明 macros for text。工单 #2416。
- 说明更改内部 / 外部组件的默认名称不好。工单 #2398。
- 阐明 preserveAspectRatio 是一种提示。工单 #2268。
- 阐明 include - files 提供原型。工单 #2278。
- 阐明加密内容的可见性。工单 #2318。
- 阐明 missingInnerMessage 是字面字符串。工单 #2334。
- 阐明文本宏(含 % class)。工单 #2333。
- 阐明 obsolete 不会被继承。工单 #2338。
- 添加 % par 的单位。工单 #2339。
- 阐明连接上的文本注解。工单 #2170。
- 添加 IconVisible 以显示 / 隐藏图标层中的公共连接器。工单 #2200。
- 修正 experiment 的语法并为 StartTime 给出默认值。工单 #2224。
- 阐明 versionBuild 和 dateModified 可用于 uses 注解。工单 #2239。
- 阐明图像背景默认应为白色 / 透明且颜色浅。工单 #2244。
- 阐明 IconMap 也允许用于简短类定义。工单 #2281。
- 阐明某些保护注解无效果(并非只是无 “有意义效果”)。工单 #2193。
- 语法的细微更新。
- 更新语法以使用 description 而非不存在的 comment。工单 #2620。
- 允许空的带引号标识符。工单 #2612。
- 允许 .13 作为浮点数。工单 #2122。
- 提取函数部分应用的因子。工单 #2230。
- 恢复对函数参数的正则表达式。工单 #2176。
- 将 string-comment 重命名为 description-string。工单 #2467。
- 阐明带引号的标识符。工单 #2408。
- 修正语法以允许 "*" 作为导入的一个标记。工单 #2430。
- 移除语法规则中的冗余括号。工单 #2434。
- 移除语法规则中的旧下划线。工单 #2431。
- 修正注解 - 注释的 DAE 使用。工单 #2428。
- 改进 DAE 章节以完整描述。
- 添加时钟变量。工单 #2286。
- 说明离散值变量的可解性要求。工单 #2639。
- 改进流连接器公式化。
- 更新符号表示,使用质量流作为导数。工单 #2644。
- 进一步阐明 inStream 简化。工单 #2242。
- 阐明 inStream,明确假设正质量流。工单 #2253。
- 说明 disable 条件组件对于 inner/outer 会被忽略。工单 #2499。
- 阐明异构记录数组的一些用法。工单 #2282。
- 允许 end 用于非整数索引数组。工单 #2204。
- 改进封装的简短类以与封装一致。工单 #2743。
- 阐明数组声明不能是标量。工单 #2753。
- 阐明非固定参数的无环规则。工单 #2742。
- 阐明类的 final 修饰符。工单 #2676。
- 让 when 描述更相似和。工单 #2635。
- 将断言级别设为结构参数。工单 #2642。
- 弃用字节顺序标记。工单 #2675。
- 说明矩阵 / 向量代数函数返回 Real 类型。工单 #2673。
- 阐明 each。工单 #2630。
- 阐明 elsewhen 初始值。工单 #2636。
- 统一使用“离散时间变量”表述。工单 #2640。
- 阐明可扩展连接器的用法。工单 #2606。
- 使 ndims 为常量。工单 #2605。
- 限制可扩展连接器组件的大小使用。工单 #2600。
- 阐明组件名称的作用域。工单 #2547。
- 将 promote 扩展为在 Modelica 中允许使用,而非仅在规范内部。工单 #2568。
- 阐明迭代器范围无法从可扩展连接器变量推导。工单 #2560。
- 重构 Real 和 Integer 类型的描述,将细节整合。工单 #2552。
- 阐明数组的 pre 修饰符。工单#2566。
- 阐明可变性保证。工单 #2553。
- 修正电力系统过约束连接器示例中的错误。工单 #2564。
- 清理电力系统过约束连接器示例。工单 #2565。
- 修正使普通连接器无法从可扩展连接器继承。工单 #2288。
- 说明局部非奇异模型可组合成全局奇异模型。工单 #2510。
- 阐明可变性与完美匹配之间的相互作用。工单 #2525。
- 在示例中按 MSL 4.0.0 将 SImits 改为 Units.SI。工单 #2504。
- 移除过时表述,即模型和类相同。工单 #1345。
- 移除过时表述,即常量不可修改。工单 #2492。
- 恢复 lookup 的回归问题。工单 #2175。
- 阐明涉及连接器的方程处理。工单 #2235。
- 阐明一些内置数组函数。工单 #2295。
- 阐明算法的 when initial()。工单 #2436。
- 阐明表达式的可微性。工单 #2464。
- 阐明标准类型 coercion(类型转换)。工单 #2326。
- 将声明赋值完全重命名为绑定方程。工单 #2249。
- 限制左侧不能是模型和模块的组件。工单 #2385。
- 修正短路逻辑示例中的顺序。工单 #2442。
- 阐明 for - 方程的求值。工单 #2205。
- 阐明如何从绑定方程推导大小。工单 #2212。
- 阐明组件声明允许使用类型进行索引。工单 #2221。
- 修正非同步数据索引原理的公式表述。工单 #2348。
- 限制函数不能包含连接器——后续阐明。工单 #2008。
- 阐明 sample。工单 #2118。
- 阐明单位的表示不限于 ASCII。工单 #2142。
- 阐明短类的数组变体。工单 #2139。
- 阐明外部库的示例。工单 #2192。
- 通过将“breakable branch”重命名为“optional spanning tree edge”,阐明过约束连接器处理。工单 #2291。
- 改进伪代码 spatialDistribution。工单 #2292。
- 阐明 reunit。工单 #2203。
- 允许对非整数索引的矩阵进行求和与乘积运算。工单 #2204。
- 修正单位拼写以与国际单位制(SI)一致。工单 #2232。
- 阐明修饰符的描述字符串会替换现有字符串。工单 #2237。
- 阐明 cat 的第一个参数是整数参数表达式。工单 #2273。
- 阐明对外部元素的非法修改。工单 #2283。
# Modelica 3.4
Modelica 3.4 于 2017 年 4 月 10 日发布。Modelica 3.4 规范由汉斯·奥尔松(Hans Olsson)编辑。
# Modelica 3.4 的主要变化
以下 Modelica 变更提案是 3.4 版本中添加的向后兼容扩展:
- 不同版本间的自动转换(MCP - 0014)。工单 #1622。
- 明确规定展平操作(MCP - 0019)。工单 #1829。
- 从 Integer 转换为 Enumeration(MCP - 0022)。工单 #1842。
- 显式地将 Model 转换为 Record(MCP - 0023)。工单 #1933。
- 时钟连续状态的初始化(MCP - 0024)。工单 #2007。
- 为 Ellipse 注解添加仅绘制圆弧的选项(MCP - 0026)。工单 #2015。
- 允许 Real 和非 Real 的 Record 导数混合(MCP - 0028)。工单 #2134。
纯函数的定义已完善,尤其是为了恢复与 Modelica 3.2 的向后兼容性。工单 #1937。
以下是一些小的改进(从 3.3 版本修订 1 开始):
- 阐明仿真模型。工单 #730。
- 阐明结构分析。工单 #888。
- 阐明元符号。工单 #1616。
- 拼写错误。工单 #1702。
- 阐明换行符。工单 #1479。
- 允许使用“'”并将其定义为等同于“"”(对于“?”同理 )。工单 #1176。
- 阐明规范中的内置函数,3.7 和 12.5 节。工单 #1008。
- 阐明内置运算符的命名实参,特别是 spatialDistribution。工单 #2002。
- 阐明 semilinear 是连续的。工单 #112。
- 修正拼写错误。工单 #1828。
- 修正代码中的拼写错误并重新表述说明。工单 #1588、#1729 和 #2166。
- 修正事件相关的拼写错误。工单 #1657。
- 阐明 sample 运算符。工单 #677。
- 补充给出参数表达式的函数。工单 #1082。
- 阐明 ExternalObject。工单 #1546。
- 简化结构化组件的类型前缀规则。工单 #1686。
- 阐明未展开的绑定应保持未展开状态。工单 #2153。
- 阐明条件组件。工单 #2057。
- 改进示例以避免使用类。工单 #553。
- 阐明预定义类型的连接性。工单 #1250。
- 允许连接器从 operator record 继承。工单 #1714。
- 阐明对记录组件的限制。工单 #1615。
- 阐明只有函数可包含 external 子句。工单 #2014。
- 阐明 operator record 的方程计数。工单 #806。
- 阐明对属性的限制。工单 #1426。
- 阐明不同内置类型的保留程度。工单 #1538。
- 移除对名义值的限制并解释用途。工单 #1445。
- 为 Real 添加未绑定属性。工单 #926。
- 为 String 添加 unbounded 属性。工单 #1797。
- 阐明并修正枚举类型中的示例。工单 #1849 和 #2150。
- 阐明 nominal 属性。工单 #1877。
- 添加说明 Connections 是内置包。工单 #1883。
- 阐明导入相关的查找顺序。工单 #1573。
- 将通过组件调用函数的情况扩展到数组场景。工单 #1613。
- 阐明现有自动内部声明的用法。工单 #1551 和 #1749。
- 移除对修饰符数组大小的限制。工单 #1432。
- 阐明 2/3 和 2^(-3) 是 Real 类型。工单 #1647。
- 阐明 external 子句可继承。工单 #789。
- 进一步阐明多重继承的顺序。工单 #2015。
- 阐明继承限制。工单 #1451。
- 限制修饰符的合并。工单 #791。
- 针对嵌套数组,详细阐明相关内容。工单 #1396。
- 阐明带有数组大小的可替换类型。工单 #1251。
- 修正并移动示例。工单 #1034。
- 阐明 redeclare class extends B。工单 #462 和 #709。
- 修正示例。工单 #1725。
- 阐明关于 constraining-clause 的描述和注解。工单 #512。
- 修正拼写错误。工单 #1770。
- 阐明带类型的 for 方程。工单 #915。
- 阐明事件生成。工单 #2114。
- 进一步阐明 initial() 用于 when 子句的情况,并说明本附录不具规范性。工单 #1852。
- 阐明为参数使用 start 属性。工单 #2136。
- 阐明一阶常微分方程的状态。工单 #937。
- 阐明为可扩展连接器变量添加input/output前缀。工单 #829。
- 阐明在可扩展连接器中创建元素。工单 #428。
- 修正可扩展连接器示例。工单 #1763。
- 阐明流变量不生成方程。工单 #1584。
- 限制流只能连接到流。工单 #796。
- 阐明章节标题。工单 #727。
- 阐明运算符的向量参数,工单 #1500。
- 修正示例。工单 #2143。
- 阐明归约表达式的返回类型。工单 #981。
- 将归约表达式 sum 扩展到运算符记录。工单 #1897。
- 阐明归约表达式中的表格,工单 #1722。
- 匹配括号。工单 #1558。
- 推荐生成向量的更优替代方案。工单 #1837。
- 定义一元运算符。工单 #2027。
- 允许缺失的尾部索引。工单 #1003。
- 阐明 trailing-zeros 除法给出实数结果。工单 #1119。
- 移除误导性注释。工单 #938。
- 阐明多返回函数的赋值工作方式。工单 #1921。
- 阐明函数中无方程和初始算法。工单 #2100。
- 阐明在函数中给带有绑定的记录变量赋值。工单 #2016。
- 阐明函数中变量的初始化。工单 #1708。
- 统一当前实践,在函数绑定中使用=而非:=。工单 #1935。
- 阐明函数部分求值。工单 #647。
- 阐明函数中记录组件的初始化。工单 #1230。
- 阐明灵活的数组大小。工单 #2158。
- 阐明构造函数的输出名称,工单 #3066。
- 从多个方面阐明函数的导数。工单 #985、#1543、#1544、#1545、#1547、#1548、#1785、#1972、#1987。
- 阐明使用 C89 并增加对 C89、C99 和 C11 的可能性。工单 #1088。
- 阐明对外部函数的输入 / 输出。工单 #775。
- 阐明处理外部 C 语言布尔变量的方式。工单 #1846。
- 补充说明字符串可发送至 FORTRAN 77。工单 #1971。
- 允许多个 include 目录。工单 #2103。
- 允许针对不同编译器版本的特定库。工单 #1316。
- 添加外部警告函数。工单 #1967。
- 阐明指针仅在调用期间有效。工单 #1611。
- 阐明构造函数和析构函数。工单 #1907。
- 阐明“结构化实体”为“目录”。工单 #922。
- 阐明处理错误包顺序的方式。工单 #1858。
- 限制含多个类的文件的使用。工单 #1854。
- 阐明文件系统中的存储资源。工单 #685、#1623。
- 使用正确格式。工单 #2061。
- 阐明 inStream 优化是允许的。工单 #1766。
- 修正 actualStream 示例,工单 #1652。
- 修正非周期性有理时钟。工单 #2022。
- 阐明时钟化离散连续时间分区的初始化。工单 #1328。
- 定义渲染顺序。工单 #1750。
- 阐明旋转方向。工单 #1830。
- 阐明坐标系统定义。工单 #1831。
- 定义坐标系统继承以减少意外情况。工单 #1978。
- 阐明 lineThickness 和 borderPattern。工单 #1806。
- 修正格式。工单 #1825。
- 使不同文本注解更相似。工单 #1621。
- 阐明 LinePattern,工单 #1483。
- 修正位图组件的翻转及相关方面。工单 #1923。
- 阐明箭头。工单 #1894。
- 阐明现有零宽度文本的使用。工单 #1636。
- 添加特定字体名称。工单 #1986。
- 添加宏展开的替代方式。工单 #2148。
- 修正示例,工单 #2111。
- 将注解置于类中的最后位置。工单 #1009。
- 清理代码和格式。工单#2041、#2042和#2125。
- 添加缺失的纳诺(nano)前缀。工单#1261。
- 用超链接替换过时内容。工单#2130。
- 添加 ModelicaServices。工单#2132。
- 限制语法,避免修饰符以句点开头(已在MSL中使用)。工单#1027。
- 限制 base - prefix 语法。工单#917。
- 限制数组语法。工单#809。
- 限制函数参数语法(替换语义限制)。工单#1634。
- 修正拼写错误。工单#1317。
# Modelica 3.4 的贡献者
Modelica 协会成员为 Modelica 3.4 规范做出贡献。
# Modelica 3.3修订版1
Modelica 3.3 修订版 1 于 2014 年 7 月 11 日发布。Modelica 3.3 修订版 1 规范由汉斯·奥尔松(Hans Olsson)编辑。
# Modelica 3.3修订版1的主要变化
包含 Modelica 3.2 修订版 2 中的变更,此外还有以下改进:
- 阐明 String 运算符不能使用位置参数。工单 #1468。
- 修正枚举的大小。工单 #1369。
- 阐明 spatialDistribution。工单 #1510。
- 限制基数以给出清晰定义。工单 #1409。
- 阐明哪些常量需要值。工单 #1220。
- 阐明类型前缀规则。工单 #1196、#1221、#1301。
- 为循环参数绑定添加异常(已在 MSL 中使用)。工单 #1320。
- 添加条件组件用法示例。工单 #1227。
- 修正注解语法。工单 #1378。
- 修正重复的类定义语法。工单 #1388。
- 阐明简短类定义。工单 #527。
- 移除运算符变体对运算符和运算符函数的限制。工单 #1450、#1497。
- 添加 AssertionLevel 的定义。工单 #962。
- 修正示例中循环末尾的拼写错误。工单 #902。
- 阐明临时展平。工单 #1327。
- 添加修饰符修饰方程。工单 #939。
- 阐明数组元素的修饰符。工单 #1324。
- 修正最终元素修改的示例。工单 #1326。
- 修正重复的类定义语法。工单 #1388。
- 阐明约束类型的修饰符。工单 #1033。
- 阐明 redeclare 在相同类型及数组类型重声明规则下的使用场景。工单 #1252、#1281。
- 阐明 annotation choicesAllMatching 的默认值。工单 #1391。
- 禁止在初始方程 / 算法中使用 when 语句(多数情况下这些语句不会激活)。工单 #1288。
- 阐明初始化期间的 reinit。工单 #1372。
- 阐明将 start 属性用作初始猜测值。工单 #1133、#1246。
- 阐明可扩展连接器中变量的允许用法。工单 #1279。
- 阐明可扩展连接器的因果关系。工单 #1305。
- 阐明可扩展连接器的通用情况。工单 #1330。
- 阐明连接匹配。工单 #884。
- 为连接器添加量检查(MSL 已依赖此检查)。工单 #1284。
- 阐明非整数维度的数组。工单 #1501。
- 阐明 ndims 对 scalar(标量)的适用性。工单 #1303。
- 阐明填充值为零、一的函数的参数数量。工单 #1351。
- 阐明 min/max。工单 #1036。
- 阐明使用迭代的数组表达式允许非简单类型。工单 #1521。
- 阐明非整数维度的数组。工单 #1463。
- 阐明默认函数作为特化类。工单 #1362。
- 阐明函数根据其他输入调用的情况。工单 #1346。
- 修正示例中的语法错误。工单 #1338。
- 阐明外部函数的注解。工单 #660。
- 增加向外部函数发送记录中数组的可能性。工单 #351。
- 修正 FORTRAN 77 的拼写。工单 #1278。
- 阐明默认目录。工单 #1456。
- 阐明外部对象的构造 / 析构。工单 #1518。
- 阐明运算符记录的封装要求。工单 #1254。
- 阐明运算符记录:数组、优先级和零结果。工单 #1469、#1476、#1481。
- 为运算符记录添加逐元素操作。工单 #1455。
- 改进表述。工单 #1362。
- 阐明 noClock 存在的原因。工单 #1094。
- 为时钟化离散连续时间分区的求解器方法添加初始条件。工单 #1379。
- 增加状态机转换优先级必须唯一的要求(原描述中已有此限制,是确保确定性行为所必需的)。工单 #583。
- 修正直线定义的语法。工单 #1464。
- 修正 connectorSizing 的描述。工单 #1441。
- 修正许可证示例。工单 #1127。
- 阐明语法中产生式(productions)的名称,并改为使用连字符。工单 #713 和 #1033。
- 修改语法,使导入列表(import - list)风格一致。工单 #1374。
# Modelica 语言 3.3 修订版 1 的贡献者
以下 Modelica 协会成员为 Modelica 3.3 修订版 1 和 / 或 Modelica 3.2 修订版 2 规范做出了贡献:
彼得・阿伦松(Peter Aronsson),MathCore AB,瑞典林雪平
彼得・弗里特松(Peter Fritzson),PELAB,林雪平大学,瑞典林雪平
希丁・恩奎斯特(Hilding Elmqvist),达索系统公司,瑞典隆德
克里斯托夫・黑格(Christoph Hager),柏林工业大学,德国柏林
格尔德・昆茨松(Gerd Kurzch),MTI 有限公司,德国德累斯顿
耶斯佩尔・马特松(Jesper Mattsson),Motioneering AB,瑞典隆德
汉斯・奥尔松(Hans Olsson),达索系统公司,瑞典隆德
马丁・奥特(Martin Otter),德国航空航天中心(DLR),德国奥伯法芬霍芬
阿德里安・波普(Adrian Pop),Maplesoft 公司,加拿大滑铁卢
叶莲娜・斯米尔诺娃(Elena Smirnova),Maplesoft 公司,加拿大滑铁卢
马丁・斯皮兰德(Martin Sjölund),PELAB,林雪平大学,瑞典林雪平
斯特凡・沃特科特(Stefan Vorkoetter),Maplesoft 公司,加拿大滑铁卢
# Modelica 3.3
Modelica 3.3 于 2012 年 5 月 9 日发布。Modelica 3.3 规范由汉斯・奥尔松、希丁・恩奎斯特和马丁・奥特编辑。
# Modelica 3.3 的主要变化
Modelica 3.3 引入了以下向后兼容的扩展:
- 用于描述适用于控制系统实现的同步行为的语言元素。
- 用于定义同步状态机的语言元素。
- 用于特殊一维流动问题的 spatialDistribution 函数。
- 用于诊断消息的 getInstanceName 函数。
- 可通过实例名称调用函数。
- 可将 start 属性用作参数,以给出应更改的非零默认值。
- 添加了初始值之间优先级的推荐程序。
- 函数可在无算法节的情况下定义。
- 函数可标记为 pure(纯函数)或 impure(非纯函数),并带有指定语义。
- 阐明了 ExternalObject 的规则。
- 多重定义导入。
- 新增的注解功能:
- 用于生成事件的函数。
- 用于指定仿真结果时间分辨率的实验。
- 类的单实例。
- 图表层中的文本可使用宏语法。
- 参数的颜色选择对话框。
- 转换功能,可通过一个脚本指定一组版本进行转换。
- 获许可的库,用于定义允许的操作集(包括二进制 / 源代码导出)。
以下 Modelica 3.3 中的更改不向后兼容:
- Modelica 3.2 中的同步语言元素已被移除。由于之前的章节未被发布的工具支持,且无工具支持该旧章节,这种不向后兼容的更改影响不大。
- 新的 spatialDistribution 和 getInstanceName 函数可能引发问题,若已有同名函数被使用。
- 启用时,条件物理连接器必须连接。几乎所有情况下,为生成正确结果,都需连接这些连接器,且无法检查模型中是否已连接。
# Modelica 3.3 的贡献者
用于描述同步行为的语言元素主要由 Hilding Elmqvist、Martin Otter 和 Sven Erik Mattsson 开发。Hilding Elmqvist 撰写了详细教程,Sven Erik Mattsson 开发了语言元素的测试实现及所需新算法。基于原型,Martin Otter 和 Bernhard Thiele 提供了测试和反馈。
用于定义同步状态机的语言元素主要由 Hilding Elmqvist 开发,Francois Dupont、Sven Erik Mattsson 和 Fabien Gaucher 贡献。Hilding Elmqvist 撰写教程,Sven Erik Mattsson 和 Carl-Fredrik Albelson 开发测试实现。基于原型,Alain Thura、Emmanuel Létine、Claire Campan 和 Martin Mahner 提供测试和反馈。
spatialDistribution 运算符由 Hubertus Tummescheit 发起,基于 Dymola 的运算符,Hans Olsson 参与贡献。
纯函数和非纯函数的改进定义及增强的 import 子句由 Peter Fritzson 提出。
基于提交工单的各类语言小改进,由 Hans Olsson 领导的团队开发,团队成员包括 Peter Fritzson、Christoph Hager、Gerd Kurzbach、Jesper Mattsson、Martin Sjölund 和 Stefan Vorkoetter。
以下 Modelica 协会成员参与设计会议,为 Modelica 3.3 规范贡献:
Johan Åkesson,隆德大学、Modelon AB,瑞典隆德
Peter Aronsson,MathCore AB,瑞典林雪平
Ingrid Bausch-Gall,BAUSCH-GALL GmbH,德国慕尼黑
Volker Beuter,Kämmerer AG,德国
Torsten Blochwitz,ITI GmbH,德国德累斯顿
David Broman,PELAB,林雪平大学,瑞典
Dag Brück,达索系统公司,瑞典隆德
Franco Casella,米兰理工大学,意大利米兰
Christoph Clauss,弗劳恩霍夫协会,德国德累斯顿
Mike Dempsey,Clavertex Services 有限公司,英国利明顿温泉
Karina Dietl,TU 汉堡 - 哈尔堡,德国
Jonas Elborn,Modelon,瑞典隆德
Hilding Elmqvist,达索系统公司,瑞典隆德
Guiliano Fontanella,AIT,奥地利维也纳
Rüdiger Franke,ABB 发电公司,德国曼海姆
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学 PELAB
塞巴斯蒂安・富里(Sébastien Furic),法国博讷 IMS International
莱奥・加尔(Leo Gall),德国慕尼黑 BAUSCH-GALL GmbH
彼得・哈默(Peter Hammer),英国 MATLAB 数据有限公司
安东・哈默(Anton Hammer),奥地利维也纳 AIT
丹・汉松(Dan Hansson),瑞典隆德达索系统公司
克里斯托夫・黑格(Christoph Häger),德国柏林 TU 柏林
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 AIT
格尔德・库尔茨巴赫(Gerd Kurzbach),德国德累斯顿 ITI GmbH
基利安・林克(Kilian Link),德国埃尔朗根西门子 AB
克里斯汀・马耶塔(Kristin Majetta),德国德累斯顿弗劳恩霍夫协会
Jesper Mattsson,瑞典隆德 Modelon
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德达索系统公司
埃里克・诺伊贝尔(Eric Neuber),德国德累斯顿 ITI GmbH
拉明・尼布图拉希(Ramine Nibourahimi),法国阿塔尔
汉斯・奥尔松(Hans Olsson),瑞典隆德达索系统公司
马丁・奥特(Martin Otter),德国奥伯普法芬霍芬德国航空航天中心(DLR-RM)
彼得・波佩(Peter Popper),德国柏林弗劳恩霍夫 FIRST
阿德里安・波普(Adrian Pop),瑞典林雪平大学 PELAB
奥莉娜・罗戈文科(Olena Rogovchenko),瑞典林雪平大学 PELAB
斯特凡 - 亚历山大・施耐德(Stefan-Alexander Schneider),德国慕尼黑宝马公司
迈克尔・泽勒曼(Michael Seklemann),德国奥伯普法芬霍芬德国航空航天中心
马丁・肖伦德(Martin Sjölund),瑞典林雪平大学 PELAB
克里斯蒂安・斯塔瓦克(Kristian Stavåker),瑞典林雪平大学 PELAB
伯恩哈德・蒂勒(Bernhard Thiele),德国奥伯普法芬霍芬德国航空航天中心(DLR-RM)
埃里克・托马斯(Eric Thomas),法国巴黎达索航空
迈克尔・蒂勒(Michael Tiller),法国韦利达索系统公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德 Modelon AB
安德烈亚斯・乌尔里希(Andreas Uhlig),德国德累斯顿 ITI
弗拉基米尔・维多里奇(Vladimir Vuković),奥地利维也纳 AIT
斯特凡・沃尔科特(Stefan Vorkoetter),加拿大滑铁卢 Maplesoft
丹尼尔・韦尔(Daniel Weil),法国格勒诺布尔达索系统公司
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),瑞士巴登 ABB 瑞士公司企业研究部
迪特马尔・温德勒(Dietmar Winkler),挪威波什格伦沃尔达大学学院
斯特凡・韦施尔森(Stefan Weschselse),德国汉堡 XRG Simulation
德克・齐默(Dirk Zimmer),德国奥伯普法芬霍芬德国航空航天中心(DLR-RM)
# 鸣谢
对于同步语言元素和同步状态机的设计,以及同步语言精细细节的基础工作,尤其要感谢来自 Lucid Syn- drone 的有益讨论,以下人员贡献值得赞赏:
阿尔贝・博韦内斯特(Albert Benveniste),法国雷恩 IRISA/INRIA
马克・波祖(Marc Pouzet),法国巴黎 Laboratoire d’Informatique de l’ENS
伯努瓦・凯亚尔(Benoît Caillaud),法国雷恩 IRISA
蒂莫西・伯克(Timothy Bourke),法国雷恩 INRIA
# Modelica 3.2 修订版 2
Modelica 3.2 修订版 2 于 2013 年发布。Modelica 3.2 修订版 2 规范由汉斯・奥尔松(Hans Olsson)和马丁・奥特(Martin Otter)编辑。
# Modelica 3.2 修订版 2 的主要变化
为使 Modelica 标准库(MSL)版本 3.2.1 完全符合 Modelica 语言 3.2 修订版 2,对 Modelica 语言进行了细微调整(除以下列出的情况外,均向后兼容)。这需要以下改进,与 3.2 修订版 1 相比:
- 可通过实例名称调用函数。(在 MSL 3.2 中用于计算 Modelica.Mechanics.MultiBody.World 中的重力加速度;此功能也在 2012 年 5 月引入的 Modelica 语言版本 3.3 中推出)。
- 连接(Connections)中新增内置运算符 rooted (A,R),用于查询记录实例 A.R 的类型是否为过约束类型,或 A.R 是否更接近生成树的根,而非 B.R,(在 MSL 3.2 中用于 MultiBody.Joints.Revolute 等多个组件,以避免代数环)。
- MSL 3.2 中使用了几个新注解,用于特定供应商的变体。
- 明确说明 Evaluate 也可在类型中出现,因 MSL 中用到此功能,对性能评估很重要。工单 #923。
- 图形文本项中的宏。工单 #629。(此功能也在 Modelica 语言版本 3.3 中引入)。
- 初始方程为离散的 —— 在 MSL 中用于预变量初始化。工单 #853。
- 更新 noDerivative 以与 MSL 一致。这是不兼容的情况,但其他变体未被使用。工单 #1035。
- 阐明处理缺少 missingInnerMessage 组件的方式。工单 #891。
- 阐明 protected 的定义。工单 #975、#1123。
此外,还修正了规范文本的若干问题:
- 阐明函数实参中函数作为实参时的非清晰序列。工单 #182。
- 阐明重新声明时允许的绑定方程。工单 #1111。
- 未指定的枚举现在有已定义的语义。工单 #834。
- 传递性不可替换。工单 #854。
- 修改文本,避免引用继承的类。工单 #1042。
- 阐明约束子句修饰符的优先级。工单 #1128。
- 阐明约束类型的数组。工单 #1148。
- 避免因连接而依赖的连接器数组。工单 #828。
- 阐明 if 方程的方程计数。工单 #888。
- 完整定义 reinit。工单 #578。这禁止在算法中使用 reinit,但之前其定义不清晰。
- 阐明非离散(即连续时间)实变量 vc 的 well-defined 初始化。工单 #1195。
- 现在明确定义了处理连接器数组的一种方式。工单 #757。
- 示例现在使用正确的正弦源。工单 #750。
- 限制连接器中的参数。工单 #768。
- 阐明某些操作的类型限制。工单 #622。
- 阐明在算法章节中,若赋值运算符左侧至少使用一个数组元素,那么整个数组会在此章节初始化。工单 #1190。
- 修正记录构造函数,使其不再引用不应出现的关键字。工单 #907。
- 类的外部存储。工单 #1019、#892、#887。
- 为运算符记录的继承限制添加示例和说明。工单 #1065。
- 移除《模型到执行环境的映射》章节;Modelica 3.3 已决定做此变更,且尚无工具实现该功能。工单 #1015。
- 修正许可证示例,工单 #1127。
- 针对短类定义,在内部重构语法。工单 #1140。
# Modelica 语言 3.2 修订版 2 的贡献者
以下 Modelica 协会成员为 Modelica 3.2 修订版 2 规范做出贡献(按字母顺序排列):
彼得・阿伦松(Peter Aronsson),Math Core AB,瑞典林雪平
彼得・弗里特松(Peter Fritzson),PELAB,林雪平大学,瑞典林雪平
希丁・埃尔姆奎斯特(Hilding Elmqvist),达索系统公司,瑞典隆德
克里斯托夫・霍格(Christoph Hörer),柏林工业大学,德国柏林
格尔德・库尔茨巴赫(Gerd Kurzbach),ITI GmbH,德国德累斯顿
耶斯佩尔・马特松(Jesper Mattsson),Modelon AB,瑞典隆德
汉斯・奥尔松(Hans Olsson),达索系统公司,瑞典隆德
马丁・奥特(Martin Otter),德国航空航天中心(DLR),德国奥伯法芬霍芬
阿德里安・波普(Adrian Pop),林雪平大学,瑞典林雪平
叶莲娜・希姆罗娃(Elena Shimrova),Maplesoft 公司,加拿大滑铁卢
马丁・肖伦德(Martin Sjölund),PELAB,林雪平大学,瑞典林雪平
斯特凡・沃尔科特(Stefan Vorkoetter),Maplesoft 公司,加拿大滑铁卢
# Modelica 3.2 修订版 1
Modelica 3.2 修订版 1 于 2012 年 2 月 29 日发布。Modelica 3.2 修订版 1 规范由汉斯・奥尔松(Hans Olsson)和彼得・弗里特松(Peter Fritzson)编辑。
# Modelica 3.2 修订版 1 的主要变化
Modelica 语言相较于之前的 3.2 版本未做改动。仅修正规范文本中的问题。
# Modelica 语言 3.2 修订版 1 的贡献者
以下 Modelica 协会成员为 Modelica 3.2 修订版 1 规范做出贡献(按字母顺序排列):
彼得・阿伦松(Peter Aronsson),MathCore AB,瑞典林雪平
彼得・弗里特松(Peter Fritzson),PELAB,林雪平大学,瑞典林雪平
克里斯托夫・霍格(Christoph Hörer),柏林工业大学,德国柏林
格尔德・库尔茨巴赫(Gerd Kurzbach),ITI GmbH,德国德累斯顿
耶斯佩尔・马特松(Jesper Mattsson),Modelon AB,瑞典隆德
汉斯・奥尔松(Hans Olsson),达索系统公司,瑞典隆德
阿德里安・波普(Adrian Pop),林雪平大学,瑞典林雪平
马丁・肖伦德(Martin Sjölund),PELAB,林雪平大学,瑞典林雪平
斯特凡・沃尔科特(Stefan Vorkoetter),Maplesoft 公司,加拿大滑铁卢
# Modelica 3.2
Modelica 3.2 于 2010 年 3 月 24 日发布。Modelica 3.2 规范由汉斯・奥尔松、马丁・奥特等人编辑。
# Modelica 3.2 的主要变化
Modelica 3.2 引入了以下向后兼容的扩展:
- 同伦(Homotopy)函数,用于更轻松地解决初始化问题。
- 形式输入为函数的函数。
- 重载运算符已完善:
- 引入新的特化类 operator record,带有专门的类型规则(类型由类名标识;Modelica 3.1 中所有其他元素类采用结构类型系统,类型仅由公共元素定义)。重载运算符只能在 operator record 内部定义。此变更修复了 Modelica 3.1 中的一个缺陷,因之前查找重载运算符是通过记录类名进行的。
- 若通过短类定义,允许 operator record 继承。这消除了 Modelica 3.1 中对运算符重载的限制,例如从带单位的记录元素(如从 Complex 推导 ComplexVoltage)定义派生类。
- 新增重载元素 '0',以便 operator record 类可在连接器中用作流变量。
- 在描述字符串、注解中的字符串以及注释中支持 Unicode,以改进 Modelica 的适用性,例如方便阿拉伯、亚洲或印度用户使用。Modelica 文件采用 UTF-8 编码,可以 UTF-8 编码的字节顺序标记(0xef 0xbb 0xbf)开头,表明文件可能包含此类字符;这在语法中被视为空白。
- 常量可再次修改,除非声明为 final ,因为包中已有此类用法。
- 引入全局名称查找(如 .Modelica.Constants.pi)。
- 新增 C 函数 ModelicaFormatMessage 和 ModelicaVFormatError,简化外部函数中的消息格式化。
- 新增注解,支持:
- 包含 C 头文件和对象库文件到包中,并通过 URI 引用(新注解 IncludeDirectory、LibraryDirectory,标准化平台名称如 win32;解决工单 #297)。
- 参数对话框中的图像(新注解 groupImage)。
- 参数对话框中变量的 start 和 fixed 属性(新注解 showStartAttribute)。
- 包的访问控制,保护知识产权(新注解 Protection 和 License)。
以下 Modelica 3.2 中的变更不向后兼容:
- 新的内置运算符名称 homotopy 。在极少数情况下,可能与现有模型中的名称冲突。
- 带重载操作的记录(record)必须声明为 operator record ,而非 record 。对于已支持运算符重载的工具,这在一段时间内不影响实际使用。
# Modelica 语言 3.2 版本的贡献者
函数作为形式输入的初始版本由 Peter Fritzson 提出。
使用 IncludeDirectory 和 LibraryDirectory 注解定义头文件和对象库的功能,主要由 Hans Olsson 开发。
用于访问控制的 Protection 注解,是对 Dymola 现有注解的改进版本。License 注解主要由 Dag Brück 开发,Magnus Gäfvert 参与改进。
运算符重载概念中的缺陷由 Sébastien Furic 发现,他还提出通过为带重载操作的记录采用名义类型系统进行基础修复。
全局名称查找由 Stefan Vorkoetter 提出。
对 Unicode 的支持由 Rui Gao 和 Hoyoun Kim 发起。
Martin Otter、Michael Sielemann 和 Francesco Casella 提出 homotopy 。Michael Sielemann 演示了基准问题,表明非线性求解器无法可靠解决初始化问题,因此需要 homotopy 运算符。Francesco Casella 用车辆动力学示例演示了 homotopy ,利用原型实现,解决了初始化问题,表明合理使用 homotopy 可让系统无需提供猜测值就能可靠初始化状态变量,有力证明 homotopy 能显著改进 Modelica 的初始化。
以下 Modelica 协会成员参与设计会议,为 Modelica 3.2 规范贡献:
Johan Åkesson,隆德大学、Modelon AB,瑞典隆德
彼得・阿伦松(Peter Aronsson),瑞典林雪平 MathCore AB 公司
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用科学大学
乔纳森・贝克(Jonathan Beck),法国巴黎达索系统公司
托尔斯滕・布洛赫维茨(Torsten Blochwitz),德国德累斯顿 ITI 有限公司
大卫・布罗曼(David Broman),瑞典林雪平大学 PELAB
达格・布吕克(Dag Brück),瑞典隆德达索系统公司
弗朗切斯科・卡塞拉(Francesco Casella),意大利米兰理工大学
迈克・登普西(Mike Dempsey),英国利明顿温泉 Claytex 服务有限公司
卡琳・迪特尔(Karin Dietl),德国汉堡 - 哈尔堡工业大学
菲利波・多尼亚(Filippo Dona),意大利米兰理工大学
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德达索系统公司
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学 PELAB
塞巴斯蒂安・富里(Sébastien Furic),法国罗阿讷 LMS 国际公司
曼努埃尔・格拉贝尔(Manuel Gräßer),德国布伦瑞克工业大学
彼得・哈曼(Peter Harman),英国 deltatheta uk 有限公司
安东・哈默(Anton Hammer),奥地利维也纳 AIT 公司
卡斯滕・海因里希(Carsten Heinrich),德国德累斯顿空气与制冷技术研究所
丹・亨里克松(Dan Henriksson),瑞典隆德达索系统公司
弗雷德里克・卡尔松(Fredrik Karlsson),瑞典林雪平大学 PELAB
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 AIT 公司
因勒・克里格(Inle Krüger),德国汉堡 - 哈尔堡工业大学
格尔德・库尔茨巴赫(Gerd Kurzbach),德国德累斯顿 ITI 有限公司
基利安・林克(Kilian Link),德国埃尔朗根西门子 AB 公司
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德达索系统公司
埃里克・诺伊贝尔(Eric Neuber),德国德累斯顿 ITI 有限公司
汉斯・奥尔松(Hans Olsson),瑞典隆德达索系统公司
马丁・奥特(Martin Otter),德国奥伯法芬霍芬德国航空航天中心
阿德里安・波普(Adrian Pop),瑞典林雪平大学
卡特琳・普赖克(Katrin Preik),瑞典隆德 Modelon AB 公司
迈克尔・西勒曼(Michael Sielemann),德国奥伯法芬霍芬德国航空航天中心
伯恩哈德・蒂勒(Bernhard Thiele),德国奥伯法芬霍芬德国航空航天中心
托本・瓦伦特拉普(Thorben Valentin),德国汉堡 XRG 模拟公司
埃里克・托马斯(Eric Thomas),法国巴黎达索航空
迈克尔・蒂勒(Michael Tiller),美国马萨诸塞州普利茅斯 Ennessey 公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德 Modelon AB 公司
斯特凡・沃尔科特(Stefan Vorkoetter),加拿大滑铁卢 Maplesoft 公司
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),瑞士巴登 ABB 瑞士公司企业研究部
迪特马尔・温克勒(Dietmar Winkler),挪威波什格伦 Telemark 大学学院
# 鸣谢
开发 Modelica 3.2 时,以下资助机构提供了部分资金支持:
德国联邦经济事务与气候行动部(BMWK)为德国航空航天中心(DLR)、弗劳恩霍夫协会和西门子提供部分资金(BMWK 资助编号:01IS07022F),用于 ITEA2 项目 EUROSYSLIB(https://itea4.org/project/eurosyslib.html (opens new window))。
德国联邦经济事务与气候行动部(BMWK)为 ITI 有限公司提供部分资金(BMWK 资助编号:01IS08002K),瑞典资助机构 VINNOVA 也为其提供部分资金(2008 - 02291),用于 ITEA2 项目 MODELISAR(https://itea4.org/project/modelisar.html (opens new window))。
瑞典资助机构 VINNOVA 为林雪平大学(PELAB)提供部分资金,用于 ITEA2 项目 OPENPROD(https://itea4.org/project/openprod.html (opens new window))。
瑞典研究委员会为林雪平大学(PELAB)提供部分资金,用于 “基于方程的系统建模与仿真语言的高级调试” 项目。
德国联邦经济事务与气候行动部(BMWK)为比勒费尔德应用技术大学(FH Bielefeld)提供部分资金(BMWK 资助编号:01IS09002C),用于 ITEA2 项目 OPENPROD(https://itea4.org/project/openprod.html (opens new window))。
# Modelica 3.1
Modelica 3.1 于 2009 年 5 月 27 日发布。Modelica 3.1 规范由弗朗切斯科・卡塞拉(Francesco Casella)、吕迪格・弗兰克(Rüdiger Franke)、汉斯・奥尔松(Hans Olsson)、马丁・奥特(Martin Otter)和迈克尔・西勒曼(Michael Sielemann)编辑。
# Modelica 3.1 的主要变化
Modelica 3.1 引入了以下向后兼容的扩展:
部分向后兼容的扩展已由 Dynasim(2008 - 0221)资助:
- 重载“+”、“*”等运算符,方便用户定义的数据结构(如复数、多项式)使用。通常,只有一种数据类型的标量运算可重载,其他传输函数、不同数据类型或新数据类型数组的操作,可由工具自动构建。 流连接器概念,确保流体系统高效、可靠仿真。
- 模型分区及映射到执行环境。这支持方便地定义“模型在环”“软件在环”“硬件在环”仿真中的部分,通过继承逻辑系统并设置配置选项,实现同一“逻辑”系统的仿真。
- 更好地支持总线(可扩展连接器)中的数组。此外,可扩展连接器中声明的变量,若未在模型中引用,则在仿真模型中不可用。
- 可指定存储在单独文件中类的顺序。
- 移除对平衡模型的限制,修饰符可用于连接器和记录实例,以平衡方程计数。这便于实现 Modelica.Mechanics.Rotational/Translational 库的支撑连接器。
- 使用 missingInnerMessage 提供信息的工具,也可自动使用对应的用户组件。
- 可用于 html 文档链接和 Bitmap 注解的 URL,存储在包的资源中(如 Modelica.Mechanics)。这允许在持久存储的包中存储资源,通过包名和资源名引用资源。
- 注解 connectorSizing,自动扩展连接器向量并连接到向量元素,绘制连接线时提升用户便利性,尤其对状态机和流体模型。
- 注解 inverse,用于定义函数的逆函数。这使工具能够通过用户提供的逆函数来求解非线性代数环。
- 注解 versionDate、versionBuild、dateModified、revisionId,用于改进版本管理。例如,这支持处理维护(补丁修复)版本,为库开发者提供指定特定构建版本的可能性。
以下 Modelica 规范中的缺陷已修复:
- 带下标(subscripts)的修饰符(modifier),此前虽被允许,但定义不清晰,许多工具未实现,且未在库中使用,因此移除。
- Modelica 关键字已更新。
- 澄清:枚举(Enumeration)和数组范围运算符(array range operator)是非结合性的(如 x:y:z 或 a:b:c:d 不被允许,需要括号)。
- 澄清:组合基类的限制。
- 澄清:算法的执行。
- 阐明发送给外部函数的数组的默认类型。
- iconTransformation 默认值为(diagram)transformation,与最初意图一致。
- Connection 集部分已重写:
- 清晰定义连接集,包含示例。
- 重写涉及 outer 组件的处理,确保具有相同连接结构的模型,从 connect 方程生成相同方程。此前,outer 组件与外部连接器的连接,其影响不明确:若将连接器转为内部连接器(可能是意图),会禁止默认连接,导致违反常规方程;否则无影响。
- MatrixGain 使用示例已修正。
- external 子句后的模糊注解已修正(按已有用法)。
- reinit 运算符可在一个算法中多次使用,语义已阐明。
- 更清晰说明:非循环参数(acyclic parameters)也适用于单个参数方程。
- 文本中涉及 prefix 属性的内容修改,若有前缀则明确表述。
以下 Modelica 3.1 中的变更不向后兼容:
- 类级注解(class - level annotation)只能放在结束的 end 定界符之前。这并非关键问题,因为工具可轻松修复错误模型(读取模型时忽略此新规则,存储模型时使用该规则)。
- 引入新的 Modelica 关键字 stream 和 operator、新的内置包 Subtask,以及新的内置运算符 inStream 和 actualStream。在极少数情况下,这可能与现有模型中的名称冲突。
- 可扩展连接器中声明的变量的修饰符(modifiers)不再被允许。这应无关键影响,因为可扩展连接器通常用于信号总线,信号通过总线的连接方程传递。
# Modelica 语言 3.1 版本的贡献者
运算符重载的概念由 Hans Olsson 开发,基于 Dag Brück、Peter Fritzson 和 Martin Otter 的工作成果。
流概念由吕迪格・弗兰克(Rüdiger Franke)开发,其基础是弗朗切斯科・卡塞拉(Francesco Casella)的工作,希丁・埃尔姆奎斯特(Hilding Elmqvist)、斯文・埃里克・马特松(Sven Erik Mattsson)、汉斯・奥尔松(Hans Olsson)、马丁・奥特(Martin Otter)和迈克尔・西勒曼(Michael Sielemann)也做出了特别贡献。
将模型映射到执行环境的概念由希丁・埃尔姆奎斯特(Hilding Elmqvist)、丹・亨里克松(Dan Henriksson)、马丁・奥特(Martin Otter)、伯恩哈德・蒂勒(Bernhard Thiele)和斯文・埃里克・马特松(Sven Erik Mattsson)开发。
以下 Modelica 协会成员参与设计会议,为 Modelica 3.1 规范贡献:
约安・阿列松(Johan Åkesson),瑞典隆德大学、Modelon AB
约安・安德松(Johan Andreasson),瑞典隆德 Modelon AB
彼得・阿伦松(Peter Aronsson),瑞典林雪平 MathCore AB
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用科学大学
托尔斯滕・布洛赫维茨(Torsten Blochwitz),德国德累斯顿 ITI GmbH
大卫・布罗曼(David Broman),瑞典林雪平大学
达格・布吕克(Dag Brück),瑞典隆德 Dynasim
弗朗切斯科・卡塞拉(Francesco Casella),意大利米兰理工大学
克里斯托夫・克拉克(Christoph Clark),德国德累斯顿弗劳恩霍夫集成电路研究所
卡琳・迪特尔(Karin Dietl),德国汉堡 - 哈尔堡工业大学
菲利波・多尼亚(Filippo Donida),意大利米兰理工大学
托马斯・杜梅内克(Thomas Doumenec),法国巴黎达索系统公司
约纳斯・埃布恩(Jonas Eborn),瑞典隆德 Modelon AB
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德 Dynasim
吕迪格・弗兰克(Rüdiger Franke),德国曼海姆 ABB 发电公司
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学
马格努斯・盖弗特(Magnus Gäfvert),瑞典隆德 Modelon AB
曼努埃尔・格里贝尔(Manuel Gräßer),德国布伦瑞克工业大学
安东・哈默(Anton Hammer),奥地利圣安德烈 - 韦德恩技术咨询与电气工程公司
卡斯滕・海因里希(Carsten Heinrich),德国德累斯顿空气与制冷技术研究所
丹・亨里克松(Dan Henriksson),瑞典隆德 Dynasim
罗兰・科塞尔(Roland Kossel),德国不伦瑞克 TLK Thermo GmbH
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 arsenal research
格尔德・库尔茨巴赫(Gerd Kurzbach),德国德累斯顿 ITI GmbH
基利安・林克(Kilian Link),德国埃尔朗根西门子 AB
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德 Dynasim
拉明・尼布图拉希(Ramine Nibourahimi),法国巴黎 INRIA
汉斯・奥尔松(Hans Olsson),瑞典隆德 Dynasim
马丁・奥特(Martin Otter),德国奥伯普法芬霍芬德国航空航天中心
阿德里安・波普(Adrian Pop),瑞典林雪平大学
卡特琳・普赖克(Katrin Pröhl),德国汉堡 - 哈尔堡工业大学
克里斯托夫・里希特(Christoph Richter),德国布伦瑞克工业大学
迈克尔・西勒曼(Michael Sielemann),德国奥伯普法芬霍芬德国航空航天中心
伯恩哈德・蒂勒(Bernhard Thiele),德国航空航天中心,德国奥伯法芬霍芬
迈克尔・蒂勒(Michael Tiller),福特汽车公司 / Ennessey,美国密歇根州迪尔伯恩 / 普利茅斯
胡贝图斯・图梅舍特(Hubertus Tummescheit),Modelon AB,瑞典隆德
斯特凡・沃尔科特(Stefan Vorkoetter),Maplesoft,加拿大滑铁卢
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),ABB 瑞士公司企业研究部,瑞士巴登
迪特马尔・温克勒(Dietmar Winkler),柏林工业大学,德国
#
开发 Modelica 3.1 时,以下资助机构提供了部分资金支持:
德国联邦经济事务与气候行动部(BMWi)为 ABB、德国航空航天中心(DLR)、弗劳恩霍夫协会和西门子提供部分资金(BMWi 资助编号:01IS07022F),用于 ITEA2 项目 EUROSYSLIB(https://itea3.org/project/eurosyslib.html (opens new window))。
德国联邦经济事务与气候行动部(BMWi)为 ITI 有限公司提供部分资金(BMWi 资助编号:01IS08002K),瑞典资助机构 VINNOVA 也为其提供部分资金(2008 - 02291),用于 ITEA2 项目 MODELISAR(https://itea3.org/project/modelisar.html (opens new window))。
瑞典资助机构 VINNOVA 为林雪平大学(PELAB)提供部分资金,用于项目 Safe and Secure Modeling(https://itea3.org/project/safeandsecuremodeling.html (opens new window))。
瑞典资助机构 VR 为林雪平大学(PELAB)提供部分资金,用于项目 High-Level Debugging of Equation-Based System Modeling & Simulation Languages。
# Modelica 3.0
Modelica 3.0 于 2007 年 9 月 5 日发布。Modelica 3.0 规范由彼得・弗里特松(Peter Fritzson)、汉斯・奥尔松(Hans Olsson)、马丁・奥特(Martin Otter)编辑。
# Modelica 语言 3.0 版本的贡献者
Modelica 3.0 规范由彼得・弗里特松(Peter Fritzson)依据之前的规范重新构建并编写,还添加了新的解释性文本。之后,Modelica 协会成员对该草案规范进行了完善。
“平衡模型(balanced models)” 概念(语言的主要变更点)由汉斯・奥尔松(Hans Olsson)开发,马丁・奥特(Martin Otter)、希丁・埃尔姆奎斯特(Hilding Elmqvist)和斯文・埃里克・马特松(Sven Erik Mattsson)参与贡献。最初的灵感来自迈克尔・蒂勒(Michael Tiller)。
这一概念与让类型接口和子类型更清晰、严格相关联。该语言的概念性缺陷由塞巴斯蒂安・富里(Sébastien Furic)指出。
图形化注解已重新设计并改进,由丹尼尔・赫德伯格(Daniel Hedberg)、埃里克・阿雷斯约格(Erik Årsjö)、达格・布吕克(Dag Brück)和希丁・埃尔姆奎斯特(Hilding Elmqvist)完成,彼得・阿伦松(Peter Aronsson)和格尔德・库尔茨巴赫(Gerd Kurzbach)参与贡献。
以下 Modelica 协会成员参与设计会议,为 Modelica 3.0 规范贡献:
彼得・阿伦松(Peter Aronsson),MathCore AB,瑞典林雪平
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用科学大学
约翰・巴滕(John Batten),福特汽车公司,美国密歇根州迪尔伯恩
大卫・布罗曼(David Broman),林雪平大学,瑞典林雪平
彼得・布努斯(Peter Bunnus),林雪平大学,瑞典林雪平
达格・布吕克(Dag Brück),Dynasim,瑞典隆德
弗朗切斯科・卡塞拉(Francesco Casella),米兰理工大学,意大利米兰
克里斯托夫・克劳斯(Christoph Clauß),德国德累斯顿弗劳恩霍夫集成电路研究所
托马斯・杜梅内克(Thomas Doumenec),法国巴黎达索系统公司
约纳斯・埃布恩(Jonas Eborn),瑞典隆德 Modelon AB 公司
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德 Dynasim 公司
吕迪格・弗兰克(Rüdiger Franke),德国 Ladenburg ABB 企业研究部
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学
塞巴斯蒂安・富里(Sébastien Furic),法国罗阿讷 Imagine 公司
安东・哈默(Anton Hammer),奥地利圣安德烈 - 韦德恩技术咨询与电气工程公司
丹尼尔・赫德伯格(Daniel Hedberg),瑞典林雪平 MathCore AB 公司
卡斯滕・海因里希(Carsten Heinrich),德国德累斯顿 Institut für Luft- und Kältetechnik gGmbH
奥夫・约翰松(Olof Johansson),瑞典林雪平大学
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 arsenal research 公司
罗兰・科塞尔(Roland Kossel),德国不伦瑞克 TLK Thermo GmbH
格尔德・库尔茨巴赫(Gerd Kurzbach),德国德累斯顿 ITI GmbH
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 arsenal research 公司
基利安・林克(Kilian Link),德国埃尔朗根西门子 AB 公司
何塞・迪亚兹・洛佩兹(José Díaz Lopez),瑞典隆德 Dynasim AB 公司
卡琳・伦德(Karin Lund),德国乌尔姆 Fachhochschule
哈兰・伦德瓦尔(Håkan Lundvall),瑞典林雪平大学
路德维希・马尔万(Ludwig Marvan),奥地利维也纳 VA TECH ELIN EBG Elektronik GmbH & Co 公司
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德 Dynasim 公司
雅各布・毛斯(Jakob Mauss),德国柏林 Qtronic GmbH 公司
查克・纽曼(Chuck Newman),美国密歇根州迪尔伯恩福特汽车公司
凯伊・尼斯托姆(Kaj Nyström),瑞典林雪平大学
汉斯・奥尔松(Hans Olsson),瑞典隆德 Dynasim 公司
马丁・奥特(Martin Otter),德国奥伯普法芬霍芬德国航空航天中心
马库斯・普莱纳(Markus Plainer),奥地利维也纳 Arsenal Research 公司
阿德里安・波普(Adrian Pop),瑞典林雪平大学
卡特琳・普赖克(Katrin Pröhl),德国汉堡 - 哈尔堡工业大学
克里斯托夫・里希特(Christoph Richter),德国布伦瑞克工业大学
安德斯・桑德霍姆(Anders Sandholm),瑞典林雪平大学
克里斯蒂安・施魏格(Christian Schweiger),德国奥伯普法芬霍芬德国航空航天中心
迈克尔・蒂勒(Michael Tiller),美国密歇根州迪尔伯恩福特汽车公司 / Ennessey 公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德 Modelon AB 公司
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),瑞士巴登 ABB 瑞士有限公司企业研究部
# Modelica 3.0 的主要变化
Modelica 3.0 是 Modelica 语言的“清理”版本。例如,规范重新编写,以更好地定义语言,修复语言中的错误,更精确地描述模糊或未定义的内容,并引入更多限制,使 Modelica 模型能更早、更精准地检测建模错误。自动将 Modelica 模型转换为 Modelica 3.0 成为可能,而且工具理论上可处理大得多的模型。
这是 Modelica 首次(略有)不向后兼容旧版本(之前所有版本除因新引入关键字产生的微小问题外,都向后兼容)。因此,旧 Modelica 版本的“有效”模型不再有效。预计 Modelica 工具会提供(半)自动机制,用于转换模型和库。
以下 Modelica 3.0 的主要变化不向后兼容:
- 连接器限制:对于每个非部分(non-partial)连接器类,流变量数量应等于既非参数、常量、输入、输出,也非流的变量数量。例如,以下连接器在 Modelica 3 中非法:
connector notValid // 非法连接器
Real r1;
Real r2;
flow Real r3;
end notValid;
- 在非部分模型(model)或模块(block)中,模型或模块组件的所有非连接器输入,必须有绑定声明。
- 用 inner 或 outer 前缀声明的组件,所属类不能是包含输入的顶级公共连接器类。
- 组件修饰符(modifiers)应仅包含可替换元素的重新声明,以及对参数、常量、输入和有默认绑定方程变量的绑定方程。
- 所有非部分模型和模块类必须局部平衡。即局部模型或模块的未知量等于局部方程数量。结合其他限制,这带来强属性:仿真模型整体全局平衡(即未知量数量等于方程数量)。
- 前缀 input、output、inner、outer、flow 不允许在记录(record)中出现。
- 内置运算符 abs 和 sign 不再生成事件,而是隐式用 noEvent 运算符定义。
- 可替换类或组件的 constraining-clause,从关键字 extends 改为新关键字 constrainedby(因 extends 关键字可能让人误解为重新声明的模型必须继承自约束类,但实际并非如此)。
- 移除 isPresent 构造,因工具未实现。
以下 Modelica 3.0 图形注解的变化也不向后兼容:
- 更改实例放置(record Transformation)定义,使图标的实际坐标和旋转由定义图标的类确定(这是 Modelica 2.0 图形注解的缺陷)。
- 改进图形基元旋转的定义。
- 将字体大小单位从 DrawingUnit 改为 pt(因 pt 是字体常用单位)。
Modelica 3.0 中以下变化向后兼容:
- 新增逐元素运算符:.+, .-, .*, ./, .^ 。
- 为内置函数 assert (...) 添加第三个参数 AssertionLevel,可选择定义警告。
- 新增注解《供应商特定注解》:
本节精确界定供应商特定注解的标记方式。任何工具应保存含所有标准注解和供应商特定注解的文件。优势在于非供应商注解的类型错误,现在可检测并标记为错误,而之前版本只能忽略。 - 《文档注解》新增注解:
preferredView = info diagram or text(preferredView = 信息 图表或文本)。 - 《函数内联与事件生成》、《函数导数与逆》、《符号处理》新增注解:
Evaluate、HideResult、Inline、LateInline、smoothOrder。 - 新增注解 animate、Tolerance:
startTime、StopTime,用于定义实验设置的重要参数。 - 图形注解新增内容:
图形对象和连接线的新属性 Smoother = enumeration (None, Bezier)(Bezier 定义贝塞尔样条)。
记录 Placement 的新属性 visible,可设置图形注解不可见(如继承后)。
记录 Ellipse 的新属性 startAngle、endAngle,定义椭圆部分。
新的层特定属性 IconMap 和 DiagramMap,用于 extends(扩展)。
文本记录的新属性 horizontalAlignment,定义文本水平对齐方式。 - 新增注解,用于模式动画和交互式用户输入:
DynamicSelect,根据变量实际值选择动画文字。
OnMouseDownSetBoolean、OnMouseUpSetBoolean、OnMouseOverSetReal、OnMouseMoveSetReal、OnMouseDownSetReal、OnMouseDownSetString,用于仿真期间交互设置类的变量。
以下 Modelica 规范中的错误已修复:
- 函数调用的语法规则(如 Modelica 2.2 中,Modelica.Math.Matrices.eig (...) 形式的函数调用无效,因函数名不能含 '.' 。但所有 Modelica 工具都支持期望的“完整 Modelica 名称”用于函数调用)。
# Modelica 2.2
Modelica 2.2 于 2005 年 2 月 2 日发布。Modelica 2.2 规范由汉斯・奥尔松(Hans Olsson)、迈克尔・蒂勒(Michael Tiller)和马丁・奥特(Martin Otter)编辑。
# Modelica 语言 2.2 版本的贡献者
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用科学大学
约翰・巴滕(John Batten),美国密歇根州迪尔伯恩福特汽车公司
达格・布吕克(Dag Brück),瑞典隆德 Dynasim 公司
弗朗切斯科・卡塞拉(Francesco Casella),意大利米兰理工大学
克里斯托夫・克劳斯(Christoph Clauß),德国德累斯顿弗劳恩霍夫集成电路研究所
约纳斯・埃布恩(Jonas Eborn),瑞典隆德 Modelon AB 公司
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德 Dynasim 公司
吕迪格・弗兰克(Rüdiger Franke),德国 Ladenburg ABB 企业研究部
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学
安东・哈默(Anton Hammer),奥地利圣安德烈 - 韦德恩技术咨询与电气工程公司
克里斯蒂安・克拉尔(Christian Kral),奥地利维也纳 arsenal research 公司
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德 Dynasim 公司
查克・纽曼(Chuck Newman),美国密歇根州迪尔伯恩福特汽车公司
汉斯・奥尔松(Hans Olsson),瑞典隆德 Dynasim 公司
马丁・奥特(Martin Otter),德国奥伯法芬霍芬德国航空航天中心
马库斯・普莱纳(Markus Plainer),奥地利维也纳 Arsenal Research 公司
阿德里安・波普(Adrian Pop),瑞典林雪平大学
卡特琳・普赖克(Katrin Pröhl),德国汉堡 - 哈尔堡工业大学
安德烈・施耐德(André Schneider),德国德累斯顿弗劳恩霍芬集成电路研究所
克里斯蒂安・施魏格(Christian Schweiger),德国奥伯法芬霍芬德国航空航天中心
迈克尔・蒂勒(Michael Tiller),美国密歇根州迪尔伯恩福特汽车公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德 Modelon AB 公司
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),瑞士巴登 ABB 瑞士有限公司企业研究部
# Modelica 2.2 的主要变化
Modelica 2.2 的主要变化如下:
- 条件组件声明:根据参数表达式忽略组件声明。引用不再存在组件的连接方程会被忽略。
- 重新声明(Redeclarations):原声明的部分内容自动被新声明继承,旨在简化声明编写,避免重复公共声明部分,尤其适用于必须相同的属性。
- 递归 inner/outer 定义:用于定义分层结构的 inner/outer 声明,可相互通信。声明为 inner 的元素,若后续有同名声明,一个遵循 inner 规则,另一个遵循 outer 规则,概念上为 outer 引入两条规则。
- 函数中声明的非输入数组组件,维度大小用冒号(:)指定且无类型赋值,函数内数组大小可简单便捷地改变。
- 引入新的连接器类型“可扩展连接器(expandable connector)”,对连接连接器的名称匹配要求更宽松,适用于此前需可替换连接器的场景,主要用于构建复杂系统的信号总线。
- 导数运算符 der (expr) 的参数可为表达式,不止变量名,如 der (m*h) 会被解释为 der (m)h + mder(h) 。
- 函数可定义为另一函数的偏导数,例如:“function Gibbs_T = der (Gibbs,T)” ,计算函数 Gibbs 对输入参数 T 的偏导数。
- 外部函数新增“builtin”属性,除“C”或“FORTRAN 77”外,“builtin” 规范仅用于 Modelica 语言内置函数,其调用机制由实现定义。
这些语言变化向后兼容。
# Modelica 2.1
Modelica 2.1 于 2004 年 1 月 30 日发布,规范由汉斯・奥尔松(Hans Olsson)和马丁・奥特(Martin Otter)编辑。
# Modelica 语言 2.1 版本的贡献者
米凯尔・阿德尔斯(Mikael Adlers),MathCore 公司,瑞典林雪平
彼得・阿伦松(Peter Aronsson),林雪平大学,瑞典
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用科学大学
彼得・布努斯(Peter Bunnus),林雪平大学,瑞典
约纳斯・埃布恩(Jonas Eborn),联合技术研究中心,美国哈特福德
希丁・埃尔姆奎斯特(Hilding Elmqvist),Dynasim 公司,瑞典隆德
吕迪格・弗兰克(Rüdiger Franke),ABB 企业研究部,德国拉登堡
彼得・弗里特松(Peter Fritzson),林雪平大学,瑞典
安东・哈默(Anton Hammer),技术咨询与电气工程公司,奥地利圣安德烈 - 韦德恩
奥洛夫・约翰松(Olof Johansson),林雪平大学,瑞典
卡琳・伦德(Karin Lunde),R.O.S.E. Informatik GmbH,德国海德堡
斯文・埃里克・马特松(Sven Erik Mattsson),Dynasim 公司,瑞典隆德
汉斯・奥尔松(Hans Olsson),Dynasim 公司,瑞典隆德
马丁・奥特(Martin Otter),德国航空航天中心,德国奥伯法芬霍芬
列翁・苏丹尼(Levon Sultanii),林雪平大学,瑞典
克里斯蒂安・施魏格(Christian Schweiger),德国航空航天中心,德国奥伯法芬霍芬
迈克尔・蒂勒(Michael Tiller),福特汽车公司,美国密歇根州迪尔伯恩
胡贝图斯・图梅舍特(Hubertus Tummescheit),联合技术研究中心,美国哈特福德
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),ABB 瑞士有限公司企业研究部,瑞士巴登
# Modelica 2.1 的主要变化
Modelica 2.1 的主要变化如下:
- 枚举类型的数组及数组索引(例如,当前开发的 Electrical.Digital 库中需要该特性)。
- 分层连接器的连接(例如,为方便实现总线,需要该特性)。
- Modelica 函数的可选输出参数。可通过新内置函数 isPresent 查询实际输入和 / 或输出参数是否存在。之前的内置函数和 attribute enable 已被移除。
- 通过自动继承基础约束类型,让默认约束类型更实用。
- 增强重新声明功能,例如,在开发中的 Modelica.Media 库中按需使用(如 redeclare model name or model extends name (modifications))。
- 处理超定连接器(例如,多体系统和电力系统所需),包括新的内置包 Connections,其中有运算符 Connections.branch、Connections.root、Connections.potentialRoot、Connections.isRoot。
- while 语句中的 break 语句。
- Modelica 函数中的 return 语句。
- 内置函数 String,用于提供 Boolean、Integer、Real 和枚举类型的字符串表示。
- 内置函数 EnumerationInteger,用于提供枚举类型的整数表示。
- 移除内置函数 enable。
- 内置函数 semiLinear,用于定义具有两个斜率的特性,以及一组符号变换规则,尤其在函数变为不定时(该函数用于开发中的 Modelica Fluid 库,以数学上简洁的方式定义反向流)。
- 更通用的标识符,单引号内可包含任意字符,如 '+' 或 '123.456:7' 是有效的标识符。'x' 和 x 是不同的标识符。这对于直接映射产品标识符到模型名称很有用,例如为数字电信号的常用符号(如 '+'、'-'、'0'、'1' )建立枚举。
新注解,用于:
- 库和模型的版本管理(版本、使用、转换)。
- 修订记录(revisions)。
- 在 HTML 文档文本中,将 Modelica 名称用作链接。
- 在 GUI 中方便地进行 inner 声明(defaultComponentName、defaultComponentPrefixes)。
- 参数菜单结构化(Dialog.enable、tab、group)。
- 库特定错误消息(missingInnerMessage、unassignedMessage)。
修复语法和语义规范中的一些小错误。
语言变化基本向后兼容,但新增关键字 break 和 return、新内置包 Connections,以及移除内置函数和属性 enable 除外。
# Modelica 2.0
Modelica 2.0 于 2002 年 1 月 30 日发布,草案于 2001 年 12 月 18 日发布。Modelica 2.0 规范由 Hans Olsson 编辑。Modelica 是 Modelica 协会自 2001 年 11 月起拥有的注册商标。
# Modelica 语言 2.0 版本的贡献者
Peter Aronsson,瑞典林雪平大学
Bernhard Bachmann,德国比勒费尔德应用科学大学
Peter Beater,德国帕德博恩大学
Dag Brück,瑞典隆德 Dynasim 公司
Peter Bunnus,瑞典林雪平大学
Hilding Elmqvist,瑞典隆德 Dynasim 公司
Vadim Engelson,瑞典林雪平大学
Peter Fritzson,瑞典林雪平大学
Rüdiger Franke,德国拉登堡 ABB 企业研究部
Pavel Grozman,瑞典斯德哥尔摩 Equa 公司
Johan Gunnarsson,瑞典林雪平 MathCore 公司
Mats Jirstrand,瑞典林雪平 MathCore 公司
Sven Erik Mattsson,瑞典隆德 Dynasim 公司
Hans Olsson,瑞典隆德 Dynasim 公司
Martin Otter,德国奥伯法芬霍芬德国航空航天中心
Levon Saldamli,瑞典林雪平大学
迈克尔・蒂勒(Michael Tiller),福特汽车公司,美国密歇根州迪尔伯恩
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德理工学院
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),ABB 瑞士有限公司企业研究部,瑞士巴登
# Modelica 2.0 的主要变化
Modelica 2.0 引入的增强功能,详细描述见以下论文:
- M. Otter、H. Elmqvist《Modelica 2.0 的新特性》,2002 年 3 月 18 - 19 日,第二届国际 Modelica 会议,德国奥伯法芬霍芬 DLR 会议录,第 7.1 - 7.12 页。可从 https://www.modelica.org/events/Conference2002/papers/p01_otter.pdf (opens new window)下载。
- Mattsson S.E.、Elmqvist H.、Otter M.、Olsson H.《Modelica 混合微分 - 代数方程的初始化》,2002 年 3 月 18 - 19 日,第二届国际 Modelica 会议,德国奥伯法芬霍芬 DLR 会议录,第 9 - 15 页。可从 https://www.modelica.org/events/Conference2002/papers/p02_Mattsson.pdf (opens new window) 下载。
Modelica 2.0 的主要变化包括:
- 完整的初始化规范,以便在模型执行操作(如仿真或线性化)前,计算所有变量的一致初始值。
- 明确 Modelica 对象图的图形外观,确保模型拓扑信息的可移植性,改进此前非正式图形描述,如区分图标和图位置。
- 枚举类型,以易懂、安全、高效的方式定义选项和属性。
- 支持(可选)在状态选择中显式设置优先级,让建模者融入应用特定知识,指导求解过程,如用于实时仿真。
- 数组构造器中的运算符、归约运算符,支持更强大的函数表达式,尤其在声明中,避免冗余操作,减少低效局部定义。
- 支持适用于标量和向量连接器的通用模块构造,自动对模块进行向量化(简化输入 / 输出连接,因仅需提供标量版本),如 Modelica 连接器,使所有模块能适用,便于纳入新库组件。
- 记录构造器,用于构建如数据表库等。
- 混合位置和命名参数的函数,可选结果和默认参数,同一函数兼顾新手和专家用户。
- 更多外部函数,用于连接到 Modelica 模型,尤其支持返回字符串、操作内存(如接口用户定义表、属性数据库、矩阵处理、硬件接口)的外部 C 函数。
- 新增索引,明确此前未正式定义的基本构造(如 while 子句、if 子句)规范。
语言变化向后兼容,但引入新关键字 enumeration、移除运算符 analysisType 除外。即将推出的模块库变更,需用户模型相应调整。
# Modelica 1.4
Modelica 1.4 于 2000 年 12 月 15 日发布。Modelica 协会于 2000 年 2 月 5 日成立,负责 Modelica 语言设计。Modelica 1.4 规范由汉斯・奥尔松(Hans Olsson)和达格・布吕克(Dag Brück)编辑。
# Modelica 语言 1.4 版本的贡献者
伯恩哈德・巴赫曼(Bernhard Bachmann),德国比勒费尔德应用技术大学
彼得・布努斯(Peter Bunnus),瑞典林雪平 MathCore 公司
达格・布吕克(Dag Brück),瑞典隆德 Dynasim 公司
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德 Dynasim 公司
瓦迪姆・恩格尔斯滕(Vadim Engelson),瑞典林雪平大学
若热・费雷拉(Jorge Ferreira),葡萄牙阿威罗大学
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学
帕维尔・格罗兹曼(Pavel Grozman),瑞典斯德哥尔摩 Equa 公司
约翰・贡纳松(Johan Gunnarsson),瑞典林雪平 MathCore 公司
马茨・耶斯特兰德(Mats Jirstrand),瑞典林雪平 MathCore 公司
克莱门斯・克莱因 - 罗本哈(Clemens Klein-Robbenhaar),德国
蓬图斯・利德马克(Pontus Lidman),瑞典林雪平 MathCore 公司
斯文・埃里克・马特松(Sven Erik Mattsson),瑞典隆德 Dynasim 公司
汉斯・奥尔松(Hans Olsson),瑞典隆德 Dynasim 公司
马丁・奥特(Martin Otter),德国航空航天中心,德国奥伯法芬霍芬
汤米・佩尔松(Tommy Persson),瑞典林雪平大学
列翁・萨尔达米(Levon Saldamli),瑞典林雪平大学
安德烈・施耐德(André Schneider),德国德累斯顿弗劳恩霍夫集成电路研究所
迈克尔・蒂勒(Michael Tiller),美国密歇根州迪尔伯恩福特汽车公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德理工学院
汉斯 - 于尔格・维斯曼(Hans-Jürg Wiesmann),瑞士巴登 ABB 企业研究有限公司
# Modelica 标准库的贡献者
彼得・贝亚特(Peter Beater),德国帕德博恩大学
克里斯托夫・克劳斯(Christoph Clauß),德国德累斯顿弗劳恩霍夫集成电路研究所
马丁・奥特(Martin Otter),德国航空航天中心,德国奥伯法芬霍芬
安德烈・施耐德(André Schneider),德国德累斯顿弗劳恩霍夫集成电路研究所
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德理工学院
# Modelica 1.4 的主要变化
- 移除“声明在前再使用”规则。这简化了图形化用户环境,因为组件以图形方式组合在一起时,声明无需遵循特定顺序。
- 优化包概念,引入封装类和导入机制。封装类可视为 “自包含单元”;复制或移动封装类时,其大多数 import 子句中的 in-this-class 必须移除。
- 重构 when 子句。移除 nondiscrete 关键字,when 子句中的方程必须有唯一的变量名作为左侧变量,且 when 子句的确切映射与方程定义相关。因此,when 子句现在能精确映射,无需排序算法,还可处理不同条件的 when 子句间的代-数环,以及模型的连续时间部分。discrete 关键字现在可选,简化库开发,因为只需一种连接器类型,无需多种含或不含离散前缀变量的类型。此外,算法部分的 when 子句可含 elsewhen 子句,简化 when 子句间优先级定义。
- 对于可替换声明,允许 constraining 子句和注解列出合适的重新声明。这让图形化用户环境能自动构建含合理选项的菜单。
- 函数可指定导数。例如,可应用 Pantelides 算法降低 DAE 索引,也适用于外部函数。
- 新增内置运算符 rem(取余),以及内置运算符 div、mod、ceil、floor、integer,此前仅允许在 when 子句中使用,现在可在任意位置使用,因为这些运算符结果值不连续变化时,会自动生成状态事件。
- 数量属性(quantity attribute)也适用于基本类型 Boolean、Integer、String(此前仅适用于 Real),以便对物理量进行抽象变量建模(如,Boolean i (quantity="Current") ,电流流动时为 true,不流动时为 false)。
- final 关键字也允许在声明中使用,防止修改。示例:
model A
Real x[1];
final Integer n = size(x, 1);
end A;
- 若干小增强,如修改中使用点表示法(如,A x (B.C=1, B.D=2) 等同于 A x (B (C=1, D=2)))。
- 规范内部重构。
Modelica 1.4 与 Modelica 1.3 向后兼容,但以下情况除外:(1) 移除“声明在前再使用”规则,一些特殊情况会出现不同结果;(2) 方程段中的 when 子句,此前通用形式 expr1 = expr2(现在仅允许 v = expr2,因特殊情况下函数使用 when 子句);(3) 一些特殊情况,when 子句初始时间不再计算,因 when 条件初始化定义更合理(Modelica 1.4 前,when 子句中每个条件“previous”值为 false);(4) 包含已移除的 nondiscrete 关键字的模型。
# Modelica 1.3 及更早版本
Modelica 1.3 于 1999 年 12 月 15 日发布。
# Modelica 1.3 及更早版本的贡献者
以下是 Modelica 1.3 发布时,Modelica 协会成员及其所属机构:
希丁・埃尔姆奎斯特(Hilding Elmqvist),瑞典隆德 Dynasim AB
伯恩哈德・巴赫曼(Bernhard Bachmann),德国海德堡 ABB 企业研究中心
弗朗索瓦・布当(Francois Boudand),法国巴黎 Gaz de France
扬・布罗伊尼肯(Jan Broenink),荷兰恩斯赫德特温特大学
达格・布吕克(Dag Brück),瑞典隆德 Dynasim AB
蒂洛・恩斯特(Thilo Ernst),德国柏林 GMD FIRST
吕迪格・弗兰克(Ruediger Franke),瑞士巴登 ABB Network Partner Ltd.
彼得・弗里特松(Peter Fritzson),瑞典林雪平大学
亚历山大・扬德尔(Alexandre Jandel),法国巴黎 Gaz de France
帕维尔・格罗兹曼(Pavel Grozman),瑞典斯德哥尔摩 Bris Data AB
凯伊・尤斯林(Kaj Justlin),芬兰埃斯波 VTT
戴维・卡格托尔(David Kagelot),瑞典林雪平大学
马蒂亚斯・克勒(Mattias Klee),德国柏林工业大学
娜塔莉・隆贝雷(Nathalie Lomberge),法国巴黎法国燃气公司
斯文 - 埃里克・马特松(Sven-Erik Mattsson),瑞典隆德 Dynasim AB
彼得・J・莫斯特曼(Peter J. Mosterman),德国奥伯法芬霍芬德国航空航天中心(DLR)
亨里克・尼尔松(Henrik Nilsson),瑞典林雪平大学
汉斯・奥尔松(Hans Olsson),瑞典隆德 Dynasim AB
马丁・奥特(Martin Otter),德国奥伯法芬霍芬德国航空航天中心(DLR)
佩尔・萨林(Per Sahlén),瑞典斯德哥尔摩 Bris Data AB
安德烈・施耐德(André Schneider),德国德累斯顿弗劳恩霍夫集成电路研究所
迈克尔・蒂勒(Michael Tiller),美国密歇根州迪尔伯恩福特汽车公司
胡贝图斯・图梅舍特(Hubertus Tummescheit),瑞典隆德理工学院
汉斯・万赫勒休韦(Hans Vangheluwe),比利时根特大学
# Modelica 1.3 的主要变化
Modelica 1.3 于 1999 年 12 月 15 日发布,主要变化有:
- 定义 inner/outer 连接器的连接语义。
- 定义受保护元素(protected element)的语义。
- 规定最少变量可变性前缀优先(least variable variability prefix wins)。
- 改进数组表达式的语义定义。
- 定义 for 循环变量的作用域。
# Modelica 1.2 的主要变化
Modelica 1.2 于 1999 年 6 月 15 日发布,主要变化有:
- 更改外部函数接口,提升灵活性。
- 为动态类型引入 inner/outer。
- 重新定义 final 关键字,仅限制进一步修改。
- 将重新声明(redeclaration)限制在可替换元素(replaceable elements)。
- 定义 if 子句的语义。
- 明确允许的代码优化。
- 完善事件处理的语义。
- 引入 fixed 和 nominal 属性。
- 引入 terminate 和 analysisType。
# Modelica 1.1 的主要变化
Modelica 1.1 于 1998 年 12 月发布,主要变化:
- 将规范与基本原理分离,作为独立文档。
- 引入前缀 discrete 和 nondiscrete。
- 引入 pre 和 when。
- 定义数组表达式的语义。
- 引入内置函数和运算符(Modelica 1.0 中仅存在 connect)。
# Modelica 1.0
Modelica 1.0 是 Modelica 的首个版本,1997 年 9 月发布,语言规范作为基本原理的简短附录呈现。