Conozco LaTeX básico. Intenté dibujar un diagrama de bloques similar al que se muestra en el diagrama pero no puedo hacerlo. Sugiera alguna forma sencilla de dibujar dicho diagrama de bloques. Gracias Este es mi código. No puedo obtener comentarios de la suma al estimador de estado.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\begin{document}
\tikzset{
block/.style = {draw, fill=white, rectangle, minimum height=3em, minimum width=3em},
tmp/.style = {coordinate},
sum/.style= {draw, fill=white, circle, node distance=1cm},
input/.style = {coordinate},
output/.style= {coordinate},
pinstyle/.style = {pin edge={to-,thin,black}
}
}
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=rinput] (rinput) {};
\node [sum, right of=rinput] (sum1) {};
\node [block, right of=sum1] (controller) {$k$};
\node [block, above of=controller,node distance=2cm] (up){$A,B$};
\node [block, right of=controller] (esti)
{$estimator$};
\node [block, above of=esti,node distance=2cm] (extra){$C$};
\node [output, right of=extra, node distance=2cm] (output) {};
\draw [->] (rinput) -- node{$R(s)$} (sum1);
\draw [->] (sum1)|- node[name=z,anchor=north]{$u(k)$}(up);
\draw [->] (up) -- node{$x(k)$} (extra);
\draw [->] (extra) -- node [name=y] {$Y(s)$}(output);
\draw [->] (y) |- (esti);
\draw [->] (esti)--node{$n(k)$}(controller);
\draw [->] (controller)--(sum1);
\end{tikzpicture}
\end{document}
mi nuevo código
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\begin{document}
\tikzset{
block/.style = {draw, fill=white, rectangle, minimum height=3em, minimum width=3em},
tmp/.style = {coordinate},
sum/.style= {draw, fill=white, circle, node distance=1cm},
input/.style = {coordinate},
output/.style= {coordinate},
pinstyle/.style = {pin edge={to-,thin,black}
},
point/.style = {draw, fill=black, circle, minimum size=0.8mm, node distance=1.5cm, inner sep=0pt},
}
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=rinput] (rinput) {};
\node [sum, right of=rinput] (sum1) {};
\node [block, right of=sum1] (controller) {$k$};
\node [block, above of=controller,node distance=2cm] (up){$A,B$};
\node [block, right of=controller] (esti)
{$estimator$};
\node [block, above of=esti,node distance=2cm] (extra){$C$};
\node [output, right of=extra, node distance=2cm] (output) {};
\node [point, above =1cm of sum1] (point0){};
\draw [->] (rinput) -- node{$R(s)$} (sum1);
\draw [->] (sum1)|- node[name=z,anchor=north]{$u(k)$}(up);
\draw [->] (up) -- node{$x(k)$} (extra);
\draw [->] (extra) -- node [name=y] {$Y(s)$}(output);
\draw [->] (y) |- (esti);
\draw [->] (esti)--node{$n(k)$}(controller);
\draw [->] (controller)--(sum1);
% \draw [->] (point0) -| node{} ([xshift=2cm]esti);
% \draw [->] (point0) -- (output |- point0) |- ([yshift=0.5cm] esti);
\draw [->] (point0) -- (output |- point0) |- ([yshift=0.5cm] esti);
\end{tikzpicture}
\end{document}
\end{document}
Respuesta1
[Editadopara agregar nodos ajustados alrededor de grupos de nodos y coordenadas como se solicita en el comentario.]
¿Algo como esto? Tenga en cuenta que la mayor parte del orden se logra utilizando la positioning
sintaxis <direction>=of ...
en lugar de <direction> of=...
.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,fit}
\begin{document}
\newlength\estilength
\settowidth\estilength{$estimator$}
\tikzset{
block/.style = {draw, fill=white, rectangle, minimum height=3em, minimum width=3em,text width=\estilength,align=center},
tmp/.style = {coordinate},
sum/.style= {draw, fill=white, circle, node distance=1cm},
input/.style = {coordinate},
output/.style= {coordinate},
pinstyle/.style = {pin edge={to-,thin,black}
},
point/.style = {draw, fill=black, circle, minimum size=0.8mm, node distance=1.5cm, inner sep=0pt},
dashed node/.style={draw,dashed,inner sep=7.5pt,rounded corners},
}%
\begin{tikzpicture}[auto, node distance=15mm,>=latex']
\node [input, name=rinput] (rinput) {};
\node [sum, right=25mm of rinput] (sum1) {};
\node [block, right=of sum1] (controller) {$k$};
\node [block, above=of controller] (up){$A,B$};
\node [block, right=of controller] (esti) {$estimator$};
\node [block] (extra) at (esti |- up){$C$};
\node [output, right=25mm of extra] (output) {};
\node [point, above=1cm of sum1] (point0){};
\draw [->] (rinput) -- node{$R(s)$} (sum1);
\draw [->] (sum1)|- node[name=z,midway]{$u(k)$}(up);
\draw [->] (up) -- node{$x(k)$} (extra);
\draw [->] (extra) -- node [name=y] {$Y(s)$}(output);
\draw [->] (y) |- (esti);
\draw [->] (esti)--node{$n(k)$}(controller);
\draw [->] (controller)--(sum1);
\draw [->] (point0) -- ([xshift=10pt]esti.east |- point0) |- ([yshift=0.5cm] esti) coordinate [midway] (c1);
\coordinate [xshift=-2.5pt] (c2) at (sum1.south west);
\node (f1) [dashed node,fit=(esti) (c2) (controller) (point0) (c1) (sum1)] {};
\node [dashed node,fit=(extra) (up) (extra -| c2) (up -| c1)] {};
\end{tikzpicture}
\end{document}
Respuesta2
una pequeña variación de la excelente respuesta de @cfr +1: agregar un fondo de color y un ligero cambio del punto de entrada alnode[xshift=-1em]
\draw [->] (rinput) -- node[xshift=-1em]{$R(s)$} (sum1);
y
\begin{pgfonlayer}{background}
% Draw background box.
\node[fill=yellow!90!black,thick,draw=gray,rounded corners=2mm, inner xsep=1em, inner ysep=1em] (background) [fit = (z) (extra) ] {};
\node[fill=green!50,thick,draw=gray,rounded corners=2mm, inner xsep=1.7em, inner ysep=.5em, xshift=-.5em] (background) [fit = (point0) (esti) ] {};
\end{pgfonlayer}
Producción
MWE
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\usetikzlibrary{backgrounds,fit,decorations.pathreplacing}
\begin{document}
\newlength\estilength
\settowidth\estilength{$estimator$}
\tikzset{
block/.style = {draw, fill=brown!10, rectangle, minimum height=3em, minimum width=3em,text width=\estilength,align=center},
tmp/.style = {coordinate},
sum/.style= {draw, fill=white, circle, node distance=1cm},
input/.style = {coordinate},
output/.style= {coordinate},
pinstyle/.style = {pin edge={to-,thin,black}
},
point/.style = {draw, fill=black, circle, minimum size=0.8mm, node distance=1.5cm, inner sep=0pt},
}%
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=rinput] (rinput) {};
\node [sum, right=2cm of rinput] (sum1) {};
\node [block, right=of sum1] (controller) {$k$};
\node [block, above=15mm of controller] (up){$A,B$};
\node [block, right=of controller] (esti) {$estimator$};
\node [block] (extra) at (esti |- up){$C$};
\node [output, right=of extra] (output) {};
\node [point, above=1cm of sum1] (point0){};
\draw [->] (rinput) -- node[xshift=-1em]{$R(s)$} (sum1);
\draw [->] (sum1)|- node[name=z,midway]{$u(k)$}(up);
\draw [->] (up) -- node{$x(k)$} (extra);
\draw [->] (extra) -- node [name=y] {$Y(s)$}(output);
\draw [->] (y) |- (esti);
\draw [->] (esti)--node{$n(k)$}(controller);
\draw [->] (controller)--(sum1);
\draw [->] (point0) -- ([xshift=10pt]esti.east |- point0) |- ([yshift=0.5cm] esti);
\begin{pgfonlayer}{background}
% Draw background box.
\node[fill=yellow!90!black,thick,draw=gray,rounded corners=2mm, inner xsep=1em, inner ysep=1em] (background) [fit = (z) (extra) ] {};
\node[fill=green!50,thick,draw=gray,rounded corners=2mm, inner xsep=1.7em, inner ysep=.5em, xshift=-.5em] (background) [fit = (point0) (esti) ] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
EDITAR
Con líneas discontinuas según lo requiera el OP
MWE
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\usetikzlibrary{backgrounds,fit,decorations.pathreplacing}
\begin{document}
\newlength\estilength
\settowidth\estilength{$estimator$}
\tikzset{
block/.style = {draw, fill=brown!10, rectangle, minimum height=3em, minimum width=3em,text width=\estilength,align=center},
tmp/.style = {coordinate},
sum/.style= {draw, fill=white, circle, node distance=1cm},
input/.style = {coordinate},
output/.style= {coordinate},
pinstyle/.style = {pin edge={to-,thin,black}
},
point/.style = {draw, fill=black, circle, minimum size=0.8mm, node distance=1.5cm, inner sep=0pt},
}%
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=rinput] (rinput) {};
\node [sum, right=2cm of rinput] (sum1) {};
\node [block, right=of sum1] (controller) {$k$};
\node [block, above=15mm of controller] (up){$A,B$};
\node [block, right=of controller] (esti) {$estimator$};
\node [block] (extra) at (esti |- up){$C$};
\node [output, right=of extra] (output) {};
\node [point, above=1cm of sum1] (point0){};
\draw [->] (rinput) -- node[xshift=-1em]{$R(s)$} (sum1);
\draw [->] (sum1)|- node[name=z,midway]{$u(k)$}(up);
\draw [->] (up) -- node{$x(k)$} (extra);
\draw [->] (extra) -- node [name=y] {$Y(s)$}(output);
\draw [->] (y) |- (esti);
\draw [->] (esti)--node{$n(k)$}(controller);
\draw [->] (controller)--(sum1);
\draw [->] (point0) -- ([xshift=10pt]esti.east |- point0) |- ([yshift=0.5cm] esti);
\begin{pgfonlayer}{background}
% Draw background box.
\node[fill=yellow!90!black,thick,dashed, draw=gray,rounded corners=2mm, inner xsep=1em, inner ysep=1em] (background) [fit = (z) (extra) ] {};
\node[fill=green!50,thick,draw=gray,dashed, rounded corners=2mm, inner xsep=1.7em, inner ysep=.5em, xshift=-.5em] (background) [fit = (point0) (esti) ] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
Respuesta3
Con (pequeño) esfuerzo para hacer tikzpicture
el código más conciso. Para esto se utilizan paquetes arrows.meta
(para puntas de flecha más bonitas), ext.paths.ortho
(para dos flechas orto), fit
(para nodos discontinuos alrededor de cuadros), positioning
(para ubicaciones de nodos) y quotes
(para la mayoría de las etiquetas de borde):
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
ext.paths.ortho, % defined in the tikz-ext package
% now possible with Console MiKTeX
fit,
positioning,
quotes}
\begin{document}
\newlength\estilength
\settowidth\estilength{$estimator$}
\tikzset{
arr/.style = {-Stealth},
box/.style = {draw, semithick, minimum height=3em, text width=\estilength, align=center},
sum/.style = {circle, draw, semithick},
dot/.style = {circle, fill=black, inner sep=2pt, outer sep=0pt},
FIT/.style = {draw, dashed, rounded corners,
inner sep=2em, xshift=1em,
fit=#1},
every edge/.append style = {draw, arr}
}%
\begin{tikzpicture}[auto,
node distance = 17mm and 17mm
]
\coordinate (rin);
\node (sum1) [sum, right=of rin] {};
\node (cntr) [box, right=of sum1] {$k$};
\node (esti) [box, right=of cntr] {\emph{estimator}};
\node (up) [box, above=of cntr] {$A,B$};
\node (extra) [box, right=of up] {$C$};
\node (dot) [right=of extra,
dot, label = $Y(s)$] {};
\coordinate[right=of dot] (out);
\node[FIT=(sum1) (esti)] {};
\node[FIT=(sum1.west |- up) (extra)] {};
% arrows
\draw (rin) edge ["$R(s)$"] (sum1)
(up) edge ["$x(k)$"] (extra)
(cntr) edge (sum1)
(extra) edge (out)
(esti) edge ["$n(k)$"] (cntr);
\draw [arr] (sum1) |- (up) node [pos=0.5, above] {$u(k)$};
\draw [arr] (sum1.north) -- ++ (0,9mm) node[dot] {}
r-rl (esti.15);
\draw [arr] (dot) |- (esti);
\end{tikzpicture}
\end{document}