simulink之S函数--实践
若系统G(s)=1/(3s+2),乳选取状态变量x=y,则其状态空间方程可表示为
dx = (-2x + u)/3 且 y = x,对系统建立S-函数,绘制该控制系统的阶跃响应曲线。
零、分析,其实该题若不是要求建立S-函数,绘制系统的阶跃响应曲线,完全可以直接用系统的传递函数,采用如下方式,直接完成的。
一、传递函数直接建模如下:
仿真结果:
但是,既然要求建立S-函数,那就开始吧。
二、建立S-函数,通过状态方程实现阶跃函数的绘制
1、S-函数如下:
1 function[sys, x0, str, ts] = sFunSam1(t, x, u, flag, xInitial) 2 switch flag 3 case 0 4 [sys, x0, str, ts] = mdlInitializeSizes(xInitial); 5 case 1 6 sys = mdlDerivatives(t, x, u); 7 case 2 8 sys = mdlUpdate(t, x, u); 9 case 3 10 sys = mdlOutputs(t, x, u); 11 case 4 12 sys = mdlGetTimeOfNextVarHit(t, x, u); 13 case 9 14 sys = mdlTerminate(t, x, u); 15 otherwise 16 error(['Unhandled flag = ', num2str(flag)]) 17 end 18 19 function [sys, x0, str, ts] = mdlInitializeSizes(xInitial) 20 sizes = simsizes; 21 sizes.NumContStates = 1; 22 sizes.NumDiscStates = 0; 23 sizes.NumOutputs = 1; 24 sizes.NumInputs = 1; 25 sizes.DirFeedthrough = 0; 26 sizes.NumSampleTimes = 1; 27 sys = simsizes(sizes); 28 x0 = xInitial; 29 str = []; 30 ts = [0 0]; 31 32 function sys = mdlDerivatives(t, x, u) 33 dx = (-2 * x + u)/3; 34 sys = dx; 35 36 function sys = mdlUpdate(t, x, u) 37 sys = []; 38 39 function sys = mdlOutputs(t, x, u) 40 sys = x; 41 42 function sys = mdlGetTimeOfNextVarHit(t, x, u) 43 sampleTime = 1; 44 sys = t + sampleTime; 45 46 function sys = mdlTerminate(t, x, u) 47 sys = [];
在初始换子函数中引入了一个xInitial参数,参数的值通过matlab命令窗口输入即可
2、建模如上:
模块的名称是second.mdl,我的S-函数名称为sFunSam1.m,这里的S-函数模块的加入是通过Library Browser--Simulink--User-Defined Functions--S-Function加入的,修改属性只是浏览到sFunSam1.m文件的位置是没有什么用处的,需要将S-函数的目录加入到matlab的path中才可以的。切结仿真模型和S-函数不要同名,我这里是不行的。
3、仿真结果:
如果直接运行,可能会出现:
Invalid setting in 'second/S-Function' for parameter 'xInitial'. Caused by: Error evaluating parameter 'xInitial' in 'second/S-Function' Unrecognized function or variable 'xInitial'. Variable 'xInitial' has been deleted from base workspace. Suggested Actions Load a file into base workspace. Fix Create a new variable. Fix
在matlab的命令窗口输入:
clear
xInitial = 0;
就是让worksapce中有xInitial中有值即可:
好了,也就是说,无论是从系统的传递函数,还是从系统的状态方程,因为是同一个系统的不同描述而已,因此系统的阶跃响应曲线是完全一模一样的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2017-06-08 50深入理解C指针之---指针与别名
2017-06-08 51深入理解C指针之---指针与线程
2017-06-08 47深入理解C指针之---指针与硬件
2017-06-08 45深入理解C指针之---指针释放
2017-06-08 46深入理解C指针之---内存分析
2017-06-08 44深入理解C指针之---指针安全
2017-06-08 43深入理解C指针之---指针与树