
Я пытаюсь реализовать эту блок-схему:
Забудьте о математике, я могу это сделать. Я просто хочу реализовать схему. Я использовал примерздесь; это хорошо, но всякий раз, когда я удаляю блок "измерение", путь обратной связи не может быть получен, кроме как напрямую (-180 градусов). Кроме того, я все еще не могу получить больше одного ящика друг над другом.
МВЭ:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\tikzstyle{block} = [draw, fill=white, rectangle,
minimum height=3em, minimum width=6em]
\tikzstyle{sum} = [draw, fill=white, circle, node distance=1cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=input] {};
\node [sum, right of=input] (sum) {};
\node [block, right of=sum] (controller) {Controller};
\node [block, right of=controller, pin={[pinstyle]above:D},
node distance=3cm] (system) {System};
\draw [->] (controller) -- node[name=u] {$u$} (system);
\node [output, right of=system] (output) {};
\node [block, below of=u] (measurements) {Measurements};
\draw [draw,->] (input) -- node {$r$} (sum);
\draw [->] (sum) -- node {$e$} (controller);
\draw [->] (system) -- node [name=y] {$y$}(output);
\draw [->] (y) |- (measurements);
\draw [->] (measurements) -| node[pos=0.99] {$-$}
node [near end] {$y_m$} (sum);
\end{tikzpicture}
\end{document}
решение1
Это то, что нужно?
Чтобы нарисовать блок-схему,
(1) Сначала определите определение стиля для каждого повторяющегося блока, входа/выхода, суммирования или вывода; так, чтобы приписывалось разное свойство каждого узла. Используйте их должным образом в каждом определении узла, упомянутом ниже.
(2) Используйте node
команду для размещения каждого узла, удобно размещать каждый узел на основе относительного положения (выше, ниже, справа, слева =xx см < узла >), где positioning
tikzlibrary является инструментальной. Для каждого узла удобно назначать <internal name>
для последующего использования, например, при рисовании линий.
(3) Используется draw
для завершения соединений линий, назначения меток вдоль линии с помощью node[<location>](<internal name>){<external name>}
синтаксиса.
Код
\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{figure}[!htb]
%\centering
\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_{p\beta}$};
\node [block, above of=controller,node distance=1.3cm] (up){$\frac{k_{i\beta}}{s}$};
\node [block, below of=controller,node distance=1.3cm] (rate) {$sk_{d\beta}$};
\node [sum, right of=controller,node distance=2cm] (sum2) {};
\node [block, above = 2cm of sum2](extra){$\frac{1}{\alpha_{\beta2}}$}; %
\node [block, right of=sum2,node distance=2cm] (system)
{$\frac{a_{\beta 2}}{s+a_{\beta 1}}$};
\node [output, right of=system, node distance=2cm] (output) {};
\node [tmp, below of=controller] (tmp1){$H(s)$};
\draw [->] (rinput) -- node{$R(s)$} (sum1);
\draw [->] (sum1) --node[name=z,anchor=north]{$E(s)$} (controller);
\draw [->] (controller) -- (sum2);
\draw [->] (sum2) -- node{$U(s)$} (system);
\draw [->] (system) -- node [name=y] {$Y(s)$}(output);
\draw [->] (z) |- (rate);
\draw [->] (rate) -| (sum2);
\draw [->] (z) |- (up);
\draw [->] (up) -| (sum2);
\draw [->] (y) |- (tmp1)-| node[pos=0.99] {$-$} (sum1);
\draw [->] (extra)--(sum2);
\draw [->] ($(0,1.5cm)+(extra)$)node[above]{$d_{\beta 2}$} -- (extra);
\end{tikzpicture}
%\caption{A PID Control System} \label{fig6_10}
%\end{figure}
\end{document}
решение2
Вы можете заменить measurements
блок на \coordinate
и использовать его как промежуточную точку. Ниже я закомментировал измененные строки, чтобы вы могли увидеть, что было изменено:
Код:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\tikzstyle{block} = [draw, fill=white, rectangle,
minimum height=3em, minimum width=6em]
\tikzstyle{sum} = [draw, fill=white, circle, node distance=1cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=input] {};
\node [sum, right of=input] (sum) {};
\node [block, right of=sum] (controller) {Controller};
\node [block, right of=controller, pin={[pinstyle]above:D},
node distance=3cm] (system) {System};
\draw [->] (controller) -- node[name=u] {$u$} (system);
\node [output, right of=system] (output) {};
%\node [block, below of=u] (measurements) {Measurements};
\coordinate [below of=u] (measurements) {};
\draw [draw,->] (input) -- node {$r$} (sum);
\draw [->] (sum) -- node {$e$} (controller);
\draw [->] (system) -- node [name=y] {$y$}(output);
%\draw [->] (y) |- (measurements);
\draw [-] (y) |- (measurements);
%\draw [->] (measurements) -| node[pos=0.99] {$-$}
\draw [->] (measurements) -| %node[pos=1.00] {$-$}
node [near end] {$y_m$} (sum);
%\draw [->]
\end{tikzpicture}
\end{document}
решение3
Вот еще одно решение, использующее пакетschemabloc
https://www.ctan.org/pkg/schemabloc
\documentclass{article}
\usepackage{tikz}
\usepackage{schemabloc}
\usepackage{calc}
\begin{document}
\begin{tikzpicture}
\sbEntree{E}
\sbNomLien[1]{E}{$R(s)$}
\sbCompL*{C1}{E}
\sbBlocL[4]{Int}{$\frac{k_{i\beta}}{s}$}{C1}
\node[below right=0.25em of C1]{E(s)};
\sbDecaleNoeudy[4]{Int}{Der}
\sbDecaleNoeudy[-4]{Int}{Prop}
\sbBloc[-1.5]{Der}{$sk_{d\beta}$}{Der} \sbRelieryx{C1-Int}{Der}
\sbBloc[-1.5]{Prop}{$k_{p\beta}$}{Prop} \sbRelieryx{C1-Int}{Prop}
\sbCompSum*{Somme}{Int}{+}{+}{+}{ }
\sbRelier{Int}{Somme}
\sbRelierxy{Prop}{Somme}
\sbRelierxy{Der}{Somme}
\sbBloc{F1}{$\frac{a_{\beta 2}}{s+a_{\beta 1}}$}{Somme}
\sbRelier[$U(s)$]{Somme}{F1}
\sbSortie[4]{S}{F1} \sbRelier[$Y(s)$]{F1}{S}
\sbRenvoi[6]{F1-S}{C1}{}
\sbDecaleNoeudy[-8]{C1-Int}{E2}
\sbBlocL{F2}{$\frac{1}{\alpha_{\beta2}}$}{E2}
\sbNomLien[1]{E2}{$d_{\beta 2}$}
\sbRelierxy{F2}{Somme}
\end{tikzpicture}
\end{document}
PS: есть версия, переведенная на английский языкschemabloc
https://www.ctan.org/pkg/blox