controlador de feedback de saída dinâmica

controlador de feedback de saída dinâmica

Eu conheço LaTeX básico. Tentei desenhar um diagrama de blocos semelhante ao mostrado no diagrama, mas não consegui. Por favor, sugira qualquer maneira fácil de desenhar esse diagrama de blocos. Obrigado Este é o meu código. Não consigo obter feedback da soma para o 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}

insira a descrição da imagem aqui

meu novo 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}

Responder1

[Editadopara adicionar nós ajustados em torno de grupos de nós e coordenadas conforme solicitado no comentário.]

Algo assim? Observe que a maior parte da organização é realizada usando a positioningsintaxe <direction>=of ...no 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 saída arrumado

Responder2

uma pequena variação da excelente resposta de @cfr +1 - adicionando fundo colorido e ligeira mudança do ponto de entrada pornode[xshift=-1em]

    \draw [->] (rinput) -- node[xshift=-1em]{$R(s)$} (sum1);

e

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

Saída

insira a descrição da imagem aqui

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

Com linhas tracejadas conforme exigido pelo OP

insira a descrição da imagem aqui

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}

Responder3

Com (pequeno) esforço para tornar tikzpictureo código mais conciso. Para isso são usados ​​pacotes arrows.meta(para pontas de setas mais bonitas), ext.paths.ortho(para duas setas orto), fit(para nós tracejados ao redor das caixas), positioning(para posicionamento de nós) e quotes(para a maioria dos rótulos de arestas):

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

insira a descrição da imagem aqui

informação relacionada