Documentation

Specify Multi-Input Multi-Output (MIMO) Plants

Most Model Predictive Control Toolbox™ applications involve plants having multiple inputs and outputs. You can use ss, tf, and zpk to represent a MIMO plant model. For example, consider the following model of a distillation column [11], which has been used in many advanced control studies:

[y1y2]=[12.8es16.7s+118.9e3s21.0s+13.8e8.1s14.9s+16.6e7s10.9s+119.4e3s14.4s+14.9e3.4s13.2s+1] [u1u2u3]

Outputs y1 and y2 represent measured product purities. The control objective is to hold each at specified setpoints. To do so, the controller manipulates inputs u1 and u2, the flow rates of reflux and reboiler steam, respectively. Input u3 is a measured feed flow rate disturbance.

The model consists of six transfer functions, one for each input/output pair. Each transfer function is the first-order-plus-delay form often used by process control engineers.

The following code shows how to define the distillation column model for use in the toolbox:

g11 = tf( 12.8, [16.7 1], 'IOdelay', 1.0,'TimeUnit','minutes');
g12 = tf(-18.9, [21.0 1], 'IOdelay', 3.0,'TimeUnit','minutes');
g13 = tf(  3.8, [14.9 1], 'IOdelay', 8.1,'TimeUnit','minutes');
g21 = tf(  6.6, [10.9 1], 'IOdelay', 7.0,'TimeUnit','minutes');
g22 = tf(-19.4, [14.4 1], 'IOdelay', 3.0,'TimeUnit','minutes');
g23 = tf(  4.9, [13.2 1], 'IOdelay', 3.4,'TimeUnit','minutes');
DC = [g11 g12 g13
      g21 g22 g23];
DC.InputName = {'Reflux Rate', 'Steam Rate', 'Feed Rate'};
DC.OutputName = {'Distillate Purity', 'Bottoms Purity'};
DC = setmpcsignals(DC, 'MD', 3)
-->Assuming unspecified input signals are manipulated variables.

DC =
 
  From input "Reflux Rate" to output...
                                      12.8
   Distillate Purity:  exp(-1*s) * ----------
                                   16.7 s + 1
 
                                   6.6
   Bottoms Purity:  exp(-7*s) * ----------
                                10.9 s + 1
 
  From input "Steam Rate" to output...
                                    -18.9
   Distillate Purity:  exp(-3*s) * --------
                                   21 s + 1
 
                                  -19.4
   Bottoms Purity:  exp(-3*s) * ----------
                                14.4 s + 1
 
  From input "Feed Rate" to output...
                                        3.8
   Distillate Purity:  exp(-8.1*s) * ----------
                                     14.9 s + 1
 
                                     4.9
   Bottoms Purity:  exp(-3.4*s) * ----------
                                  13.2 s + 1
 
Input groups:              
       Name        Channels
     Measured         3    
    Manipulated      1,2   
                           
Output groups:          
      Name      Channels
    Measured      1,2   
                        
Continuous-time transfer function.

The code defines the individual transfer functions, and then forms a matrix in which each row contains the transfer functions for a particular output, and each column corresponds to a particular input. The code also sets the signal names and designates the third input as a measured disturbance.

Was this topic helpful?