%% Control System Model With Both Numeric and Tunable Components
% This example shows how to create a tunable model of a control system that has both fixed plant and sensor dynamics and tunable control components.
% Consider the control system of the following illustration.
%
% Suppose that the plant response is G(s) = 1/(s + 1)^{2}, and that the model of the sensor dynamics is S(s) = 5/(s + 4). The controller C is a tunable PID controller, and the prefilter F = a/(s + a) is a low-pass filter with one tunable parameter, a.
% Create models representing the plant and sensor dynamics. Because the plant and sensor dynamics are fixed, represent them using numeric LTI models.

G = zpk([],[-1,-1],1);
S = tf(5,[1 4]);

%
% To model the tunable components, use Control Design Blocks. Create a tunable representation of the controller C.

C = tunablePID('C','PID');

% C is a tunablePID object, which is a Control Design Block with a predefined proportional-integral-derivative (PID) structure.
%
% Create a model of the filter F = a/(s + a) with one tunable parameter.

a = realp('a',10); 
F = tf(a,[1 a]);

% a is a realp (real tunable parameter) object with initial value 10. Using a as a coefficient in tf creates the tunable genss model object F.
%
% Interconnect the models to construct a model of the complete closed-loop response from r to y.

T = feedback(G*C,S)*F

% T is a genss model object. In contrast to an aggregate model formed by connecting only numeric LTI models, T keeps track of the tunable elements of the control system. The tunable elements are stored in the Blocks property of the genss model object. Examine the tunable elements of T.
%

T.Blocks

% When you create a genss model of a control system that has tunable components, you can use tuning commands such as systune to tune the free parameters to meet design requirements you specify.
% Copyright 2012 The MathWorks, Inc.