documentation/ethercat_doc.tex
changeset 1306 a27c839d043b
parent 1299 dd8e55d97280
child 1307 45a82ad140f8
equal deleted inserted replaced
1305:de3fcbb6773e 1306:a27c839d043b
   306 The EtherCAT master is integrated into the Linux 2.6 kernel. This was
   306 The EtherCAT master is integrated into the Linux 2.6 kernel. This was
   307 an early design decision, which has been made for several reasons:
   307 an early design decision, which has been made for several reasons:
   308 
   308 
   309 \begin{itemize}
   309 \begin{itemize}
   310 
   310 
   311 \item Kernel code has significantly better realtime characteristics,
   311 \item Kernel code has significantly better realtime characteristics, i.\,e.\
   312 i.\,e.~less latency than userspace code. It was foreseeable, that a fieldbus
   312 less latency than userspace code. It was foreseeable, that a fieldbus master
   313 master has a lot of cyclic work to do. Cyclic work is usually triggered by
   313 has a lot of cyclic work to do. Cyclic work is usually triggered by timer
   314 timer interrupts inside the kernel. The execution delay of a function that
   314 interrupts inside the kernel. The execution delay of a function that processes
   315 processes timer interrupts is less, when it resides in kernelspace, because
   315 timer interrupts is less, when it resides in kernelspace, because there is no
   316 there is no need of time-consuming context switches to a userspace process.
   316 need of time-consuming context switches to a userspace process.
   317 
   317 
   318 \item It was also foreseeable, that the master code has to directly
   318 \item It was also foreseeable, that the master code has to directly
   319 communicate with the Ethernet hardware. This has to be done in the kernel
   319 communicate with the Ethernet hardware. This has to be done in the kernel
   320 anyway (through network device drivers), which is one more reason for the
   320 anyway (through network device drivers), which is one more reason for the
   321 master code being in kernelspace.
   321 master code being in kernelspace.
   363 
   363 
   364 \end{description}
   364 \end{description}
   365 
   365 
   366 %------------------------------------------------------------------------------
   366 %------------------------------------------------------------------------------
   367 
   367 
   368 \section{Phases}
   368 \section{Master Module}
       
   369 \label{sec:mastermod}
       
   370 \index{Master module}
       
   371 
       
   372 The EtherCAT master kernel module \textit{ec\_master} can contain multiple
       
   373 master instances. Each master waits for a certain Ethernet device identified
       
   374 by its MAC address\index{MAC address}. These addresses have to be specified on
       
   375 module loading via the \textit{main\_devices} module parameter. The number of
       
   376 master instances to initialize is taken from the number of MAC addresses
       
   377 given.
       
   378 
       
   379 The below command loads the master module with a single master instance that
       
   380 waits for the Ethernet device with the MAC address
       
   381 \lstinline+00:0E:0C:DA:A2:20+. The master will be accessible via index $0$.
       
   382 
       
   383 \begin{lstlisting}
       
   384 # `\textbf{modprobe ec\_master main\_devices=00:0E:0C:DA:A2:20}`
       
   385 \end{lstlisting}
       
   386 
       
   387 MAC addresses for multiple masters have to be separated by commas:
       
   388 
       
   389 \begin{lstlisting}
       
   390 # `\textbf{modprobe ec\_master main\_devices=00:0E:0C:DA:A2:20,00:e0:81:71:d5:1c}`
       
   391 \end{lstlisting}
       
   392 
       
   393 The two masters can be addressed by their indices 0 and 1 respectively (see
       
   394 figure~\ref{fig:masters}). The master index is needed for the
       
   395 \lstinline+ecrt_master_request()+ function of the application interface (see
       
   396 chap.~\ref{chap:api}) and the \lstinline+--master+ option of the
       
   397 \textit{ethercat} command-line tool (see sec.~\ref{sec:tool}), which defaults
       
   398 to $0$.
       
   399 
       
   400 \begin{figure}[htbp]
       
   401   \centering
       
   402   \includegraphics[width=.5\textwidth]{images/masters}
       
   403   \caption{Multiple masters in one module}
       
   404   \label{fig:masters}
       
   405 \end{figure}
       
   406 
       
   407 \paragraph{Init Script}
       
   408 \index{Init script}
       
   409 
       
   410 In most cases it is not necessary to load the master module and the Ethernet
       
   411 driver modules manually. There is an init script available, so the master can
       
   412 be started as a service (see sec.~\ref{sec:system}).
       
   413 
       
   414 \paragraph{Syslog}
       
   415 
       
   416 The master module outputs information about its state and events to the kernel
       
   417 ring buffer. These also end up in the system logs.  The above module loading
       
   418 command should result in the messages below:
       
   419 
       
   420 \begin{lstlisting}
       
   421 # `\textbf{dmesg | tail -2}`
       
   422 EtherCAT: Master driver `\masterversion`
       
   423 EtherCAT: 2 masters waiting for devices.
       
   424 
       
   425 # `\textbf{tail -2 /var/log/messages}`
       
   426 Jul  4 10:22:45 ethercat kernel: EtherCAT: Master driver `\masterversion`
       
   427 Jul  4 10:22:45 ethercat kernel: EtherCAT: 2 masters waiting
       
   428                                  for devices.
       
   429 \end{lstlisting}
       
   430 
       
   431 All EtherCAT master output is prefixed with \lstinline+EtherCAT+ which makes
       
   432 searching the logs easier.
       
   433 
       
   434 %------------------------------------------------------------------------------
       
   435 
       
   436 \section{Master Phases}
   369 \index{Master phases}
   437 \index{Master phases}
   370 
   438 
   371 The EtherCAT master runs through several phases (see fig.~\ref{fig:phases}):
   439 Every EtherCAT master provided by the master module (see
       
   440 sec.~\ref{sec:mastermod}) runs through several phases (see
       
   441 fig.~\ref{fig:phases}):
   372 
   442 
   373 \begin{figure}[htbp]
   443 \begin{figure}[htbp]
   374   \centering
   444   \centering
   375   \includegraphics[width=.9\textwidth]{images/phases}
   445   \includegraphics[width=.9\textwidth]{images/phases}
   376   \caption{Master phases and transitions}
   446   \caption{Master phases and transitions}
   393 
   463 
   394 \item[Operation phase]\index{Operation phase} The master is requested by an
   464 \item[Operation phase]\index{Operation phase} The master is requested by an
   395 application that can provide a bus configuration and exchange process data.
   465 application that can provide a bus configuration and exchange process data.
   396 
   466 
   397 \end{description}
   467 \end{description}
   398 
       
   399 %------------------------------------------------------------------------------
       
   400 
       
   401 \section{General Behavior}
       
   402 \index{Master behavior}
       
   403 
       
   404 \ldots
       
   405 
       
   406 % TODO Behavior (Scanning)
       
   407 
       
   408 %------------------------------------------------------------------------------
       
   409 
       
   410 \section{Master Module}
       
   411 \label{sec:mastermod}
       
   412 \index{Master module}
       
   413 
       
   414 The EtherCAT master kernel module \textit{ec\_master} can contain multiple
       
   415 master instances. Each master waits for a certain Ethernet device identified
       
   416 by its MAC address\index{MAC address}. These addresses have to be specified on
       
   417 module loading via the \textit{main\_devices} module parameter. The number of
       
   418 master instances to initialize is taken from the number of MAC addresses
       
   419 given.
       
   420 
       
   421 The below command loads the master module with a single master instance that
       
   422 waits for the Ethernet device with the MAC address
       
   423 \lstinline+00:0E:0C:DA:A2:20+. The master will be accessible via index $0$.
       
   424 
       
   425 \begin{lstlisting}
       
   426 # `\textbf{modprobe ec\_master main\_devices=00:0E:0C:DA:A2:20}`
       
   427 \end{lstlisting}
       
   428 
       
   429 MAC addresses for multiple masters have to be separated by commas:
       
   430 
       
   431 \begin{lstlisting}
       
   432 # `\textbf{modprobe ec\_master main\_devices=00:0E:0C:DA:A2:20,00:e0:81:71:d5:1c}`
       
   433 \end{lstlisting}
       
   434 
       
   435 The two masters can be addressed by their indices 0 and 1 respectively (see
       
   436 figure~\ref{fig:masters}). The master index is needed for the
       
   437 \lstinline+ecrt_master_request()+ function of the application interface (see
       
   438 chap.~\ref{chap:api}) and the \lstinline+--master+ option of the
       
   439 \textit{ethercat} command-line tool (see sec.~\ref{sec:tool}), which defaults
       
   440 to $0$.
       
   441 
       
   442 \begin{figure}[htbp]
       
   443   \centering
       
   444   \includegraphics[width=.5\textwidth]{images/masters}
       
   445   \caption{Multiple masters in one module}
       
   446   \label{fig:masters}
       
   447 \end{figure}
       
   448 
       
   449 \paragraph{Init Script}
       
   450 \index{Init script}
       
   451 
       
   452 In most cases it is not necessary to load the master module and the Ethernet
       
   453 driver modules manually. There is an init script available, so the master can
       
   454 be started as a service (see sec.~\ref{sec:system}).
       
   455 
       
   456 \paragraph{Syslog}
       
   457 
       
   458 The master module outputs information about its state and events to the kernel
       
   459 ring buffer. These also end up in the system logs.  The above module loading
       
   460 command should result in the messages below:
       
   461 
       
   462 \begin{lstlisting}
       
   463 # `\textbf{dmesg | tail -2}`
       
   464 EtherCAT: Master driver `\masterversion`
       
   465 EtherCAT: 2 masters waiting for devices.
       
   466 
       
   467 # `\textbf{tail -2 /var/log/messages}`
       
   468 Jul  4 10:22:45 ethercat kernel: EtherCAT: Master driver `\masterversion`
       
   469 Jul  4 10:22:45 ethercat kernel: EtherCAT: 2 masters waiting
       
   470                                  for devices.
       
   471 \end{lstlisting}
       
   472 
       
   473 All EtherCAT master output is prefixed with \lstinline+EtherCAT+ which makes
       
   474 searching the logs easier.
       
   475 
   468 
   476 %------------------------------------------------------------------------------
   469 %------------------------------------------------------------------------------
   477 
   470 
   478 \section{Process Data}
   471 \section{Process Data}
   479 \label{sec:processdata}
   472 \label{sec:processdata}
   629 application. The state of a slave configuration can either be queried via the
   622 application. The state of a slave configuration can either be queried via the
   630 application interface or via the command-line tool (see
   623 application interface or via the command-line tool (see
   631 sec.~\ref{sec:ethercat-config}).
   624 sec.~\ref{sec:ethercat-config}).
   632 
   625 
   633 \paragraph{Slave Position} The slave position has to be specified as a tuple
   626 \paragraph{Slave Position} The slave position has to be specified as a tuple
   634 of ``alias`` and ``position''. This allows addressing slaves either via an
   627 of ``alias'' and ``position''. This allows addressing slaves either via an
   635 absolute bus position, or a stored identifier called ``alias'', or a mixture
   628 absolute bus position, or a stored identifier called ``alias'', or a mixture
   636 of both. The alias is a 16-bit value stored in the slave's E$^2$PROM. It can
   629 of both. The alias is a 16-bit value stored in the slave's E$^2$PROM. It can
   637 be modified via the command-line tool (see sec.~\ref{sec:ethercat-alias}).
   630 be modified via the command-line tool (see sec.~\ref{sec:ethercat-alias}).
   638 Table~\ref{tab:slaveposition} shows, how the values are interpreted.
   631 Table~\ref{tab:slaveposition} shows, how the values are interpreted.
   639 
   632 
   859 \item[\usebox\boxopen] This function is called when network communication has
   852 \item[\usebox\boxopen] This function is called when network communication has
   860 to be started, for example after a command \lstinline+ip link set ethX up+
   853 to be started, for example after a command \lstinline+ip link set ethX up+
   861 from userspace. Frame reception has to be enabled by the driver.
   854 from userspace. Frame reception has to be enabled by the driver.
   862 
   855 
   863 \item[\usebox\boxstop] The purpose of this callback is to ``close'' the
   856 \item[\usebox\boxstop] The purpose of this callback is to ``close'' the
   864 device, i.~e. make the hardware stop receiving frames.
   857 device, i.\,e.\ make the hardware stop receiving frames.
   865 
   858 
   866 \item[\usebox\boxxmit] This function is called for each frame that has to be
   859 \item[\usebox\boxxmit] This function is called for each frame that has to be
   867 transmitted. The network stack passes the frame as a pointer to an
   860 transmitted. The network stack passes the frame as a pointer to an
   868 \lstinline+sk_buff+ structure (``socket buffer''\index{Socket buffer}, see
   861 \lstinline+sk_buff+ structure (``socket buffer''\index{Socket buffer}, see
   869 below), which has to be freed after sending.
   862 below), which has to be freed after sending.
  1445 
  1438 
  1446 The below sections describe every state machine used in the EtherCAT master.
  1439 The below sections describe every state machine used in the EtherCAT master.
  1447 The textual descriptions of the state machines contain references to the
  1440 The textual descriptions of the state machines contain references to the
  1448 transitions in the corresponding state transition diagrams, that are marked
  1441 transitions in the corresponding state transition diagrams, that are marked
  1449 with an arrow followed by the name of the successive state. Transitions caused
  1442 with an arrow followed by the name of the successive state. Transitions caused
  1450 by trivial error cases (i.~e. no response from slave) are not described
  1443 by trivial error cases (i.\,e.\ no response from slave) are not described
  1451 explicitly. These transitions are drawn as dashed arrows in the diagrams.
  1444 explicitly. These transitions are drawn as dashed arrows in the diagrams.
  1452 
  1445 
  1453 %------------------------------------------------------------------------------
  1446 %------------------------------------------------------------------------------
  1454 
  1447 
  1455 \section{The Master State Machine}
  1448 \section{The Master State Machine}
  1570 
  1563 
  1571 \item[Pdo Sync Manager Configuration] If any Pdo sync managers exist, they are
  1564 \item[Pdo Sync Manager Configuration] If any Pdo sync managers exist, they are
  1572 configured.
  1565 configured.
  1573 
  1566 
  1574 \item[FMMU Configuration] If there are FMMUs configurations supplied by the
  1567 \item[FMMU Configuration] If there are FMMUs configurations supplied by the
  1575 application (i.~e. if the application registered Pdo entries), they are
  1568 application (i.\,e.\ if the application registered Pdo entries), they are
  1576 applied. 
  1569 applied. 
  1577 
  1570 
  1578 \item[SAFEOP] The state change FSM is used to bring the slave to SAFEOP state.
  1571 \item[SAFEOP] The state change FSM is used to bring the slave to SAFEOP state.
  1579 If this is the requested state, the state machine is finished.
  1572 If this is the requested state, the state machine is finished.
  1580 
  1573 
  1602 \end{figure}
  1595 \end{figure}
  1603 
  1596 
  1604 \begin{description}
  1597 \begin{description}
  1605 
  1598 
  1606 \item[Start] The new application-layer state is requested via the ``AL Control
  1599 \item[Start] The new application-layer state is requested via the ``AL Control
  1607 Request'' register (see ~\cite[sec. 5.3.1]{alspec}).
  1600 Request'' register (see~\cite[sec. 5.3.1]{alspec}).
  1608 
  1601 
  1609 \item[Check for Response] Some slave need some time to respond to an AL state
  1602 \item[Check for Response] Some slave need some time to respond to an AL state
  1610 change command, and do not respond for some time. For this case, the command
  1603 change command, and do not respond for some time. For this case, the command
  1611 is issued again, until it is acknowledged.
  1604 is issued again, until it is acknowledged.
  1612 
  1605 
  1753 
  1746 
  1754 \section{Ethernet-over-EtherCAT (EoE)}
  1747 \section{Ethernet-over-EtherCAT (EoE)}
  1755 \label{sec:eoe}
  1748 \label{sec:eoe}
  1756 \index{EoE}
  1749 \index{EoE}
  1757 
  1750 
  1758 The EtherCAT master implements the Ethernet-over-EtherCAT mailbox protocol to
  1751 The EtherCAT master implements the
  1759 enable the tunneling of Ethernet frames to special slaves, that can either
  1752 Ethernet-over-EtherCAT\nomenclature{EoE}{Ethernet-over-EtherCAT, Mailbox
  1760 have physical Ethernet ports to forward the frames to, or have an own IP stack
  1753 Protocol} mailbox protocol~\cite[sec.~5.7]{alspec} to enable the tunneling of
  1761 to receive the frames.
  1754 Ethernet frames to special slaves, that can either have physical Ethernet
       
  1755 ports to forward the frames to, or have an own IP stack to receive the frames.
  1762 
  1756 
  1763 \paragraph{Virtual Network Interfaces}
  1757 \paragraph{Virtual Network Interfaces}
  1764 
  1758 
  1765 The master creates a virtual EoE network interface for every EoE-capable
  1759 The master creates a virtual EoE network interface for every EoE-capable
  1766 slave. These interfaces are called either
  1760 slave. These interfaces are called either
  1911 
  1905 
  1912 \section{CANopen-over-EtherCAT (CoE)}
  1906 \section{CANopen-over-EtherCAT (CoE)}
  1913 \label{sec:coe}
  1907 \label{sec:coe}
  1914 \index{CoE}
  1908 \index{CoE}
  1915 
  1909 
  1916 The CANopen-over-EtherCAT protocol \cite[sec.~5.6]{alspec} is used to
  1910 The CANopen-over-EtherCAT\nomenclature{CoE}{CANopen-over-EtherCAT, Mailbox
  1917 configure slaves and exchange data objects on application level.
  1911 Protocol} protocol~\cite[sec.~5.6]{alspec} is used to configure slaves and
       
  1912 exchange data objects on application level.
  1918 
  1913 
  1919 % TODO
  1914 % TODO
  1920 %
  1915 %
  1921 % Download / Upload
  1916 % Download / Upload
  1922 % Expedited / Normal
  1917 % Expedited / Normal
  2356 copied (or better: linked) to the appropriate location (see
  2351 copied (or better: linked) to the appropriate location (see
  2357 sec.~\ref{sec:installation}), before the master can be inserted as a service.
  2352 sec.~\ref{sec:installation}), before the master can be inserted as a service.
  2358 Please note, that the init script depends on the sysconfig file described
  2353 Please note, that the init script depends on the sysconfig file described
  2359 below.
  2354 below.
  2360 
  2355 
  2361 To provide service dependencies (i.~e. which services have to be started before
  2356 To provide service dependencies (i.\,e.\ which services have to be started
  2362 others) inside the init script code, LSB defines a special comment block.
  2357 before others) inside the init script code, LSB defines a special comment
  2363 System tools can extract this information to insert the EtherCAT init script at
  2358 block. System tools can extract this information to insert the EtherCAT init
  2364 the correct place in the startup sequence:
  2359 script at the correct place in the startup sequence:
  2365 
  2360 
  2366 \lstinputlisting[firstline=38,lastline=48]
  2361 \lstinputlisting[firstline=38,lastline=48]
  2367     {../script/init.d/ethercat}
  2362     {../script/init.d/ethercat}
  2368 
  2363 
  2369 \subsection{Sysconfig File}
  2364 \subsection{Sysconfig File}
  2407 
  2402 
  2408 \section{Monitoring and Debugging}
  2403 \section{Monitoring and Debugging}
  2409 \label{sec:debug}
  2404 \label{sec:debug}
  2410 \index{Monitoring}
  2405 \index{Monitoring}
  2411 
  2406 
  2412 % FIXME
  2407 EtherCAT buses can always be monitored by inserting a switch between master
  2413 
  2408 and slaves. This allows to connect another PC with a network monitor like
  2414 For debugging purposes, every EtherCAT master registers a read-only network
  2409 Wireshark~\cite{wireshark}, for example.
  2415 interface \textit{ecX}, where X is a number, provided by the kernel on device
  2410 
  2416 registration. While it is ``up'', the master forwards every frame sent and
  2411 For convenience, so-called ``debug interfaces'' are supported. Debug interfaces
  2417 received to this interface.
  2412 allow to monitor EtherCAT traffic with a network monitor (like Wireshark or
  2418 
  2413 tcpdump) running on the same machine. To use this functionality, the master
  2419 This makes it possible to connect an network monitor (like Wireshark or
  2414 sources have to be configured with the \lstinline+--enable-debug-if+ switch
  2420 tcpdump) to the debug interface and monitor the EtherCAT frames.
  2415 (see sec.~\ref{sec:installation}).
  2421 
  2416 
  2422 % FIXME schedule()
  2417 Every EtherCAT master registers two read-only network interfaces. These are
  2423 It has to be considered, that can be frame rate can be very high. The master
  2418 named \textit{ecdbgmX} (main device) and \textit{ecdbgbX} (backup device for
  2424 state machine usually runs every kernel timer interrupt (usually up to
  2419 future use), where X is the master index. The debug interfaces are listed in
  2425 \unit{1}{\kilo\hertz}) and with a connected application, the rate can be even
  2420 the below output:
  2426 higher.
  2421 
  2427 
  2422 \begin{lstlisting}
  2428 \paragraph{Attention:} The socket buffers needed for the operation of
  2423 # `\textbf{ip link}`
  2429 the debugging interface have to be allocated dynamically. Some Linux
  2424 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
  2430 realtime extensions do not allow this in realtime context!
  2425     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
       
  2426 4: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
       
  2427     link/ether 00:04:61:03:d1:01 brd ff:ff:ff:ff:ff:ff
       
  2428 8: ecdbgm0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast
       
  2429     qlen 1000
       
  2430     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
       
  2431 9: ecdbgb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
       
  2432     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
       
  2433 \end{lstlisting}
       
  2434 
       
  2435 While a debug interface is enabled, the corresponding master forwards all
       
  2436 frames sent and received to or from the bus to that interface. Interfaces can
       
  2437 be enabled for example with the command:
       
  2438 
       
  2439 \begin{lstlisting}
       
  2440 # `\textbf{ip link set dev ecdbgm0 up}`
       
  2441 \end{lstlisting}
       
  2442 
       
  2443 Please note, that the frame rate can be very high. With an application
       
  2444 connected, the debug interface can produce thousands of frames per second.
       
  2445 
       
  2446 \paragraph{Attention} The socket buffers needed for the operation of the
       
  2447 debugging interface have to be allocated dynamically. Some Linux realtime
       
  2448 extensions do not allow this in realtime context!
  2431 
  2449 
  2432 %------------------------------------------------------------------------------
  2450 %------------------------------------------------------------------------------
  2433 
  2451 
  2434 \chapter{Timing Aspects}
  2452 \chapter{Timing Aspects}
  2435 \label{sec:timing}
  2453 \label{sec:timing}
  2787 \end{lstlisting}
  2805 \end{lstlisting}
  2788 
  2806 
  2789 Now, the \lstinline+ethercat+ tool can be used (see sec.~\ref{sec:tool}) even
  2807 Now, the \lstinline+ethercat+ tool can be used (see sec.~\ref{sec:tool}) even
  2790 as a non-root user.
  2808 as a non-root user.
  2791 
  2809 
       
  2810 If non-root users shall have writing access, the following udev rule can be
       
  2811 used instead:
       
  2812 
       
  2813 \begin{lstlisting}
       
  2814 KERNEL=="EtherCAT[0-9]*", MODE="0664", GROUP="users"
       
  2815 \end{lstlisting}
       
  2816 
  2792 %------------------------------------------------------------------------------
  2817 %------------------------------------------------------------------------------
  2793 
  2818 
  2794 \begin{thebibliography}{99}
  2819 \begin{thebibliography}{99}
  2795 
  2820 
  2796 \bibitem{etherlab} Ingenieurgemeinschaft IgH: EtherLab -- Open Source Toolkit
  2821 \bibitem{etherlab} Ingenieurgemeinschaft IgH: EtherLab -- Open Source Toolkit
  2809 \bibitem{lgpl} GNU Lesser General Public License, Version 2.1.
  2834 \bibitem{lgpl} GNU Lesser General Public License, Version 2.1.
  2810 \url{http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html}. October~15,
  2835 \url{http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html}. October~15,
  2811 2008.
  2836 2008.
  2812 
  2837 
  2813 \bibitem{lsb} Linux Standard Base.
  2838 \bibitem{lsb} Linux Standard Base.
  2814 \url{http://www.linuxfoundation.org/en/LSB}.  August~9, 2006.
  2839 \url{http://www.linuxfoundation.org/en/LSB}. August~9, 2006.
  2815 
  2840 
  2816 \bibitem{wireshark} Wireshark. \url{http://www.wireshark.org}. 2008.
  2841 \bibitem{wireshark} Wireshark. \url{http://www.wireshark.org}. 2008.
  2817 
  2842 
  2818 \bibitem{automata} {\it Hopcroft, J.~E. / Ullman, J.~D.}: Introduction to
  2843 \bibitem{automata} {\it Hopcroft, J.\,E.\ / Ullman, J.\,D.}: Introduction to
  2819 Automata Theory, Languages and Computation. Adison-Wesley, Reading,
  2844 Automata Theory, Languages and Computation. Adison-Wesley, Reading,
  2820 Mass.~1979.
  2845 Mass.~1979.
  2821 
  2846 
  2822 \bibitem{fsmmis} {\it Wagner, F. / Wolstenholme, P.}: State machine
  2847 \bibitem{fsmmis} {\it Wagner, F.\ / Wolstenholme, P.}: State machine
  2823 misunderstandings. In: IEE journal ``Computing and Control Engineering'',
  2848 misunderstandings. In: IEE journal ``Computing and Control Engineering'',
  2824 2004.
  2849 2004.
  2825 
  2850 
  2826 \bibitem{rtai} RTAI. The RealTime Application Interface for Linux from DIAPM.
  2851 \bibitem{rtai} RTAI. The RealTime Application Interface for Linux from DIAPM.
  2827 \url{http://www.rtai.org}, 2006.
  2852 \url{http://www.rtai.org}, 2006.