这个例子展示了如何在命令行调试Simulink®模型的线性化金宝appLinearizationAdvisor
对象。您还可以交互式地排除线性化结果的故障。有关更多信息,请参见故障排除线性化结果的模型线性化.
打开模型。
mdl =“scdpendulum”;open_system (mdl)
摆角的初始条件为90
从不稳定的垂直平衡逆时针方向的度0
度。摆角速度的初始条件为0
度/ s。保持这种状态的公称扭矩为-49.05
N m。此配置作为模型初始条件保存。
使用模型中定义的分析点和模型工作点对模型进行线性化。
io = getlinio (mdl);linsys =线性化(mdl, io);
为了检查线性化结果,绘制它的波德响应。
波德(linsys)
模型线性化为零,τ
,对角度或角速度没有影响。要找出零线性化的来源,你可以用aLinearizationAdvisor
对象。
要在线性化过程中收集诊断信息并创建用于故障排除的advisor工具,请首先创建linearizeOptions
选项集,指定StoreAdvisor
选择真正的
.
选择= linearizeOptions (“StoreAdvisor”,真正的);
使用此选项集线性化Simul金宝appink模型。返回信息
参数中的线性化诊断信息LinearizationAdvisor
对象。
[linsys1, ~,信息]=线性化(mdl, io、选择);
提取LinearizationAdvisor
对象。
顾问= info.Advisor;
若要显示当前线性化的线性化路径,请使用突出
.
突出(顾问)
查看钟摆子系统。
如线性化路径对话框所示,突出显示的块在:
蓝色数值影响模型的线性化。
红色为线性化路径,但不影响当前工作点和块参数的模型线性化。
由于模型线性化为零,所以没有块对线性化做出贡献。
要获取线性化可能有问题的块的诊断信息,请使用建议
.这个函数返回一个newLinearizationAdvisor
对象,该对象包含线性化路径上至少满足以下条件之一的块的信息:
是否有关于其线性化的诊断信息
线性化到零
有代替线性化
adv1 =建议(顾问);
查看这些块的诊断信息摘要,使用getBlockInfo
.
getBlockInfo (adv1)
ans =块的线性化诊断:块信息:-----------索引块路径在路径上有助于线性化scdpendulum/pendulum/Saturation是否准确2。scdpendulum/angle_wrap/Trigonometric Function1是否摄动scdpendulum/pendulum/三角函数是否摄动
在本例中,advisor报告了三个潜在的问题块,一个饱和度块和两个三角函数块。在MATLAB中运行此示例时,块路径显示为超链接。要转到模型中的一个块,请单击相应的块路径超链接。
要查看有关特定块线性化的更多信息,请使用getBlockInfo
.有关可用诊断的信息,请参见BlockDiagnostic
.
例如,获取饱和度块的诊断信息。
diagInfo = getBlockInfo (adv1, 1)
diagInfo = linear Diagnostics for scdpendulum/pendulum/Saturation with properties: IsOnPath: 'Yes' contributestolineearization: 'No' LinearizationMethod: 'Exact' Linearization: [1x1 ss] operingpoint: [1x1 linearize.advisor.BlockOperatingPoint]
这个块有两条关于其线性化结果的诊断消息。第一个消息表明块被线性化,超出了其较低的饱和限制-49年
,因为输入工作点为-49.05
.
该消息还表明,块可以线性化为一个增益,这将块线性化为1
不管输入操作点是什么。
当你在MATLAB中运行这个例子时,文本线性化块作为增益显示为超链接。要打开饱和度块的块参数对话框,并突出显示线性化块作为增益的选项,请单击此超链接。
选择线性化时将其视为增益,然后单击好吧.
或者,您可以在命令行中设置该参数。
set_param (“scdpendulum /摆/饱和度”,“LinearizeAsGain”,“上”)
第二个诊断消息指出,该块的线性化将导致整个模型线性化为零。查看这个块的线性化。
diagInfo。线性化
ans = D = u1 y1 0名称:饱和静态增益
由于该块线性化为零,通过将其作为增益来修改块线性化是获得非零模型线性化的良好的第一步。
为了看到将饱和度块作为增益处理的效果,重新线性化模型,并绘制其波德响应。
[linsys2, ~,信息]=线性化(mdl, io、选择);波德(linsys2)
模型的线性化现在是非零的。
要检查是否有任何块仍然存在线性化的潜在问题,请提取advisor对象,并使用建议
函数。
advisor2 = info.Advisor;adv2 =建议(advisor2);
查看块诊断信息。
getBlockInfo (adv2)
ans =块的线性化诊断:块信息:-----------索引块路径在路径上有助于线性化scdpendulum/angle_wrap/Trigonometric Function1是否摄动2。scdpendulum/pendulum/三角函数是否摄动
仍然列出了两个三角函数块。
突出显示更新后的线性化路径。
突出(advisor2)
查看钟摆子系统。
要理解为什么这些块对线性化没有作用,请查看它们对应的块诊断信息。例如,获取第二个三角函数块的诊断信息。
diagInfo = getBlockInfo (adv2, 2)
diagInfo = linear Diagnostics for scdpendulum/pendulum/Trigonometric Function with properties: IsOnPath: 'Yes' contributestolineearization: 'No' LinearizationMethod: '微干扰' Linearization: [1x1 ss] operingpoint: [1x1 linearize.advisor.BlockOperatingPoint]
查看这个块的线性化。
diagInfo。线性化
ans = D = u1 y1 0
块线性化为零。要查看该结果是否符合块的当前操作条件,请检查其操作点。
diagInfo。OperatingPoint
输入:-------端口u 1 1.5708
块的输入工作点为.
你可以通过对输入求sin函数的一阶导数来用解析的方法找到块的线性化。
因此,当取值为块的线性化是零。输入的源是二阶积分器的第一输出,它与状态有关θ
.因此,这个块线性化到零if,在那里是一个整数。同样的条件也适用于angle_wrap子系统中的另一个三角函数块。如果这些块不期望线性化为零,您可以修改工作点状态θ
,并重新线性化模型。
线性化顾问还提供了用于创建自定义查询的对象和函数。使用这些查询,您可以在模型中找到匹配特定条件的块。例如,要找到所有使用数值扰动线性化的SISO块,首先为每个搜索条件创建查询对象:
有一个输入
有一个输出
是数值摄动
秦= linqueryHasInputs (1);qOut = linqueryHasOutputs (1);qPerturb = linqueryIsNumericallyPerturbed;
创建一个CompoundQuery
通过使用逻辑操作符组合这些查询对象。
sisopert = qIn & qOut & qPerturb;
中的块诊断advisor2
用于匹配这些条件的块。
sisopertBlocks =找到(advisor2 sisopert)
sisopertBlocks = LinearizationAdvisor与属性:模型:'scdpendulum' operingpoint: [1x1 opcond。BlockDiagnostics: [1x3 linearize.advisor.]BlockDiagnostic] QueryType: '((Has 1 Inputs & Has 1 Outputs) & Perturbation)'
模型中有三个SISO块,使用数值摄动进行了线性化。
有关使用自定义查询的更多信息,请参见在线性化结果中寻找匹配特定条件的块.
bdclose (mdl)