= Block diagrams in TikZ format =

{{{#!wiki caution
'''Under Construction'''

This warning will be removed once all [[computerBlockDiagram|Anton's eps block diagrams]] have been ported to [[http://www.ctan.org/pkg/pgf|TikZ]].
}}}

== Background ==
[[https://www.control.lth.se/Staff/AntonCervin.html|Anton]] created a [[computerBlockDiagram|set of block diagrams]] in ps format, where text elements can be changed using {{{\psfrag}}} in latex. This page provides ports of these block diagrams to TikZ. The reason for creating these ports were:
 * The traditional latex compilation, using dvi and ps as middle formats, is widely being replaced with pdflatex and there is no equivalent to psfrag in pdflatex.
 * TikZ allows for changes not only of text, but also of the graphics, directly in the .tex document.
 * [[Matlab2tikz|Matlab graphics can be exported to TikZ]]. The format can therefore cater for all graphics needs.

== Practical ==

=== A simple Example ===
TikZ is a programming language and a TikZ picture is a set of code. The below minimal example shows a .tex document, demonstrating the inclusion of a TikZ block diagram:
{{{
\documentclass{pm}
\usepackage{tikz}
\usetikzlibrary{narrow}
\tikzset{>=narrow}
\begin{document}
Figure~\ref{fig:blocks} shows an example block diagram.
\begin{figure}
\centering
%
\begin{tikzpicture}
\small                                                                           
\tikzstyle{block} = [draw,rectangle,minimum size=8mm,node distance=25mm]
\tikzstyle{sum} = [draw, circle,node distance=8mm,inner sep=0mm,minimum size=4mm]
\node[block](G1){$G_1$};
\node[block,below of=G1,yshift=10mm](G2){$G_2$};
\node[sum,left of=G1,xshift=-3mm](s){$s$};
\node[coordinate,left of=s](input){};
\node[coordinate,right of=G1,xshift=6mm](output){};
\draw[->](input)--node[above,near start](){$R$}(s);
\draw[->](s)--(G1);
\draw[->](G1)--node[above,near end](){$Y$}(output);
\draw[->]([xshift=5mm]G1.east)|-(G2);
\draw[->](G2)-|(s);
\end{tikzpicture}
%
\caption{This is a block diagram.\label{fig:blocks}}
\end{figure}
\end{document}
}}}
The above code generates a picture that looks like this:

{{attachment:feedback0.pdf}}

If you think the TikZ code ({{{\begin{tikzpicture}}} to {{{\end{tikzpicture}}}}) clutters the .tex file, it can be placed in a separate file, e,g. {{{mypicture.tikz}}}, and inserted in the .tex file using the the command {{{\input{mypicture.tikz}}}}, which simply places the content of {{{mypicture.tikz}}} at the location of the commend.

The arrow style {{{>=narrow}}} is local to the department. If you do not have access to it on your computer, you may use {{{>=latex}}} instead, or download the file defining the style.

=== Scaling the block diagrams ===
A simple way to change the size, when including a TikZ picture is to add an extra argument to {{{\begin{tikzpicture}}}}. Here are some examples:

{{{
\begin{tikzpicture}[scale=0.6]
}}}
The above scales edges, but not the nodes, neither text.

{{{
\begin{tikzpicture}[scale=0.6, every node/.style={scale=0.6}]
}}}
The above scales both nodes and edges, but not text.

Some people think the default line width is a bit thin. This can easily be changed by adding e.g. {{{thick}}} to the argument list; {{{\begin{tikzpicture}[thick]}}}. (Arguments are comma-separated.)

=== More info ===
A lot can be found on online forums. There also exists an extremely well-written (but long!) [[http://mirrors.ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf|manual for TikZ]] and a much more compact [[http://cremeronline.com/LaTeX/minimaltikz.pdf|minimal introduction]].

Note that you can draw almost anything in TikZ, not only block diagrams.

== Block diagrams ==

=== Feedback systems ===

==== feedback0 ====
{{attachment:feedback0.pdf}}
{{{
\begin{tikzpicture}
\small                                                                           
\tikzstyle{block} = [draw, rectangle,minimum size=8mm,node distance=25mm]
\tikzstyle{sum} = [draw,circle,node distance=8mm,inner sep=0mm,minimum size=4mm]
\node[block](G1){$G_1$};
\node[block,below of=G1,yshift=10mm](G2){$G_2$};
\node[sum,left of=G1,xshift=-3mm](s){$s$};
\node[coordinate,left of=s](input){};
\node[coordinate,right of=G1,xshift=6mm](output){};
\draw[->](input)--node[above,near start](){$R$}(s);
\draw[->](s)--(G1);
\draw[->](G1)--node[above,near end](){$Y$}(output);
\draw[->]([xshift=5mm]G1.east)|-(G2);
\draw[->](G2)-|(s);
\end{tikzpicture}
}}}

==== feedback1 ====
{{attachment:feedback1.pdf}}
{{{
\begin{tikzpicture}
\small
\tikzstyle{block} = [draw, rectangle,minimum size=8mm,node distance=25mm]
\tikzstyle{sum} = [draw,circle,node distance=8mm,inner sep=0mm,minimum size=4mm]
\node[block](G1){$G_1$};
\node[block,right of=G1,xshift=-6mm](G2){$G_2$};
\draw[->](G1)--node[above](U){$U$}(G2);
\node[block,below of=U,yshift=10mm](G3){$G3$};
\node[sum,left of=G1,xshift=-6mm](s){$s$};
\node[coordinate,left of=s](input){};
\node[coordinate,right of=G2,xshift=6mm](output){};
\draw[->](input)--node[above,near start](){$R$}(s);
\draw[->](s)--node[above](){$E$}(G1);
\draw[->](G2)--node[above,near end](){$Y$}(output);
\draw[->]([xshift=5mm]G2.east)|-(G3);
\draw[->](G3)-|(s);
\end{tikzpicture}
}}}
==== feedback1b ====
{{attachment:feedback1b.pdf}}
{{{
\begin{tikzpicture}
\small
\tikzstyle{block} = [draw, rectangle,minimum size=8mm,node distance=25mm]
\tikzstyle{sum} = [draw,circle,node distance=8mm,inner sep=0mm,minimum size=4mm]
\node[block](G1){$G_1$};
\node[block,right of=G1,xshift=-6mm](G2){$G_2$};
\draw[->](G1)--node[above](U){$U$}(G2);
\node[block,below of=U,yshift=10mm](G3){$G3$};
\node[sum,left of=G1,xshift=-6mm](s){$s$};
\node[coordinate,left of=s](input){};
\node[coordinate,right of=G2,xshift=6mm](output){};
\draw[->](input)--node[above,near start](){$R$}(s);
\draw[->](s)--node[above](){$E$}(G1);
\draw[->](G2)--node[above,near end](){$Y$}(output);
\draw[->]([xshift=5mm]G2.east)|-(G3);
\draw[->](G3)-|(s);
\node[coordinate,above of=G2,yshift=2mm](input2){};
\draw[->](input2)--node[right,near start](){$V$}(G2);
\end{tikzpicture}
}}}
==== feedback1c ====
{{attachment:feedback1c.pdf}}
\begin{tikzpicture}
\small
\tikzstyle{block} = [draw,rectangle,minimum size=8mm,node distance=25mm]                                 
\tikzstyle{sum} = [draw,circle,node distance=8mm,inner sep=0mm,minimum size=4mm]
\node[block](G1){$G_1$};
\node[block,right of=G1,xshift=-6mm](G2){$G_2$};
\draw[->](G1)--node[above](U){$U$}(G2);
\node[draw,rectangle,below of=U](G3){$G3$};
\node[sum,left of=G1,xshift=-6mm](s){$s$};
\node[coordinate,left of=s](input){};
\node[coordinate,right of=G2,xshift=6mm](output){};
\draw[->](input)--node[above,near start](){$R$}(s);
\draw[->](s)--node[above](){$E$}(G1);
\draw[->](G2)--node[above,near end](){$Y$}(output);
\draw[->]([xshift=5mm]G2.east)|-(G3);
\draw[->](G3)-|(s);
\end{tikzpicture}

==== feedback1d ====

==== feedback1e ====

==== feedback2 ====

==== feedback3 ====

==== feedback4 ====

==== feedback5 ====

==== feedback6 ====

==== feedback7 ====

==== feedback8 ====

==== feedback9 ====

==== feedback10 ====

==== feedback11 ====

=== Other regulator structures ===

==== cascade1 ====

==== cascade2 ====

==== cascadeff ====

==== fbff1 ====

==== fbff2 ====

==== fftf ====

==== ffss ====

==== 2DOF ====

==== smith1 ====

==== smith2 ====

=== Miscellaneous other ===

==== parallel ====

==== nyquist ====

==== openloop1 ====

==== openloop1b ====

==== openloop2 ====

==== openloop2c ====

==== dist1 ====

==== dist2 ====

==== dist3 ====

=== State feedback and observers ===

==== statefeed1 ====

==== statefeed2 ====

==== statefeed4 ====

==== statefeed5 ====

==== statefeed6 ====