File: optiPIDfun.m

package info (click to toggle)
octave-control 2.3.52-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,680 kB
  • sloc: cpp: 5,104; objc: 91; makefile: 52
file content (56 lines) | stat: -rw-r--r-- 1,660 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
% ===============================================================================
% optiPIDfun                       Lukas Reichlin                       July 2009
% ===============================================================================
% Objective Function
% Reference: Guzzella, L. (2007) Analysis and Synthesis of SISO Control Systems.
%            vdf Hochschulverlag, Zurich
% ===============================================================================

function J = optiPIDfun (C_par)

  % Global Variables
  global P t dt mu_1 mu_2 mu_3

  % Function Argument -> Controller Parameters
  kp = C_par(1);
  Ti = C_par(2);
  Td = C_par(3);

  % PID Controller with Roll-Off
  C = optiPIDctrl (kp, Ti, Td);

  % Open Loop
  L = P * C;

  % Sum Block: e = r - y
  SUM = ss ([1, -1]);  % Matlab converts to SS (and back) for MIMO TF connections

  % Group Sum Block and Open Loop
  SUML = append (SUM, L);

  % Build System Interconnections
  CM = [3, 1;          % Controller Input with Sum Block Output 
        2, 2];         % Sum Block Negative Input with Plant Output

  inputs = [1];        % Input 1: reference r(t)
  outputs = [1, 2];    % Output 1: error e(t), Output 2: output y(t)

  SUML = connect (SUML, CM, inputs, outputs);

  % Simulation
  [y, t_y] = step (SUML, t);

  % ITAE Criterion
  itae = dt * (t_y.' * abs (y(:, 1)));

  % Sensitivity
  S = inv (1 + L);
  Ms = norm (S, inf);

  % Objective Function
  J = mu_1 * itae  +  mu_2 * (max (y(:, 2)) - 1)  +  mu_3 * Ms;

end  % function

% ===============================================================================