• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: matlab  

资源简介

基于模型预测控制的DMC控制算法,利用参数化模型即传递函数进行控制器设计

资源截图

代码片段和文件信息

function pitch_dmc(block)
setup(block);

function setup(block)

block.NumDialogPrms = 12;
%% Register number of input and output ports
block.NumInputPorts  = 2;
block.NumOutputPorts = 1;

%% Setup functional port properties to dynamically
%% inherited.
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;

block.InputPort(1).Dimensions        = 1;
block.InputPort(1).DatatypeID        = 0;  % double
block.InputPort(1).Complexity        = ‘Real‘;
block.InputPort(1).DirectFeedthrough = false;

block.InputPort(2).Dimensions        = 1;
block.InputPort(2).DatatypeID        = 0;  % double
block.InputPort(2).Complexity        = ‘Real‘;
block.InputPort(2).DirectFeedthrough = false;

block.OutputPort(1).Dimensions       = 1;  %这里二维变3维
block.OutputPort(1).DatatypeID        = 0;  % double
block.OutputPort(1).Complexity        = ‘Real‘;

%% Set block sample time to variable sample time
sample=block.DialogPrm(1).Data;  %% 即 Ts
block.SampleTimes = [sample 0]; 

%% Set the block simStateCompliance to default (i.e. same as a built-in block)
block.SimStateCompliance = ‘DefaultSimState‘;

%% Register methods
block.RegBlockMethod(‘SetInputPortSamplingMode‘ @SetInputPortSamplingMode); %% 输入/出端口的属性,说明端口是否工作在基于采样(或基于帧)的模式
block.RegBlockMethod(‘PostPropagationSetup‘    @PostPropagationSetup);      %% 设置工作区域和状态变量。   可以在这里注册运行方法
% block.RegBlockMethod(‘InitializeConditions‘    @InitConditions);%% 初始化;%%若仿真开始前及仿真过程中需要多次初始化,则使用该回调。该回调对连续状态ContStates和/或Dwork向量赋初始值、配置内存等。
% % 写成start好像比较好?但是试了一下,结果一样
block.RegBlockMethod(‘Start‘ @Start); %% 若仅在仿真开始前需要初始化,则使用该回调。
block.RegBlockMethod(‘Outputs‘                 @Output);  %%  生成输出块
block.RegBlockMethod(‘Update‘                  @Update);  %%  更新

% function SetInputPortSamplingMode(block port mode) %% 似乎与block.SampleTimes = [sample 0]重复。 试过,单输出可以删除。多输出不可以。

% block.InputPort(port).SamplingMode = mode;

% for i = 1 : block.NumOutputPorts
%     block.OutputPort(i).SamplingMode = mode;
% end

function PostPropagationSetup(block)

%% Setup Dwork
block.NumDworks = 1;
block.Dwork(1).Name = ‘control_u‘;   % 下一次计算要用到,所以要设置为状态向量
block.Dwork(1).Dimensions      = 1;   %这里2维度变3维
block.Dwork(1).DatatypeID      = 0;   %double;
block.Dwork(1).Complexity  

评论

共有 条评论