Projekt

Allgemein

Profil

Aktionen

Wiki » Historie » Revision 15

« Zurück | Revision 15/17 (diff) | Weiter »
Maximilian Seesslen, 20.08.2024 14:30


CANHub

Intro

CANServer is an Server-Client library that provides multiple applications access to an CAN-Bus via TCP/IP.
Every message received via CAN gets send to all clients. When an client sends an message, it is send
via CAN-Bus and also to the other clients.
The physical CAN-Bus is optional.

Usecases

  • CAN over ethernet
  • Graphical user interface for home automatisation
    An laptop/tablet can be connected to an server via WLAN
  • Recording/Replay
    An PC-Application could record CAN messages and replay them.
  • Debugging
    Show CAN traffic while interacting with the bus with other devices.
  • WLAN CAN-Bridge
    Two CAN segments can be connected via WLAN

Architecture

        Server                      TCP       Client
        List
        {                             /-----> connectionTcpClient
            connectionCan             |
            connectionTcpServer       |
            connectionTcpServer <-----/
            connectionTcpServer
        }
      class CConnector {
         signal dataIn(SMsg);
         slot dataOut(SMsg);
      }
        Server                      
        List
        {
            connectionCan       <-----\
      /---- connectionTcpServer <-----|
      |     connectionTcpServer <-----|
      |     connectionTcpServer <-----|
      | }                             |
      |                               |
      \--> serverDataInSlot-----------/
Each connection has an id which is an ongoing number handled by the server.
  1. Terminal Output
    The server prints a dynamic list with the connections and traffic statistics.
    - ID/Type
    - Connection uptime
  • in/out messag count
  • in msg/s

Example:

Id Target        Uptime   In   Out   In/s
-----------------------------------------
0: CAN           0:10s    12   55    0
1: Server        0:10s    3    51    0
2: Client        0:05s    43   52    0
3: Client        0:01s    1    57    0

Loop detection

Two servers can be connected (e.g. for connecting multiple CAN-segments). But for each connection there must
only be a single connection line with a pair of connectors. Otherwise messages would bounce forever.
Such loops should be detected:
The TCP-Server generates an periodical Heartbeat which is send/routed to every tcp connection.
When server sends heartbeat, it must not receive it back. Otherwise there is a loop. How to generate uuid?

        Server                      TCP       Server
        List                                  List
        {                                     {
            connectionCan                           connectionCan
            connectionTcpServer        /----------> connectionTcpClient
            connectionTcpServer <-----/      /----> connectionTcpServer     <----Doubled connection
            connectionTcpClinet <-----------/
        }                                     }

Ansi

box(x1,y1,x2,y2)
hLine(x1,y1,x2)
vLine(x1,y1,y2)

┬
│
┴
├──┤
┌─┐
│ │
└─┘
QLoggingCategory::setFilterRules("*.debug=false");
qSetMessagePattern("[%{time process}] %{function}: %{message}");
qDebug("Happy debugging");

Links

https://www.sciencebuddies.org/science-fair-projects/references/ascii-table

Von Maximilian Seesslen vor 5 Monaten aktualisiert · 15 Revisionen