= 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]]. Feel free to contribute. }}} == 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|{{attachment:feedback0.png}}|target=blank_]] 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; [[attachment:Matlab2tikz/tikzlibrarynarrow.code.tex| |&do=get]]. The code for many of the block diagrams can be made more pretty by using e.g. the TikZ {{{calc}}} package, and doing some more thinking. Feel free to make improvements where you come across bad programming 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|{{attachment:feedback0.png}}|target=blank_]] {{{ \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|{{attachment:feedback1.png}}|target=blank_]] {{{ \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){$G_3$}; \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|{{attachment:feedback1b.png}}|target=blank_]] {{{ \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){$G_3$}; \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|{{attachment:feedback1c.png}}|target=blank_]] {{{ \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){$G_3$}; \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 ==== [[attachment:feedback1d.pdf|{{attachment:feedback1d.png}}|target=blank_]] {{{ \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[sum,left of=G1,xshift=-4mm](s){$s$}; \node[sum,right of=G1,xshift=4mm](s2){$s$}; \node[block,right of=s2,xshift=-12mm](G2){$G_2$}; \draw[->](G1)--(s2); \draw[->](s2)--(G2); \node[draw,rectangle,below of=s2](G3){$G_3$}; \node[coordinate,left of=s,xshift=-4mm](input){}; \node[coordinate,right of=G2,xshift=6mm](output){}; \draw[->](input)--node[above,near start](){$R$}(s); \draw[->](s)--(G1); \draw[->](G2)--node[above,near end](){$Y$}(output); \draw[->]([xshift=5mm]G2.east)|-(G3); \draw[->](G3)-|(s); \node[block,above of=G1,yshift=-12mm](G4){$G_4$}; \draw[->](G4)-|(s2); \draw[->]([xshift=-4mm]s.west)|-(G4); \end{tikzpicture} }}} ==== feedback1e ==== [[attachment:feedback1e.pdf|{{attachment:feedback1e.png}}|target=blank_]] {{{ \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){}(G2); \node[block,below of=U,yshift=10mm](G3){$G_3$}; \node[coordinate,right of=G2,xshift=6mm](output){}; \draw[->](G2)--node[above,near end](){}(output); \draw[->]([xshift=5mm]G2.east)|-(G3); \node[coordinate,left of=G1](turn){}; \draw[->](G3)-|(turn)--(G1); \end{tikzpicture} }}} ==== feedback2 ==== ==== feedback3 ==== ==== feedback4 ==== ==== feedback5 ==== ==== feedback6 ==== ==== feedback7 ==== ==== feedback8 ==== ==== feedback9 ==== ==== feedback10 ==== ==== feedback11 ==== === Other regulator structures === ==== cascade1 ==== ==== cascade2 ==== ==== cascadeff ==== ==== fbff1 ==== ==== fbff2 ==== ==== fftf ==== ==== ffss ==== [[attachment:ffss.pdf|{{attachment:ffss.png}}|target=blank_]] {{{ \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[draw,rectangle,minimum width=2cm,minimum height=16mm](GM){$G_M$}; \node[coordinate,left of=GM,xshift=-2cm](input){}; \draw[->](input)--node[above,near start](){$R$}(GM); \node[sum,right of=GM,xshift=14mm,yshift=-5mm](s1){$s$}; \draw[->]([yshift=-5mm]GM.east)--node[above](){$X_M$}(s1); \node[block,right of=s1,xshift=-14mm](C){$C$}; \draw[->](s1)--(C); \node[sum,right of=C,xshift=4mm](s2){$s$}; \draw[->](C)--(s2); \draw[->]([yshift=5mm]GM.east)-|node[above](){$U_F$}(s2); \node[block,right of=s2,xshift=-10mm](P){$P$};ΒΆ \draw[->](s2)--(P); \node[coordinate,right of=P,xshift=4mm](output){}; \draw[->](P)--node[above,near end](){$Y$}(output); \node[block,below of=C,yshift=10mm](M){$M$}; \draw[->]([xshift=3mm]s2.east)|-([yshift=2mm]M.east); \draw[->]([xshift=3mm]P.east)|-([yshift=-2mm]M.east); \draw[->](M)-|node[above,near start](){$X_H$}node[left,at end,yshift=-2mm](){$-$}(s1); \draw[-]([xshift=2mm,yshift=2mm]P.center)--node[above, at end,xshift=1mm](){$X$}([xshift=6mm,yshift=8mm]P.center); \end{tikzpicture} }}} ==== 2DOF ==== ==== smith1 ==== [[attachment:smith1.pdf|{{attachment:smith1.png}}|target=blank_]] {{{ \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[sum](s1){$s$}; \node[coordinate,left of=s1](input){}; \draw[->](input)--node[above,near start](){$R$}(s1); \node[block,right of=s1,xshift=-12mm](G1){$G_1$}; \draw[->](s1)--(G1); \node[block,right of=G1,xshift=-4mm](G2){$G_2$}; \draw[->](G1)--node[above](){$U$}(G2); \node[block,below of=G2,yshift=14mm](G3){$G_3$}; \node[block,below of=G3,yshift=14mm](G4){$G_4$}; \draw[->]([xshift=6mm]G1.east)|-(G3); \draw[->]([xshift=6mm]G1.east)|-(G4); \node[sum,right of=G3,xshift=8mm](s2){$s$}; \draw[->](G2.east)--node[above,at start,xshift=3mm](){$Y$}([xshift=6mm]G2.east)--(s2); \draw[->](G3)--node[above,at start,xshift=3mm](){$Y_1$}node[above,near end](){$-$}(s2); \draw[->](G4.east)--node[above,at start,xshift=3mm](){$Y_2$}([xshift=6mm]G4.east)--(s2); \draw[->](s2.east)--([xshift=4mm]s2.east)|-([yshift=-28mm]s1.south)--node[left,at end,yshift=-2mm](){$-$}(s1.south); \end{tikzpicture} }}} ==== smith2 ==== === Miscellaneous other === ==== parallel ==== ==== nyquist ==== ==== openloop1 ==== ==== openloop1b ==== ==== openloop2 ==== ==== openloop2c ==== ==== dist1 ==== ==== dist2 ==== ==== dist3 ==== === State feedback and observers === ==== statefeed1 ==== ==== statefeed2 ==== ==== statefeed4 ==== ==== statefeed5 ==== ==== statefeed6 ====