Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich lese gerade die Daten von einem Mikrocontroller über den CAN-Bus aus. Hierbei ist mein cDAQ mit einer NI9862 CAN-Karte mein Master und der uC der Slave. Der uC schickt nach Aufforderung 12 CAN-Frames mit je 8 Byte Payload. Die Übertragung der Bits dauert für 12 CAN-Nachrichten bei einer Bitübertragungsrate von 1MBit theoretisch ca 3 ms:
0,7 ms auf dem uC nach Erhalt der CAN-Nachricht vom Master
1,5 ms für die reine Bitübertragungszeit auf dem Bus (Pro Nachricht 126 Bits)
Diese kann ich mit dem Oszi bestätigen. Jetzt verwende ich das im Betreff genannte VI und möchte den CAN-Bus damit auslesen. Der verwendete Modus passt gut auf meine Anwendung und wird im Handbuch wie folgt beschrieben: "This Mode reads all frames received from the network using a single stream. It typically is used for analyzing and/or logging all frame traffic in the network". Dieses VI hat einen "Timeout"-Eingang welcher wie folgt beschrieben wird:
"timeout is the time to wait for number to read frame values to become available." -> Lasse ich den Eingang unbelegt so empfange ich die 12 Frames zu ca. 0%, teilweise völlig unvollständig und in einer für mich nicht nachvollziehbaren Abfolge. Beaufschlage ich den Eingang mit einer 2 (=2 Sekunden) dann werden alle Nachrichten empfangen. Um die Zeit noch genau zu spezifizieren habe ich vor und nach dem NI-XNET VI eine Wartezeit in Millisekunden eingebaut. Das Ergebnis ist, egal ob ich vor oder nach dem VI warte, das CAN-Bus VI benötigt mindesten 1250 ms um die Daten vollständig auszulesen.
Nach mehreren Tagen testen, Handbüchern wühlen und Foren durchsuchen habe ich leider keine Idee mehr, woran es liegen kann, dass ich hier ein so große Zeit benötige um den Traffic auszulesen, bei einer Rechnerischen Bitübertragungszeit von ca. 3 ms. Weiter irritiert mich noch das Ablaufdiagramm aus dem Handbuch, dort wird CAN-Read ca 2ms nach dem Empfang der letzten Nachricht aufgerufen. Sprich sollten Zeiten in diesem Zeitrahmen möglich sein.
Anbei habe ich einen Screenshot von meinem Code und das Ablaufdiagramm aus dem Handbuch. Kann hier jemand Unterstützen?
Miss dich mal mit den Scope die Baudrate ganz genau aus.
Kann es sein, dass die Oszillatoren nicht auf Master und Slave nicht ganz genau gleich ticken?
Ich hatte mal so ein Problem bei 125 kHz. Probier doch mal eine andere Baudrate aus.