简介
以想从一个包含名称的数组中搜寻一个特殊的名称,并获得数组中该名称的索引。该函数代码如下所示:
function FindName
input String names[:];
input String name_to_find;
output Integer index;
protected
Integer i;
Integer len = size(names, 1);
algorithm
index := -1;
i := 1;
while index == -1 and i <= len loop
if names[i] == name_to_find then
index := i;
end if;
i := i + 1;
end while;
assert(index <> -1, "FindName:failed");
end FindName;
首先在开头设置了该函数的输入输出,input后面跟的是输入,output后面跟的是输出
names[:]这种写法也与很多编程语言不同,使用":"表示数组的长度为任意值
size(names, 1)用来确定names数组的长度
assert()函数用来验证特定的条件,第一个是条件,如果该条件为假,那么就会显示第二个自变量包含的消息,程序也随即停止运行
:=也与很多编程语言不同,在modelica中:=表示赋值,与方程中的=相等不一样
protected用来修饰受保护的部分
while 表达式 loop表示一个while循环
在Sysplorer中添加一个Modelica函数的步骤
点击“文件”——“新建”——“function”,如下图所示:
输入函数名“FindName”,如下图所示:
写入函数,如下图所示:
在模型中使用函数
新建一个模型,命名为“TestFindName”,如下图所示:
运行该模型,结果如下图所示:
点击左边的“Computer_Index”,查看结果,如下所示:
结果正确,因为与大多数编程语言不一样,Modelica中的数组索引是从1开始的
再测试一个找不到的结果的例子,代码如下所示:
model TestFindName
parameter String names[:] = {"水杯", "电脑", "鼠标"};
Integer Computer_Index = FindName(names, "键盘");
end TestFindName;
运行结果,如下所示:
总结
本文简单介绍了在Sysplorer中如何创建一个Modelica函数并使用它。
参考书籍
《ModeIica 多领域物理系统建模入门与提高》——迈克尔·M.蒂勒