author={Soltesz, Kristian and Grimholt, Chriss and Skogestad, Sigurd},

title={Simultaneous Design of {PID} Controller and Measurement Filter by Optimization},

journal={{IET Control Theory \& Applications}},

volume=11,

number=3,

year=2017,

pages={348--348},

doi={10.1049/iet-cta.2016.0297}

}

@inproceedings{pidIAE,

author={Grimholt, Chriss and Skogestad, Sigurd},

title={Improved Optimization-based Design of {PID} Controllers Using Exact Gradients},

booktitle={12th International Symposium on Process Systems Engineering and 25th European Symposium on Computer Aided Process Engineering},

address={Copenhagen, Denmark},

year=2015,

pages={1753--1756},

isbn={978-0-444-63445-0 (eBook)}

}

@inproceedings{pidIE,

author={Hast, Martin and {\AA}str\"{o}m, Karl Johan and Bernhardsson, Bo and Boyd, Stephen},

title={{PID} Design by Convex-Concave Optimization},

booktitle={{IEEE} European Control Conference ({ECC})},

address={Z\"{u}rish, Switzerland},

year=2013,

pages={4460--4465},

isbn={978-3-033-03962-9 (eBook)}

}

\end{filecontents}

\begin{document}

\bibliographystyle{plain}

\nobibliography*{}

\title{{PIDopt} -- Matlab software for robust optimization-based {PID} controller design}

\author{Kristian Soltesz}

\date{\today}

\maketitle

\section{Acknowledgement}

The software consists of three scripts for {PID} design, exaplained later. The underlying methods for these files are:

\begin{itemize}

\item\verb=pidfIAE.m=\\

\bibentry{pidfIAE}

\item\verb=pidIAE.m=\\

\bibentry{pidIAE}

\item\verb=pidIE.m=\\

\bibentry{pidIE}

\end{itemize}

Please acknowledge these works through citation if you use the methods in your research. The code present in the \verb=PIDopt= package is due to the authors of the above works.

\section{Getting started}

The software can be downloaded from the git repository \url{git@gitlab.control.lth.se:kristian/PIDopt.git}, accessible online at \url{https://gitlab.control.lth.se/kristian/PIDopt}. See \url{https://gitlab.control.lth.se/kristian/PIDopt/blob/master/example.m}{\verb=example.m=} at the base of the repository for an example illustrating how to run and evaluate the designs. Feel free to report/correct bugs through the issue system available at the \url{https://gitlab.control.lth.se/kristian/PIDopt}{web page of the repository}.

The remainder of this document is dedicated to briefly describe the design method (\secref{}), and to provide . If you remain with any questions, please send them to \url{mailto:kristian@control.lth.se}{kristian at control dot lth dot se}.

\section{Design Methods}

\subsection{Design problem}

All the design methods consider a closed-loop system as depicted in \figref{cc}. The process model $P$ is a SISO LTI system. The design objective is to minimize the influence of an additive (unit) load disturbance step $l$, entering at the process input at $t=0$, on the control error $e$.

In \verb=pidIE.m=, the objective is to minimize the integral error,

\begin{equation}

\text{IE} = \int_0^\infty e(t) dt,

\end{equation}

whereas \verb=pidIAE.m= and \verb=pidfIAE.m= aim to minimize the $\mathcal{L}_1$-norm of $e$, also known as the integrated absolute error,

\begin{equation}

\text{IAE} = \int_0^\infty |e(t)| dt.

\end{equation}

These constraints are standard within process control, and sound within a much broader application scope.

Robustness of the control loop is enforced by constraining the sensitivity function

\begin{equation}

S = \dfrac{1}{1+L},

\nonumber

\end{equation}

the complementary sensitivity function

\begin{equation}

T = \dfrac{L}{1+L},

\nonumber

\end{equation}

as well as the noise sensitivity function $KS$. We use $L=KP$ to denote the loop transfer function. Interpretation of The sensitivity function $S$ and its complement $T=1-S$ are thoroughly covered in most introductory control textbooks. The noise sensitivity $KS$ is the transfer function from $y$ to $u$ in \figref{cc}, and determines how much measurement noise is attenuated (or amplified). The methods covered here impose robustness through $\mathcal{H}_\infty$-constraints:

\begin{align}

\|S\|_\infty&\leq M_s,\nonumber\\

\|T\|_\infty&\leq M_t,\nonumber\\

\|KS\|_\infty&\leq M_{ks}.\nonumber

\end{align}

Smaller values of $M_s$, $M_t$, and $M_{ks}$, correspond to better robustness, but typically correspond to an increase in objective. A reasonable default is $M_s=M_t=1.5$. It is not possible to give a default for $M_{ks}$ as it is unit dependent -- it is affected by the gain of $P$.

\subsection{Controller and filter structure}

Process and controller representation herein is in continuous time. (Adapting the code to discrete time settings should be straightforward.) The controllers synthesized by \verb=pidIE.m= and \verb=pidIAE.m= are on the form

\begin{equation}

K(s) = k_p+\dfrac{ki}{s}+k_ds.

\label{eq:pid}

\end{equation}

Their parallel form representation

\begin\equation}

??\nonumber

\end{equation}

has parameters ??, and exists if ??. (The code can be modified to include \eqref{} as a constraint if it is crucial that the resulting controllers have a parallel form representation.)

The controllers synthesized by \verb=pidfIAE.m= are a series connection of a controller on the form \eqref{pid}

and a second-order low-pass filter

\begin{equation}

F(s) = \dfrac{}{}.

\end{equation}

The role of the filter is to ensure high-frequency roll-off. In order to achieve this also with \verb=pidIE.m= and \verb=pidIAE.m= simply design a low-pass filter and include it as a series connected component of $P$ prior to conducting the design.

\subsection{{IE} vs. {IAE}}

\subsection{Numerical aspects}

All the scripts aim at minimizing the effect of a (unit) loadon the process output.

\section{Other considerations}

The latest version of the source files can be downloaded from the git repository