mikrocontroller.net

Forum: Fahrzeugelektronik FlexRay- Fehlende PDUs


Autor: Automotive_19 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

unser Programm ist eine C#/.NET-Applikation, die die vxlapi_NET.dll von
Vector benutzt um mit dem FlexRay-Bus zu kommunizieren. Dafür lesen wir
zunächst den Inhalt einer FIBEX-Datei ein und konfigurieren die
entsprechenden Eigenschaften aus der xl_fr_cluster_configuration-Klasse
der DLL, dann benutzen wir die XLDriver-Funktionen um uns mit dem Bus zu
verbinden. Der Code für die Konfiguration des Clusters sieht in etwa so
aus:

private void InitCluster(FibexData fibexData)
        {
            Cluster flexRayCluster = fibexData.Elements.Clusters[0];
            Controller flexRayController = fibexData.Elements.ECUS[0].Controllers[0];

            _FRClusterConfig.gColdStartAttempts = flexRayCluster.ColdStartAttempts;
            _FRClusterConfig.gdActionPointOffset = flexRayCluster.ActionPointOffset;
            _FRClusterConfig.gdDynamicSlotIdlePhase = flexRayCluster.DynamicSlotIdlePhase;
            _FRClusterConfig.gdMinislot = flexRayCluster.Minislot;
            _FRClusterConfig.gdMiniSlotActionPointOffset = flexRayCluster.MinislotActionPointOffset;
            _FRClusterConfig.gdNIT = flexRayCluster.NIT;
            _FRClusterConfig.gdStaticSlot = flexRayCluster.StaticSlot;
            _FRClusterConfig.gdSymbolWindow = flexRayCluster.SymbolWindow;
            _FRClusterConfig.gdTSSTransmitter = flexRayCluster.TSSTransmitter;

            _FRClusterConfig.gdWakeupSymbolRxIdle = flexRayCluster.WakeUp.WakeupSymbolRxIdle;
            _FRClusterConfig.gdWakeupSymbolRxLow = flexRayCluster.WakeUp.WakeupSymbolRxLow;
            _FRClusterConfig.gdWakeupSymbolRxWindow = flexRayCluster.WakeUp.WakeupSymbolRxWindow;
            _FRClusterConfig.gdWakeupSymbolTxIdle = flexRayCluster.WakeUp.WakeupSymbolTxIdle;
            _FRClusterConfig.gdWakeupSymbolTxLow = flexRayCluster.WakeUp.WakeupSymbolTxLow;
...
...
...
}

Das aktuelle Hardware-Setup besteht aus einer TTXConnexion und Vector
VN7600 Box, die per USB an einen normalen Win7 PC angeschlossen sind.
Die Hardware ist so konfiguriert, dass sie zyklisch 6 verschiedene PDUs
im statischen Segment sendet. Wir kennen die IDs und Inhalte dieser
PDUs, und in z.B. CANalyzer werden sie wie erwartet empfangen.

In unserer Software kommt jedoch bloß eine der 6 erwarteten PDUs an, und
sie enthält auch nicht die Werte, die wir erwarten. Der Vector Support
meint, dass das Problem mit der DLL häufig Timing-Probleme im RX-Thread
sind. Unser Receive Thread ist ähnlich zu dem aus der Beispiel-Anwendung
von Vector:
 XLClass.xl_fr_event receivedEvent = new XLClass.xl_fr_event();
            XLDefine.WaitResults waitResult = new XLDefine.WaitResults();

            while (_receiving)
            {
                int queueLevel = 0;
                _FRXLDriver.XL_GetReceiveQueueLevel(_FRPortHandle, ref queueLevel);
                if (queueLevel == 0)
                {
                    // Wait for hardware events - we only get informed once if the queue level crosses the queue-notify-level!
                    waitResult = (XLDefine.WaitResults)WaitForSingleObject(_FREventHandle, TIMEOUT);
                }
                else
                {
                    // Some elements are already in queue
                    waitResult = XLDefine.WaitResults.WAIT_OBJECT_0;
                }

                if (waitResult != XLDefine.WaitResults.WAIT_TIMEOUT)
                {
                    while (XLDefine.XL_Status.XL_ERR_QUEUE_IS_EMPTY != _FRXLDriver.XL_FrReceive(_FRPortHandle, ref receivedEvent))
                    {
// handle events
...
...
...

Gibt es jemanden, der Erfahrung mit diesen Timing-Problemen hat und
Vorschläge, was der Grund dafür sein könnte?

Vielen Dank schonmal für eure Zeit und Hilfe!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.