= 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 ====