UPT Programmiertool : CAN-Simulator

 

Bei der Erstellung dieses Dokuments (2018-10-30) befand sich der 'CAN Message Generator' / Bus-Simulator noch in einem sehr frühen Entwicklungsstadium...
... und diese Beschreibung ebenfalls.

Inhalt

  1. CAN Message Generator / Bus-Simulator
    1. Einleitung
    2. Die Option 'Werte in Simulation einspeisen'
    3. Die Option 'Auf echtem CAN-Bus senden'
    4. Definitionstabelle für CAN-Signale

  2. Tipps zur Verwendung des CAN Message Generators (für Fortgeschrittene)

1.1 Einleitung: CAN Message Generator / Bus-Simulator

Nothing is real and nothing to write home about.
  (misheard lyrics from 'Strawberry Fields', The Beatles)


Steht Ihnen ein 'realer' CAN-Bus, z.B. Fahrzeug mit Motorsteuergerät und passendem CAN-Bus-Adapter zur Verfügung, dann benötigen Sie den in diesem Dokument beschriebenen CAN-Generator/Simulator nicht. Ein Test der Applikation am 'echten Gerät' ist immer besser als diese Simulation, denn die Simulation kann keine Fehler wie z.B. falsch eingestellte CAN-Bus-Parameter (Baudrate, Sampling Point, Abschlusswiderstände), Kabelfehler, usw. aufdecken.
Ist der Weg zum 'echten Gerät' aber zu lang, bietet sich der Ersatz von (aus Sicht des Terminals empfangenen) CAN-Signalen durch den in diesem Dokument beschriebenen CAN-Generator/Simulator an.
Fast alle Informationen über ein bestimmtes Signal (z.B. "Drehzahl") sind ja bereits in der Applikation enthalten (z.B. nach Import aus einer entsprechenden Datenbank). Sie können daher mit wenigen Mausklicks aus den UPT-Display-Variablen, aber auch (falls vorhanden) aus der importierten CAN-Datenbank übernommen werden:
  1. Fenster des CAN-Simulators öffnen: Im Hauptmenü unter Werkzeuge .. CAN Message Generator / Bus-Simulator
  2. Dort: Signal hinzufügen .. ALLE Signale aus UPT-Display-Variablen übernehmen
  3. Haken vor Werte in Simulation einspeisen setzen, evtl. auch Auf echtem CAN-Bus senden (Vorsicht !).
  4. In die Zeile mit dem zu ändernden Wert klicken um ein Signal zu selektieren
  5. Mit dem vertikalen Schieber den selektierten Wert ändern
Der oben beschriebene Ablauf ist nur die einfachste (schnellste) Möglichkeit, um ein einzelnes Signal zu simulieren. Sollen mehrere Werte 'ständig' geändert werden, bietet sich die Eingabe eines numerischen Ausdrucks als 'Stimulus' in der Tabellenspalte 'Expression' an. Mehr dazu in einem zukünftigen Kapitel.

1.2 Die Option 'Werte in Simulation einspeisen'

Mit der Option Werte in Simulation einspeisen dienen die z.B. per Schieber geänderten Werte in der programmiertool-interne "Simulation" als Ersatz für vom CAN-Bus empfangene.
Diese Option reicht in vielen Fällen bereits aus, um eine Applikation am PC / im PC zu testen. Sie hat - im Gegensatz zur Option 'Auf echtem CAN-Bus senden' keine Auswirkungen auf die Funktion externer Geräte, und erfordert kein CAN-Bus-Interface am PC.


1.3 Die Option 'Auf echtem CAN-Bus senden'

Die Option Auf echtem CAN-Bus senden sollte nur verwendet werden, wenn der PC (Programmiertool) direkt mit dem MKT-View per CAN-Interface verbunden ist, aber darüberhinaus keine anderen Teilnehmer am CAN-Netzwerk hängen. Das Programmiertool sendet nämlich in diesem Fall die Telegramme, die das Terminal (MKT-View) im Normalfall nur empfangen würde - was, im laufenden Betrieb "am Fahrzeug" zu schwerwiegenden Kollisionen führen dürfte, wenn zwei Knoten (der PC und ein Steuergerät im Fahrzeug) CAN-Telegramme mit dem gleichen CAN-Message-Identifier senden. In einigen Fällen kann dies bis zum Zustand 'Bus-Off' führen, d.h. einer der Teilnehmer stellt seine CAN-Sendungen ein.

Siehe auch: Aufzeichnen und Abspielen von CAN-Telegrammen per 'CAN-Snooper',
                    Abspielen von aufgezeichneten CAN-Telegrammen im Simulator,                     Das CAN-Bus-Interface im/am PC.


1.4 Definitionstabelle für CAN-Signale

Im allgemeinen werden die Signaldefinitionen für den CAN-Simulator wie in der Einleitung beschrieben aus den Variablen-Definitionen der Applikation extrahiert.
Alternativ können Signaldefinitionen auch manuell in die Definitionstabelle eingegeben werden. Die Spalten in der Tabelle entsprechen z.g.T. den im Handbuch des Programmiertools vorgestellten Eigenschaften von Variablen, die mit CAN-Signalen verknüpft sind.
Details zur Bedeutung "CAN-(Message-)ID", "Position des niederwertigsten Bits", "Intel/Motorola" (Byte Order), usw. finden Sie im oben verlinkten Dokument.

Name
Im Normalfall aus der Variablen-Definitions-Tabelle übernommener Name.
Bei Signalen, die nicht aus einer CAN-Datenbank importiert wurden, sollte hier ein eindeutiger, 'sprechender' Name eingegeben werden.

Expression
Optionaler 'Stimulus'. Wenn vorhanden, wird dieser numerische Ausdruck vom Display-Interpreter ständig neu berechnet (Intervall aus dem Eingabefeld auf der rechten Seite), und das Ergebnis als neuer Signalwert in die Spalte "Current Value" übernommen.
Per Doppelklick in leere Zellen in dieser Spalte kann ein numerischer Ausdruck erzeugt werden, mit dem eine niederfrequente Sinusfunktion für das entsprechende Signal berechnet werden kann. Jedes Signal erhält dabei eine leicht unterschiedliche Frequenz. Die Amplitude wird passend zu den Einstellungen in den Spalten MinValue und MaxValue skaliert. Um dies für alle in der Tabelle enthaltenen Signale zu wiederholen, wählen Sie unter 'Weitere Optionen...' den Menüpunkt 'Stimuli für ALLE Signale erzeugen'. So können mit wenig Aufwand für alle in der geladenen Applikation verwendeten CAN-Signale ständig wechselnde "Dummy-Werte" erzeugt werden, z.B.:
isin(ti_ms/16) / 4   erzeugt eine Sinusfunktion
                mit der Amplitude 32767/4 = ca. 8191
                und Periodendauer 1024 / 4 = 1000 Millisekunden, d.h. 1 Hz.

Current Value
Aktueller Wert für die Simulation. Quelle: Vertikaler Schieber oder der o.g. numerische Ausdruck (Stimulus).

TX cycle (ms)
Sendezyklus für dieses Signal in Millisekunden.
Ohne Sendezyklus (0 ms) wird ein Signal bei jeder Änderung (per Schieber oder Stimulus) sofort gesendet, d.h. "ereignisgesteuert".
Unter 'Weitere Optionen...' / 'Sende-Intervall für ALLE Signale setzen' können Sie mit zwei Mausklicks die zyklische Sendung aller in der Tabelle definierter Signale erzwingen. Das Intervall wird dabei aus dem Eingabefeld in der rechten Fensterhälfte in alle Definitionszeilen übernommen, für die noch kein Sende-Intervall definiert ist.

Message ID
Hexadezimaler CAN-Message-Identifier. Dreiziffrig für "Standard-IDs" (11 Bit), achtziffrig für "Extended IDs" (29 bit).

Bus
Reserviert für Systeme mit zwei physikalischen CAN-Schnittstellen, die z.B. mit unterschiedlichen Baudraten betrieben werden können. Für die Simulation auf dem PC momentan noch nicht unterstützt.

LSB pos
Position des niederwertigen Bits im CAN-Datenfeld (0..63 bei "normalem" CAN).

Num bits
Anzahl Datenbits, mit denen dieses Signal AUF DEM CAN-BUS übertragen wird.

Byte order
Hier nur 'M'="Motorola" oder 'I'="Intel", der altbekannte nervtötende Krampf namens 'Endianness'..

Data Type
U=unsigned integer, S=signed integer, F=single precision float, D=double precision float.
Typ des per CAN übertragenen 'rohen' Wertes (nicht skaliert).

Factor
Multiplikator für die Konvertierung des per CAN übertragenen 'rohen' Wertes in einen physikalischen Wert.

Offset
Wird bei der Konvertierung des per CAN übertragenen 'rohen' Wertes in einen physikalischen Wert addiert:
  Physikalischer Wert (z.B. Öldruck in Bar) = CAN-Rohwert * Faktor + Offset

MinValue, MaxValue
Zulässiger Bereich für den physikalischen Wert. Wird im CAN-Simulator auch für den vom "vertikalen Schieber" verwendet: Ganz oben = Maximum, ganz unten = Minimum.



Definitionstabelle für den CAN-Signal-Simulator

Der Inhalt der oben gezeigten Definitionstabelle kann auch als CSV-Datei exportiert werden. Wählen Sie dazu unter 'Weitere Optionen' den Menüpunkt 'Definitionen in Datei speichern'. Im gleichen Menü finden Sie auch die Funktion zum Importieren der Definitionstabelle. Wenn die CSV-Datei mit den Signaldefinitionen existiert, wird sie beim nächsten Programmstart nach dem Öffnen des CAN-Simulators automatisch geladen.


2. Tipps zur Verwendung des CAN Message Generators (für Fortgeschrittene)