FlexRay - Fehlende PDUs

Gast #5750552
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:
1
private void InitCluster(FibexData fibexData)
2
        {
3
            Cluster flexRayCluster = fibexData.Elements.Clusters[0];
4
            Controller flexRayController = fibexData.Elements.ECUS[0].Controllers[0];
5

6
            _FRClusterConfig.gColdStartAttempts = flexRayCluster.ColdStartAttempts;
7
            _FRClusterConfig.gdActionPointOffset = flexRayCluster.ActionPointOffset;
8
            _FRClusterConfig.gdDynamicSlotIdlePhase = flexRayCluster.DynamicSlotIdlePhase;
9
            _FRClusterConfig.gdMinislot = flexRayCluster.Minislot;
10
            _FRClusterConfig.gdMiniSlotActionPointOffset = flexRayCluster.MinislotActionPointOffset;
11
            _FRClusterConfig.gdNIT = flexRayCluster.NIT;
12
            _FRClusterConfig.gdStaticSlot = flexRayCluster.StaticSlot;
13
            _FRClusterConfig.gdSymbolWindow = flexRayCluster.SymbolWindow;
14
            _FRClusterConfig.gdTSSTransmitter = flexRayCluster.TSSTransmitter;
15

16
            _FRClusterConfig.gdWakeupSymbolRxIdle = flexRayCluster.WakeUp.WakeupSymbolRxIdle;
17
            _FRClusterConfig.gdWakeupSymbolRxLow = flexRayCluster.WakeUp.WakeupSymbolRxLow;
18
            _FRClusterConfig.gdWakeupSymbolRxWindow = flexRayCluster.WakeUp.WakeupSymbolRxWindow;
19
            _FRClusterConfig.gdWakeupSymbolTxIdle = flexRayCluster.WakeUp.WakeupSymbolTxIdle;
20
            _FRClusterConfig.gdWakeupSymbolTxLow = flexRayCluster.WakeUp.WakeupSymbolTxLow;
21
...
22
...
23
...
24
}

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:
1
 XLClass.xl_fr_event receivedEvent = new XLClass.xl_fr_event();
2
            XLDefine.WaitResults waitResult = new XLDefine.WaitResults();
3

4
            while (_receiving)
5
            {
6
                int queueLevel = 0;
7
                _FRXLDriver.XL_GetReceiveQueueLevel(_FRPortHandle, ref queueLevel);
8
                if (queueLevel == 0)
9
                {
10
                    // Wait for hardware events - we only get informed once if the queue level crosses the queue-notify-level!
11
                    waitResult = (XLDefine.WaitResults)WaitForSingleObject(_FREventHandle, TIMEOUT);
12
                }
13
                else
14
                {
15
                    // Some elements are already in queue
16
                    waitResult = XLDefine.WaitResults.WAIT_OBJECT_0;
17
                }
18

19
                if (waitResult != XLDefine.WaitResults.WAIT_TIMEOUT)
20
                {
21
                    while (XLDefine.XL_Status.XL_ERR_QUEUE_IS_EMPTY != _FRXLDriver.XL_FrReceive(_FRPortHandle, ref receivedEvent))
22
                    {
23
// handle events
24
...
25
...
26
...

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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.