Forum: PC Hard- und Software 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.