添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
细心的毛巾  ·  Windows中从Git Bash运行jq·  6 天前    · 
腹黑的消炎药  ·  vue3 + typescript ...·  2 周前    · 
神勇威武的烤面包  ·  委员会动态·  3 月前    · 
玉树临风的乌冬面  ·  Xcode 15. Method ...·  3 月前    · 
1.遇到过的问题 (一)

①simulink 根据flag的具体数值判断系统是计算连续部分还是离散部分 ,并调用相应的子函数,simulink在处理混合系统时将同时调用S-function的mdlUpdate、mdlOutput和mdlGetTimeOfNextVarHit子函数。对于离散系统而言,在mdlUpdate、mdlOutput中需要判断是否需要更新离散状态和输出。

在初始化子函数中有个simsizes函数
关于这个函数,用“帮助”里给出的信息:
simsizes用来设定s-function函数的尺寸
simsizes是一个帮助函数,用在M文件S函数中去提供关于S函数的具体信息。
这个信息包括输入,输出,状态和其他模块的特性的数量。
给simulink这些信息,在初始化阶段先调用未有预设值的simsizes函数
如: sizes=simsizes;
在初始化适合S函数的说明后,simsizes函数会被重新调用将这个结构转变成矢量才能够被simulink处理。
如 : sys=simsizes(sizes)

flag值未定义

有时总会出现:
Input argument “flag” is undefined.

switch flag,

error in ==>xxxxx at 107
这个问题我没有找到原因 ,弄好的方式是改变下初始化参量的位置,把flag放在了最后的位置,但是这应该不是原因。
S函数名字和simulink的文件名

S-function的名字和editor中的调用.m文件名要一致,但不要和simulink的文件名一致。

自带S-function的实例

在Matlab中输入sfundemous命名,可以查看s-function的相关实例。
或在User-defined function 模块库中的sfundemous模块可以查看实例。

过零检测的作用

变步长解算方法会动态地评估下一个采样时刻计算所使用的步长,当前后两个采样点的值变化大时,则缩小采样步长;反之,当前后两个采样点的值变化小时则增大步长。这种做法使得解算器在计算不连续临近区域时使用较小的步长,因为不连续点临近区域值变化幅度大。这种做法能保证计算的精确度,但是却有可能导致采样过于密集、步长过小而导致仿真时间太长。
simulink使用过零检测技术来精确定位不连续点,以免仿真时步长过小导致仿真时间太长,一般情况下能够提高仿真速度,但有可能使得仿真到达规定时间长度之前就停止。当采用变步长解算方法仿真时,如果遇到步长自动变得很小导致仿真时间很长或基本没有进度,可以考虑勾选开启过零检测功能。
简单地来说,变步长求解器可以在非连续点添加时间步长来仿真非连续动态系统。过零检测就是为这些不连续点设定的。(摘自:空天遮阳伞)

示波器点约束
有时示波器只显示仿真的后一部分,前面时间的结果没有显示。
示波器有 “5000"limit data points to last限制勾选 ,去掉了勾选就正常显示了。

simulink的基础总结:
首先, simulink的基本知识 ,包括simulink的工作环境,工作原理,simulink求解器,simulink的应用工具箱和模块库,和基本操作。
重点需要关注的是:simulink求解器的设置和应用,还有模块库中各模块的作用,还有基本操作,例如连线分岔,用Ctrl+点连线,将虚线牵引到所要连接的模块。

其次, 系统仿真的基本概括 ,包括simulink建模与仿真(离散系统,连续系统,混合系统),命令行动态仿真,模型线性化,求平衡点(稳定),子系统应用(使能,触发,触发使能),控制流语句(if-else,switch,while,for),子系统封装,S-function(自定义模块)
这里上面形成一定的覆盖,但是还有很多细节需要确认和应用时遇到再确认。

总之,还需要继续应用才能更加清楚。