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!
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.
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?
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?
18.08.2014, 12:09 (Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2014 12:12 von GerdW.)
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").
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
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…
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
18.08.2014, 13:34 (Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2014 13:37 von GerdW.)