Disk Margins for MIMO Systems | Robust Control, Part 3
From the series: Robust Control
Brian Douglas
This video shows how margin can be used to assess the robustness of multi-input, multi-output systems. We’ll show how disk margin is a more complete way to represent margin for MIMO systems over classical gain and phase margin.
We’re going to approach this topic in three parts. In the first part, we’ll set up a two-input, two-output plant, and describe it in some detail so that you have a little intuition behind it. In part two, we’ll develop a very simple controller that can successfully track two independent set points. And in part three, we’ll check how robust our controlled system is to variations.
Published: 26 Feb 2020
In the last video, we saw how we need to look at simultaneous gain and phase variations in order to be able to assess the robustness of a single-input, single-output system. And disk margin was a convent way to represent the set of allowable variations.
In this video, we’re going to expand this to use disk margins to assess the robustness of multi-input, multi-output systems - and we’re going to do this in three parts. In the first part, we’ll set up a two-input, two-output plant, and describe it in some detail so that you have a little intuition behind it. In part two, we’ll develop a very simple controller that can successfully track two independent set points. And in part three, we’ll check how robust our controlled system is to variations. What I hope to show you is, once again, how disk margin is a nice way to represent robustness of a MIMO system. So, let’s get to it. I’m Brian, and welcome to a MATLAB Tech Talk.
Part 1: The model
For our system, we’re going to look at controlling a distillation column. A distillation column distills liquid, or separates it into its component parts, and very basically, it works like this.
The unprocessed liquid is fed into the middle of the column. The liquid cascades down a number of feed trays and collects at the bottom. This bottom liquid is pulled out and some portion is sent away. This is the bottom product and eventually we want this bottom product to have a low percentage of the component liquid we are trying to remove. The part that is not sent away is then passed into a reboiler which heats the liquid to a vapor.
This vapor, or boilup, is returned to the bottom of the column and it begins to rise through the feed trays. The hot vapor and the cooler liquid exchange heat as they interact, which causes the vapor to get a little cooler and the liquid to get a little hotter. When this happens, the components in the liquid that have lower boiling points have a higher chance of becoming vapor and the components in the vapor with higher boiling points have a higher chance of becoming liquid. So, this changes the concentrations of the components in both the liquid and the vapor.
Now the vapor at the top and is pulled away and sent into a condenser to turn it back into a liquid. Part of this liquid is sent away as the distillate and the rest is sent back into the column as reflux.
When this is operating at steady state, we want this system to accept a continuous feed and to return a distillate that has some purity level, like it’s composed of 99% of the component we’re trying to distill out of the feed. But we also want to make sure that we’re not leaving too much behind in the bottom product, because that would be wasteful. So we may require there is no more than, say, 1% of the component left in the bottom product.
And the way we can control this system is by changing the reflux flow rate, and the boilup flow rate. You know how much of both of those are coming back into the system. So, with all that in mind, let’s look at a simplified linear model for this system. By the way, I got this example from a paper by Skogestad, Morari, and Doyle. And I’ve left a link to it in the description if you’d like a more complete explanation.
The model has the two inputs: the change in reflux and the change in boilup. And there are two outputs: the change in the purity of the distillate and the change of the concentration of the bottom product. And G(s) is the mapping that relates the inputs to outputs. The way to read this is that the top left transfer function describes the response between the reflux and the distillate purity. The bottom left function describes the response between the reflux and the bottom product. The two on the right are then for the boilup input. So, in this way we can see how each of the two inputs affect each of the two outputs.
And every input/output relationship is governed by a first-order response with time constant tau = 75 minutes but each with a different gain. It’s a positive gain when we increase the reflux so the outputs both go up, and it’s negative when we increased the boilup, so the outputs both go down.
We can reason why this is the case using our understanding of the distillation column. Increasing the reflux allows the top liquid to go through more distillation, which increases the concentration of the distillate, but adding more reflux also causes more of that liquid to flow down to the bottom of the column, increasing the concentration of the bottom product. So both outputs go up. And increasing the boilup does the opposite - it decreases both concentrations. So, somehow, we need to control this process - you know, manipulate boilup and reflux in such a way that we cause the distillate concentration to go up and the bottom product to go down. So, let’s move on to controller design.
Part 2: The controller
Let’s develop a simple, but spoiler alert, not a very robust controller. It’s useful to look at though because I think it highlights how sneaky robustness issues can be and how looking at disk margins can tease those issues out.
Our first thought might be that it would be really nice to be able to decouple the error, or the inputs into the controller and the outputs of the plant. What I mean by that is that imagine you have no bottom product error but there was distillate purity error. It would be nice if the controller adjusted the reflux and boilup flow rates in such a way that only the distillate composition changes and the bottom composition is undisturbed. And there is a really convenient way of achieving this and that’s by designing an inversion-based controller.
We have the dynamics of the plant, so the controller could simply be the inverse of that. And when we multiply the controller and the plant together, they would cancel out and we get an identity system. It’s a decoupled system where the gain is 1 for each path. So, essentially, we’ve removed all of the dynamics from this system and it’s fairly trivial to control at this point. Let’s see what I mean by that by showing it in MATLAB.
OK, so I’ve created the open loop plant model. And, as we reasoned, when we step the reflux both concentrations rise, and when we step the boilup vapor both concentrations decrease.
Now, we can build the inversion-based controller and see the resulting open loop response of the combine controller and plant, which I set to L in this script. The first input is perfectly passed through to the first output, and it doesn’t impact the second output at all. And the response from the second input is the opposite. So this controller is awesome because we can basically independently set the concentration levels for both outputs to whatever we want.
But, unfortunately, there are two small issues with this controller. The first is that we don’t have a way to adjust the gain. It’s just always 1. And the second and more important issue is that it is not a controller that we can actually implement because it creates an improper transfer function. That is, the order of the numerator is larger than the order of the denominator so it’s a non-causal system.
But that’s OK because we can fix both of those issues by multiplying the controller by an integrator, 1/s to make it proper, and by a variable gain, to give us flexibility in the design. This is a so-called inversion-based PI controller since we’ve added this proportional gain and integrator.
Now, if we look at the open loop response of the combine controller and plant, we see that instead of a straight pass through, it now behaves like an integrator. No surprise there.
And we can look at the closed loop response of this system with the feedback command and see the step response. Check this out. It’s practically perfect. I’m asking both outputs to go to 100% concentration and they both rise up and settle perfectly within 10 seconds or so.
So, let’s review what we’ve just created. We have the plant, G, and we’ve created a controller, k/s times G inverse. G inverse times G produces an identity so our open loop system is equivalent to a gain and integrator. And the closed loop system for both channels behaves like a first-order response with time constant 1/k. So, we can choose k to affect the speed of the response and this would be a pretty great. But the question is, is this a robust design? Will it still work if there is uncertainty, or variation in the real system? We’ve made a lot of simplifying assumptions in the model, so we know it doesn’t perfectly match the real distillation column. And it doesn’t matter how well our controller works with this model if it’s not going to work on the real system. So, robustness is important.
Part 3: Checking for robustness
We can assess how robust our system is by subjecting the open loop system to some variation and checking to see how it performs. Remember, this is exactly what we did in the last video, when we injected variation in the form of a complex number that is multiplied with the open loop system. And we said that disk margin was the largest disk in the complex plane that only includes stable variations.
There, the open loop system included both the controller and the plant. However, for this system, the controller and the plant are separate, which means we have the ability to assess variations in two different places.
The first is that we can vary the outputs of the controller before they go into the plant, which basically means we can vary the plant inputs. And the second is that we can vary the plant outputs before they loop back around to the controller. Let’s start with the plant inputs. Our controller might request a certain reflux or boilup flow rate, but due to uncertainty in the valves and errors in the way the hardware operates, the actual flow rate might be different than requested. So we may look at the disk margin for, say, this input and see how robust this system is to variations in reflux. Or we may check the disk margin for the other input to see how robust it is to variations in the boilup.
But since this is a multi-input system, we may be interested to know if our system is robust to both inputs varying at the same time. That is, reflux and boilup were both perturbed by a different amount of gain and phase. Well, to assess this we can restrict both perturbations to be within the same set D(e, alpha), or within the same disk. Then the disk margin would be the largest disk, that if any two independent variations within that disk were applied to the two inputs, the system would still be stable. This is called the multi-loop input disk margin.
Now, even if there was no input uncertainty - you know, flow rates are exactly what we requested, we may still have uncertainty on the outputs. For example, we might not know exactly how the two outputs are affected by the input flow rates. So, just like we did before, we may vary one output or the other, or both of them at the same time. And we can find the single channel disk margin or the multi-loop output disk margin respectively.
And we can take this one final step further and say, well what if we're uncertain about everything? Then we could vary all of the inputs and all of the outputs at the same time. And the disk margin here would tell us how robust we are to simultaneous input and output uncertainty.
So, you can see how we evolved from classical margins, which is just varying gain or phase on one channel, to simultaneously varying gain and phase with single channel disk margin, to then varying all of the inputs at the same time with multi-loop input disk margin, or the outputs at the same time with multi-loop output disk margin. To finally, varying both the inputs and the outputs simultaneously with multi-loop input/output disk margin. That’s a mouthful, but each of these tell us something different about the robustness of our system. And which ones you want to look at depends on where your uncertainty lies. For example, if you’re certain that your inputs will be exactly what you command, then you may only need to look at multi-loop output disk margin since that is where your uncertainty is.
Alright, let’s now go back to MATLAB and check out all of the different disk margins for our system and see how robust it really is. The disk margin command returns both the loop at a time and multi-loop margins. Let’s start with the input disk margin and look at the single channel, loop at a time margins. This is saying, what if we just vary one input and see how the system performs. The resulting disk margin is huge, it’s infinite gain margin and 90 degrees phase margin for both inputs. Which is expected, because our open loop system acts just like an integrator.
It turns out that the multi-loop disk margin is about the same. The gain margin is almost infinite, and almost 90 degrees of phase. This tells me that our system is pretty robust to input variations, even simultaneous variations. Which, again, makes sense because the two separate channels were decoupled from each other with the inversion controller.
And if we look at disk margins at the output, the story is the same since it’s decoupled. The outputs can vary one at a time, or simultaneously and in both cases we have practically infinite gain margin and 90 degrees of phase margin. This is boding well for our controller design!
However, as I already spoiled earlier in this video, the system is shockingly not robust to simultaneous variations of both the inputs and outputs. Here, our gain margin drops to be between about 0.9 and 1.1, which is really hardly anything at all, and the phase margin is less than 7 degrees. So, not a great design after all.
A question might be: why is this the case? Well, it’s mostly because of how we designed the controller. The controller is inverting the plant. This gives excellent responses and integrator-like margins as long as C perfectly cancels the dynamics of G. But if you introduce gain and phase uncertainty at both inputs and outputs of the plant, the cancellation no longer takes place and the design falls apart. This is why you want to assess the robustness of your design, even if the response with a nominal system looks good.
Now, in this video, we assumed that uncertainty was lumped at the inputs or at the outputs of the plant. But you might only be uncertain about a particular component in your plant, or a particular frequency range. So, in the next video, we’re going to talk about modeling and quantifying plant uncertainty in a little bit more detail.
If you don’t want to miss that or any other future Tech Talk videos don’t forget to subscribe to this channel. And you want to check out my channel, control system lectures, I cover more control theory topics there as well. Thanks watching, and I’ll see you next time.