Saltar al contenido

Diagramas de bloques usando Tikz

Solución:

¿Sería esto?

Para dibujar un diagrama de bloques,

(1) Primero defina una definición de estilo para cada bloque repetido, entrada / salida, sumas o pines; de modo que se atribuya una propiedad diferente de cada nodo. Úselos correctamente en cada definición de nodo que se menciona a continuación.

(2) Uso node comando para colocar cada nodo, es conveniente asignar cada nodo en función de la posición relativa (arriba, abajo, derecha, izquierda = xx cm de ) donde positioning tikzlibrary es fundamental. Para cada nodo es conveniente asignar un <internal name> para referencia posterior, por ejemplo, al dibujar líneas.

(3) Uso draw para completar las conexiones de línea, asignando etiquetas a lo largo de la línea a través de node[<location>](<internal name>){<external name>} sintaxis.

ingrese la descripción de la imagen aquí

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



%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_{pbeta}$};
    node [block, above of=controller,node distance=1.3cm] (up){$frac{k_{ibeta}}{s}$};
    node [block, below of=controller,node distance=1.3cm] (rate) {$sk_{dbeta}$};
    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}

Puede reemplazar el measurements bloque con un coordinate y utilícelo como un punto intermedio. A continuación, he comentado las líneas cambiadas para que pueda ver lo que se cambió:

ingrese la descripción de la imagen aquí

Código:

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}

Aquí hay otra solución que usa el paquete. schemabloc
https://www.ctan.org/pkg/schemabloc

ingrese la descripción de la imagen aquí

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_{ibeta}}{s}$}{C1}
node[below right=0.25em of C1]{E(s)};
sbDecaleNoeudy[4]{Int}{Der}
sbDecaleNoeudy[-4]{Int}{Prop}
sbBloc[-1.5]{Der}{$sk_{dbeta}$}{Der}  sbRelieryx{C1-Int}{Der}
sbBloc[-1.5]{Prop}{$k_{pbeta}$}{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}

PD: hay una versión traducida al paquete en inglés schemabloc https://www.ctan.org/pkg/blox

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *