在 Tikz 中向我的框图添加一些线条

在 Tikz 中向我的框图添加一些线条

目标是从输出到 MPC 和 PID 绘制反馈线,如附图所示。

\documentclass[border=3cm]{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{positioning, arrows.meta}

\begin{document}
\begin{tikzpicture}[>=Stealth, auto, node distance=2cm, thick]
% Create nodes
\node[draw, rectangle, minimum width=2cm, minimum height=1cm] (MPC) at (0,0) {MPC};
\node[draw, circle, minimum size=0.6cm, right=of MPC] (sum){};
\node[draw, rectangle, minimum width=2cm, minimum height=1cm, below=of MPC] (PID) {PID};
\node[draw, rectangle, minimum width=2.5cm, minimum height=1cm, right=of sum] (MPD) {MPD System};

% Connect nodes
\draw[-] (sum.north east) -- (sum.south west);
\draw[-] (sum.south east) -- (sum.north west);
\draw[->] (MPC) -- node[pos=0.5] {$u_{\text{MPC}}(t)$} (sum.west);
\draw[->] (PID.east) -| node[pos=0.25, above] {$u_{\text{PID}}(t)$} (sum.south);
\draw[->] (sum.east) -- node {$u(t)$} (MPD.west);
\draw[->] (MPD.east) -- node[pos=0.8] {} ++(1,0);
\draw[<-] ([yshift=+0.2cm]MPC.west) -- node[pos=0.8] {} ++(-1.5,0);
\draw[->] ([xshift=-0.8cm,yshift=+0.2cm]MPC.west) |-  ([yshift=+0.2cm]PID.west);

% Add labels
\node[above left=-.3 and 0.9cm of MPC] {Ref.};
\node[right=1cm of MPD] {$P_{\text{bit}}$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

我将非常感激您就如何将反馈线无缝集成到现有代码中提供的指导。此外,如果您有任何建议来提高框图的专业性或任何其他方法,我都愿意考虑。

为了更清楚地理解,我附上了描述当前状态和期望结果的相关图像。

答案1

最系统的方法可能是使用封装块或类似的东西。

但是,如果您想手动执行此操作,可以采用以下方法:

  • 因为懒,我几乎放弃了数学模式 // 它很容易添加,而且会使代码更加模糊
  • 从本质上来说,这幅画有点混杂
  • 把积木 + 十字架放在一起
  • 绘制各种连接
  • 在需要的地方放置额外的矩形线节点,使用极坐标符号,例如在输入端
  • 将大多数节点作为标签放在这些路径内(这会使阅读变得更加困难)
  • 故意将极性放在最后,尽管它们也可以在所述路径中(使代码更加难以辨认)(我在这里使用了数学模式,因为减号有点长)
  • 我把一些空节点和一个坐标放在你想要点的位置

我认为这里不需要点和驼峰来进行连接。

在这里使用起来很诱人{Circle},就像这样

 \draw[{Circle}-{Circle}] (A) -- (B);

来模仿点,但随后你必须稍微延长箭头或移动其尖端。

结果

\documentclass[border=3mm]{standalone}% just my preference
\usepackage{tikz}
%\usepackage{amsmath}
\usetikzlibrary{positioning, arrows.meta}

\begin{document}
 \begin{tikzpicture}[auto, node distance=2cm,
    > = {Stealth},
    blks/.style={draw, minimum width=20mm,inner sep=4mm},
    sum/.style={draw,circle,minimum size=6mm},
 ]
    % ~~~ blocks ~~~~~~~~~
    \node[blks]             (M) at (0,0) {MPC};     
    \node[blks,below=of M]  (P)          {PID};     
    \node[sum,right=of M]   (S)          {};            % sum
    \node[blks,right=of S]  (Y)          {MPD system};
    %     cross
    \draw[-] (S.north east) -- (S.south west);
    \draw[-] (S.south east) -- (S.north west);

    
    % ~~~ connections ~~~~~~
    % --- output
    \draw[->] (Y.east) -- node[pos=0.5](O){} +(1.3,0)node[anchor=west]{Pbit};   
    
    %--- inside, mixed with labels
    \draw[->] (M.east) -- node{uMPC(t)}                         (S.west);
    \draw[->] (P.east) -| node[anchor=south,pos=.25]{uPID(t)}   (S.south);
    \draw[->] (S.east) -- node{u(t)}                            (Y.west);
    
    %--- feedbacks
    \draw[<->]  (P.190) -- +(-1.3,0) coordinate (D) |- (M.190);
    \draw       (D)     -- +(0,-1.5)                -| (O);
    
    %--- input
    \draw[<-] (M.170) --  +(-2,0) 
                            node[pos=.35,anchor=center,inner sep=0pt] (I) {}
                            node[anchor=south]{Ref.};
    \draw[->] (I) |- (P.170);
    
    % ~~~ polarities ~~~~~~~~~~~~
    \node[red,xshift=3mm] at (P.170) {$+$};
    \node[red,xshift=3mm] at (P.190) {$-$};
    
    \node[red,xshift=-4mm,yshift=-3mm] at (S.west)  {$+$};
    \node[red,xshift=+4mm,yshift=-3mm] at (S.south) {$+$};
    
 \end{tikzpicture}
\end{document}

相关内容