在此示例中,您将使用S-Function Builder中的基本方法来模拟具有两个状态的双输入的二输出离散状态空间系统。状态空间矩阵是S函数的参数,S函数输入和输出是向量。
如果您想研究创建的S函数的手动书写版本,请参阅dsfunc.c.
。请注意,要从示例S函数构建器模型创建S函数,您需要先构建模型。
指定离散状态的数量及其初始条件,采样模式和S函数的采样时间。此示例包含两个离散状态,每个初始化为1
,以及具有采样时间的离散示例模式1
。确保这一点直接喂养选择,因为S函数输入的当前值用于计算其输出。
使用端口和参数编辑器底部的表格以指定S函数的端口和参数。对于此示例,我们有一个输入,一个输出端口和四个参数。
要设置或更改块参数的值,可以:
双击S函数建设者块在模型上。
使用块参数从上下文菜单中。
或者,您可以将状态空间矩阵存储在MATLAB中的变量中®工作区并输入变量名称进入价值每个参数的字段。在图像上输入图像中的值价值场面的领域块参数桌子。
在这个例子中,outputs_wrapper.
方法以输入和状态向量和状态空间矩阵计算S函数输出。在输出代码中,参考S函数参数使用在上定义的参数名称端口和参数桌子。使用标量索引索引到二维矩阵,再次牢记S函数使用基于零索引。例如,要访问元素C(2,1)
在S函数参数中C
, 用C [1]
在S函数代码中。
void dsfunc_builder_outputs_wrapper(const real_t * u,real_t * y,const real_t * xd,const real_t * xc,const real_t * a,const int_t p_width0,const real_t * b,const int_t p_width1,const real_t * c,const int_t p_width2,const_t p_width2,const_t p_width2real_t * d,const int_t p_width3){/ * output_begin * / y [0] = c [0] * xd [0] + c [2] * xd [1] + d [0] * u [0] + d[2] * U [1];y [1] = c [1] * xd [0] + c [3] * xd [1] + d [1] * u [0] + d [3] * u [1];/ * output_end * /} |
这update_wrapper.
方法更新离散状态。与输出代码一样,使用S-Function参数名称和索引使用标量索引将S-Function参数名称和索引中的2-D矩阵,请记住S函数使用基于零索引。例如,要访问元素A(2,1)
在S函数参数中一种
, 用A [1]
在S函数代码中。变量XD.
存储离散状态的最终值。输入以下代码update_wrapper.
功能。
void dsfunc_builder_update_wrapper(const real_t * u,real_t * y,real_t * xd,const real_t * a,const int_t p_width0,const real_t * b,const int_t p_width1,const real_t * c,const int_t p_width2,const real_t * d,const int_tp_width3){/ * update_begin * / real_t tempx [2] = {0.0,0.0};tempx [0] = a [0] * xd [0] + a [2] * xd [1] + b [0] * u [0] + b [2] * u [1];tempx [1] = a [1] * xd [0] + a [3] * xd [1] + b [1] * u [0] + b [3] * u [1];xd [0] = tempx [0];xd [1] = tempx [1];/ * update_end * /} |
单击箭头下建造
并选择以下选项:
显示编译步骤
创建一个调试的mex文件
生成包装器TLC
要了解有关每个选项的更多信息,请参阅使用S函数构建器自动构建S函数。
要构建您的S函数,请单击建造在ToolStrip上为此函数创建可执行文件。您现在可以运行模型并将输出与原始的离散状态空间S函数进行比较sfcndemo_dsfunc.
。