用户由Simulink建模环境迁移到Sysblock建模环境时,由于组件参数表达式的括号使用方式存在一定的差异性,因此本文档主要对Sysblock建模环境中括号的使用注意事项进行说明。
首先说明结论:除少部分组件的某些参数外(具体详见下文),Sysblock的组件参数支持大括号与中括号来表示数据或表达式参数,推荐统一大括号表示。
Sysblock模块使用参数对话框来定义模块参数,除标量外,包括数组数据、函数表达式、数组元素索引三种场景都需要使用括号,下面对各场景中括号使用的注意事项进行介绍。
数组数据的表达推荐使用大括号{}
大括号用于数组数据表达
Sysblock中模块端口的数据类型根据其维度可以主要分为标量、一维数组、向量及多维数据等多种类型。对于参数对话框中填写标量时,无需使用括号。当使用除标量外的数据类型时,下图展示各种类型数据的实际用法。

各类型说明如下:
| 类型 | 注意事项 |
|---|---|
| 标量 | 标量必须为具体的数值,不能使用括号。例如:1 |
| 一维数组 | 一维数组仅能使用大括号表示,数据之间用逗号隔开。维度表示为“[N]”,N为数组长度。例如:{1,2,3,5,6,7},维度表示为[6] |
| 行向量 | 行向量为二维数组的一种特殊形式,维度表示为“[1,N]”,N为行向量长度。可以使用中括号和大括号两种方式表示,两种表示方式等效。例如,{{1,2,3}}和[1,2,3]等效。 |
| 列向量 | 列向量为二维数组的一种特殊形式,维度表示为“[N,1]",N为列向量长度。可以使用中括号和大括号两种方式表示,两种表示方式等效。例如,{{1},{2},{3}}和[1;2;3]等效。 |
| 多维数组 | 向量可以使用大括号或中括号进行表示,例如: 大括号:{{1,2,3},{4,5,6}} 中括号:[1,2,3;4,5,6] 上述两种表示方式等效,维度表示为[2,3]。 多维数组虽然有时大括号和中括号混合使用不报错(例如:{{{1,2,3},{4,5,6}},[1,2,3;4,5,6]},维度为[2,2,3]),但不推荐这种形式。 |
注:组件参数为工作区或数据字典中的数据时,编辑时不进行括号使用的检查,但需要注意,部分参数可能不支持使用工作区数据(例如,Mux模块的“输入数目”参数)。
中括号用于数组元素索引或维度表示
中括号在Sysblock模块参数中主要用于数组元素的索引及维度表示。
1,数组元素的索引固定使用中括号。

2,数据维度推荐使用中括号
标量的维度表示为“[]”;一维数组的维度表示为“[N]”(N为数组长度);行向量的维度表示为“[1,N]”(N为向量长度);列向量的维度表示为“[N,1]”(N为向量长度);多维数组根据具体具体维数可表示为“[N,M,...]”。

小括号用于函数及表达式优先级
这里提到的函数主要分为两类,一类是在Sysblock组件参数框使用一些基础的数学函数表达式作为输入(例如:sin、sqrt等);另一类是指状态机中使用的一些特定函数(例如,after,send等)和图函数。
描述数学函数表达式或者表达式的运算顺序,统一使用小括号来括住函数的参数 。

描述Sysblock状态机中图函数的多个返回值,统一使用小括号括住返回值,括号内用逗号分隔开各返回值。


部分组件中参数括号的特殊使用方法
Sysblock模型库组件中部分组件由于实际含义的不同,其可用的常数参数,限制为标量、一维数组、向量和多维数组中的一种或几种,或是其数组表达为其他的含义,这里对这部分特殊组件进行介绍。
-
端口顺序选择指定索引时(multiport)
对于MutilportSwitch中端口的索引,由大括号及中括号配合使用。

-
针对ZeroPole模块,需要注意:
ZeroPole模块的“极点”和“增益”参数,均支持标量和一维数组,不支持多维数组,但对行向量进行了兼容,会处理为一维数组。例如:极点的默认参数为“[0,-1]”,等效于“{0,-1}”。
-
针对TransferFcn模块,需要注意:
TransferFcn模块的“分母系数”参数,仅支持使用一维数组,但对行向量进行了兼容,会被默认处理为一维数组。例如,分母系数的默认参数“[1,1]”,默认会处理为"{1,1}"。
-
针对查表模块,需要注意:
LookupTable1D的定义域与值域,以及LookupTable2D的定义域(行、列)只能使用一维数组,例如,“{1,2,3,4}”;
LookupTable2D的值域仅能使用二维数组,默认使用大括号,例如,“{{1,3,5,7},{2,4,6,8}}”。也可以使用中括号,等效为“[1,3,5,7;2,4,6,8]”;
LookupTableND的表维数只能使用大于等于3的正整数标量;
LookupTableND的表数据只能使用多维数组,其维度数对应模块的表维数;
LookupTableND的表数据只能使用多维数组,使用大括号或中括号表示。
-
针对FromWorkspace和FromFile模块的“维度"参数,需要注意:
FromFile和FromWorkspace的维度只能使用“[N]”表示,其中N为数组长度,且不能改写为"{{N}}"。
-
针对StateSpace模块,需要注意:
StateSpace模块组件参数”A“、”B“、”C“、”D“只能为标量或者二维数组。
-
针对CombinatorialLogic模块,需要注意:
CombinatorialLogic模块的真值表参数仅支持行向量,使用”[]“或”{{}}“表示。
-
针对IdentityMatrix模块,需要注意:
当指定IdentityMatrix的输出维度时,可以使用标量或者直接按维度输出。维度仅能表示为”[N,M]“,(N,M分别表示各维度上的长度);当使用标量时,”N“等效为”[N,N]“。
-
针对包处理模块,需要注意:
BytePack和ByteUnpack模块的输出端口类型,均只能使用大括号,内部具体类型前后使用单引号,多个类型之间使用逗号隔开。例如”{‘double’,'int32'}“;
ByteUnpack的输出端口维度,使用大括号包含所有维度分量,各维度之间使用逗号隔开(维度使用中括号表示)。需要注意,其中的标量维度表示为”0“,而非”[]";一维数组维度表示为”N“,而非”[N]“;向量及多维数组维度正常表示为”[N,M]“。
-
针对SwitchCase模块,需要注意:
SwitchCase的Case条件表达式中,条件以{}表示,若对case条件分组,需以一维数组或行向量表示,如”{1,{2,3}}“或“{1,[2,3]}”。
-
针对RepeatingSequence模块,需要注意:
RepeatingSequence的时间值与输出值参数只能使用一维数组,例如“{1,2,3}”;
-
标量的使用,只能为具体的数字
以下模型的对应参数仅能使用标量:
| 组件名 | 参数名 | 注意事项 |
|---|---|---|
| ForEach | 分区维度 | 只能为标量,直接用数字表示 |
| 分区宽度 | ||
| 分区偏移量 | ||
| 串联维度 | ||
| If | 输入数目 | 只能为标量,直接用数字表示 |
| DownSample | 采样因子 | 只能为标量,直接用数字表示 |
| 采样偏移 | ||
| RMS | 指定维度 | 只能为标量,直接用数字表示 |
-
针对RandomIntegerGenerator和RepeatingSequenceStair模块,需要注意:
RandomIntegerGenerator模块的设置大小参数以及RepeatingSequenceStair的输出值的向量参数,仅支持标量、一维数组及行向量三种表示方式,其中一维数组和行向量效果一致。