controlador de retroalimentación de salida dinámica

controlador de retroalimentación de salida dinámica

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}

ingrese la descripción de la imagen aquí

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 positioningsintaxis <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}

controlador de salida ordenado

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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 tikzpictureel 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}

ingrese la descripción de la imagen aquí

información relacionada