Stateflow®图表在仿真软件万博1manbetx®模型有一个动作语言属性定义的语法状态和转换操作。一个图标左下角的图画布显示图表的动作语言。
MATLAB®作为动作语言。
C作为动作语言。
图表中使用C作为行动的语言,你可以调用内置的MATLAB函数,通过使用MATLAB的工作空间变量的访问毫升
名称空间操作符或毫升
函数。
谨慎
因为MATLAB函数不可用在目标环境中,不要使用毫升
名称空间算子和毫升
函数如果你打算建立一个代码生成目标。
毫升
名称空间操作符对于C图表毫升
名称空间操作符使用标准的点(.)
MATLAB符号来引用变量和函数。例如,语句一个= ml.x
返回MATLAB工作空间变量的值x
Stateflow数据一个
。
函数的语法如下:
(return_val1,return_val2,……]=毫升。matfunc(__arg1,最长,……)
例如,语句[a, b, c] =毫升。
通过MATLAB函数的返回值matfunc
(x, y)matfunc
Stateflow数据一个
,b
,c
。
如果你调用MATLAB函数不需要参数,你仍然必须包括括号。如果您省略括号,Stateflow软件解释作为工作空间变量,函数名,当没有找到,在模拟生成一个运行时错误。
在这些例子中,x
,y
,z
是工作空间变量和d1
和d2
Stateflow数据:
一个= ml.sin (ml.x)
在这个例子中,MATLAB函数罪
评估的正弦x
,然后分配给Stateflow数据变量一个
。然而,由于x
是一个工作空间变量,您必须使用名称空间操作符来访问它。因此,ml.x
而不是使用吗x
。
一个= ml.sin (d1)
在这个例子中,MATLAB函数罪
评估的正弦d1
,这是分配给Stateflow数据变量一个
。因为d1
直接是Stateflow数据,您可以访问它。
ml.x = d1 * d2 / ml.y
表达式分配给的结果x
。如果x
不存在模拟之前,它是自动在MATLAB中创建工作区。
ml.v[5][6][7] =毫升。
matfunc
(ml.x [1] [3], ml.y [3], d1, d2,”字符串
”)
工作空间变量x
和y
是数组。x [1] [3]
是(1、3)
元素的二维数组变量x。
y [3]
是第三个元素的一维数组变量y
。最后一个参数,”
字符串
”
,是一个特征向量。
调用的返回matfunc
是分配给元素(5、6、7)
工作空间的数组,v
。如果v
不存在模拟之前,它是自动在MATLAB中创建工作区。
毫升
函数对于C图表,您可以使用毫升
函数来指定调用MATLAB函数。的格式毫升
函数调用使用这个符号:
毫升(evalString,__arg1,最长,……);
是一个表达式,MATLAB的工作区中评估。它包含一个MATLAB命令(或一组命令,每个由分号分隔)执行以及格式说明符(evalString
% g
,% f
,% d
等)提供格式化的替换其他的参数(
,__arg1
等)最长
。evalString
中使用的格式说明符毫升
函数中使用的相同的C函数printf
和sprintf
。的毫升
函数调用相当于调用MATLABeval
函数与毫升
如果参数名称空间算子
局限于标量或文字下面的命令:__arg1
,最长
,……
ml.eval (ml.sprintf (evalString,__arg1,最长,……)
格式说明符中使用毫升
函数必须匹配的参数的数据类型或参数的类型必须被提升为代表的类型格式说明符。
Stateflow软件假定标量返回值毫升
名称空间操作符和毫升
函数调用时,在这种情况下作为参数。看到图表推断毫升表达式的返回大小如何。
在这些例子中,x
是一个MATLAB工作空间变量,d1
和d2
Stateflow数据:
一个=毫升(sin (x))
在这个例子中,毫升
函数调用MATLAB函数罪
评估的正弦x
在MATLAB工作区。结果是那么Stateflow数据赋值给变量一个
。因为x
是一个工作空间变量,然后呢sin (x)
评估在MATLAB工作区,你直接进去吗
参数(evalString
“sin (x)”
)。
=毫升(“罪(%)”,d1)
在这个例子中,MATLAB函数罪
评估的正弦d1
在MATLAB工作区和分配结果Stateflow数据变量一个
。因为d1
Stateflow数据,插入它的价值呢
参数(evalString
“罪(%)”
使用表达式的格式)% f
。这意味着,如果d1
= 1.5,MATLAB工作区中的表达式计算罪(1.5)
。
=毫升('
matfunc
(% g”,英语字母“x % f), d1, d2)
在这个例子中,表达式”
是matfunc
(% g”,英语字母“x % f)”
前面所示格式的声明。Stateflow数据evalString
d1
和d2
插入表达式的格式说明符% g
和% f
,分别。“英语字母”
是一个文字封闭的两个双引号,因为它是评价表达式的一部分,已包含在单引号。
sfmat_44 =毫升(兰德(4))
在这个例子中,一个4×4平方矩阵0到1之间的随机数并分配给Stateflow数据返回sf_mat44
。Stateflow数据sf_mat44
之前必须定义为一个4×4数组模拟。如果它的大小是不同的,在运行时生成一个失配误差大小。
毫升
表达式对于C图表,您可以混合毫升
名称空间操作符和毫升
函数表达式以及Stateflow数据在较大的表达式。下面的例子广场正弦
和余弦
工作空间变量的一个角度X
并将它们添加:
ml.power (ml.sin (ml.X), 2) +毫升(的权力(cos (X), 2)”)
第一个操作数使用毫升
名称空间操作符调用罪
函数。它的参数是ml.X
,因为X
在MATLAB的工作区。第二个操作数使用毫升
函数。因为X
在工作区中,它出现在
表达式为evalString
X
。执行每个操作数的平方与MATLAB权力
价值函数,该函数接受两个参数:广场,和功率值,2。
表达式使用毫升
名称空间算子和毫升
函数可以作为参数毫升
名称空间操作符和毫升
函数表达式。下面的例子巢毫升
表达式在三个不同的层次:
一个= ml.power (ml.sin (ml。X +毫升(cos (Y))), 2)
写你的毫升
表情,遵循的优先级的水平二元运算。使用括号表达式与周围的力量^
运营商当你与其他算术运算符一起使用它们。
Stateflow软件检查表达式的数据大小不匹配你的行动在图表和在运行时解析。因为返回的值毫升
表达式是不知道直到运行时,Stateflow软件必须推断出它们的返回值的大小。看到图表推断毫升表达式的返回大小如何。
毫升
我应该使用吗?在大多数情况下,符号的毫升
名称空间操作更简单。然而,使用毫升
函数调用并提供一些优点:
使用毫升
函数来动态地构建工作空间变量。
以下流程图创建了四个新MATLAB矩阵:
的为
循环MATLAB的工作区中创建了四个新矩阵变量。默认初始化过渡Stateflow计数器我
为0,而前两个路口之间的过渡段增加1。如果我
小于5,过渡段回到顶部结评估毫升
函数调用毫升(' % d =兰德(% d) ',我,我)
的当前值我
。当我
大于或等于5,底部两个路口之间的过渡段和执行停止时发生。
过渡执行以下MATLAB命令,创建一个工作区标量(A1
)和三个矩阵(A2
,A3
,A4
):
A1 =兰德(1)A2 =兰德(2)A3 =兰德(3)A4 =兰德(4)
使用毫升
函数与MATLAB的符号。
你不能使用完整的MATLAB符号毫升
名称空间操作符,如以下示例所示:
ml.A = ml.magic (4) B =毫升(“+”)
这个例子设置工作空间变量一个
一个神奇的4×4矩阵使用毫升
名称空间算子。Stateflow数据B
然后设置的吗一个
及其转置矩阵,一个“
产生一个对称矩阵。因为毫升
名称空间算子不能对表达式求值一个“
,毫升
函数是用来替代。然而,您可以调用MATLAB函数转置
与毫升
名称空间算子的等价表达式如下:
B = ml.A + ml.transpose (ml.A)
作为另一个示例中,您不能使用参数与单元数组或下标表达式,包括冒号毫升
名称空间算子。然而,这些可以包括在一个毫升
函数调用。
毫升
数据类型Stateflow数据的类型毫升
内部类型与MATLAB类型mxArray
对于C图表。你可以分配(存储)Stateflow层次结构中的任何类型的数据的数据类型毫升
。这些类型包括任何Stateflow层次结构中定义的数据类型或返回的MATLAB工作区毫升
名称空间操作符或毫升
函数。
毫升
数据类型这些规则适用于Stateflow数据的类型毫升
:
你可以初始化毫升
数据从MATLAB工作区就像Stateflow层次结构中的其他数据(见从MATLAB基础工作空间初始化数据)。
任何数值标量或数组毫升
Stateflow层次结构中的数据可以参与任何形式的一元运算和任何一种二元运算中的任何其他数据的层次结构。
如果毫升
数据参与任何数值操作与其他数据的大小毫升
数据必须从上下文推断出它,正如返回的数据毫升
名称空间操作符和毫升
函数。看到图表推断毫升表达式的返回大小如何。
你不能定义毫升
数据与范围常数。
这个选项是禁用数据属性对话框在Model Explorer Stateflow数据类型毫升
。
您可以使用毫升
数据建立仿真目标而不是建立一个可嵌入代码生成目标。
如果数据类型的毫升
包含一个数组,您可以通过索引访问数组的元素与这些规则:
你只能指数与数值数组元素。
你可以仅仅通过指数数值数组的维度。
换句话说,您可以访问只有一维数组由单个索引值。你不能访问一个多维数组与单个索引值。
第一个索引值为每个维度的数组是1,而不是0,如C语言数组。
在后面的例子中,mldata
是一个Stateflow数据类型的毫升
,ws_num_array
是一个2×2 MATLAB工作区与数值数组,然后呢ws_str_array
是一个2×2 MATLAB工作区与特征向量数组值。
mldata = ml.ws_num_array;/ *好* / n21 = mldata [2] [1];/ *好的数值数据类型的ml * / n21 = mldata [3];/ *不可以2×2数组数据* / mldata = ml.ws_str_array;/ *好* / s21 = mldata [2] [1];/ *不可以为特征向量数据类型的毫升* /
毫升
数据不能有一个范围外C图;也就是说,你不能定义的范围毫升
数据作为输入模型万博1manbetx或输出仿真软件万博1manbetx。
这两个毫升
名称空间算子和毫升
MATLAB工作区中的函数可以直接访问数据,并将它返回给C图。然而,在MATLAB工作区中维护数据可以给Stateflow用户冲突与其他数据已经在工作区中居民。因此,与毫升
数据类型,您可以维护毫升
图表中的数据,在C语言中使用MATLAB计算图表。
作为一个例子,在以下语句,mldata1
和mldata2
Stateflow数据类型的吗毫升
:
mldata1 = ml.rand (3);mldata2 = ml.transpose (mldata1);
在这个例子中,第一行mldata1
接收MATLAB函数的返回值兰德
在这种情况下,返回一个3×3的随机数。请注意,mldata1
不以任何方式指定为数组或大小。它可以接收任何MATLAB工作区数据或任何MATLAB函数的回归,因为它被定义为一个Stateflow数据类型毫升
。
在这个例子中,第二行mldata2
的Stateflow数据类型毫升
,接收矩阵的转置矩阵mldata1
。这是指定的MATLAB函数的返回值转置
在这mldata1
是参数。
注意符号的差异如果前面的示例使用MATLAB空间数据(wsdata1
和wsdata2
)而不是Stateflow毫升
数据保存生成的矩阵:
ml.wsdata1 = ml.rand (3);ml.wsdata2 = ml.transpose (ml.wsdata1);
在这种情况下,每个工作空间数据必须通过访问毫升
名称空间算子。
毫升
表达式在C语言中图表、Stateflow表达式使用毫升
名称空间算子和毫升
在MATLAB函数评估在运行时工作区中。返回的数据的实际尺寸以下表达式类型在运行时只知道:
使用MATLAB工作区数据或函数毫升
名称空间操作符或毫升
函数调用
例如,表达式的返回值的大小毫升。
,var
毫升。
,或函数
()毫升(
,在那里evalString
,__arg1
,最长
,……)
是一个变量和MATLAB工作区吗var
是一个MATLAB函数,不能认识到运行时。函数
Stateflow数据的类型毫升
图形函数,返回Stateflow数据的类型毫升
当这些表达式出现在行动,Stateflow代码生成创建临时数据保存中间回报评估它们的完整表达式。因为这些返回值的大小是未知的,直到运行时,Stateflow软件必须使用上下文规则来推断创建临时数据的大小。
在运行时,如果这些命令的实际返回值从一个不同于推断的大小将其存储的临时变量,出现大小不匹配错误。为了防止运行时错误,使用以下指南与MATLAB命令或写操作毫升
数据:
指导方针 | 例子 | |
---|---|---|
返回大小的MATLAB命令或数据的表达式必须匹配返回大小同伴的表情。 |
在表达 |
|
表达式返回一个标量从来没有产生一个错误。 您可以组合矩阵和标量在较大的表情因为MATLAB命令使用标量扩张。 |
在表达 同样的规则也适用于减法( |
|
MATLAB命令或Stateflow数据的类型 |
参数 每个函数参数的表达式是一个更大的表达式返回的MATLAB命令或Stateflow数据类型的大小 |
在表达 |
数组索引 数组索引的表达式是一个独立的表达水平,必须标量的大小。 |
在表达 |
|
索引数组元素访问的回报大小必须是一个标量。 |
表达式 |
|
MATLAB命令或数据元素中使用一个表达式的输入参数调用MATLAB函数通过 |
在函数调用 |
|
MATLAB命令或数据元素用于图形函数的输入参数解析表达式中大小的函数原型。 |
如果图形函数 |
|
|
在表达 |
|
大小的分配,右边的表达式必须匹配左边的表达式的大小,但有一个例外。如果左边的表达式是一个MATLAB变量,如 |
在表达 |
|
在一个任务,Stateflow列向量左边兼容MATLAB行或列向量相同大小的右边。 一个矩阵定义的行维度1被认为是一个行向量。一个矩阵定义与一维或一列维度1被认为是一个列向量。 |
在表达 |
|
如果你不能解决的回报大小MATLAB命令或数据元素在一个更大的表达式的任何先前的规则,他们认为返回标量值。 |
在表达 |
|
前面的规则解决大小的MATLAB命令或Stateflow数据类型的成员 请注意 MATLAB命令或数据类型的成员 |
表达式 |
发生特殊情况存在,没有尺寸检查解决MATLAB命令或数据的大小表达式,表达式的一部分。使用以下表达式不需要在运行时执行尺寸检查:
毫升。
var
毫升。
函数
()
毫升(
evalString
,__arg1
,最长
,……)
Stateflow数据的类型毫升
图形函数返回一个Stateflow数据的类型毫升
在这些情况下,返回分配给一个赋值语句的左边或没有检查的函数参数发生大小两者之间的不匹配:
一项任务中,左边是一个MATLAB工作空间变量
例如,在表达式ml.x = ml.y
,ml.y
是一个MATLAB工作空间变量的任何大小和类型(结构、单元阵列特征向量,等等)。
一项任务的左手边是一个数据类型毫升
例如,在表达式m_x =毫升。
,函数
()m_x
是一个Stateflow数据类型的毫升
。
MATLAB函数的输入参数
例如,在表达式毫升。
,函数
(ml.x m_xgfunc
())m_x
是一个Stateflow数据类型的毫升
,ml.x
是一个MATLAB工作空间变量的任何大小和类型,然后呢
是一个Stateflow图形函数,返回一个Stateflow数据类型的gfunc
()毫升
。尽管尺寸检查不发生输入类型,如果传入的数据不是预期的类型,错误函数调用的结果毫升。
。函数
()
参数指定为Stateflow数据的图形函数的类型毫升
在其原型声明
请注意
如果你输入在前面的情况下替换non-MATLAB数字Stateflow数据,转换到一个毫升
类型出现。