dynamischer Ausgangs-Feedback-Controller

dynamischer Ausgangs-Feedback-Controller

Ich kenne mich mit den Grundlagen von LaTeX aus. Ich habe versucht, ein Blockdiagramm ähnlich dem im Diagramm gezeigten zu zeichnen, aber ich schaffe es nicht. Bitte schlagen Sie mir eine einfache Möglichkeit vor, ein solches Blockdiagramm zu zeichnen. Danke. Das ist mein Code. Ich kann kein Feedback von der Summe zum Zustandsschätzer zeichnen.

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

Bildbeschreibung hier eingeben

mein neuer Code

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

Antwort1

[Herausgegebenum Knoten hinzuzufügen, die um Knotengruppen und Koordinaten angepasst sind, wie im Kommentar angefordert.]

Etwas in der Art? Beachten Sie, dass die meiste Bereinigung durch die Verwendung der positioningSyntax <direction>=of ...anstelle von erreicht wird <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}

aufgeräumter Ausgabe-Controller

Antwort2

eine kleine Variation der hervorragenden Antwort von @cfr +1 - Hinzufügen eines farbigen Hintergrunds und einer leichten Verschiebung des Einstiegspunkts durchnode[xshift=-1em]

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

Und

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

Ausgabe

Bildbeschreibung hier eingeben

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}

BEARBEITEN

Mit gestrichelten Linien, wie vom OP gefordert

Bildbeschreibung hier eingeben

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}

Antwort3

Mit (geringem) Aufwand, den Code prägnanter zu gestalten tikzpicture. Hierzu werden Pakete verwendet arrows.meta(für schönere Pfeilspitzen), ext.paths.ortho(für zwei orthogonale Pfeile), fit(für gestrichelte Knoten um Kästen), positioning(für Knotenplatzierungen) und quotes(für die meisten Kantenbeschriftungen):

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

Bildbeschreibung hier eingeben

verwandte Informationen