此示例演示如何在命令行上使用a调试Simulink®模型的线性化万博1manbetxLinearizationAdvisor
对象。您还可以交互式地排除线性化结果的故障。有关更多信息,请参见模型线性化的故障诊断结果。
打开模型。
mdl =“scdpendulum”;open_system (mdl)
摆角的初始条件为90
度的直立不稳定平衡逆时针0
度。摆角速度的初始条件为0
度/ s。保持这种状态的公称扭矩为-49.05
N m,该配置保存为模型初始条件。
使用线性化的模型和模型操作点定义的分析点模型。
IO = getlinio(MDL);linsys =线性化(MDL,IO);
为了检验线性化结果,画出它的波德响应。
波特(linsys)
模型线性化为零,使得力矩,τ
,对角度和角速度没有影响。要找出零线性化的来源,你可以用aLinearizationAdvisor
对象。
若要在线性化过程中收集诊断信息并创建用于故障排除的顾问,请首先创建一个linearizeOptions
选项集,指定StoreAdvisor
选择真正
。
选择= linearizeOptions (“StoreAdvisor”,真正的);
使用此选项集线性化Simul万博1manbetxink模型信息
输出参数,它包含在一个线性化的诊断信息LinearizationAdvisor
对象。
[linsys1, ~,信息]=线性化(mdl, io、选择);
提取LinearizationAdvisor
对象。
顾问= info.Advisor;
要显示当前线性化的线性化路径,请使用突出
。
突出(顾问)
查看钟摆子系统。
在Linearization path对话框中,高亮显示如下块:
蓝数值影响模型的线性化。
红色为线性化路径,但不影响当前操作点和块参数的模型线性化。
由于模型线性化为零,所以没有任何块对线性化有贡献。
要获取可能对线性化有问题的块的诊断信息,请使用提醒
。这个函数返回一个新的LinearizationAdvisor
对象,该对象包含线性化路径上的块的信息,且该信息至少满足下列条件之一:
有关于他们的线性化的诊断信息吗
线性化到零
有代替线性化
adv1 =建议(顾问);
查看诊断信息摘要这些块,使用getBlockInfo
。
getBlockInfo (adv1)
块的线性化诊断:块信息:——索引块路径在路径上有助于线性化线性化方法1。scd钟摆/摆/饱和度是不确切的2。scd钟摆/angle_wrap/三角函数1是的,没有摄动3。单摆/摆/三角函数是没有扰动的
在这种情况下,顾问报告三种可能有问题的块,一个饱和块和两个三角函数块。当运行在MATLAB这个示例中,块的路径显示为超链接。要转至模型中的这些块之一,单击相应的块路径的超链接。
要查看有关特定块线性化的更多信息,请使用getBlockInfo
。有关可用诊断的信息,请参阅BlockDiagnostic
。
例如,获取饱和块的诊断信息。
诊断接头= getBlockInfo (adv1, 1)
diag = scd钟摆/钟摆/饱和的线性化诊断,其性质如下:IsOnPath:“是”,有助于“是”,线性化:“否”,线性化方法:“精确”线性化:[1×1 ss]操作点:[1×1线性化。advisor. blockoperatingpoint]
这个块有两个关于其线性化结果的诊断信息。第一个消息表明,块在其较低的饱和限制之外线性化-49年
,因为输入操作点为-49.05
。
该消息还指示该块可以被线性化的增益,其线性化块作为1
不管输入操作点是什么。
当你在MATLAB中运行这个例子的时候线性化块作为增益显示为超链接。要打开饱和度块的块参数对话框,并突出显示将块线性化为增益的选项,请单击此超链接。
选择线性化时把它当作增益,然后单击好。
或者,您可以从命令行设置此参数。
set_param (“scdpendulum /摆/饱和度”,“LinearizeAsGain”,“上”)
第二个诊断消息声明,该块的线性化导致整个模型线性化为零。看看这个块的线性化。
diag.Linearization
名称:饱和静态增益。
由于此块线性化为零,因此通过将其视为增益来修改块线性化是获得非零模型线性化的第一步。
要查看将饱和块作为增益处理的效果,请重新对模型进行分析,并绘制其波德响应。
[linsys2, ~,信息]=线性化(mdl, io、选择);波德(linsys2)
模型线性化现在是非零的。
为了检查是否有任何块仍然是线性化潜在有问题的,解压顾问对象,并使用提醒
函数。
advisor2 = info.Advisor;adv2 =建议(advisor2);
查看块诊断信息。
getBlockInfo (adv2)
块的线性化诊断:块信息:——索引块路径在路径上有助于线性化线性化方法1。scd钟摆/angle_wrap/三角函数1是的,没有摄动2。单摆/摆/三角函数是没有扰动的
两个三角函数块仍然被列出。
突出显示更新后的线性化的线性化路径。
突出(advisor2)
查看钟摆子系统。
要理解为什么这些块对线性化没有贡献,请查看它们相应的块诊断信息。例如,获取第二个三角函数块的诊断信息。
诊断接头= getBlockInfo (adv2, 2)
diag = scd钟摆/钟摆/三角函数的线性化诊断,其性质如下:IsOnPath:‘Yes’促成了线性化:‘No’线性化方法:‘扰动’线性化:[1×1 ss]操作点:[1×1 linear . advisor.blockoperatingpoint]
看看这个块的线性化。
diag.Linearization
ANS = d = U1 Y1 0名称:三角函数静态增益。
块线性化为零。若要查看此结果是否为块的当前操作条件所期望,请检查其操作点。
diag.OperatingPoint
ans = scd摆/摆/三角函数输入的块操作点:——端口u 1 1.5708
块的输入工作点为。
你可以通过分析求sin函数对输入的一阶导数来求块的线性化。
因此,当取值为块的线性化是零。输入源是二阶积分器的第一个输出,它取决于状态θ
。因此,这个块线性化为0,在那里是一个整数。同样的条件也适用于angle_wrap子系统中的其他三角函数块。如果预期这些块不会线性化为零,则可以修改操作点状态θ
,重新建立模型。
Linearization Advisor还提供用于创建自定义查询的对象和函数。使用这些查询,您可以在模型中找到匹配特定条件的块。例如,要找到所有使用数值扰动线性化的SISO块,首先为每个搜索条件创建查询对象:
有一个输入
有一个输出
是数值摄动
秦= linqueryHasInputs (1);qOut = linqueryHasOutputs (1);qPerturb = linqueryIsNumericallyPerturbed;
创建一个CompoundQuery
使用逻辑运算符组合这些查询对象。
sisopert = qIn & qOut & qPerturb;
搜索块诊断advisor2
对于符合这些条件的块。
sisopertBlocks =找到(advisor2 sisopert)
sisopertBlocks = LinearizationAdvisor,属性:模型:‘scd摆’操作点:[1×1 opcond]。块诊断:[1×3 linear .advisor.]BlockDiagnostic] QueryType: '((Has 1 Inputs & Has 1 Outputs) & Perturbation)'
模型中有三个SISO块采用数值摄动进行线性化。
有关使用自定义查询的更多信息,请参见在线性化结果中查找匹配特定标准的块。
bdclose (mdl)