21.SignalAttributes
21.1 概述
Signal Attributes,信号属性,信号特性。
21.2 回顾常用模块
21.2.1 DataTypeConversion
数据类型转换模块,可以对信号的数据类型进行强制转换。无符号数据与有符号数据相加,我们可以将无符号数据转换为有符号数据,再进行加法运算。
21.3 SignalConversion
信号转换模块,可以对信号进行一个转换的处理,包括普通信号的复制,总线信号的复制。总结下来,功能就是隔离原来的信号,产生一个新的复制的信号。
Output的三个选项,Signal copy信号复制,Virtual bus虚拟总线(生成代码还是单个信号,只是在模型的视觉上进行编组),Nonvirtual bus非虚拟总线(对应生成代码结构体)。
选择Signal copy,数据类型不可设置,单纯的拷贝。
选择非虚拟Bus后,图标改变,数据类型可选,可以根据实际需求来进行选择。
初学的时候不太用的到这个模块。在标定的观测量设置,AUTOSAR接口的信号转换等地方会用的到,隔离原来的信号,产生一个一样的新的信号。
21.4 DataTypeDuplicate
信号数据类型约束模块,可以强制输入数据类型一致,否则报错。
仿真数据类型不一致,直接报错。需要强制转换或者是修改前端输入的类型,保持一致。
21.5 RateTransition
21.5.1 RateTransition实例
速率转换模块,可以转换不同的信号速率。
模型的配置为定步长,离散解算器,0.01的步长。
搭建仿真模型,上面的加法使用继承的Sample Time为0.01s,下面的模块我们强制设置为0.02s。
可以打开仿真的Sample Time区分颜色。
运行模型,采样时间被区分开。
将两部分模型进行加法,模型自动转换是按照低采样率转换为高采样率的方式。最后按照0.01s进行加法。
我们可以使用速率转换模块进行强制转换。设置速率转换模块的输出速率。
进行仿真,可以看出来速率转换后是按照0.02s的采样率进行加法。
速率转换模块的参数设置,指定采样时间,设置初始值。
拖2个计数模块,将上面的设置Sample Time为0.01s,下面的设置0.02s。对数据进行Log,运行模型,分析数据。
不同的采样周期转换后的加法,得出的结果不一样,需要根据实际项目情况做选择。
21.5.2 RateTransition选项配置说明
速率转换模块的配置项说明,确保数据传输过程中的数据完整性和确保确定性数据传输选项,不同配置的选择。
转移处理选项 | 模块参数设置 |
| 选择:
|
| 选择:
清除:
|
| 清除:
|
标签与模块的行为对应
标签 | 模块行为 |
ZOH | 充当零阶保持器 |
1/z | 充当单位延迟器 |
Buf | 在信号灯控制下将输入复制到输出 |
Db_buf | 使用双缓冲区将输入复制到输出 |
3buf | 使用三缓冲区将输入复制到输出 |
Copy | 在不保护的情况下将输入复制到输出 |
NoOp | 不执行任何操作 |
Mixed | 扩展为具有不同行为的多个模块 |
RT | 指示使用调度编辑器时分区之间的数据传输。 |
同样是D1采样的时候,显示NoOp。
从D1 0.01s到D2 0.02s,显示ZOH。
从D2 0.02s到D1 0.01s,显示1/z。
转换速率不是整数倍数的情况。
清除确保确定性数据传输选项。
下表总结了当输入和输出端口(inTs 和 outTs)的采样时间为周期性或同步时每个标签的显示方式。
模块设置 | 模块标签 | |||
Rate Transition | Rate Transition 模块的条件 | 保证数据完整性与确定性 | 仅保证数据完整性 | 不保证数据完整性或确定性 |
inTs = outTs (相等) | inTsOffset < outTsOffset | 无(错误) | Buf | Copy 或者 NoOp(请参阅表后面的注释) |
inTsOffset = outTsOffset | Copy 或者 NoOp(请参阅表后面的注释) | Copy 或者 NoOp(请参阅表后面的注释) | ||
inTsOffset > outTsOffset | 无(错误) | Db_buf | ||
inTs < outTs (快速到慢速) | inTs = outTs / N inTsOffset、outTsOffset = 0 | ZOH | Buf | |
inTs = outTs / N inTsOffset ≤ outTsOffset | 无(错误) | |||
inTs = outTs / N inTsOffset > outTsOffset | 无(错误) | Db_buf | ||
inTs ≠ outTs / N | 无(错误) | |||
inTs > outTs (慢速到快速) | inTs = outTs * N inTsOffset、outTsOffset = 0 | 1/z | Db_buf | |
inTs = outTs * N inTsOffset ≤ outTsOffset | 无(错误) | |||
inTs = outTs * N inTsOffset > outTsOffset | 无(错误) | |||
inTs ≠ outTs * N | 无(错误) | |||
关键注释
|
21.6 BusToVector
从这小节开始,剩下的模块在模型生成代码过程中都不是很常用。
Bus To Vector模块,将bus信号转换为数组/向量信号。转换的必须是Virtual Bus虚拟总线信号。
Bus转换成的数组。
数据类型不一致的时候,报错。
21.7 DataTypeConversionInherited
强制类型转换,使用其他输入信号的类型。不需要明确地在模块里指定数据类型,而是通过连接另一个信号来指定。
如图是使用constant的数据类型uint8,强制转换输入inport的uint32类型为uint8类型
uint16的258转换成uint8,超出uint8的范围,最后输出为2。