LabVIEWForum.de
CAN Boschaften - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: CAN Boschaften (/Thread-CAN-Boschaften)

Seiten: 1 2


CAN Boschaften - Michael26 - 18.08.2014 10:32

Hallo Zusammen,

meine Aufgabe ist es mit der Hardware NI_USB_8473

ein Vi zu erstellen, dass

1. dauerhafte mehrere Botschaften sendet (siehe Vi obere While-Schlife).
Nun habe ich gelesen, wenn mehrere Botschaften gesendet werden sollen, jedes mal der Bus geschlossen werden muss.
Ist das so richtig?

2. In der unteren Ereignis-Struktur, nur durch eine Aufforderung Botschaften auf den Bus gesendet werden sollen
z. B. Heizung Stufe ein, zwei, drei...

Gerne bin ich für jede Art von Hilfe offen, habe noch sehr wenig Erfahrung mit der CAN-Library.

Vielen Dank.


RE: CAN Boschaften - GerdW - 18.08.2014 10:47

Hallo Michael,

bitte mal dein VI in LV2011 speichern.

Geht es um CAN oder um CANOpen?


RE: CAN Boschaften - Michael26 - 18.08.2014 10:57

Anbei die Version für 2011

Es geht in erster Regel um CAN.

Danke


RE: CAN Boschaften - GerdW - 18.08.2014 11:38

Hallo Michael,

Zitat:1. dauerhafte mehrere Botschaften sendet (siehe Vi obere While-Schlife). Nun habe ich gelesen, wenn mehrere Botschaften gesendet werden sollen, jedes mal der Bus geschlossen werden muss. Ist das so richtig?
Nein, ganz sicher nicht. Wenn du den Port schließt, dann kannst du auch nichts mehr senden.

Zitat:2. In der unteren Ereignis-Struktur, nur durch eine Aufforderung Botschaften auf den Bus gesendet werden sollen z. B. Heizung Stufe ein, zwei, drei...
Wenn die Event-Struktur sich nicht in einer Schleife befindet, kannst du nur genau ein Event auswerten. Also schon einmal ganz schlechtes Programm-Design… (Du nutzt doch nicht etwa den RunContinuous-Button?)
Außerdem:
- Dein Gerät ist sicherlich sehr verwirrt, wenn es jedesmal 4 Botschaften gesendet bekommt, von denen aber 3 nur Nullen enthalten (DefaultIfUnwired-Tunnel!)…
- Auch hier: es würde ausreichen, den CAN-Port einmal zu öffnen (vor der Event-Struktur) und einmal zu schließen (nach der Event-Struktur)!
- Warum sieht jede Botschaft identisch (mit je 6× FFh) aus und warum soll die Botschaft dann eine DataLength von 5 haben?
- Was soll die Wartezeit im Event-Case bewirken?


RE: CAN Boschaften - Michael26 - 18.08.2014 11:58

(18.08.2014 11:38 )GerdW schrieb:  Hallo Michael,

Zitat:1. dauerhafte mehrere Botschaften sendet (siehe Vi obere While-Schlife). Nun habe ich gelesen, wenn mehrere Botschaften gesendet werden sollen, jedes mal der Bus geschlossen werden muss. Ist das so richtig?
Nein, ganz sicher nicht. Wenn du den Port schließt, dann kannst du auch nichts mehr senden.

Zitat:2. In der unteren Ereignis-Struktur, nur durch eine Aufforderung Botschaften auf den Bus gesendet werden sollen z. B. Heizung Stufe ein, zwei, drei...
Wenn die Event-Struktur sich nicht in einer Schleife befindet, kannst du nur genau ein Event auswerten. Also schon einmal ganz schlechtes Programm-Design… (Du nutzt doch nicht etwa den RunContinuous-Button?)
Außerdem:
- Dein Gerät ist sicherlich sehr verwirrt, wenn es jedesmal 4 Botschaften gesendet bekommt, von denen aber 3 nur Nullen enthalten (DefaultIfUnwired-Tunnel!)…
- Auch hier: es würde ausreichen, den CAN-Port einmal zu öffnen (vor der Event-Struktur) und einmal zu schließen (nach der Event-Struktur)!
- Warum sieht jede Botschaft identisch (mit je 6× FFh) aus und warum soll die Botschaft dann eine DataLength von 5 haben?
- Was soll die Wartezeit im Event-Case bewirken?

Zu den Botschaften. Diese sind nur Beispiele. Deshalb habe ich nur Nullen eingetragen
Die Wartezeit habe ich eingefügt, da ich die Nachrichten zyklisch übertragen muss/soll.
Die Event-Struktur werde ich noch in eine While-Schleife einfügen, mein Fehler.

Ist der Verbindungsaufbau denn so in Ordnung, wie ich es aufgebaut habe oder gibt es Verbesserungen

Kann ich auch, so wie ich es schon gemacht habe, aus mehreren Nachrichten ein Array erstellen und dann senden?


RE: CAN Boschaften - GerdW - 18.08.2014 12:09

Hallo Michael,

Zitat:Die Wartezeit habe ich eingefügt, da ich die Nachrichten zyklisch übertragen muss/soll.
Das kann der CAN-Treiber für dich erledigen. Üblicherweise nutzt man eher Zykluszeiten im 10er/100er ms-Bereich.

Zitat:Ist der Verbindungsaufbau denn so in Ordnung, wie ich es aufgebaut habe oder gibt es Verbesserungen
Wie schon gesagt: Port öffnen/schließen je nur einmal vor/nach einer Hauptschleife!

Zitat:Kann ich auch, so wie ich es schon gemacht habe, aus mehreren Nachrichten ein Array erstellen und dann senden?
Dies entspricht meiner Arbeitsweise: Ich arbeite lieber mit CAN-Datenbanken (DBC) und CAN-Tasks (Task = mehrere Signale/Botschaften).
[attachment=50465]
Hier wird eine CAN-DBC gelesen, die passenden Botschaften gefiltert und daraus zwei CAN-Tasks erstellt. Für die Werte-Ausgabe ist da schon ein SYNC-Signal enthalten, welches den zyklischen Versand steuert. Auch wenn du die Werte nur alle 10s veränderst, kannst du ja trotzdem öfter Botschaften verschicken - es wird immer der letzte/aktuelle Stellwert verschickt ("Output recent").


RE: CAN Boschaften - Michael26 - 18.08.2014 13:12

(18.08.2014 12:09 )GerdW schrieb:  Hallo Michael,

Zitat:Die Wartezeit habe ich eingefügt, da ich die Nachrichten zyklisch übertragen muss/soll.
Das kann der CAN-Treiber für dich erledigen. Üblicherweise nutzt man eher Zykluszeiten im 10er/100er ms-Bereich.

Zitat:Ist der Verbindungsaufbau denn so in Ordnung, wie ich es aufgebaut habe oder gibt es Verbesserungen
Wie schon gesagt: Port öffnen/schließen je nur einmal vor/nach einer Hauptschleife!

Zitat:Kann ich auch, so wie ich es schon gemacht habe, aus mehreren Nachrichten ein Array erstellen und dann senden?
Dies entspricht meiner Arbeitsweise: Ich arbeite lieber mit CAN-Datenbanken (DBC) und CAN-Tasks (Task = mehrere Signale/Botschaften).

Hier wird eine CAN-DBC gelesen, die passenden Botschaften gefiltert und daraus zwei CAN-Tasks erstellt. Für die Werte-Ausgabe ist da schon ein SYNC-Signal enthalten, welches den zyklischen Versand steuert. Auch wenn du die Werte nur alle 10s veränderst, kannst du ja trotzdem öfter Botschaften verschicken - es wird immer der letzte/aktuelle Stellwert verschickt ("Output recent").

Hallo Gerd,

Vielen Dank erstmal für die Infos/Hilfe.
Leider steht mir keine CAN-DBC zur Verfügung, deswegen habe ich die Botschaften eigenständig generiert.
Aber nochmal zurück, kann ich auf den CAN-Bus gleich 3 oder mehrere Botschaften gleichzeitig senden oder muss ich erst 1 Nachricht senden, den Bus schließen und dann wieder öffnen
oder ist das so in Ordnung mit Array erstellen und schreiben. In der Hilfe steht zu "ncWriteNet.vi", write a single frame. Ich kann aber schon mehrere Botschaften senden oder auf was bezieht sich das "single Frame"

Könntest du mir vielleicht erklären, was ich unter der CAN_Library bei

ncWriteNet.vi

Terminal "ObjHandle in"

verstehen kann.


RE: CAN Boschaften - GerdW - 18.08.2014 13:18

Hallo Michael,

wie oft denn noch: einmal Port öffnen, Botschaften senden/empfangen, einmal Port schließen. Öffnen/schließen nur genau einmal bei Programmstart/-ende…

Zitat:kann ich auf den CAN-Bus gleich 3 oder mehrere Botschaften gleichzeitig senden
Der CAN-Bus ist ein seriell arbeitender Bus mit mehreren Teilnehmern, "gleichzeitig" geht da gar nicht. Aber die Hardware regelt das schon von allein für dich, du musst nur die Botschaften generieren und auf die Reise schicken…


RE: CAN Boschaften - Michael26 - 18.08.2014 13:25

(18.08.2014 13:18 )GerdW schrieb:  Hallo Michael,

wie oft denn noch: einmal Port öffnen, Botschaften senden/empfangen, einmal Port schließen. Öffnen/schließen nur genau einmal bei Programmstart/-ende…

Zitat:kann ich auf den CAN-Bus gleich 3 oder mehrere Botschaften gleichzeitig senden
Der CAN-Bus ist ein seriell arbeitender Bus mit mehreren Teilnehmern, "gleichzeitig" geht da gar nicht. Aber die Hardware regelt das schon von allein für dich, du musst nur die Botschaften generieren und auf die Reise schicken…

Ja danke.
Jetzt weiß ich was du gemeint hast


RE: CAN Botschaften - GerdW - 18.08.2014 13:34

Hallo Michael,

Zitat:Könntest du mir vielleicht erklären, was ich unter der CAN_Library bei ncWriteNet.vi Terminal "ObjHandle in" verstehen kann.

Zitat aus der Hilfe zur Funktion:
Zitat:ObjHandle in is the object handle from the previous NI-CAN VI. The handle originates from the ncOpen VI.
Noch Fragen?