% !TeX encoding = utf-8
%--------------DOCUMENT--------------------------------------------------------

\documentclass[a4paper,11pt]{article}                      % Type de document
\usepackage[french]{babel}                  % Titres en fran?ais
\usepackage[T1]{fontenc}   % Correspondance clavier -> document
\usepackage{kpfonts} 
%-------------PACKAGES---------------------------------------------------------
\usepackage{makeidx}                       % Indexation du document
\usepackage[Bjornstrup]{fncychap}                % beaux chapitres

%\usepackage{fancyhdr}                       % entete et pied de pages

\usepackage{here}                           % avoir ses figures a la suite du texte
\usepackage{hyperref}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{geometry}
\geometry{ hmargin=2cm, vmargin=1.5cm }
\usepackage{multicol}
\usepackage{verbatim}
\usepackage{subfig}
\usepackage{floatflt}% package for floatingfigure environment
\usepackage{wrapfig}% package for wrapfigure environment
\usepackage{tikz}
\usetikzlibrary[calc,positioning]


%-------------PACKAGES PERSO---------------------------------------------------------


\usepackage{schemabloc}

\usepackage[most]{tcolorbox}
\newtcblisting{tikzexample}[1][]{%tikz lower, 
colback=red!5!white,colframe=red!75!black,listing side text,
  title=,fonttitle=\bfseries,
  toprule=2mm,
           bicolor, 
           colback=red!15!white, 
           colbacklower=red!5!white, %white,
           %listing options={style=tcblatex,basicstyle=\small},
           #1}
           


\newtcblisting{tikzexampleL}[1][]{%tikz lower, 
	listing above text,
	colback=red!5!white,
	colframe=red!75!black,
  title=,fonttitle=\bfseries,
  toprule=2mm,
           bicolor, 
           colback=red!15!white, 
           colbacklower=red!5!white, %white,
           listing options={style=tcblatex,basicstyle=\small},
           #1}
           
\DeclareTotalTCBox{\myverb}{ v }{verbatim,
  colframe=red!75!black,colupper=blue}{#1}      


\newcommand{\noeud}{n\oe ud}

%
%\usepackage{ifpdf}
%\ifx\pdftexversion\undefined %if using TeX
  \usepackage{graphicx}
%\else %if using PDFTeX
%  \usepackage{graphicx}
%\fi
%\ifpdf %if using PDFTeX in PDF mode
%  \DeclareGraphicsExtensions{.pdf,.png,.mps,.eps,.tpx}
%  \usepackage{pgf}
%\else %if using TeX or PDFTeX in TeX mode
%  \usepackage{graphicx}
%  \DeclareGraphicsExtensions{.eps,.bmp,.tpx}
%  \DeclareGraphicsRule{.emf}{bmp}{}{}% declare EMF filename extension
%  \DeclareGraphicsRule{.png}{bmp}{}{}% declare PNG filename extension
%  \usepackage{pgf}
%\fi

%*******Macros diverses ***********

%-------------ENTETE-ET-PIED-DE-PAGE-------------------------------------------
%
%\renewcommand{\headrulewidth}{0pt}          % epaisseur du trait apres entete
%\renewcommand{\footrulewidth}{0pt}          % epaisseur du trait avant pied de page
%\pagestyle{fancy}



%-------------PAGE-DE-GARDE----------------------------------------------------

\title{Schéma-blocs  avec  PGF/TIKZ}                                    % Titre
\author{Papanicola Robert}                                   % Auteur(s)
\date{\today}                                     % Date (\today pour aujourd'hui)


%-------------DEBUT-DU-DOCUMENT-----------------------------------------------
\makeindex

\begin{document}

\maketitle

\begin{description}
\item [version 1.9] Réécriture de la documentation (utilisation de tcolorbox à la place de tkzexample), correction de coquilles et ajout de nouveaux exemples (moteur à courant continu, schémas paramétrés, correcteur P.I.D).
\item[version 1.8] Ajout des commandes permettant de tracer des comparateurs/sommateurs dans les boucles de retour
\item[version 1.62] Retour de la boucle foreach
\item[version 1.61] Ajout de la commande sbStyleSum  afin de définir le style graphique des comparateurs et sommateurs.
\item[version 1.6] Remplacement de la boucle foreach de tikz par la boucle \verb"\newforeach" du package loops.
\item [version 1.5.1] Un bug dans la fonction remenber de foreach impose de choisir au minimum la version 2.1 cvs de pgf.
\item [version 1.5] Modification du dessin des comparateurs et sommateurs (ajout des symboles avec l'opérateur à l'extérieur). Ajout des commandes de tracé de chaînes de blocs et de boucles. les vielles définitions ont été désactivées (mise en commentaires).
\item[version 1.2] Redéfinition des noms de commandes, ajout du préfixe sb, quelques nouvelles commandes (\verb"\sbBlocSeul", ..)
\item [version 1] Version initiale
\end{description}


\section{Schéma-blocs  avec  PGF/TIKZ}
Les macros suivantes permettent de faciliter le dessin de schéma-blocs (block-diagram), elles s'appuient sur le package pgf et les macros tikz.

Les macros ont été adaptées à partir des exemples d'utilisation de la librairie  \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/pgf.html}{pgf} de Till Tantau et TikZ de Kjell Magne Fauske et principalement \href{http://www.fauskes.net/pgftikzexamples/tag/block-diagram/}{block-diagram}.

\subsection{Utilisation typique}
L'utilisation typique de cet ensemble de macro-commandes est produire  des diagrammes fonctionnels tel celui présenté sur la figure suivante.

\textit{The typical use of this set of macro-commands is to produce functional diagrams such that presented on the following figure.}

\begin{figure}[!htb]
\centering

\begin{tikzexample}[title=,righthand width=0.45\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}                 \sbRelier[$E_1$]{E}{comp}
\sbBloc{reg}{Régulateur}{comp}   \sbRelier[$\epsilon$]{comp}{reg}
\sbBloc{sys}{Système}{reg}       	\sbRelier[u]{reg}{sys}
\sbSortie{S}{sys}                		\sbRelier[$S_1$]{sys}{S}
\sbDecaleNoeudy[4]{S}{U}
\sbBlocr{cap}{Capteur}{U}        	\sbRelieryx{sys-S}{cap}
 	\sbRelierxy[m]{cap}{comp}
\end{tikzpicture}
\end{tikzexample}
\caption{Utilisation typique}
\label{fig:utiltyp}
\end{figure}



On retrouve dans ce schéma les principales fonctionnalités des macros
\begin{itemize}
\item des blocs:
\begin{itemize}
\item de la gauche vers la droite,
\item de la droite vers la gauche;
\end{itemize}
\item un comparateur;
\item une entrée;
\item une sortie;
\item des liens:
\begin{itemize}
\item  simple entre blocs alignés,
\item entre un lien et un bloc ,
\item entre deux blocs (ou comparateur) non alignés,
\item un retour direct.
\end{itemize}
\end{itemize}



\subsection{Environnement}

\begin{wrapfigure}[8]{r}{7cm}
\centering
\begin{verbatim}
\begin{tikzpicture}
      .....
     listes de commandes
      .....
      .....
\end{tikzpicture}
\end{verbatim}
\caption{Environnement tikzpicture}
\label{fig:envirTikz}
\end{wrapfigure}

Les macros suivantes s'utilisent dans l'environnement \textbf{tikzpicture}.

Vous devez avoir installé la dernière version du package \textbf{pgf}.




\subsection{Entrée et n\oe ud}

Tous les blocs sont dessinés en relatif par rapport à un n\oe ud d'entrée, la construction du schéma ne peut donc débuter qu'après avoir défini le premier n\oe ud avec la commande:\myverb{\sbEntree{nom}}.



Les commandes \myverb{\sbDecaleNoeudx[distance]{N1}{N2}}  et \myverb{\sbDecaleNoeudy[distance]{N1}{N2}} permettent de positionner un nouveau n\oe ud \verb"{N2}" par rapport au n\oe ud précédent \verb"{N1}" , respectivement 
\begin{itemize}
\item suivant x - horizontalement de la gauche vers la droite pour le sens positif,
\item suivant y - verticalement du haut vers le bas de la page pour le sens positif.
\end{itemize}

Ces commandes sont nécessaires pour démarrer un nouvelle branche ou pour positionner une nouvelle entrée.

La distance optionnelle \verb"[distance]"  doit être précisée sans unité et est comptée en \textbf{em}, la valeur par défaut est de $5em$.

\textbf{Remarque:}  il est toujours possible de positionner les différents n\oe uds en absolu dans la page en utilisant les commandes spécifiques de tikz (\verb"\node...").




\subsection{Bloc}

\subsubsection {Utilisation}
Deux commandes principales permettent d'obtenir le dessin d'un bloc fonctionnel
\begin{itemize}
\item la première permet le dessin d'un bloc seul;
 
    \myverb{\sbBloc[distance]{nom}{contenu}{bloc precédent}}
    
    
\item la seconde permet le dessin du bloc et du lien avec le bloc précédent
 
   \myverb{\sbBlocL[distance]{nom}{contenu}{bloc précédent}}
   
\end{itemize}

 avec les paramètres suivant:

\begin{description}
\item [distance] ce paramètre optionnel permet de positionner le bloc par rapport au bloc précédent ( la valeur par défaut est 2 em), cette distance est l'intervalle entre les deux blocs;
\item [nom] ce paramètre  permet de nommer le noeud associé au bloc, pour faire référence à ce bloc, il faudra utiliser ce paramètre (pour relier les blocs);
\item [contenu] ce paramètre précise le contenu du bloc, cela peut être aussi bien du texte qu'une fonction mathématique comme $\dfrac{K_c}{1 + \tau \cdot p}$ en tapant \verb"$\dfrac{K_c}{1 + \tau \cdot p}$" (ne pas oublier les \$ );
\item[bloc précédent] ce paramètre permet de préciser le nom du bloc précédent, chaque bloc est positionné relativement au bloc précédent avec la distance \textbf{distance}.
\end{description}


\subsubsection{Exemples}
%\begin{multicols}{2}

\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=  ,   righthand width=0.45\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbBloc{bloc1}{contenu}{E}
\end{tikzpicture}
\end{tikzexample}

\begin{tikzexample}[title=  ,   righthand width=0.45\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbBloc{bloc2}
{$K_c\dfrac{K}{1+\tau \cdot p}$}{E}
\sbBlocL[3]{bloc3}{Bloc lié}{bloc2}
\end{tikzpicture}
\end{tikzexample}
\caption{Commandes 
\textbackslash sbBloc   et  {\textbackslash sbBlocL} }
\label{fig:commandebloc}
\end{figure}

\begin{itemize}
    	\item on notera la présence de \myverb{\sbentree} pour positionner le premier bloc;
	\item le nom du bloc correspond à un \verb+\node+  au sens de Tikz;
   	\item le premier bloc s'est adapté en hauteur et largeur en fonction du contenu;
    	\item le second bloc est décalé de $4em$ du précédent et relié.
\end{itemize}



\subsubsection{Autres commandes de Bloc}


\paragraph{Bloc de la chaîne de retour} 

La commande \myverb{\sbBlocr...} (respectivement \myverb{\sbBlocrL...}) permet de tracer les blocs de la chaîne de retour de la droite vers la gauche. les paramètres de commande sont identiques. le bloc est placé à gauche du bloc (ou du \noeud) précédent.

\paragraph{Bloc seul}

La commande \myverb{\sbBlocseul...}  permet de tracer un bloc seul avec une entrée et une sortie cette commande est en général utilisée seule. Le paramètre de distance est appliqué sur le lien d'entrée et de sortie

\begin{tikzexample}[title=Commande ,   righthand width=0.45\textwidth,]
\begin{tikzpicture}
\sbBlocseul[3]{Entrée}{$H(p)$}{Sortie}
\end{tikzpicture}
\end{tikzexample}

\subsubsection{Personnalisation des blocs}

La commande \myverb{\sbStyleBloc{liste d'options}}  permet de modifier la représentation graphique du bloc ( fond, couleur des traits,couleur du texte, épaisseur,\dots), les modifications sont valables jusqu'à une nouvelle définition. Les modifications de style apportée sont cumulatives. La commande \myverb{\sbStyleBlocDefaut}  ré-active la représentation graphique par défaut

\begin{tikzexample}[title=Personnalisation des blocs ,   righthand width=0.55\textwidth,]
\begin{tikzpicture}
\sbEntree{E1}
\sbBlocL{B0}{bloc 1}{E1}
\sbStyleBloc{blue,very thick,%
fill=yellow,text=red}%
\sbBlocL{B1}{$\dfrac{K}
{1+p+p^2}$}{B0} 
\sbStyleBloc{fill=black!30,
	text=blue,ellipse}
\sbBlocL{B2}{$H(p)$}{B1}            
\sbStyleBlocDefaut
\sbBlocL{B3}{$H(p)$}{B2}        
\end{tikzpicture}

\end{tikzexample}

Comme on le voit ci-dessus, il même possible de modifier la forme du \noeud. Toutes les options relatives au tracé des 
\noeud s   de  pgf/tikz sont utilisables.


\subsection{Comparateur - Sommateur}
\subsubsection{Les commandes de base}

 Les deux commandes 
 \myverb{\sbComp[distance]{nom}{bloc précédent}}  et \\
 \myverb{\sbComp*[distance]{nom}{bloc précédent}} 
permettent de dessiner un comparateur avec les opérateurs dans le symbole

\begin{tikzexample}[title=Personnalisation des comparateurs ,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp[0]{comp}{E}
\end{tikzpicture} 
\end{tikzexample}

ou avec les opérateurs à l'extérieur

\begin{tikzexample}[title=Personnalisation des comparateurs ,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp*[0]{comp}{E}
\end{tikzpicture}
\end{tikzexample}
 avec les paramètres suivant:




\begin{description}
\item [étoile $*$ : ] la version étoilée permet l'affichage des opérateurs à l'extérieur;
\item [distance : ] paramètre optionnel permettant de positionner le comparateur par rapport au bloc précédent ( la valeur par défaut est 4em);
\item [nom :] nom du comparateur, ce nom doit être unique dans votre schéma, il sert à référencer le comparateur pour tous les liens;
\item [bloc précédent :] le nom du bloc précédent, le comparateur est placé à sa droite,à la distance \textbf{distance}.
\end{description}

On retrouve dans la figure~\ref{fig:comp} deux exemples d'utilisation d'un comparateur.

\begin{figure}[!htb]
\centering

\begin{tikzexample}[title= ,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}            
	\sbRelier[$E_1$]{E}{comp}
\sbBloc{reg}{Rég}{comp}   
	\sbRelier[$\epsilon$]{comp}{reg}
\sbBloc{sys}{Sys}{reg}       
	\sbRelier[u]{reg}{sys}
\sbSortie{S}{sys}                
	\sbRelier[$S_1$]{sys}{S}
	\sbDecaleNoeudy[4]{S}{U}
\sbBlocr{cap}{Capt}{U}        \
	\sbRelieryx{sys-S}{cap}
	\sbRelierxy[m]{cap}{comp}
\end{tikzpicture}
\end{tikzexample}

\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp*{comp}{E}                 \sbRelier[$E_1$]{E}{comp}
\sbBloc{reg}{Rég}{comp}   \sbRelier[$\epsilon$]{comp}{reg}
\sbBloc{sys}{Sys}{reg}       
	\sbRelier[u]{reg}{sys}
\sbSortie{S}{sys}                
	\sbRelier[$S_1$]{sys}{S}
	\sbDecaleNoeudy[4]{S}{U}
\sbBlocr{cap}{Capt}{U}        
	\sbRelieryx{sys-S}{cap}
	\sbRelierxy[m]{cap}{comp}
\end{tikzpicture}
\end{tikzexample}
\caption{Comparateur- commande étoilée ou non}
\label{fig:comp}
\end{figure}


\subsubsection{Comparateur dans la boucle de retour}

Les commandes indicées avec un \og r\fg{}  permettent de placer un correcteur dans la boucle de retour (figure~\ref{fig:comparretrour}).

\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}            \sbRelier[$E_1$]{E}{comp}
\sbBloc{reg}{Rég}{comp}   \sbRelier[$\epsilon$]{comp}{reg}
\sbBloc{sys}{Sys}{reg}       \sbRelier[u]{reg}{sys}
\sbSortie{S}{sys}                \sbRelier[$S_1$]{sys}{S}
\sbDecaleNoeudy[4]{S}{U}
\sbBlocr{cap}{Capt}{U}        \sbRelieryx{sys-S}{cap}  
\sbCompr[1.5]{C2}{cap}		\sbRelier{cap}{C2}
\sbBlocr[1.5]{K}{$K$}{C2}	\sbRelier{C2}{K}
	\sbRelierxy{K}{comp}
\draw[latex-] (C2)|- ++ (2em,-3em)node[right]{$Pert$};
\end{tikzpicture}

\end{tikzexample}
\caption{Utilisation d'un comparateur dans la boucle de retour}
\label{fig:comparretrour}
\end{figure}

On peut ainsi installer toutes les formes de comparateurs et sommateurs.

On remarque aussi sur le schéma de la figure~\ref{fig:comparretrour}  l'utilisation des commandes de tracé de Tikz 

%\clearpage

\subsubsection{Commandes et symboles}

D'autres commandes génériques  permettent de dessiner rapidement les principaux symboles de sommation et de comparaison.

\begin{table}[!ht]
\centering
\begin{tabular}{|c|c|c|c|c|} \hline
&  \multicolumn{2}{|c|}{Comparateurs} & \multicolumn{2}{|c|}{Sommateurs}  \\ \hline
{Symbole} & \begin{tikzpicture}
\sbEntree{E}
\sbComp[0]{comp}{E}
\end{tikzpicture}
  &
\begin{tikzpicture}
\sbEntree{E}
\sbComph[0]{comp}{E}
\end{tikzpicture} &\begin{tikzpicture}
\sbEntree{E}
\sbSumb[0]{comp}{E}
\end{tikzpicture} & \begin{tikzpicture}
\sbEntree{E}
\sbSumh[0]{comp}{E}
\end{tikzpicture} \\ 
{code}			&   \verb"\sbComp{}..." & \verb"\sbComph{}..." & \verb"\sbSumb{}..." &  \verb"\sbSumh{}..." \\ \hline
{Symbole} & \begin{tikzpicture}
\sbEntree{E}
\sbComp*[0]{comp}{E}
\end{tikzpicture}
  &
\begin{tikzpicture}
\sbEntree{E}
\sbComph*[0]{comp}{E}
\end{tikzpicture} &\begin{tikzpicture}
\sbEntree{E}
\sbSumb*[0]{comp}{E}
\end{tikzpicture} & \begin{tikzpicture}
\sbEntree{E}
\sbSumh*[0]{comp}{E}
\end{tikzpicture} \\ 
{code}			&   \verb"\sbComp*{}..." & \verb"\sbComph*{}..." & \verb"\sbSumb*{}..." &  \verb"\sbSumh*{}..." \\ \hline

\end{tabular}
\caption{Symboles et commandes de comparateurs et sommateurs}
\label{tab:symbcomp}
\end{table}


\subsubsection{Commandes génériques}



\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E1}
\sbCompSum[-4]{C1}{E1}{a}{b}{c}{d}
\sbCompSum[0]{C1}{E1}{+}{+}{+}{ }
\sbCompSum[4]{C1}{E1}{+}{+}{ }{-}
\sbCompSum[8]{C1}{E1}{+}{ }{+}{-}
\sbCompSum[12]{C1}{E1}{ }{+}{-}{-}
\end{tikzpicture}
\end{tikzexample}

\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E1}
\sbCompSum*[-4]{C1}{E1}{a}{b}{c}{d}
\sbCompSum*[0]{C1}{E1}{+}{+}{+}{ }
\sbCompSum*[4]{C1}{E1}{+}{+}{ }{-}
\sbCompSum*[8]{C1}{E1}{+}{ }{+}{-}
\sbCompSum*[12]{C1}{E1}{ }{+}{-}{-}
\end{tikzpicture}
\end{tikzexample}
\caption{Différentes formes de comparateurs / sommateurs}
\label{fig:compsum1}
\end{figure}


Deux commandes plus génériques (figure~\ref{fig:compsum1})
\begin{itemize}
\item  \myverb{\sbCompSum[dist]{nom}{E1}{a}{b}{c}{d}}
\item \myverb{\sbCompSumr[dist]{nom}{E1}{a}{b}{c}{d}}
\end{itemize}
permettent  de dessiner tout sommateur et entre autres les sommateurs et comparateurs placés dans les lignes de retour  et les commandes étoilées  le sommateur (comparateur) avec les signes à l'extérieur.
\begin{itemize}
\item  \myverb{\sbCompSum*[dist]{nom}{E1}{a}{b}{c}{d}}
\item \myverb{\sbCompSumr*[dist]{nom}{E1}{a}{b}{c}{d}}
\end{itemize} 



\subsection{Liens et renvois}
La commande \myverb{\sbBlocL...} permet de tracer un bloc avec un lien sans texte avec le bloc précédent, les macros proposent trois autres types de liens qui permettent de tracer tout type de schéma.
\begin{itemize}
\item lien direct  \myverb{\sbRelier[nom]{b1}{b2}};
\item les renvois et sauts \myverb{\sbRenvoi{b1}{b2}{}};
\item les liens décalés.
\end{itemize}


\subsubsection{Liens directs} 
Liens entre deux blocs (ou comparateur, entrée ou sortie) dans la chaîne directe (de la gauche vers la droite)  ou dans la chaîne de retour (de la droite vers la gauche). Un lien direct entre deux blocs "b1" et "b2" s'écrit: 
\myverb{\sbRelier[nom]{b1}{b2}} 
Le nom du lien (optionnel) est placé au dessus du lien au centre, 

Trois n\oe uds sont définis le long du lien entre les éléments définis par $b1$  et $b2$

\begin{itemize}
\item \textbf{b1-b2}: concaténation des noms avec un tiret "-" placé au milieu du lien;
\item \textbf{b1-b2-1}: placé au premier tiers du lien;
\item \textbf{b1-b2-2}: placé au second tiers du lien;
 
\end{itemize}

\begin{tikzexample}[title=,   righthand width=0.45\textwidth,]
\begin{tikzpicture}
\sbEntree{E1}
\sbBloc[3]{Bloc1}{$H1$}{E1}	
	\sbRelier[{$E(p)$}]{E1}{Bloc1}
\sbBloc[3]{Bloc2}{$H2$}{Bloc1}	
	\sbRelier[{nom}]{Bloc1}{Bloc2}
\sbSortie[3]{S1}{Bloc2}		
	\sbRelier[{$S(p)$}]{Bloc2}{S1}
\end{tikzpicture}
\end{tikzexample}


\subsubsection{Renvois et sauts}

Les renvois sont des liens qui permettent soit de retourner en arrière soit de sauter un ou plusieurs blocs. Ils sont tracés entre un lien et un comparateur (sommateur);


\begin{figure}[!htb]
\centering

\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
 \begin{tikzpicture}
\sbEntree{E}
\sbComph[1.5]{comp}{E}
	\sbRelier{E}{comp}
\sbBloc[1.5]{B}{$H_1$}{comp}
	\sbRelier{comp}{B}
\sbBloc[5]{B2}{bloc 2}{B}
	\sbRelier[$a$]{B}{B2}
\sbRenvoi[-4]{B-B2-1}{comp}{$a$}
\sbCompL{C2}{B2}
	\sbRenvoi{B-B2}{C2}{}
\end{tikzpicture}
\end{tikzexample}
 
 
\caption{Utilisation des renvois}
\label{fig:renvois1}
\end{figure}


La commande \myverb{\sbRenvoi[dist]{n1}{n2}{}} comporte les éléments suivants:
\begin{itemize}
\item \textbf{n1} : le nom du lien de départ ;
\item \textbf{n2} : le nom du comparateur;
\item \textbf{dist}: la distance optionnelle  au dessous si la valeur est positive, au dessus si la valeur est négative.

\end{itemize}

La figure~\ref{fig:renvois1}  présente deux utilisations des renvois.





\begin{itemize}
\item \myverb{\sbRenvoi[-4]{B-B2-1}{comp}{$a$}}  trace un renvoi qui part du premier tiers du lien \textbf{B-B2-1}  entre \textbf{B} et \textbf{B2} en passant au-dessus. Le nom du lien $a$  est placé à l'extrémité du lien.
\item \myverb{\sbRenvoi{B-B2}{C2}{}} trace un renvoi du milieu du lien vers le second comparateur. On remarque qu'il est nécessaire de ne pas oublier les deux accolades vides.
\end{itemize}


\subsubsection{Liens décalés}
Ces liens sont utilisés pour relier un bloc d'un ligne vers un bloc d'une ligne parallèle (vers l'avant ou l'arrière);

\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{a}{E}
\sbBloc{b}{$H_1$}{a}		\sbRelier[$E_1$]{E}{a}
\sbBlocL{c}{$H_2$}{b}		\sbRelier[$\epsilon$]{a}{b}
\sbComph{d}{c}			\sbRelier[u]{c}{d}
\sbBlocL{e}{$H_3$}{d}
\sbBlocL{f}{$H_4$}{e}
\sbSortie[5]{S1}{f}		\sbRelier{f}{S1}
           \sbNomLien[0.8]{S1}{$S_1$}
\sbDecaleNoeudy[-4]{f}{u}
\sbDecaleNoeudy{e}{v}
\sbBlocr{r1}{$R_1$}{u}
\sbBlocr{r2}{$R_2$}{v}
\sbBlocrL{r3}{$R_3$}{r2}
				\sbRelieryx{f-S1}{r1}
				\sbRelierxy[n1]{r1}{d}
				\sbRelieryx{e-f}{r2}
				\sbRelierxy[n2]{r3}{a}
\end{tikzpicture}

\end{tikzexampleL}

\caption{Utilisation des liens décalés}
\label{fig:liensdecals}
\end{figure}


On note sur la figure~\ref{fig:liensdecals}!
\begin{itemize}
    \item Les premières commandes (de \myverb{\sbEntree..}  à \myverb{\sbSortie{S1}..}) placent les blocs de la chaîne directe, certains blocs sont positionnés avec la commande \myverb{\sbBloc}  d'autres avec \myverb{\sbBlocL};
    \item Le nom de la sortie n'est pas positionné avec la commande \myverb{\sbRelier{f}{S1}}  mais avec la commande \myverb{\sbNomLien[0.8]{S1}{$S_1$} } afin qu'il ne soit pas superposé au trait du retour vers $R_1$;
    \item Les deux commandes \myverb{\sbDecaleNoeudy[-4]{f}{u}} et \myverb{\sbDecaleNoeudy{e}{v}}  permettent de positionner le départ des deux boucles de retour, la première est décalé de \textbf{[-4]} au dessus de la chaîne précédente et positionnée par rapport au bloc \textbf{f}, la seconde est placée par défaut au dessous par rapport au bloc \textbf{e}. Ces nouveaux n\oe uds sont nommés \textbf{u} et \textbf{v}.
    \item Les blocs de retours sont ensuite tracés de la droite vers la gauche par rapport à ces n \oe uds avec la commande \myverb{\sbBlocr...} et \myverb{\sbBlocrL...}  puis reliés.
    \item La commande \myverb{\sbRelieryx{f-S1}{r1}}   trace le lien depuis le milieu de la liaison entre les blocs \textbf{f} et \textbf{s} et le bloc \textbf{r1}, la commande \myverb{\sbRelierxy[n1]{r1}{d}}   trace le lien vers le comparateur .
\end{itemize}






\subsubsection{Personnalisation des liens}

La commande \myverb{\sbStyleLien{liste d'option}}  permet de personnaliser le tracé des liens et des textes associés.



\begin{tikzexample}[title=,   righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}
	\sbRelier{E}{comp}
\sbBlocL{B1}{$H_0$}{comp}
	\sbStyleLien{dashed, red}
\sbBloc[6]{B2}{$H_1$}{B1}
	\sbRelier[lien]{B1}{B2}
\sbSortie[4]{S}{B2}
	\sbStyleLienDefaut
\sbStyleLien{blue,very thick,text=brown}
	\sbRelier[Sortie]{B2}{S}
	\sbStyleLien{dashed}
	\sbRenvoi{B2-S}{comp}{}
	\sbStyleLienDefaut
\end{tikzpicture}
\end{tikzexample}



Cette commande s'applique à tous les types de liens, les styles sont actifs jusqu'à une nouvelle définition, et comme pour la commande \myverb{\sbStyleBloc{liste d'option}}  ils sont cumulatifs. La commande \myverb{\sbStyleLienDefaut} ré-initialise le style par défaut.

\subsection{Chaînes et Boucles}

Plusieurs commandes globales facilitent le tracé de schéma blocs, elle tracent directement des chaînes de blocs, ou des boucles.

\subsubsection{Chaînes}
deux commandes, une qui pour trace des chaînes directe ( de la gauche vers la droite), l'autre les chaînes de retour (de la droite vers la gauche).

  
\begin{description}
\item [Chaîne directe:] \myverb{\sbChaine[pas]{Noeud depart}{liste blocs Nom/Fonction}}
\item [Chaîne de retour: ] \myverb{\sbChaineRetour[pas]{Noeud depart}{liste blocs Nom/Fonction}}
\end{description}

 \begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbChaine[4]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
\end{tikzpicture}
\end{tikzexampleL}
\caption{Chaîne directe}
\label{fig:chainedirecte}
\end{figure}



\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbChaineRetour[3]{E}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
\end{tikzpicture}
\end{tikzexampleL}
\caption{Chaîne de retour}
\label{fig:chaineretoure}
\end{figure}



  
On retrouve dans ces deux commandes
\begin{description}
\item[pas: ] distance en em entre les blocs,
\item[noeud depart:] le premier bloc de la chaîne est positionnée à la distance pas du n\oe ud noeud depart,
\item[liste blocs: ] la liste des blocs est notée avec la syntaxe suivante $Nom_1$/$Fonction_1$, $Nom_2$/$Fonction_2$, ...., $Nom_i$/$Fonction_i$, ...., $Nom_n$/$Fonction_n$.
\end{description}


%
Avec ces deux commandes, on dessine rapidement le schéma ci dessous avec un code relativement court.
%


\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}\sbRelier[$E(p)$]{E}{comp}
\sbChaine[4]{comp}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
\sbDecaleNoeudy[5]{B-C}{DebutRetour}
\node[above of=comp-A,node distance=0.5em]{$\varepsilon(p)$};
\node[above of=B-C,node distance=0.5em]{$V(p)$};
\sbChaineRetour[2]{DebutRetour}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
\sbRelieryx{B-C}{E1}
\sbRelierxy{G}{comp}
\sbSortie[5]{S}{D}\sbRelier[$S(p)$]{D}{S}
\end{tikzpicture}
\end{tikzexampleL}
\caption{Utilisation des chaînes directe et de retour}
\label{fig:schemacompletsimple}
\end{figure}




On remarquera, tous les liens sont nommés, le nom est construit à partir du nom des deux blocs à relier, ainsi, B-C  correspond au point milieu du lien entre B et C.

La commande tikz \verb"\node[above of=B-C,node distance=0.5em]{$V(p)$};" permet de placer le nom du lien au dessus (à la distance 0.5em) de celui-ci.


\subsubsection{Boucles}

Trois commandes permettent de dessiner des schémas blocs bouclés unitaire ou non.
\begin{description} 
\item[Boucle unitaire: ]deux commandes:

\begin{itemize}
\item  \myverb{sbBoucle[pas]{nœud départ}{liste de blocs chaine directe}}: cette commande dessine une schéma bouclé à retour unitaire sans la sortie (figure~\ref{fig:retourunitaire}). Cette commande peut être associé et complété pour réaliser un schéma plus complexe.

 
\item \myverb{\sbBoucleSeule[pas]{Nœud début}{liste blocs}{Sortie}}: cette commande reprend la précédente et ajoute une sortie (figure~\ref{fig:retourunitairesortie}).

 
 \end{itemize}


\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbBoucle[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
\sbBlocL{E}{$E_1(p)$}{D}
\end{tikzpicture}
 \end{tikzexampleL}
\caption{Tracé direct d'un schéma blocs à retour unitaire}
\label{fig:retourunitaire}
\end{figure}



\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbBoucleSeule[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}{S}
\end{tikzpicture}
 \end{tikzexampleL}
\caption{Tracé direct d'un schéma blocs à retour unitaire avec sortie}
\label{fig:retourunitairesortie}
\end{figure}




\item[Boucle de retour non unitaire: ] ~\\


\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{E}
\sbBoucleRetour[3]{E}{A/$A_1(p)$,BB/Fonction(p),C/$C(p)$,D/$D_1(p)$}{F/$F(p)$,G/$G(p)$}
\end{tikzpicture}
 \end{tikzexampleL}
\caption{Tracé direct d'un schéma blocs avec complet}
\label{fig:retourunitairecomplet}
\end{figure} 

\begin{itemize}
\item {\small \myverb{\sbBoucleRetour[pas]{nœud départ}{liste chaine directe}{liste chaine de retour}} }:  cette commande reprend les deux commandes de chaîne directe et de chaîne de retour.

\end{itemize}



\end{description}




Encore un  petit exemple (figure~\ref{fig:tikzliennom}), on utilise dans cet exemple différentes commandes de tracés de Tikz pour nommer les différents liens et blocs.
\begin{itemize}
\item Le comparateur est nommé en concaténant le mot \textbf{Comp} avec le nom associé à l'entrée (ici \textbf{U}) soit \textbf{Comp-U}.
\item Chaque bloc est nommé comme dans la liste de la commande.
\item Chaque lien est nommé en concaténant le nom des deux deux blocs avec un tiret.
\item Il est conseillé de préciser les distances et coordonnées en \textbf{em}.
\end{itemize}


\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
\begin{tikzpicture}
\sbEntree{U}
\sbBoucleRetour[3]{U}{C/$C(p)$,A/$A$,H/$H_{sys}(p)$}{G/G}
\node[above =0.1em of CompU-C]{$\varepsilon(p)$};
\node[above =0.5em of A]{$G(p)$};
\node[above right =0.25em of U]{$U(p)$};
\node[above =0.25em of A-H]{$W(p)$};
\draw[latex-] (CompU) --++(0.5em,3em) node[right]{Comparateur};
\sbSortie[5]{V2}{H}\sbRelier[$V_2(p)$]{H}{V2}
\end{tikzpicture}
 \end{tikzexampleL}
\caption{Utilisation des commandes de Tikz pour nommer les liens et bloc}
\label{fig:tikzliennom}
\end{figure} 
 

\subsection{Changement de taille}

Toutes dimensions étant en em, le changement de taille d'un graphe se fait en changeant la taille des caractères de l'environnement englobant.


\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=,]
{\small
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}           
\sbRelier{E}{comp}
\sbBlocL{B1}{$H_0$}{comp}
\sbBloc[3]{B2}{$H_1$}{B1} 
\sbRelier[lien]{B1}{B2}
\sbSortie{S}{B2}
\sbRelier[Sortie]{B2}{S}
\sbRenvoi{B2-S}{comp}{}
\end{tikzpicture}
}
 \end{tikzexample}
\caption{Tracé en taille \textbf{small}}
\label{fig:tikzsmall}
\end{figure} 

\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=,   righthand width=0.55\textwidth,]
{\Large
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}           
\sbRelier{E}{comp}
\sbBlocL{B1}{$H_0$}{comp}
\sbBloc[3]{B2}{$H_1$}{B1} 
\sbRelier[lien]{B1}{B2}
\sbSortie{S}{B2}
\sbRelier[Sortie]{B2}{S}
\sbRenvoi{B2-S}{comp}{}
\end{tikzpicture}
}
 \end{tikzexample}
\caption{Tracé en taille \textbf{Large}}
\label{fig:tikzLarge}
\end{figure} 

\begin{figure}[!htb]
\centering
\begin{tikzexample}[title=,   righthand width=0.45\textwidth,]
{\tiny
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}           
\sbRelier{E}{comp}
\sbBlocL{B1}{$H_0$}{comp}
\sbBloc[3]{B2}{$H_1$}{B1} 
\sbRelier[lien]{B1}{B2}
\sbSortie{S}{B2}
\sbRelier[Sortie]{B2}{S}
\sbRenvoi{B2-S}{comp}{}
\end{tikzpicture}
}
 \end{tikzexample}
\caption{Tracé en taille \textbf{tiny}}
\label{fig:tikztiny}
\end{figure} 

Il est aussi possible d'utiliser ce changement de taille pour par exemple insister sur une partie de la boucle comme par exemple sur l'exemple de la figure~\ref{fig:tikzTaille}, où on souhaite insister sur la boucle intérieure.

\begin{figure}[!htb]
\centering
\begin{tikzexampleL}[title=,]
{\tiny
\begin{tikzpicture}
\sbEntree{E}
\sbComp{comp}{E}           
		\sbRelier{E}{comp}
\sbBlocL{B1}{$H_0$}{comp}
{\normalsize
\sbStyleBloc{blue,very thick,%
fill=yellow,text=red}
\sbComp[5]{comp2}{B1}    
		\sbRelier{B1}{comp2}       
\sbBlocL{B10}{$H_2$}{comp2}
\sbBloc[3]{B20}{$H_3$}{B10} 
		\sbRelier[lien 1]{B10}{B20}
\sbBloc{B30}{$H_4$}{B20}
		\sbRelier{B20}{B30}
		\sbRenvoi[2]{B20-B30}{comp2}{}
}
\sbBloc[5]{B2}{$H_1$}{B30} 
		\sbRelier[lien 2]{B30}{B2}
\sbSortie[6]{S}{B2}
		\sbRelier[Sortie]{B2}{S}
		\sbRenvoi[6]{B2-S}{comp}{}
\end{tikzpicture}
}
 \end{tikzexampleL}
\caption{Utilisation du changement de taille dans un schéma}
\label{fig:tikzTaille}
\end{figure} 



\section{Installation}
\begin{itemize}
\item Copier  le package schemabloc.sty dans votre répertoire localtexmf/tex/latex \dots
\item Placer dans l'entête de votre document \verb"\usepackage{schemabloc}"
\end{itemize}



\section{Exemples}

\subsection{Moteur à courant continu}


\begin{tikzexampleL}[title=Moteur à courant continu]
\begin{tikzpicture}
\sbEntree{Uc}
\sbComp{C1}{Uc}		
		\sbRelier[$U_c(p)$]{Uc}{C1}
\sbBlocL{He}{$\dfrac{1}{R+L\cdot p}$}{C1}
\sbBlocL{Kc}{$K_c$}{He}
\sbSumh{C2}{Kc}		
		\sbRelier[$C_m(p)$]{Kc}{C2}
\sbBlocL{Hm}{$\dfrac{1}{J\cdot p +f}$}{C2}
\sbSortie[5]{Omeg}{Hm}		
		\sbRelier[$\Omega_m(p)$]{Hm}{Omeg}
\sbDecaleNoeudy{Kc}{Ke}
\sbBlocr{Ke}{$K_e$}{Ke}				
		\sbRelieryx{Hm-Omeg}{Ke}
		\sbRelierxy[$E(p)$]{Ke}{C1}
\draw[latex-](C2)|-++(-3em,3em)node[left]{$C_r(p)$};
\end{tikzpicture}
\end{tikzexampleL}

\subsection{Schéma blocs avec comparateur dans la boucle de retour}

\begin{tikzexample}[title=Schéma blocs avec comparateur et fonction dans la boucle de retour]
\begin{tikzpicture}
\sbEntree{E}
\sbStyleBloc{fill=black!30,text=blue,text width=8em}
\sbComp{comp}{E} 
	\sbRelier[$E_1$]{E}{comp}
\sbBloc{A}{$A(p)=\dfrac{100}{p+10}$}{comp}
	\sbRelier[$\epsilon$]{comp}{A}
\sbSortie[5]{S}{A} 	
	\sbRelier[$S_1$]{A}{S}
\sbDecaleNoeudy[4]{S}{U}
\sbCompSum[-4]{C1}{U}{}{-}{}{+}
	\sbRelieryx{A-S}{C1}
\sbBlocr{B}{$B(p)=\dfrac{3}{p+1}$}{C1}
	\sbRelier{C1}{B}
	\sbRelierxy[m]{B}{comp}
	\sbRenvoi{B-comp-1}{C1}{}
\end{tikzpicture} 
\end{tikzexample}

\newpage

\subsection{Schéma blocs paramétrés}

Deux exemples à partir du même code de tracé d'un graphe, les différentes fonctions et variables sont paramétrées dans le code.
\begin{tikzexample}[title=Système bouclé unitaire paramétrable (premier ordre), righthand width=0.55\textwidth,]
\begin{tikzpicture}
%définition des paramètres
\def\Sortie{$S(p)$}
\def\Entree{$E(p)$}
\def\HC{$K_p$}
\def\HM{$\dfrac{K}
{1+\tau\cdot p}$}
\def\eps{$\varepsilon(p)$}
\def\VU{$U(p)$}
\sbEntree{E}
\sbComp{comp}{E}           
\sbRelier[\Entree]{E}{comp}
\sbBloc{B1}{\HC}{comp}
\sbRelier[\eps]{comp}{B1}
\sbBloc[3]{B2}{\HM}{B1} 
\sbRelier[\VU]{B1}{B2}
\sbSortie[4]{S}{B2}
\sbRelier[\Sortie]{B2}{S}
\sbRenvoi{B2-S}{comp}{}
\end{tikzpicture}
\end{tikzexample}

\begin{tikzexample}[title=Système bouclé unitaire paramétrable (second ordre), righthand width=0.58\textwidth,]
\begin{tikzpicture}
%définition des paramètres
\def\Sortie{$S(p)$}
\def\Entree{$E(p)$}
\def\HC{$K_p\cdot \dfrac{1+T_i\cdot p}{T_i\cdot p}$}
\def\HM{$\dfrac{K}
{1+\dfrac{2\cdot \xi}{\omega_n}\cdot p +\dfrac{p^2}{\omega_n^2}}$}
\def\eps{$\varepsilon(p)$}
\def\VU{$U(p)$}
\sbEntree{E}
\sbComp{comp}{E}           
\sbRelier[\Entree]{E}{comp}
\sbBloc{B1}{\HC}{comp}
\sbRelier[\eps]{comp}{B1}
\sbBloc[3]{B2}{\HM}{B1} 
\sbRelier[\VU]{B1}{B2}
\sbSortie[2]{S}{B2}
\sbRelier[\Sortie]{B2}{S}
\sbRenvoi{B2-S-1}{comp}{}
\end{tikzpicture}
\end{tikzexample}

\newpage

\subsection{Correcteurs P.I.D.}

Tracé des différentes formes du correcteur P.I.D.

\begin{tikzexample}[title=P.I.D. parallèle, righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}                      \sbNomLien[1]{E}{$\epsilon(p)$}
\sbBlocL{Int}{$\dfrac{1}{T_i\cdot p}$}{E}
\sbDecaleNoeudy[4]{E}{Der}
\sbDecaleNoeudy[-4]{E}{Prop}
\sbBloc{Der}{$T_d\cdot p$}{Der}  \sbRelieryx{E-Int}{Der}
\sbBloc{Prop}{$K_p$}{Prop}        \sbRelieryx{E-Int}{Prop}
\sbCompSum{Somme}{Int}{+}{+}{+}{ }
\sbRelier{Int}{Somme}  
\sbRelierxy{Prop}{Somme}
\sbRelierxy{Der}{Somme}
\sbSortie{S}{Somme}               \sbRelier[$U(p)$]{Somme}{S}                               
\end{tikzpicture}
\end{tikzexample}

\begin{tikzexample}[title=P.I.D.  mixte, righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}                      \sbNomLien[1]{E}{$\epsilon(p)$}
\sbBlocL{Prop}{$K_p$}{E}
\sbBlocL{Int}{$\dfrac{1}{T_i\cdot p}$}{Prop}
\sbDecaleNoeudy[4]{Prop}{Der}
\sbBloc[4]{Der}{$T_d\cdot p$}{Der}  \sbRelieryx{Prop-Int}{Der}
\sbCompSum{Somme}{Int}{+}{+}{+}{ }
\sbRenvoi[-4]{Prop-Int}{Somme}{}
\sbRelier{Int}{Somme}  
\sbRelierxy{Der}{Somme}
\sbSortie{S}{Somme}               \sbRelier[$U(p)$]{Somme}{S}                               
\end{tikzpicture}
\end{tikzexample}



\begin{tikzexample}[title=P.I.D.  série, righthand width=0.5\textwidth,]
\begin{tikzpicture}
\sbEntree{E}                      
\node[above right=0em and-0.5em of E]{$\epsilon(p)$};
%\sbNomLien[1]{E}{$\epsilon(p)$}
\sbBlocL{Prop}{$K_p$}{E}
\sbBlocL[1.5]{Int}{$\dfrac{1}{T_i\cdot p}$}{Prop}
\sbSumh[1.8]{Som1}{Int}                \sbRelier{Int}{Som1}
\sbRenvoi[-3]{Prop-Int}{Som1}{}
\sbBlocL[1.5]{Der}{$T_d\cdot p$}{Som1}
\sbSumh[1.8]{Som2}{Der}                \sbRelier{Der}{Som2}
\sbRenvoi[-3]{Som1-Der}{Som2}{}
\sbSortie{S}{Som2}    				\sbRelier[$U(p)$]{Som2}{S}
\end{tikzpicture}
\end{tikzexample}



\end{document}


