Forum: Fahrzeugelektronik FlexRay- Fehlende PDUs


von Automotive_19 (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.