1.前言
为了测试控制算法对系统不同初始状态的收敛情况,我准备通过设置不同的初始状态,使用for循环,循环进行仿真,获取系统收敛情况,因此需要使用m文件来推simulink进行控制和传递参数。
2.方法
2.1 修改S-Function,增加外部参数
我的控制系统是由控制算法S-Function文件和控制模型S-Function文件构成,控制算法中使用了系统的初始状态来进行有限时间控制,故需要同时对控制算法和控制模型设置相同的初始状态。
2.1.1 控制模型
在控制模型文件刚开始调用的函数中,加入外部参数x00,因初始状态是在mdlInitializeSizes函数中定义的,所以还需要在该函数中加入外部参数x00
function [sys,x0,str,ts] = ControlTestPlant(t, x, u, flag, x00)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(x00); % 调用初始化子函数
修改mdlInitializeSizes函数,给函数增加外部参数x00
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(x00) %初始化子函数
sizes = simsizes;
sizes.NumContStates = 2; %连续状态变量个数
sizes.NumDiscStates = 0; %离散状态变量个数
sizes.NumOutputs = 2; %输出变量个数
sizes.NumInputs = 1; %输入变量个