主要内容

多输入单输出装置的模型预测控制

该实例展示了如何设计、分析和仿真一个具有硬、软约束的模型预测控制器,该控制器适用于具有一个测量输出(MO)和三个输入的设备。输入由一个操纵变量(MV)、一个被测干扰(MD)和一个未被测干扰(UD)组成。在设计了控制器并分析了其闭环稳态增益后,用该控制器进行了仿真sim卡命令,在循环使用mpcmove,并与Simulink万博1manbetx®。仿真模型不匹配,无约束,开环显示。文中还讨论了输入输出扰动和噪声模型,以及如何改变内建状态估计器的卡尔曼增益。

定义植物模型

定义一个植物模型。对于本例,使用从每个输入到输出的连续时间传递函数。

plantTF = tf({1,1,1},{[1,5 1],[1,1],[。7。5 1]})定义并显示tf对象
plantTF =从输入1到输出:1--------------- s^2 + 0.5 s + 1从输入2到输出:1----- s + 1从输入3到输出:1------------------- 0.7 s^2 + 0.5 s + 1连续时间传递函数。

对于本例,在将植物传递给MPC控制器创建函数之前,要显式地将植物转换为离散时间状态空间形式。

控制器创建功能可以接受连续时间或离散时间对象。当软件配置MPC问题时,它会使用零阶保持(ZOH)方法,自动地将连续时间设备(任何格式)转换为离散时间状态空间模型。如果存在延迟,则将其合并到状态空间模型中。

当您需要离散时间系统矩阵进行分析或模拟时(如本例),或者当您想使用除ZOH以外的离散时间转换方法时,您可以自己将设备转换为离散时间。

plantCSS = ss (plantTF);将植物从传递函数转换为连续时间状态空间t = 0.2;%指定0.2秒的采样时间plantDSS =汇集(plantCSS Ts)%转换工厂离散时间状态空间,使用ZOH
plantDSS = = (x1, x2) x3 x4 x5 x1 0.1891 - 0.9807 0.8862 - -0.1891 0 0 0 x2 0 0 0 x3 0 0 0 0 x4 0 0 0 0.8187 0.841 -0.2637 x5 0 0 0 0.1846 0.9729 B = u1, u2 u3 x1 0.1891 0.1813 0.01929 0 0 x2 0 0 x3 0 0 x4 0 0 0.1846 x5 0 0 0.01899摄氏度= (x1, x2) x3 x4 x5 y1 0 1 1 0 1.429 D = u1, u2 u3 y1 0 0 0样品时间:0.2秒离散时间状态空间模型。

默认情况下,软件假设所有的植物输入信号都是被操纵的变量。要指定信号类型,例如被测量的和未被测量的扰动,请使用setmpcsignals函数。在这个例子中,第一个输入信号是一个被操纵的变量,第二个是一个被测量的干扰,第三个是一个未被测量的干扰。这些信息存储在工厂模型中plantDSS后来被MPC控制器使用。

plantDSS = setmpcsignals (plantDSS,“MV”, 1'MD'2,“UD”3);%指定信号类型

MPC控制器设计

创建控制器对象,指定样本时间以及预测和控制范围(分别为10步和3步)。

mpcobj = mpc (plantDSS Ts 10 3);
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。

由于您没有指定要最小化的二次成本函数的权重,控制器使用它们的默认值(0为被操纵变量,0.1为被操纵变量率,1为输出变量)。同样,在这一点上,MPC问题仍然是不受约束的,因为你还没有指定任何约束。

定义受操纵变量的硬约束。

mpcobj。MV =结构(“最小值”0,“马克斯”, 1“杀鼠灵”, -10,“RateMax”10);

您可以使用输入和输出干扰模型来定义附加输入和输出未测量干扰的动态特性。这些模型允许控制器更好地抵制这些干扰,如果它们发生在运行时。默认情况下,为了更好地抵制类步进扰动,货币政策委员会使用积分器作为扰动模型:

  • 每个未经测量的干扰输入和

  • 每个未测量的扰动作用于每个测量的输出

除非这样做会违反状态可观察性。

MPC对象还具有一个噪声模型,该模型指定了在测量输出变量上预期的附加噪声的特性。默认情况下,假设这是一个单位静态增益,这相当于假设控制器期望测量的输出变量在运行时受到白噪声的影响(协方差矩阵依赖于整个预测模型的输入矩阵)。有关更多信息,请参见货币政策委员会预测模型

显示输入干扰模型。正如预期的那样,它是一个离散时间积分器。

getindist (mpcobj)
——>”模式。干扰" property of "mpc" object is empty: Assuming unmeasured input disturbance #3 is integrated white noise. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. ans = A = x1 x1 1 B = UD1-wn x1 0.2 C = x1 UD1 1 D = UD1-wn UD1 0 Sample time: 0.2 seconds Discrete-time state-space model.

显示输出干扰模型。

getoutdist (mpcobj)
空的状态空间模型。

将未测量输入的干扰模型指定为由带有方差的白噪声驱动的积分器1000

mpcobj.Model.Disturbance = tf(sqrt(1000),[1 0]);

再次显示输入扰动模型,验证其变化。

getindist (mpcobj)
ans = A = x1 x1 1 B = Noise#1 x1 0.8 C = x1 UD1 7.906 D = Noise#1 UD1 0采样时间:0.2秒

显示MPC控制器对象mpcobj来复习一下它的性质。

mpcobj
MPC对象(01 - 9 - 2021 09:23:46上创建 ): --------------------------------------------- 采样时间:0.2(秒)预测地平线:10控制层:3植物模型:-------------- 1操纵变量(s)—| 5状态| | |—> 1测量输出(s) 1测量干扰(s)—>| 3输入| | |—> 0未测量输出(s) 1未测量干扰(s)—>| 1输出| --------------指数:(输入向量)操纵变量:[1]已测量干扰:[2]未测量干扰:[3](输出向量)测量输出:[1]扰动和噪声模型:输出扰动模型:默认(类型“getoutdist(mpcobj)”的详细信息)输入扰动模型:用户指定(类型“getindist(mpcobj)”的详细信息)测量噪声模型:默认(缩放后的单位增益)权重:操纵变量:约束:0 <= MV1 <= 1, -10 <= MV1/rate <= 10, MO1是不受约束的

研究稳态抵消

为了检验MPC控制器是否能在稳定状态下抑制恒定输出干扰并跟踪具有零偏移量的恒定设定点,使用cloffset命令。这个增益也被称为闭环的稳态输出灵敏度。

DC = cloffset (mpcobj);流(输出干扰到输出的直流增益=% 5.8f (=%g) \n'特区特区);
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel. DC gain from output disturbance to output = 0.00000000 (=5.9952e-15)

零增益通常是控制器将积分器作为输入或输出扰动模型的结果,这意味着被测对象的输出在稳定状态下完美地跟踪期望的输出参考设定值。

模拟闭环响应使用sim卡

sim卡命令提供了一种快速的方法,在约束和权重保持恒定的情况下,用线性定常对象在闭环中模拟MPC控制器,并且您可以轻松且完全地提前指定扰动和参考信号。

首先,确定仿真时间、参考信号和干扰信号

Tstop = 30;%的仿真时间Nf =圆(Tstop / Ts);%模拟步骤数r = 1 (Nf, 1);输出参考信号%v = [0 (Nf / 3,1); 1 (2 * Nf / 3,1)];被测输入干扰信号%

运行闭环模拟并绘制结果。载列于mpcobj.Model.Plant既用作闭环仿真中的对象,也用作控制器用于预测在预测范围内响应的内部对象模型。使用sim卡来模拟闭环系统Nf步骤和参考r和测量的输入干扰v

sim (Nf mpcobj, r, v)在闭环中模拟设备和控制器

被操纵的变量最初会达到上限,并在几秒钟内使植物输出达到参考值。然后,被操纵的变量将位于其允许的最大值1。10秒后,测量到的干扰信号从0上升到1,导致植物的输出超过其参考值约30%。被操纵的变量为了抵制扰动而达到下界。控制器能够在几秒钟后将被操纵变量的输出恢复到参考值,并且被操纵变量将稳定在其最小值。未测干扰信号始终为零,因为尚未指定未测干扰信号。

您可以使用仿真选项对象来指定附加的仿真选项和附加信号,如噪声和未测量的干扰,这些信号输入到设备中,但控制器不知道。对于本例,使用仿真选项对象向操纵变量添加一个未测量的输入干扰信号,并在测量的输出信号上添加噪声。创建一个带有默认选项的模拟选项对象。

SimOptions = mpcsimopt;%创建对象

创建一个干扰信号并在仿真选项对象中指定它。

d = [0 (2 * Nf / 3,1); -0.5 * 1 (Nf / 3,1)];定义阶跃干扰信号SimOptions。UnmeasuredDisturbance = d;%表示未测量的输入干扰信号

在模拟选项对象中指定噪声信号。在仿真时间,模拟功能直接将指定的输出噪声添加到测量的输出之前,然后将其送到控制器之前。在将其送到工厂之前,它还直接将指定的输入噪声添加到操纵变量(不到任何干扰信号)。

SimOptions.OutputNoise =措施*(兰德(Nf, 1)闲置);%指定输出测量噪声SimOptions.InputNoise = . 05 *(兰德(Nf, 1)闲置);%指定操纵变量的噪声

你也可以用theOutputNoise仿真选项对象的字段,以指定被测设备输出上更一般的附加输出干扰信号(如阶跃)。

模拟闭环系统并将结果保存到工作空间变量中ytu,xp.保存这些变量允许您有选择地在新的图形窗口中以任意给定的颜色和顺序绘制信号。

[y, t, u, xp] = sim (Nf mpcobj, r, v, SimOptions);

策划的结果。

数字创建新数字次要情节(2,1,1)%创建上子图绘图(0:NF-1,Y,0:NF-1,R)% plot plant output and reference plot plant output and reference标题(“输出”把标题加到副图上ylabel (“MO1”%添加一个标签到上y轴网格在上面的子图上添加一个网格次要情节(2,1,2)创建较低的子图情节(0:Nf-1, u)%图操纵变量标题(“输入”);%增加标题,降低副图包含(“模拟步骤”在x轴下方添加一个标签ylabel (“1/2 MV1”将标签添加到下y轴网格给下面的子图添加一个网格

尽管添加了噪声(在操纵变量图上特别明显),尽管分别在50步和100步后开始存在测量和未测量的干扰,控制器仍然能够实现良好的跟踪。在模拟的初始部分之后,被操纵的变量稳定在1左右(从20到50的步骤),在0左右(从70到100的步骤)来抵制测量到的干扰,在0.5左右(从120到150的步骤)来抵制两种干扰。

模拟模型不匹配的闭环响应

测试MPC控制器对模型不匹配的鲁棒性。指定要在模拟中使用的真实植物为truePlantCSS.对于这个例子,三个被控对象传递函数的分母都有一个或两个系数不同于前面定义的被控对象模型部分(MPC控制器用于预测)中对应的被控对象。

truePlantTF = tf({1,1,1},{[1 8 1],[1 2],[。6。6 1]})%指定和显示传递函数truePlantCSS = ss (truePlantTF);%转换为连续状态空间truePlantCSS = setmpcsignals (truePlantCSS,“MV”, 1'MD'2,“UD”3);%指定信号类型
truePlantTF = From input 1 to output: 1--------------- s^2 + 0.8 s + 1 From input 2 to output: 1----- s + 2 From input 3 to output: 1------------------- 0.6 s^2 + 0.6 s + 1连续时间传递函数

通过指定来更新模拟选项对象SimOptions。模型作为一个有两个字段的结构,植物(包含真实的植物模型)和名义上的(包含真实工厂的操作点值)。对于本例,没有指定状态导数和输入的标称值,因此假定它们为零,从而导致y = simoptions . model . nomal . y + C*(x- simoptions . model . nomal . x),在那里xy分别为设备的状态和测量输出。

SimOptions。模型= struct(“植物”, truePlantCSS);%创建结构并分配“植物”字段SimOptions.Model.Nominal.Y = 0.1;创建并分配“标称”。Y '字段SimOptions.Model.Nominal.X = -。1*[1 1 1 1];创建并分配“标称”。X”字段SimOptions。植物InitialState = [0.1 0 -0.1 0 .05];%指定真实植物的初始状态

删除任何已添加到测量输出和操纵变量的信号。

SimOptions。OutputNoise= [];%消除输出测量噪声SimOptions。InputNoise = [];%去除被操纵变量的噪声

运行闭环模拟并绘制结果。自SimOptions。模型非空,SimOptions.Model.Plant被转换为离散时间(使用零阶保持器)并作为闭环仿真中的被控对象,而在mpcobj.Model.Plant仅用于控制器预测预测视界内的响应。

sim (mpcobj Nf, r, v, SimOptions)%模拟闭环
——>模型转换为离散时间。

由于模型不匹配,响应中的一些劣化是可见的;值得注意的是,控制器需要多一段时间来实现跟踪,并且操纵变量现在在约0.5时沉淀以拒绝测量的干扰(参见5到10秒的值),并在约0.9时沉降,以拒绝两个输入干扰(从25到30秒)。尽管存在这种降级,但控制器仍然能够跟踪输出参考。

模拟开环反应

也可以在开环中测试设备和控制器的行为sim卡命令。设置OpenLoop旗帜,并提供一个被操纵的变量值序列来激活系统(如果OpenLoop被设置为).

SimOptions。OpenLoop =“上”%设置开循环选项SimOptions。MVSignal =罪((0:Nf-1) / 10);定义被操纵变量信号

模拟真实的植物(前面在SimOptions。模型)在开环。由于参考信号在开环模拟中被忽略,因此将其指定为[]。

sim (mpcobj Nf, [], v, SimOptions)%模拟开环系统
——>模型转换为离散时间。

软化的约束

对于MPC控制器,每个约束都有一个相关的无量纲ECR值。与ECR值较小的约束相比,更允许违反ECR值较大的约束。默认情况下,受操纵变量的所有约束的ECR值都为零,这使得它们很难实现。您可以为约束指定一个非零的ECR值,以使其变软。

将操纵变量的约束从硬放宽到软。

mpcobj.ManipulatedVariables.MinECR = 1;% ECR为MV下界mpcobj.ManipulatedVariables.MaxECR = 1;% ECR为MV上界

定义输出约束。默认情况下,输出变量(测量输出)的所有约束都有一个ECR值为1,这使得它们很软。您可以降低输出约束的ECR值,使其更加困难,但是最佳实践是保持输出约束的软性。软输出约束是首选,因为植物的输出依赖于植物状态和测量扰动;因此,如果发生足够大的扰动,不管电站状态如何(因此不管MPC控制器采取任何控制动作),电站输出约束都可以被违反。当被操作的变量有硬约束时,这些违背尤其可能发生。这种不可避免的对硬约束的违背导致了不可行的MPC问题,对于这个问题,没有操纵变量可以计算。

mpcobj.OutputVariables.Max = 1.1;定义(软)输出约束

运行一个新的闭环仿真,不包括仿真选项对象,因此没有任何模型不匹配,未测量的干扰,或添加到操纵变量或测量输出的噪声。

sim (Nf mpcobj, r, v)%模拟闭环
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

为了抵制被测扰动,实现跟踪,并防止输出超过其1.1软约束,控制器轻微违反了被操纵变量的软约束,在第10秒到11秒达到很小的负值。控制器违背了对测量输出的约束,而不是对操纵变量的约束。

加强对输出变量的约束并重新运行仿真。

mpcobj.OV.MaxECR = 0.001;%越接近于零,约束越困难sim (Nf mpcobj, r, v)%运行一个新的闭环模拟。
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

现在控制器只稍微违反了输出约束。这种输出性能的提高是以大大违反受操纵变量约束为代价的(受操纵变量的值达到-3)。

改变内置状态估计卡尔曼增益

在每个时间步长,MPC控制器通过求解一个依赖于被控对象当前状态的约束二次优化问题来计算被控变量。由于被控对象的状态通常是不能直接测量的,默认情况下,控制器使用线性卡尔曼滤波器作为观测器来估计被控对象的状态以及干扰和噪声模型。因此,控制器的状态就是这个卡尔曼滤波器的状态,而这个卡尔曼滤波器的状态又是增广离散时间对象状态的估计。在模型不匹配和未测量干扰的情况下,使用默认估计器进行闭环仿真,并返回控制器的状态结构xc

SimOptions。OpenLoop =“关闭”%设置闭环选项[y, t, u, xp, xc) = sim (Nf mpcobj, r, v, SimOptions);%运行仿真
——>模拟处于闭环状态(mpcsimopt对象的OpenLoop属性为off), mpcsimopt对象的MVSignal属性被忽略。——>模型转换为离散时间。
xc
xc = struct with fields: Plant: [150x5 double] Disturbance: [150x1 double] Noise: [150x0 double] LastMove: [150x1 double]

绘制被默认观察者估计的植物输出响应和植物状态。

图;%创建图次要情节(2,1,1)%创建上部子图轴情节(t,y)y和时间的关系标题(“植物输出”);%将标题添加到上部plotylabel (“y”%添加一个标签到上y轴网格%将网格添加到绘图上部次要情节(2,1,2)%创建较低的子图轴情节(t, xc.Plant)% xc的阴谋。植物versus time标题(“估计植物状态”);将标题添加到较低的情节包含(的时间(秒)在x轴下方添加一个标签ylabel (“我”将标签添加到下y轴网格将网格添加到较低的区域

正如预期的那样,测量到的和未测量到的扰动分别在10秒和20秒时引起突然变化。

你可以改变卡尔曼滤波器的增益。为此,首先检索默认的卡尔曼增益和状态空间矩阵。

[L, M, A1, Cm1] = getEstimator (mpcobj);检索观测器矩阵

计算并显示默认观察者的极点。它们都在单位圆内,但有几个似乎离边界比较近。注意这六种状态,前五种属于植物模型,第六种属于输入干扰模型。

e = eig (A1-A1 * M * Cm1)观测器状态矩阵的特征值
E = 0.5708 + 0.4144i 0.5708 - 0.4144i 0.4967 + 0.0000i 0.9334 + 0.1831i 0.9334 - 0.1831i 0.8189 + 0.0000i

利用极点配置设计一种新的状态估计器。将速度较快的极向原点移动一点,将速度最慢的极向远离原点移动一点。在其他条件相同的情况下,这个极点的位置应该会导致一个稍微慢一点的观察者。

波兰人=[。8.75 . 7.85 . 6.81];%为新杆指定所需的位置L =地方(A1, Cm1,波兰人)';计算时间更新的卡尔曼增益M = A1 \ L;为测量更新计算卡尔曼增益

在MPC控制器对象中设置新的矩阵增益。

setEstimator (mpcobj, L, M);%设置新的估计增益

重新运行闭环模拟。

[y, t, u, xp, xc) = sim (Nf mpcobj, r, v, SimOptions);
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Simulation is in closed-loop (the "OpenLoop" property of "mpcsimopt" object is "off") and the "MVSignal" property of "mpcsimopt" object is ignored. -->Converting model to discrete time.

绘制被测对象的输出响应以及被新观察者估计的被测对象状态。

图;%创建图次要情节(2,1,1)%创建上部子图轴情节(t,y)y和时间的关系标题(“植物输出”);%将标题添加到上部plotylabel (“y”%添加一个标签到上y轴网格%将网格添加到绘图上部次要情节(2,1,2)%创建较低的子图轴情节(t, xc.Plant)% xc的阴谋。植物versus time标题(“估计植物状态”);将标题添加到较低的情节包含(的时间(秒)在x轴下方添加一个标签ylabel (“我”将标签添加到下y轴网格将网格添加到较低的区域

正如预期的那样,控制器状态与之前绘制的不一样,整个闭环响应有点慢。

仿真控制器在闭环使用mpcmove

对于更一般的应用程序,您可以使用mpcmove函数在For循环中模拟MPC控制器。使用此函数,您可以使用以下特性运行模拟。

  • 非线性或时变植物

  • 在运行时变化的约束或权重

  • 在运行模拟之前未知的干扰或参考信号

如果你的工厂是连续的,你必须把它转换成离散时间在模拟它在一个for循环使用mpcmove

首先,得到被控对象的离散时间状态空间矩阵,定义被控对象和控制器的仿真时间和初始状态。

[A, B, C, D] = ssdata (plantDSS);%离散时间植物植物ss矩阵Tstop = 30;%的仿真时间X = [0 0 0 0]';%植物的初始状态xmpc = mpcstate (mpcobj);获得控制器状态的句柄r = 1;输出参考信号%

显示控制器的初始状态。状态是mpcstate对象,只包含当前时刻的控制器状态。具体来说:*xmpc。植物是估计的植物状态的当前值。*xmpc。干扰为扰动模型状态的电流值。*xmpc。噪音是噪声模型状态的当前值。*xmpc。LastMove是被操作变量的最后一个值。*xmpc。协方差为估计量协方差矩阵的当前值。

xmpc显示控制器状态%
MPCSTATE对象与字段Plant: [0 0 0 0] Disturbance: 0 Noise: [1x0 double] LastMove: 0 Covariance: []

请注意,xmpc是一个句柄对象,它总是指向控制器的当前状态。自mpcmove计算新控制移动时更新内部工厂状态,不需要更新xmpc,它总是指向当前(因此已更新)状态。

isa (xmpc“处理”
逻辑1

定义工作空间阵列YYUU分别存储输出和输入信号,以便在模拟之后可以绘制它们。

YY = [];UU = [];

运行模拟循环。

k = 0:圆形(Tstop / Ts) 1定义被测干扰信号v(k)。您可以指定更多%复杂依赖时间或以前的状态,如果需要。v = 0;如果k * Ts > = 10%在10秒后上升为1v = 1;结束定义未测干扰信号d(k)。您可以指定更多%复杂依赖时间或以前的状态,如果需要。d = 0;如果k * Ts > = 20%在20秒后下降到-0.5d = -0.5;结束%植物方程:电流输出%如果你有一个更复杂的植物输出行为(包括,例如,%模型不匹配或非线性),你可以在这里模拟它。请注意,在u和y之间不可能有任何直接的馈通。y = C*x + D(:,2)*v + D(:,3)* D;输出电流D(:,1)=0yy = [yy,y];存储电流输出%%注意,如果工厂有一个非零的工作点,输出方程将是:% y = mpcobj.Model.Nominal.Y + C * (x-mpcobj.Model.Nominal.X) + D (:, 2) * v + D (:, 3) * D;%计算MPC动作(u)并更新控制器内部状态。%注意,您不需要更新xmpc,因为它总是指向%到当前控制器状态。u = mpcmove (mpcobj xmpc, y, r, v);%XMPC,Y,R,V是当前步骤k的值UU = [UU u];存储电流输入%%植物方程式:状态更新%如果需要,您可以在这里模拟更复杂的植物状态行为。x = A*x + B(:,1)*u + B(:,2)*v + B(:,3)*d;计算下一个状态并更新当前状态%注意,如果电站有一个非零的工作点,状态更新方程为:% x = mpcobj. model . nominalx + mpcobj. model . nominaldx + A*(x-mpcobj. model . nominalx) + B(:,1)*(u-mpcobj. model . nominalx) + B(:,2)*v + B(:,3)*d;计算下一个状态并更新当前状态结束

策划的结果。

数字%创建图次要情节(2,1,1)%创建上部子图轴情节(0:Ts: Tstop-Ts YY)%图YY与时间ylabel (“y”%添加一个标签到上y轴网格%将网格添加到绘图上部标题(“输出”%将标题添加到上部plot次要情节(2,1,2)%创建较低的子图轴情节(0:Ts: Tstop-Ts UU)绘制UU与时间的关系ylabel (“y”将标签添加到下y轴包含(的时间(秒)在x轴下方添加一个标签网格将网格添加到较低的区域标题(“输入”将标题添加到较低的情节

要在模拟过程中的任何点检查最优预测轨迹,可以使用第二个输出参数mpcmove.对于本例,假设从当前状态(xxmpc).还假设,从该点到视界结束,参考设定点为0.5问题是0.模拟控制器并返回信息结构。

r = 0.5;%的参考v = 0;%干扰[~,信息]= mpcmove (mpcobj xmpc y, r, v);%解决超过预测视界

显示info变量。

信息
info = struct with fields: Uopt: [11x1 double] Yopt: [11x1 double] Xopt: [11x6 double] top: [11x1 double] Slack: 0迭代:1 QPCode: '可行'成本:0.1399

信息是一种结构,包含在预测范围内被操纵变量、植物状态和输出的预测最优序列。mpcmove通过求解一个二次优化问题,使代价函数最小化,计算出该序列,并与最优的第一步动作一起。植物状态和输出在信息将最优操纵变量序列直接应用于mpcobj.Model.Plant,以开环方式。由于存在噪声、未测量的干扰和不确定性,这个开环优化过程并不等同于模拟由设备、估计器和控制器组成的闭环sim卡命令或mpcmove在循环中迭代地。

提取预测的最优轨迹。

topt = info.Topt;%的时间yopt = info.Yopt;预测最优工厂模型产量uopt = info.Uopt;%预测最优mv序列

由于在每个控制步骤中最优序列值是恒定的,所以使用阶梯图绘制轨迹。

数字创建新数字次要情节(2,1,1)%创建上子图楼梯(topt yopt)在阶梯图中绘制yopt标题(“预测输出的最优序列”将标题添加到上部副图网格%将网格添加到上部子图次要情节(2,1,2)创建较低的子图楼梯(topt uopt)绘制阶梯图标题(“操纵变量的最优序列”将标题添加到上部副图网格%将网格添加到上部子图

MPC控制器的线性表示

当约束不主动时,MPC控制器表现为线性控制器。注意,对于具有有限不后退视界的有限时间无约束线性二次调节器问题,值函数是时变的,这导致最优反馈增益是时变的。相反,在MPC中,视界的长度是恒定的,因为它总是在后退,结果是一个时不变的值函数,因此是时不变的最优反馈增益。

你可以得到MPC控制器的状态空间形式。

LTI = ss (mpcobj,“房车”);%获取状态空间表示

得到状态空间矩阵来模拟线性化控制器。

(铝、提单、CL, DL) = ssdata (LTI);得到状态空间矩阵

对无约束的原MPC控制器和线性化控制器进行了初始化变量的闭环仿真。

mpcobj。MV = [];删除输入约束mpcobj。OV = [];删除输出约束Tstop = 5;设定模拟时间%y = 0;设定初始测量输出r = 1;输出参考设定点(常数)u = 0;%设置先前(初始)输入命令X = [0 0 0 0]';设置植物的初始状态xmpc = mpcstate (mpcobj);设定无约束MPC控制器的初始状态xL = 0(大小(提单,1),1);设定线性化MPC控制器的初始状态YY = [];定义工作区数组来存储设备输出
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

用相同的设备模型在一个闭环中模拟两个控制器。

k = 0:round(Tstop/Ts)-1 YY = [YY,y];%储存电流输出以绘制目的定义被测干扰信号v(k)。v = 0;如果k*Ts>=10 v =1;%在10秒后上升为1结束定义未测干扰信号d(k)。d = 0;如果k*Ts>=20 d = -0.5;%在20秒后下降到-0.5结束%计算(无约束)MPC和线性MPC的控制动作uMPC = mpcmove (mpcobj xmpc y, r, v);% unconstrained MPC(这也更新了xmpc)u = CL * xL + DL * [y; r; v];%无约束线性MPC%比较两个控制动作dispStr (k + 1) = {sprintf ('t=%5.2f, u=%7.4f(由LTI提供),u=%7.4f(由MPCOBJ提供)'k * t, u, uMPC)};% #好< * SAGROW >%更新无约束线性MPC控制器状态[y;r;v];更新工厂状态x = A*x + B(:,1)*u + B(:,2)*v + B(:,3)*d;计算工厂产量y = C*x + D(:,1)*u + D(:,2)*v + D(:,3)* D;% D (: 1) = 0结束

显示包含控件操作的字符数组。

k = 0:圆形(Tstop / Ts) 1 disp (dispStr {k + 1});当k增加时显示每个字符串结束
t = 0.00 u = 5.2478 (LTI)提供的,u = 5.2478 MPCOBJ)提供的(t = 0.20, 3.0134 u = (LTI)提供的,u = 3.0134 MPCOBJ)提供的(t = 0.40, 0.2281 u = (LTI)提供的,u = 0.2281 MPCOBJ)提供的(t = 0.60, -0.9952 u = (LTI)提供的,u = -0.9952 MPCOBJ)提供的(t = 0.80, -0.8749 u = (LTI)提供的,MPCOBJ)提供的u = -0.8749 (t = 1.00, -0.2022 u = (LTI)提供的,u = -0.2022 MPCOBJ)提供的(t = 1.20, 0.4459 u = (LTI)提供的,u = 0.4459 MPCOBJ)提供的(t = 1.40, 0.8489 u = (LTI)提供的,u = 0.8489 MPCOBJ)提供的(t = 1.60, 1.0192 u = (LTI)提供的,u = 1.0192 MPCOBJ)提供的(t = 1.80, 1.0511 u = (LTI)提供的,MPCOBJ)提供的u = 1.0511 (t = 2.00, 1.0304 u = (LTI)提供的,u = 1.0304 MPCOBJ)提供的(t = 2.20, 1.0053 u = (LTI)提供的,u = 1.0053 MPCOBJ)提供的(t = 2.40, 0.9920 u = (LTI)提供的,u = 0.9920 MPCOBJ)提供的(t = 2.60, 0.9896 u = (LTI)提供的,u = 0.9896 MPCOBJ)提供的(t = 2.80, 0.9925 u = (LTI)提供的,MPCOBJ)提供的u = 0.9925 (t = 3.00, 0.9964 u = (LTI)提供的,u = 0.9964 MPCOBJ)提供的(t = 3.20, 0.9990 u = (LTI)提供的,u = 0.9990 MPCOBJ)提供的(t = 3.40, 1.0002 u = (LTI)提供的,u = 1.0002 MPCOBJ)提供的(t = 3.60, 1.0004 u = (LTI)提供的,u = 1.0004 MPCOBJ)提供的(t = 3.80, 1.0003 u = (LTI)提供的,MPCOBJ)提供的u = 1.0003 (t = 4.00, 1.0001 u = (LTI)提供的,u = 1.0001 MPCOBJ)提供的(t = 4.20, 1.0000 u = (LTI)提供的,u = 1.0000 MPCOBJ)提供的(t = 4.40, 0.9999 u = (LTI)提供的,u = 0.9999 MPCOBJ)提供的(t = 4.60, 1.0000 u = (LTI)提供的,u = 1.0000 MPCOBJ)提供的(t = 4.80, 1.0000 u = (LTI)提供的,u= 1.0000(由MPCOBJ提供)

策划的结果。

数字%创建图情节(0:Ts: Tstop-Ts YY)种植区植物产量%网格%添加网格标题('无约束MPC控制:植物产量'%添加标题包含(的时间(秒)添加标签到x轴ylabel (“y”添加标签到y轴

运行所有控制器约束都关闭的闭环仿真更容易使用sim卡,您只需要指定“关闭”约束相关领域mpcsimopt模拟选择对象。

SimOptions = mpcsimopt;%创建模拟选项对象SimOptions。约束s =“关闭”%删除所有MPC限制SimOptions。UnmeasuredDisturbance = d;未测量输入干扰%SIM(MPCOBJ,NF,R,V,SIMOPTIONS);%运行闭环仿真

使用仿真软件模拟万博1manbetx

你也可以在Simulink中模拟你的MPC控制器。万博1manbetx

为了比较结果,使用设计MPC控制器部分中使用的约束和默认估计器重新创建MPC对象。

mpcobj = mpc (plantDSS Ts 10 3);mpcobj。MV =结构(“最小值”0,“马克斯”, 1“杀鼠灵”, -10,“RateMax”10);mpcobj.Model.Disturbance = tf(sqrt(1000),[1 0]);
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。

得到连续时间对象的状态空间矩阵。

[A, B, C, D] = ssdata (plantCSS);获得状态空间实现

打开mpc_miso万博1manbetxSimulink模型进行闭环仿真。该模型采用连续状态空间块实现。

open_system (“mpc_miso”

植物输入信号u(t), v(t),和d(t)分别表示操纵变量,测量输入干扰和未测量输入干扰,而y(t)是测量输出。块参数是构成连续时间对象的状态空间实现的矩阵,以及五种状态的初始条件。MPC控制器是通过MPC控制器块实现的,该块具有工作空间MPC对象mpcobj作为参数,被操纵变量作为输出,被测对象输出、参考信号和被测对象输入扰动分别作为输入。四个Scope块绘制了五个循环信号,这些信号也被四个To-Workspace块保存(除了参考信号)。

利用simulink对闭环系统进行仿真万博1manbetxsim卡命令。注意,这个命令(它模拟一个Simulink模型,相当于在模型中单击“Run”按钮)与万博1manbetxsim卡由MPC工具箱提供的命令(代替用LTI装置在一个环路中模拟MPC控制器)。

sim卡(“mpc_miso”
假设对测量的输出通道#1没有增加任何干扰。——>”模式。噪音" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Scope块中的图与“使用sim命令模拟闭环响应”和“使用sim命令模拟闭环响应”中模型不匹配部分中的图是等价的,但由于在“使用sim命令模拟闭环响应”中未经测量的干扰信号为零,所以两者之间存在细微的差异。在模拟模型不匹配的闭环响应中,你向工厂的输入和输出添加了噪声。还要注意的是,MPCsim卡命令在内部使用ZOH方法离散任何连续的工厂模型,Simulink通常使用集成算法(在本例中万博1manbetx数值)在存在连续时间块时模拟闭环。

运行仿真与正弦输出噪声。

假设输出测量受到频率为0.1 Hz的正弦干扰(单音传感器噪声)的影响。

ω= 2 *π/ 10;干扰径向频率%

打开mpc_misonoise万博1manbetxSimulink模型,它类似于mpc_miso模型,除了正弦扰动添加到测量输出。仿真时间较长,未测扰动先于被测扰动开始。

open_system (“mpc_misonoise”%打开新的Simuli万博1manbetxnk模型

由于这个噪声是预期的,您可以指定一个噪声模型来帮助状态估计器忽略它。这样做提高了控制器的抗扰能力。

mpcobj.Model.Noise = 0.5*tf(ω ^2,[1 0 ω ^2]);测量噪声模型

修正MPC设计,将未测量输入上的扰动模型指定为均值和方差为零的高斯白噪声0.1

setindist (mpcobj特遣部队(0.1));%的静态增益

在这种情况下,你不能用积分器作为干扰模型对未测量的输入和输出,因为这违反了状态可观察性。因此,当为输入扰动模型指定一个静态增益时,由离散积分器组成的输出扰动模型就会自动添加到控制器中。这种输出扰动模型有助于控制器抑制输出端的阶跃和缓慢变化扰动。

getoutdist (mpcobj)
——>假设添加到测量输出通道#1的输出扰动为集成白噪声。在NoiseModel中插入了一个馈通通道,以防止估计器设计出现问题。ans = A = x1 x1 B = u1 x1 0.2 C = x1 MO1 1 D = u1 MO1 0采样时间:0.2秒

较大的测量噪声会降低状态估计的精度。为了降低控制器的侵略性,降低其噪声灵敏度,减小对输出变量跟踪的权重。

mpcobj。重量=结构(“MV”0,“MVRate”, 0.1,机汇的, 0.005);%新的权重

为了给卡尔曼滤波器更多的时间来成功估计状态,将预测视界增加到40。

mpcobj。predictionhorizon = 40;新预测层

运行模拟145秒。

sim卡(“mpc_misonoise”, 145)第二个参数是模拟持续时间
——>假设添加到测量输出通道#1的输出扰动为集成白噪声。在NoiseModel中插入了一个馈通通道,以防止估计器设计出现问题。

卡尔曼滤波器在50秒后成功学习忽略测量噪声。未测量的和被测量的扰动在10到20秒的时间跨度内被拒绝。正如预期的那样,被操纵的变量保持在0和1之间。

bdclose (“所有”%关闭所有打开的Simulink模万博1manbetx型而不保存任何更改关闭所有关闭所有打开的数字

另请参阅

对象

应用程序

相关的话题