# 建模
本文汇总了使用 Sysplorer 软件建模时的常见问题及解决方法。
# 如何添加标准库至内置库列表
# 问题描述
如何添加指定版本的 Modelica 标准库至内置库列表里,如 Modelica 3.2.3。
# 解决方法
以 Modelica 3.2.3 为例:
将 Modelica 3.2.3 放置在
%Sysplorer安装目录%/Library下,目录结构如下所示:
在
%Sysplorer安装目录%/Library/Modelica 3.2.3下,新建一个空文件,命名为MWORKSCustomLibrary.ini。
再次启动 Sysplorer,可在内置库列表中看到新增的 Modelica 标准库 3.2.3。
# 如何添加自定义模型为内置模型库
# 问题描述
如何将本地的自定义模型配置为内置模型库,使用时能够更方便的打开。
# 解决方法
打开 Sysplorer 安装目录,进入
Library文件夹,若目录下无该文件夹,则新建文件夹并命名为Library。
以模型 TestExample 为例,在
Library文件夹下新建文件夹,命名为 TestExample 1.0。若 TestExample 为结构化模型,则将整个模型文件夹 TestExample 复制到 TestExample 1.0 下;

若 TestExample 模型为单个模型文件,则需要在 TestExample 1.0 文件夹下新建文件夹 TestExample,并将
TestExample.mo复制到 TestExample 下。
在 TestExample 1.0 文件夹下新建
txt文件,并修改文件名称为MWORKSCustomLibrary.ini。
注意
文件的后缀名也需要修改。
完成以上操作后启动软件,此时 TestExample 模型作为内置模型添加至内置模型库列表中。在列表中勾选模型库,将在启动时预加载该模型库。也可以通过单击新增库目录,在弹出的选择模型库目录窗口中选择想要添加的本地模型所在文件夹,单击确定后将把该模型添加到模型库中。

# 如何快速找到模型
# 问题描述
知道模型路径,如Modelica.Electrical.Analog.Basic.Resistor,如何快速定位到该模型Resistor。
# 解决方法
在库浏览器的搜索框搜索模型名Resistor,使用 Enter 或者 ↑ 和 ↓ 逐条查找符合条件的模型对象。
提示
模型浏览器目前不支持全路径搜索,只支持单独的模型名搜索。
# Modelica.Slunits 查找不到
# 问题描述
Sysplorer 导入包 Modelica.Slunits 查找不到。
# 解决方法
Sysplorer 默认加载库为 Modelica 4.0,而 Slunits 包需要 Modelica 3.2.3 模型库才可以支持。更换加载模型库为 Modelica 3.2.3 即可正常导入 Modelica.Slunits。
进入主页 > 选项 > 模型库,在 Modelica 标准库下拉菜单中选择 Modelica 3.2.3,单击确定,即可完成 Modelica 3.2.3 模型库加载。
# 模型图标显示错误
# 问题描述
Sysplorer 模型图标使用图片时显示错误,表现为如下状态:
# 问题原因
图片文件路径错误。
# 解决方法
Sysplorer 图标使用图片时,可采用相对路径进行关联。方法为在模型文本的 annotation 中,写为:modelica://模型库名称/图标相对项目文件所在文件夹的路径,其中模型库名称为模型浏览器中最顶层 package 名。
# 如何定义模型中的全局变量
# 问题描述
建模过程中经常会出现一个组件中多个模型使用同一参数的情况,如果参数有变化,需要重新修改,比较麻烦。
# 解决方法
结合具体实例进行说明。例如,有 8 个组件,每个组件的转动惯量 J 的值都相同。可以定义一个全局变量,将这个变量赋值给每一个组件的转动惯量 J。
创建模型;

在模型的文本层定义参数 J;

将定义好的参数 J 赋值给每个组件。

# 如何调用外部数据文件
# 问题描述
Sysplorer 调用外部数据文件时,如何使用绝对路径和相对路径。
# 解决方法
外部数据文件一般可以通过绝对路径和相对路径进行引用,其形式为:
绝对路径形式:单击选择文件,选中对应路径下的文件。例如:
D:/users/xyz/ReadData/Resources/tab.txt;
相对路径的一般形式为:
modelica://Package_Name/Relative_Path,其中,Package_Name是 Modelica 模型中 package 的名字,Relative_Path是相对路径。一般情况下,外部数据文件的使用需要调用函数loadResource(),例如loadResource("modelica://Package_Name/Relative_Path")。如图所示:
# 外部函数和模型中的记录名不匹配
# 问题描述
模型中外部函数使用了记录类型,模型翻译过程中生成的代码中外部函数的结构体名称与模型中的纪录名称不相同。仿真以下示例提示“生成求解器失败,生成模型目标文件(.o文件或.obj)未能成功”。
model ExternalRecordDemo
record test_record
Real x;
Real y;
end test_record;
function test_func
input test_record test_tr;
output Real res;
external "C"
res = ex_func(test_tr)
annotation(Include = "#include \"external_record_demo.c\"", IncludeDirectory =
"modelica://ExternalRecordDemo/Resource");
end test_func;
test_record tr(x = 1, y = 2);
Real r;
equation
r = test_func(tr);
end ExternalRecordDemo;
# 问题原因
当外部函数中使用了记录类型时,需要在外部函数中提供与模型中记录名同名的结构体定义。
# 解决方法
当模型中外部函数用到了记录类型时,需要提供与模型中记录名同名,成员相同的结构体定义。修改上述问题只需提供一个包含 test_record 结构体定义的头文件和外部函数文件放一起。
# 如何使用 CombiTimeTable
# 问题描述
Sysplorer 中如何使用 CombiTimeTable 等内置模型库。
# 解决方法
用户可以通过在 Sysplorer 中查看帮助文档了解 CombiTimeTable 等内置模型库的使用方式。以 CombiTimeTable 为例,帮助文档介绍了模型的基本功能、表格插值特性、表格矩阵的定义方式、文件结构和规范、参数和接口信息等内容。
帮助文档查看方式如下:
在模型浏览器中找到模型
CombiTimeTable,模型路径为Modelica.Blocks.Sources.CombiTimeTable;右击模型,在弹出的上下文菜单中选择查看文档,右侧文档浏览器中会显示模型相关信息。用户可以根据具体需求查看文档内容。
# 生成求解器失败
# 问题描述
模型中使用了realString,integerString函数时,仿真以下示例提示“生成求解器失败. 生成 MWSolver.dll 文件未能成功”。
示例如下所示:
model E4
constant Real a = 1;
Integer b = 2;
String s1 = realString(a);
String s2 = integerString(b);
end E4;
# 问题原因
Modelica 中没有这两种内置函数的。
# 解决方法
只需将模型中用到这两种内置函数的地方修改为使用String内置函数。修改上述示例后如下:
model E4
constant Real a = 1;
Integer b = 2;
String s1 = String(a);
String s2 = String(b);
end E4;
# 模型保存失败
# 问题描述
保存模型时,输出窗口提示保存失败。
# 问题原因
模型存放路径在当前用户无权限写入的文件夹下。
# 解决方法(一)
右击 Sysplorer 图标,选择以管理员身份运行方式启动软件。
# 解决方法(二)
将模型文件拷贝到其他有读写权限的文件夹下。
# 系统模型精度误差分析和定位
# 问题描述
搭建系统模型时,除了模型本身的误差外,还有许多其他因素会影响系统模型的精度,如何准确分析这些误差并进行定位和解决。
# 问题原因(一)
模型选择不合理导致的误差。
# 解决方法
在 Modelica 标准库及同元商业模型库中对于同一类模型给出了多种选择或者模式设定,比如节流阀类型不仅包含了理想层流液阻、理想紊流液阻、对称可变节流阀及非对称可变节流阀等,对于可变节流阀的计算类型给出了 Q/dp、Cq、Cv 及 Kv 四种算法选择,需要用户在模型选用时根据具体的使用场景进行甄别,选择合理的模型类型或计算方式。
# 问题原因(二)
系统搭建原理不同导致的误差。
# 解决方法
确保搭建的系统模型符合物理真实性,对于搭建的大型系统避免出现连线缺失或者错误的情况。
# 问题原因(三)
系统参数设置不同导致的误差。
# 解决方法
组件参数的设置包括数值及单位的确认,对于可选类型的模型可能还会涉及不同的设置模式,比如对于包含动态环节的模型,静态、一阶动态和二阶动态的选择不同,可能会带来较大的结果差距。
# 问题原因(四)
仿真设置不同导致的误差。
# 解决方法
仿真设置包括编译器选择、仿真步长设置、积分算法选择,尤其对于多平台及多领域系统模型的仿真设置一定要尽量保持一致。
# 系统简化及问题模型定位
排除上述误差来源后对现有系统进行简化,简化可从三方面进行,一是如果系统采用了 Syslab,Sysplorer 及 Sysblock 多平台建模,可先验证单个平台输出结果是否符合预期;二是如果该系统包含多个领域,可按对应领域进行切割,查找问题源;三是如果系统较为单一,系统规模还比较大,可以通过删减非必要的模型来简化系统。
系统简化的目的是缩减系统规模,在最简的系统中发现问题点,方便定位问题模型,以便于开发者进行模型问题定位及优化。
提示
对于复杂的系统可进行分块化处理,模块部分逐一验证通过后再进行拼接组装,避免由于系统规模较大带来的问题不好定位的情况。 比如搭建机电液控多领域的系统模型,可划分为机械模块、电气模块、液压模块及控制模块,分别对各模块进行搭建及验证,当每个模块验证符合预期后再进行连接,这样能更好的避免模块交叉带来的问题,从而提高建模及系统调试的效率。