编辑推荐: |
本文详细阐述了在OpenModelica环境中通过OMShell进行交互式操作的过程,涉及对话开始、模式应用、冒泡排序演示及系统命令使用,如cd()和cat命令。希望对你的学习有帮助。
本文来源于CSDN,由火龙果软件Linda编辑,推荐。 |
|
前言
以下是在OpenModelica环境中使用交互式会话处理程序的交互式会话。称为OMShell-OpenModelica
Shell。这些示例中的大多数也可以在OMNotebook中使用
DrModelica和DrControl UsersGuideExamples.onb以及testmodels: 
使用OpenModelica版本运行以下命令: 
一、开始使用交互式对话
在Windows下,转到开始菜单并运行OpenModelica->OpenModelica Shell,它以
交互窗口;
在Linux下,运行OMShell-terminal在提示符下启动交互式会话。我们输入由范围构造表达式1:12创建的向量表达式的赋值,以存储在变量x。返回表达式的值。 
二、使用交互式的模式
在交互模式下运行OMC (例如使用OMShell) 时,可以加载类并执行
命令。这里我们举几个例子。 
三、尝试使用冒泡排序算法
加载函数bubblesort,可以使用下拉菜单File->Load Model,也可以显式给出
命令: 
下面调用函数bubblesort以降序对向量x进行排序。返回排序后的结果连同它的类型。请注意,结果向量的类型为Real[:],实例化为Real[12],因为这是声明的函数结果的类型。输入整数向量自动转换为实数向量需要根据Modelica类型强制规则。如果以前没有这样做,则调用该函数时会自动编译。 
另一个响应: 
四、使用cd()指令
也可以通过系统实用功能给出操作系统命令。命令提供为一个string参数。下面的示例显示了应用于UNIX命令cat的系统实用程序,在这里从命令行运行omc时,将文件bubblesort.mo的内容输出到输出流。 
注意:
当运行基于CORBA的客户端,而不是进入可见的GUI窗口。因此,上述cat命令发出的文本将不会返回,这就是为什么它被重定向到另一个文件。
读取文件内容的更好方法是readFile命令: 
系统命令只返回成功代码 
另一个内置命令是cd,更改当前目录命令。返回生成的当前目录为一个字符串。 
一、 Trying the system and cd Commands
也可以通过系统实用功能给出操作系统命令。命令提供为一个string参数。下面的示例显示了应用于UNIX命令cat的系统实用程序,在这里从命令行运行omc时,将文件bubblesort.mo的内容输出到输出流。 
注意:
当运行基于CORBA的客户端,而不是进入可见的GUI窗口。因此,上述cat命令发出的文本将不会返回,这就是为什么它被重定向到另一个文件。
读取文件内容的更好方法是readFile命令: 
系统命令只返回成功代码 
另一个内置命令是cd,更改当前目录命令。返回生成的当前目录为一个字符串。 
二、 Modelica Library and DCMotor Model
我们加载一个模型,这里是整个Modelica标准库,这也可以通过File-> load Mod-
elica库菜单项: 
我们还加载一个包含dcmotor模型的文件: 
注: dcmtor要求3.2.2版的Modelica软件包。使用Modelica
3.2.3代替,其中指出它是完全兼容的,无需转换脚本。 


(一直到P12都是代码)
注:
通知: dcmtor请求了3.2.2版的软件包Modelica。使用Modelica 3.2.3代替,其中指出
它是完全兼容的,无需转换脚本。
我们绘制部分模拟结果如图: 
三、The val() function
val(variableName,time) scription函数可用于检索仿真结果的内插值变量在模拟时间的某个点,请参阅下面的BouncingBall模拟中的usagc。
#四、 BouncingBall and Switch Models
我们加载并模拟包含何时方程和if表达式的弹跳球示例 (为了更好的可读性,Modelica关键字已经手动粗体处理): 
我们不是仅仅给出一个模拟和绘图命令,而是执行一个runScript命令。mos (Modelica脚本)
包含这些命令的sim_BouncingBall.mos文件


使用val(variableName,time) 函数检索时间 = 0时的itot值: 

我们注意到,变量open从false
(0) 切换到true (1),导致itot从1.0增加到2.0。
四、Clear All Models
现在,首先清除所有加载的库和模式 
列出加载的模型:当前是没有的 
五、VanDerPol Model and Parametric Plot
我们加载另一个模型,VanDerPol模型 (或通过菜单文件-> 加载模型): 
仿真: 
跑图: 
将代码实例化为VanDerPol模型的平面形式


六、Using Chinese or Japanese Characters
可以在引号 (单引号) 标识符中使用日语、中文和其他类型的UniCode字符,例如,下图中右侧的变量名称: 
七、Scripting with For-Loops, While-Loops, and If-Statements
一个简单的求和整数循环 (使用多行输入而不评估每一行到OMShell需要复制-从另一个文档粘贴为一个操作): 
嵌套循环求和实数和整数: 
通过将两个 (或更多) 变量或赋值语句以分号分隔,以变量结尾,可以观察多个变量值: 
一个具有向量遍历和字符串元素连接的for循环: 
正常的while循环与10个
“abc” 字符串的连接: 
一个简单的if语句。通过将变量放在最后,在分号之后,其值在评估后返回: 

八、 Variables, Functions, and Types of Variables
将向量分配给一个变量: 
函数中的输入: 
函数的引用: 
查看变量a的值: 
查看a的类型; 
检索b的类型: 
mySqr是什么类型呢?尚无法即时处理: 
列出可获得的变量: 
Clear again: 
九、Getting Information about Error Cause
在模拟失败后,调用getErrorString()函数可以获取更多关于错误原因的信息。 
十、Alternative
Simulation Output Formats
有几种输出格式可供选择,mat是默认格式。plt和mat是唯一允许在模拟后使用val()或plot()函数的格式。与plt的速度相比,对于小文件来说,mat大约快5倍,并且由于它是一种二进制格式,对于大文件来说扩展性更好。csv格式在数据密集型模拟中的速度大约是plt的两倍。plt格式在模拟期间将所有输出数据分配到RAM中,这意味着在32位平台上,由于应用程序只能寻址4GB的内存,模拟可能会失败。Empty不输出任何内容,应该是最快的。csv和plt格式适用于使用外部脚本或工具(如gnuplot)生成图表或处理数据。mat格式可以在MATLAB或Octave中进行后处理。 
还可以通过使用POSIX扩展正则表达式来指定结果文件中应该包含哪些变量。给定的表达式必须匹配完整的变量名(^和$符号会自动添加到给定的正则表达式中)。
• 默认情况下,匹配所有内容:simulate(…, variableFilter=“,") 
• 仅匹配包含数字1至3的变量myVar的索引:simulate(…, variableFilter="myVar[1-3]”) 
• 匹配x、y或z:simulate(…, variableFilter=“x|y|z”

十一、Using Parallel Simulation via OpenMP Multi-Core
Support
可以通过使用OpenModelica的新特性在多核计算机上获得更快的模拟速度,该特性自动分区方程组,并使用基于共享内存的OpenMP执行调度不同部分。获得的加速取决于模型结构,以及方程组是否可以很好地分区。当前OpenModelica版本中的这个版本是一个没有负载平衡的实验版本。以下命令将在模型上运行并行模拟(目前还不能从OpenModelica
GUI中使用): 
十二、Loading Speciffc Library Version
存在许多不同版本的Modelica库,它们之间并不兼容。可以通过调用getModelicaPath()函数来保存同一个库的多个版本。通过调用loadModel(Modelica,
“3.2”),OpenModelica会搜索名为"Modelica 3.2"的目录或名为"Modelica
3.2.mo"的文件。可以指定多个库版本以供搜索,并优先考虑已安装的库的预发布版本。如果搜索的版本是"default",优先级顺序为:没有版本名称(Modelica)、主要发布版本(Modelica
3.1)、预发布版本(Modelica 3.1Beta 1)和无序版本(Modelica Special
Release)。
loadModel命令在加载后还会查看顶级类的uses注释。给定以下包,Complex 1.0和ModelicaServices
1.1也会自动加载到AST中。 
如果模型有一个uses注释,包也会被加载: 
注意:
通知:由于M中的uses注释,自动加载了包Modelica 3.2.1。
通知:由于Modelica中的uses注释,自动加载了包Complex 3.2.1。
通知:由于Modelica中的uses注释,自动加载了包ModelicaServices 3.2.1。
通过查看路径中的第一个标识符,包也会被加载: 
注意:
通知:由于Modelica中的uses注释,自动加载了包Complex 4.0.0。
通知:由于Modelica中的uses注释,自动加载了包ModelicaServices 4.0.0。
通知:由于使用,自动加载了包Modelica default。
十三、Calling the Model Query and Manipulation API
在OpenModelica系统文档中,描述了一个外部API(应用程序编程接口),它返回有关模型的信息和/或允许操纵模型。这些函数的调用可以像下面这样交互式地完成,但更典型的是通过程序客户端对OpenModelica编译器(OMC)服务器进行调用。此类客户端的当前示例包括OpenModelica
MDT Eclipse插件、OMNotebook、OMEdit图形模型编辑器等。出于性能原因,此API是未类型的,即在调用上不进行类型检查,且错误检查最小化。调用的结果以Modelica语法形式的文本字符串返回,客户端需要解析这些字符串。OMNotebook源代码中提供了一个C++的示例解析器,而MDT
Eclipse插件中提供了一个Java的示例解析器。
下面我们展示了对之前模拟的BouncingBall模型进行的一些调用。关于这个API的完整文档可以在系统文档中找到。首先我们再次加载并列出模型,以展示其结构: 
不同的调用和返回结果: 

十四、Quit OpenModelica 
十五、Dump XML Representation
命令dumpXMLDAE根据几个可选参数,将模型的XML表示形式转储出来。
dumpXMLDAE(modelname[,asInSimulationCode] [,filePrefix]
[,storeInTemp] [,addMathMLCode])
这个命令使用XML表示形式转储模型的数学表示,带有可选参数。特别是,asInSimulationCode定义了在翻译过程中何时停止(在转储模型之前),其他选项与文件存储有关:filePrefix用于指定不同的名称,storeInTemp用于使用临时目录。可选参数addMathMLCode提供了不在xml文件中打印MathML代码的可能性,使其更易读。使用非常简单,只需:addMathMLCode=true/false(默认值是false)。
十六、Dump Matlab Representation
命令export根据几个可选参数,将模型的Matlab表示形式转储出来。
exportDAEtoMatlab(modelname):
这个命令使用Matlab表示形式转储模型的数学表示。示例:


|