该示例示出了如何使用明确的下MPC电压和轴转矩约束来控制DC伺服机构。
对于一个类似的例子,它使用传统的含蓄MPC,看直流伺服电机与约束的不可测输出。
定义了线性开环动态模型厂
。变量τ
为作为输出约束的最大允许扭矩。
[植物,tau蛋白] = mpcmotormodel;
指定MPC控制器的输入和输出信号的类型。第二输出,扭矩,是不可测量的。
植物= setmpcsignals(植物,'MV',1“莫”,1“UO”2);
操纵变量+/- 220伏之间的约束。自建厂以来,输入和输出是不同量级的,你还可以使用比例因子,以方便MPC调整。比例因子的典型的选择是上/下限或工作范围。
MV =结构(“最低”,-220,“最大”,220,'比例因子',440);
扭矩输出的限制期间的前三个预测步骤仅施加到限制明确MPC设计的复杂性。
OV =结构(“最低”{天道酬勤,[-tau; -tau; -tau; -Inf]},...“最大”{Inf文件,τ; tau蛋白; tau蛋白; Inf文件]},...'比例因子',{2π* 2 *τ});
控制任务是获取零点跟踪的角度位置偏移。因为你只具有一个操纵变量,轴扭矩被允许通过其权重设置为零其约束内浮动。
权重=结构('MV'0,“MVRate”,0.1%,机汇的[0.1 0]);
创建一个MPC控制器与样本时间TS
,预测地平线p
和控制地平线米
。
t = 0.1;p = 10;m = 2;mpcobj = mpc(植物、t、p、m,重量、MV, OV);
显式MPC执行与传统隐式MPC控制器定义的MPC控制律等价的显式分段仿射形式。为了从隐式MPC控制器生成显式MPC控制器,必须指定每个控制器状态、参考信号、操作变量和测量扰动的范围,以便在这些范围定义的参数集中解决多参数二次规划问题。
创建范围您可在此之后为每个参数指定的范围内。
范围= generateExplicitRange(mpcobj);
——>转换模型离散时间。假设在测量的输出通道1上没有增加干扰。- - >”模型。“mpc”对象的“噪音”属性为空。假设每个测量的输出通道上都有白噪声。
指定控制器状态范围
MPC控制器状态按顺序包括来自工厂模型、干扰模型和噪声模型的状态。当状态与物理参数不对应时,设置状态变量的范围有时会很困难。在这种情况下,为了收集状态范围数据,建议使用典型的参考和干扰信号运行多个开环工厂仿真。
range.State.Min(:) = -1000;range.State.Max(:) = 1000;
通常你知道在工厂的标称工作点所使用的参考信号的实际范围。用于生成显式MPC控制器的范围必须至少与实际范围一样大。注意,扭矩参考范围是固定的0
因为它的重量为零。
range.Reference。最小值= (5;0);range.Reference。Max = (5; 0);
如果操作变量受到约束,用于生成显式MPC控制器的范围必须至少与这些限制一样大。
range.ManipulatedVariable.Min = MV.Min - 1;range.ManipulatedVariable.Max = MV.Max + 1;
使用指定的范围创建显式MPC控制器。
mpcobjExplicit = generateExplicitMPC (mpcobj、范围)
区域发现/未知:75/0显式MPC控制器---------------------------------------------控制器采样时间:0.1(秒)多面体区域:75号的参数:6是溶液简化:否状态估计:默认卡尔曼增益---------------------------------------------类型“mpcobjExplicit.MPC”原始隐MPC的设计。键入“mpcobjExplicit.Range”为参数的有效范围。键入用于多参数QP计算中使用的选项“mpcobjExplicit.OptimizationOptions”。键入“mpcobjExplicit.PiecewiseAffineSolution”在每个解决方案区域和增益。
您可以审查明确MPC控制法的定义,分段仿射分区的任何2-d部分。要做到这一点,首先要创建一个参数结构,您可以指定2-d部分情节。
PARAMS = generatePlotParameters(mpcobjExplicit);
在这个例子中,我们用第一个状态函数来表示第二个状态函数。所有其他参数必须在它们各自的范围内的值处固定。
修正其他状态变量。
params.State.Index = [3 4];params.State.Value = [0 0];
修复参考信号。
params.Reference.Index = [1 2];params.Reference.Value =π0];
修复操作变量。
params.ManipulatedVariable.Index = 1;params.ManipulatedVariable.Value = 0;
绘制指定的2-d部。
plotSection(mpcobjExplicit,则params);轴([ - 3 0.3 -2 2。]);网格标题('部分分区[X3的(T)= 0,X4(T)= 0,U(T-1)= 0,R(T)= PI]')包含('X1(t)的')ylabel ('X2(t)的')
SIM卡
函数比较隐式MPC控制器和显式MPC控制器的闭环仿真结果。
Tstop = 8;%秒TF = ROUND(TSTOP / TS);%模拟迭代R = [PI 0];%基准信号[Y1,T1,U1] = SIM(mpcobj,TF,R);%仿真与传统MPC[Y2,T2,U2] = SIM(mpcobjExplicit,TF,R);%仿真明确MPC
——>转换模型离散时间。假设在测量的输出通道1上没有增加干扰。- - >”模型。“mpc”对象的“噪音”属性为空。假设每个测量的输出通道上都有白噪声。
仿真结果基本一致。
fprintf中('隐式和显式MPC轨迹的差异= %g\n',...范数(U2-U1)+规范(Y2-Y1));
隐式和显式MPC轨迹差= 4.60623e-12
要运行这个例子,Simulink®的需要。金宝app
如果〜mpcchecktoolboxinstalled('金宝appSIMULINK')disp (的金宝appSimulink(R)需要运行这个例子“。)返回结束
在Simulink中模拟线性工厂模型的闭环控制。金宝app显式MPC控制器块被配置为使用mpcobjExplicit
作为它的控制器。
MDL ='empc_motor';open_system(MDL)SIM(MDL)
闭环响应是相同的设计传统MPC控制器直流伺服电机与约束的不可测输出。
若要减少内存占用,可以使用简化
函数的作用是减少分段仿射解区域的数量。例如,可以删除Chebyshev半径小于的区域0.08
。然而,您所付出的代价是控制器性能不是最优的。
mpcobjExplicitSimplified =简化(mpcobjExplicit,'半径',0.08)
区域来分析:75分之75 - > 37的区域被删除。明确的MPC控制器---------------------------------------------控制器样品时间:0.1(秒)多面体区域:38号的参数:6是溶液简化:是状态估计:默认卡尔曼增益---------------------------------------------类型“mpcobjExplicitSimplified.MPC”原始隐MPC的设计。键入“mpcobjExplicitSimplified.Range”为参数的有效范围。键入用于多参数QP计算中使用的选项“mpcobjExplicitSimplified.OptimizationOptions”。键入“mpcobjExplicitSimplified.PiecewiseAffineSolution”在每个解决方案区域和增益。
减少了分段仿射区域的数量。
比较不理想的明确MPC和明确MPC之间的闭环仿真结果。
[y3,t3,u3] = sim(mpcobjExplicitSimplified, Tf, r);
——>转换模型离散时间。假设在测量的输出通道1上没有增加干扰。- - >”模型。“mpc”对象的“噪音”属性为空。假设每个测量的输出通道上都有白噪声。
仿真结果是不一样的。
fprintf中(“精确和次优明确的MPC的差异轨迹=%克\ N”,...范数(U3-U2)+规范(Y3-Y2));
精确与次优的显式MPC轨迹之差= 439.399
阴谋的结果。
图副区(3,1,1)情节(T1,Y1(:,1),T3,Y3(:,1),'O'网格)标题(“角(弧度)”)图例(“显性”,“次优显式”)副区(3,1,2)情节(T1,Y1(:,2),T3,Y3(:,2),'O'网格)标题(“转矩(Nm)”)图例(“显性”,“次优显式”次要情节(3,1,3)情节(t1, u1, t3, u3,'O'网格)标题('电压(V)')图例(“显性”,“次优显式”)
次优显式MPC的仿真结果略差。
[1] A. Bemporad和E.莫斯卡,“履行通过引用管理在不确定线性系统硬约束,”自动化卷。34,没有。4,第451-461,1998。
bdclose (mdl)