完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
S-function函数
System function的简称,是对一个动态系统的计算机程序语言描述。 S-function接收来自Simulink解法器的相关信息,并对解法器发出的命令做出适当的响应,这种交互作用类似simulink系统模块与解法器交互作用。 在Matlab中,可以选择M文件,C或MEX文件编写。 最广泛的用途是定制用户自己的simulink模块。 主要用来实现下面几个方面的功能: ①增加一个通用目标的模型 ②使用S-function的模块来充当硬件的驱动 ③在仿真中嵌入已经存在的C代码 ④将系统表示成一系列的数学方程 ⑤在simulink中使用动画 |
|
|
|
常用概念
① 直接馈通 指输出(或者是对于变步长采样块的可变步长)直接受控于一个输入口的值。 ②动态维矩阵 S-function可编写成支持任意维的输入。当仿真开始时,根据驱动S-function的输入向量的维数动态确定实际输入的维数。 M文件的S-function只可有一个输入端口,而且输入端口只能接受一维(向量)的信号输入。 信号的宽度是可变的。在一个M文件的S-function内,如果要指示输入宽度是动态的,必须在数据结构sizes中相应的域值指定为-1,结构sizes是在调用mdlInitializeSizes时返回的一个结构。 当S-function通过使用length(u)来调用时,可以确定实际输入的宽度。如果指定为0宽度,那么S-function模块中将不出现输入端口。 如果块的其他特性,如输出数量、离散状态数量或连续状态数量,被指定为动态宽度,那么simulink会将这些向量定义为与输入向量具有相同的长度。 ③采样时间和偏移量 采样时间选项: 连续采样时间:用于具有连续状态和/或非过零采样的S-function 连续但微步长固定采样时间:需要在每一个主仿真步上执行,但在微步长内值不发生变化的S-function 离散采样时间:如果S-function模块的行为是离散时间间隔的函数,那么可以定 义一个采样时间来控制simulink何时调用该模块。也可以定义一个偏移量来延迟每个采样时间点。偏移量的值不超过相应采样时间的值。 采样时间点发生的时间: TimeHit=(n*period)+offset 可变采样时间:采样时间间隔变化的离散采样时间。在每步仿真的开始,具有可变采样时间的S-function需要计算下一次采样点的时间。 继承采样时间:从其输入块继承采样时间。 一个块可以从以下几种块中继承采样时间: ①输入块 ;②输出块;③系统中最快的采样时间 采样时间设置为继承:M文件中的S-function中使用-1作为采样时间,C的S-function中使用INHERITED_SAMPLE_TIME作为采样时间。 采样时间是按照固定格式成对指定的:[采样时间,偏移时间] 还可指定采样时间从驱动块继承而来,S-function只能有一个采样时间对 |
|
|
|
S-function模块
S-Function模块在User Defined Function库中 双击S-function模块,打开其参数设置对话框,设置S-Function参数 S-function name(文件名)填写S-function不带扩展名的文件名,文件名文本框不能为空。 S-function parameters(参数编辑框)文本框中填写S-function所需要的参数,参数并列给出,参数间以逗号分隔开。 创建S-Function源代码,单击“Edit”按钮,即可打开源代码M文件的编辑窗口 连接模块,进行仿真 |
|
|
|
S-function工作原理
S-function优点就是可以创建一个通用的模块,在模块中可以多次调用,在不同的场合下仅仅修改它的参数。 仿真流程: S-function包括主函数和6个功能子函数 mdlInitializeSizes初始化,定义S-function的基本特性,包括采样时间、连续或离散状态的初始条件和Sizes数组 mdlDerivatives连续状态微分 mdlUpdate离散状态更新 mdlOutputs模块输出 mdlGetTimeOfNextVarHit计算下次采样时刻 mdlTerminate仿真结束 仿真过程中,通过Switch-case语句,根据不同阶段对应的flag值(仿真流程标志向量)来调用S-function的不同子函数,以完成对S-function模块仿真流程的控制。 定义S-function的初始信息 S-function的说明信息,这一部分主要是在mdlIntializeSizes子函数里完成。 Sizes数组是S-function函数信息的载体,它的内部字段意义为: ①NumContStates:连续状态的个数(状态向量连续部分的宽度) ②NumDIscStates:离散状态的个数(状态向量离散部分的宽度) ③NumOutputs:输出变量的个数(宽度) ④NumInputs:输入变量的个数(宽度) ⑤DirFeedthrough:有无直接馈入,其是一个布尔代数,0或1两种,0代表没有 ⑥NumSampleTimes:采样时间的个数,ts变量的行数 字段代表的向量宽度为动态可变,则可以将它们赋值为-1 由于S-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块进行合成或分解 输入和输出的参量说明: 默认的4个输入参量:t,x,u,flag,他们次序不能变动 t代表仿真时间;x代表状态向量;u代表输入向量;flag是一个控制在每个仿真阶段调用哪一个子函数的参数; 默认的4个输出参量:sys,x0,str,ts,他们次序不能变动 sys是一个通用的返回参数,它的返回值取决于flag值; x0是初始状态值,这个返回参数只有在flag值为0时才有效;str没有任何意义;ts是一个m*2的矩阵,它的两列分别表示采样时间间隔和偏移。 建立S-function可以分成两个分离的任务: ①初始化模块特性 ②将算法放到合适的S-function子函数中去 |
|
|
|
只有小组成员才能发言,加入小组>>
【爱芯派 Pro 开发板试用体验】人体姿态估计模型部署后期尝试
1519 浏览 0 评论
1005 浏览 0 评论
【爱芯派 Pro 开发板试用体验】人体姿态估计模型部署后期尝试
1080 浏览 0 评论
【爱芯派 Pro 开发板试用体验】在爱芯派 Pro上部署坐姿检测
1065 浏览 0 评论
【爱芯派 Pro 开发板试用体验】利用爱芯派 Pro部署USB摄像头
1209 浏览 0 评论
【爱芯派 Pro 开发板试用体验】爱芯元智AX650N部署yolov5s 自定义模型
697浏览 1评论
1723浏览 1评论
【爱芯派 Pro 开发板试用体验】+ 利用TF卡进行系统更新
1380浏览 1评论
1326浏览 1评论
721浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 22:24 , Processed in 0.600664 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号