
안티 와인드업 기능이 있는 PID 제어 블록을 구축하려고 합니다.
\tikzstyle{controller} = [draw, fill=blue!20, rectangle,
minimum height=3.5em, minimum width=6em]
\tikzstyle{subblock} = [draw, fill=blue!5, rectangle,
minimum height=3.5em, minimum width=6em]
\tikzstyle{pidblocks} = [draw, fill=green!5, rectangle,
minimum height=3.5em, minimum width=6em, text width= 6em]
\tikzstyle{transformation} = [draw, fill=red!5, rectangle,
minimum height=3.5em, minimum width=6em]
\tikzstyle{filter} = [draw, fill=green!10, rectangle,
minimum height=3.5em, minimum width=6em]
\tikzstyle{block} = [draw, fill=windblue!20, rectangle,
minimum height=3.5em, minimum width=6em]
\tikzstyle{sum} = [draw, circle, node distance=1.5cm, inner sep=0.15cm]
\tikzstyle{disturbance} = [draw=none, node distance=1.5cm, line width=0pt]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\begin{figure}[!h]
\centering
\begin{tikzpicture}[auto, scale=0.8, node distance=3cm,>=latex', every
node/.style={transform shape}]
% We start by placing the blocks
\node [input, name=input1] {};
\node [sum, right of=input1] (sumofinputerror) {};
\node [pidblocks, right= 5cm of sumofinputerror, yshift=1.5cm] (kp) {P\hfill$k_p e(t)$};
\node [pidblocks, right= 5cm of sumofinputerror, yshift=-1.5cm] (ki) {I\hfill$k_i \int{e(t)dt}$};
\node [sum, left = 0cm of $(sumofinputerror)!0.5!(ki.west)$, xshift=0.2cm, yshift=-0.8cm] (sumofantiwindup) {};
\node [sum, right = 2cm of $(kp.east)!0.5!(ki.east)$] (controlsum) {};
\node [pidblocks, right of= controlsum] (antiwindup) {};
\draw [->] (input1) -- node[name=inputerror] {$y_{ref}(t)$} (sumofinputerror);
%\draw [->] (sumofinputerror) -| ($(sumofinputerror)!0.5!(kp.west)$);
\draw [->] (sumofinputerror) -| (sumofantiwindup);
\draw [->] (sumofantiwindup) -- (ki);
\draw [->] (ki) -| node[pos=0.95]{$+$}(controlsum);
\draw [->] (kp) -| (controlsum);
\end{tikzpicture}
\label{fig:torque_pid_block}
\caption{Individual pitch and trailing edge flap control block.}
\end{figure}
대신 ANTI-WINDUP Symbol
다음과 같은 기호를 삽입하고 싶습니다.
답변1
이것이 해결책입니다.
\tikzset{style files}
구식 정의 대신 사용하십시오\tikzsyle
.antiwindwp
기호는 tikz 그리기 매크로에서 정의됩니다.- PI 컨트롤러만 표시되었으므로 D 컨트롤이 추가되었습니다.
- 일부 코드 줄이 제거되었습니다.
업데이트간단한 메모입니다. 두 번째 대안에 대해 Claudio Fiandrino에게 감사드립니다: tikz 3.0 사용 및 다음 설정
\tikxset{mytest/.pic = {
\draw (-1,0) -- (1,0) (0,-0.6)--(0,0.6);
\draw (-0.7,-0.5)--(-0.5,-0.5) -- (0.5,0.5) --(0.7,0.5);
}}
명령줄 사용
\pic (S) at (antiwindup) {mytest};
동일한 출력이 생성됩니다.
암호
\documentclass[border=10pt]{standalone}%{article}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{arrows,calc,positioning}
\begin{document}
\tikzset{controller/.style = {draw, fill=blue!20, rectangle, minimum height=3.5em, minimum width=6em},
subblock/.style= {draw, fill=blue!5, rectangle, minimum height=3.5em, minimum width=6em},
pidblocks/.style = {draw, fill=green!5, rectangle, minimum height=3.5em, minimum width=6em, text width= 6em},
sum/.style = {draw, circle, node distance=1.5cm, inner sep=0.15cm},
input/.style = {coordinate},
output/.style ={coordinate}
}
%\tikzstyle{transformation} = [draw, fill=red!5, rectangle, minimum height=3.5em, minimum width=6em]
%\tikzstyle{filter} = [draw, fill=green!10, rectangle, minimum height=3.5em, minimum width=6em]
%\tikzstyle{block} = [draw, fill=windblue!20, rectangle, minimum height=3.5em, minimum width=6em]
%\tikzstyle{disturbance} = [draw=none, node distance=1.5cm, line width=0pt]
\def\windup{
\tikz[remember picture,overlay]{
\draw (-1,0) -- (1,0) (0,-0.6)--(0,0.6);
\draw (-0.7,-0.5)--(-0.5,-0.5) -- (0.5,0.5) --(0.7,0.5);
}}
%\begin{figure}[!h]
% \centering
\begin{tikzpicture}[auto, scale=0.8, node distance=3cm,>=latex',
every node/.style={transform shape}]
% We start by placing the blocks
\node [input, name=input1] {};
\node [sum, right of=input1] (sumofinputerror) {};
\node [pidblocks, right= 5cm of sumofinputerror, yshift=1.5cm] (kp) {P\hfill$k_p e(t)$};
\node [pidblocks, right = 5cm of sumofinputerror, yshift=-1.5cm] (ki) {I\hfill$k_i \int{e(t)dt}$};
\node [pidblocks] at ($(kp)!0.5!(ki)$)(kd) {D\hfill$k_d \frac{d e(t)}{dt}$}; % D control
\node [sum, right = 2cm of $(kp.east)!0.5!(ki.east)$] (controlsum) {};
\node [pidblocks, right of= controlsum] (antiwindup) {};
\node[] at (antiwindup) {\windup};
\draw [->] (input1) -- node[name=inputerror] {$y_{ref}(t)$} (sumofinputerror);
\draw [->] (sumofinputerror) -| ($(sumofinputerror)!0.5!(kp.west)$)|-(kp.west);
\draw [->] (sumofinputerror) -| ($(sumofinputerror)!0.5!(ki.west)$)|-(ki.west);
% --- draw lines
\draw [->] (sumofinputerror) -- (kd);
\draw [->] (kd) -- (controlsum);
\draw [->] (ki) -| node[pos=0.95]{$+$}(controlsum);
\draw [->] (kp) -| (controlsum);
\draw [->] (controlsum)--(antiwindup);
\node[right= 3cm of antiwindup] (output){};
\draw[->] (antiwindup) --node[pos=0.8](c){} (output);
\draw[->] (c) |- ([yshift=-1cm]ki.south)-|node[pos=0.95](){$-$}(sumofinputerror); % feedback line
\end{tikzpicture}
%\label{fig:torque_pid_block}
%\caption{Individual pitch and trailing edge flap control block.}
%\end{figure}
\end{document}