7

I would like to draw a signalling protocol message exchange, like the picture below.

enter image description here

I tried to draw the diagram with the package pgf-umlsd and 90% are able to realize the scheme. this is the code:

\documentclass{article}
\usepackage[margin=12mm]{geometry}
\usepackage{hyperref}
\usepackage[underline=true]{pgf-umlsd}
\usepackage{listings}
\usepackage{color}
\definecolor{listinggray}{gray}{0.92}
\lstset{ %
   language=[LaTeX]TeX,
   breaklines=true,
   frame=single,
   basicstyle=\footnotesize\ttfamily,
   backgroundcolor=\color{listinggray},
   keywordstyle=\color{blue}
}

\begin{document}

\begin{sequencediagram}
\newinst{ue}{UE}
\newinst[3]{nodeb}{Node B}
\newinst[3]{rnc}{RNC}
\mess{ue}{RRC Connection Request}{rnc}
\mess{rnc}{Radio Link Setup Request}{nodeb}
\mess{nodeb}{Radio Link Setup Response}{rnc}
\mess{rnc}{Establish Request}{nodeb}
\mess{nodeb}{Establish Confirm}{rnc}
\mess{rnc}{RRC Connection Setup}{ue}
\mess{nodeb}{Synchronization Indication}{rnc}
\mess{ue}{RRC Connection Setup Complete}{rnc}
\end{sequencediagram}

\end{document}

using the package I am not able to enter the rectangle labeled "L1 synchronization" between the messages "RRC Connection Setup" and "Synchronization Indication".

Can you suggest a more customizable alternative to the diagram shown?

hpesoj626
  • 17,282
user21431
  • 685

3 Answers3

5

You can complete your diagram without leaving pgf-umlsd:

Diagram

To do so, you only need to know some things about pgf-umlsd:

  • Macro \postlevel increases a "unit of time" the timing of the next message, so it serves to leave a gap between "RRC Connection Setup" and "Synchronizacion indication", to insert your rectangle.

  • pgf-umlsd defines a pair of named nodes for each message, which you can use later to draw things relative to those nodes. They are called (<message label> from) and (<message label> to), where <message label> is the text written above the message.

You can use those named nodes to specify the corners of the shaded rectangle. I used calc library to do so.

So, in your case, to draw the rectangle at the desired point, you have to find which messages are near the corners of the rectangle. We find that the top left corner is near the ending of message "RRC Connection Setup", and the bottom right corner is near the starting of message "Synchronization Indication", so the corners of the rectangle are:

(RRC Connection Setup to) rectangle (Synchronization Indication from)

But those would produce a rectangle too close to the messages, so we have displace a bit the y coordinate to separate it from each message. I used the following expression to separate it 0.3 units of each:

($(RRC Connection Setup to)+(0,-.3)$) rectangle ($(Synchronization Indication from) +(0,.3)$)

If you want the rectangle spanning other columns, you have to find which message endings are nearby to the desired rectangle corners. For example, for having the rectangle from "Node B" to "RNC", yo may use:

 ($(RR Connection Setup from)+(0,-.3)$) rectangle ($(Synchronization Indication from) +(0,.5)$)

and so on

\documentclass{article}
\usepackage[margin=12mm]{geometry}
\usepackage{hyperref}
\usepackage[underline=true]{pgf-umlsd}
\usetikzlibrary{calc}
\begin{document}

\begin{sequencediagram}
\newinst{ue}{UE}
\newinst[3]{nodeb}{Node B}
\newinst[3]{rnc}{RNC}
\mess{ue}{RRC Connection Request}{rnc}
\mess{rnc}{Radio Link Setup Request}{nodeb}
\mess{nodeb}{Radio Link Setup Response}{rnc}
\mess{rnc}{Establish Request}{nodeb}
\mess{nodeb}{Establish Confirm}{rnc}
\mess{rnc}{RRC Connection Setup}{ue}
\postlevel
\mess{nodeb}{Synchronization Indication}{rnc}
\filldraw[fill=black!30] ($(RRC Connection Setup to)+(0,-.3)$) rectangle ($(Synchronization Indication from) +(0,.3)$)
  node[midway] {L1 Synchronization};
\mess{ue}{RRC Connection Setup Complete}{rnc}
\end{sequencediagram}

\end{document}
JLDiaz
  • 55,732
  • thanks jLDiaz, this was exactly what I wanted to achieve. – user21431 Mar 11 '13 at 10:20
  • and how can I control the position of the rectangle? I mean, if I would position the rectangle between node ue and rnc? or between nodeb and rnc? – user21431 Mar 11 '13 at 10:35
  • @user21431 I edited my answer with further explanations and examples – JLDiaz Mar 11 '13 at 10:52
  • Is it possible assign a different color to pairs of arrows and put a legend with the colors for each protocol layer? – user21431 Mar 15 '13 at 10:45
  • @user21431 Not easily. pgf-umlsd package does not provide any mean to pass colors or other options to the tikz command that draws the arrows. It can be done however in other ways, but the answer does not fit in a comment. Please, post a new question for this. – JLDiaz Mar 15 '13 at 11:00
  • Ok jLDiaz I post the request in a new question – user21431 Mar 15 '13 at 12:49
  • if I would like to draw a rectangle at above all message, large from first node to the end node, between the nodes and the first message RRC Connection Request; or draw a rectangle large from first node to the end node at bottom, under the last message RRC Connection Setup Complete? – user21431 Mar 15 '13 at 15:13
  • @user21431 You can use the named nodes at the extremes of the messages, and the fit tikzlibrary to draw a rectangle which encompasses those nodes. You can give any inner sep to this "fitting" node, which can be also negative, to adjust its size so that it does not overlaps onto existing text. If you need more detail, post a new question. – JLDiaz Mar 15 '13 at 16:05
2

you can also use tikz uml package

http://www.ensta-paristech.fr/~kielbasi/tikzuml/index.php?lang=en&id=doc#t-4

rpapa
  • 12,350
0

Actually,you can use pgf-umlsd and change any style as you wish:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,shadows,calc}
\usepackage{pgf-umlsd}

\begin{document}

\begin{sequencediagram}
\tikzstyle{inststyle}=[rectangle,anchor=west,minimum
    height=0.8cm, minimum width=1.6cm, fill=white]
\tikzstyle{dotted}=[line width=2pt,red!50]
\newinst{ue}{UE}
\newinst[3]{nodeb}{Node B}
\newinst[3]{rnc}{RNC}
\mess{ue}{RRC Connection Request}{rnc}
\mess{rnc}{Radio Link Setup Request}{nodeb}
\mess{nodeb}{Radio Link Setup Response}{rnc}
\mess{rnc}{Establish Request}{nodeb}
\mess{nodeb}{Establish Confirm}{rnc}
\mess{rnc}{RRC Connection Setup}{ue}
\postlevel
\mess{nodeb}{Synchronization Indication}{rnc}
\filldraw[fill=black!30] ($(RRC Connection Setup to)+(0,-.3)$) rectangle ($(Synchronization Indication from) +(0,.3)$)
  node[midway] {L1 Synchronization};
\mess{ue}{RRC Connection Setup Complete}{rnc}
\end{sequencediagram}

\end{document}

The output as below:

enter image description here

Beatlej
  • 1,723