以下步骤显示了如何在Level-2 MATLAB Sfunctions中初始化和使用DWork向量。 这些步骤使用S函数msfcn_unit_delay.m。
-
在PostPropagationSetup方法中,初始化DWork向量的数量以及每个向量的属性。 例如,以下PostPropagationSetup回调方法配置一个DWork向量,用于存储离散状态。
function PostPropagationSetup(block) %% Setup Dwork block.NumDworks = 1; block.Dwork(1).Name = 'x0'; block.Dwork(1).Dimensions = 1; block.Dwork(1).DatatypeID = 0; block.Dwork(1).Complexity = 'Real'; block.Dwork(1).UsedAsDiscState = true;
Simulink.BlockCompDworkData和父类Simulink.BlockData的参考页列出了可以为Level-2 MATLAB Sfunction DWork向量设置的属性。
-
在Start或InitializeConditions方法中初始化DWork向量值。 将Start方法用于仅在模拟开始时初始化的值。 每当重新启用包含S功能的已禁用子系统时,请使用InitializeConditions方法获取需要重新初始化的值。
例如,下面的InitializeConditions方法将在上一步中配置的DWork向量的值初始化为第一个S函数对话框参数的值。
function InitializeConditions(block) %% Initialize Dwork block.Dwork(1).Data = block.DialogPrm(1).Data;
-
在“Outputs”,“Update”等方法中,根据需要使用或更新DWork矢量值。 例如,以下Outputs方法将S函数输出设置为等于DWork向量中存储的值。 然后,Update方法将DWork向量值更改为第一个S函数输入端口的当前值。
%% Outputs callback method function Outputs(block) block.OutputPort(1).Data = block.Dwork(1).Data; %% Update callback method function Update(block) block.Dwork(1).Data = block.InputPort(1).Data;
2级MATLAB S函数不支持MATLAB稀疏矩阵。 因此,您不能将稀疏矩阵分配给DWork向量的值。 例如,以下代码行会产生错误
block.Dwork(1).Data = speye(10)
speye命令生成一个稀疏的恒等矩阵。