LabVIEWForum.de - CANopen

LabVIEWForum.de

Normale Version: CANopen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

ich benutze eine NI PXI-8461 auf einer NI PXI und habe ein Schreibe- und Lese-VI mit CANopen erstellt.

Ich kann somit Daten auf den Bus senden und auch wieder abrufen. Ich mache dies über SDO.
Wenn ich diese Vis abwechselnd voneinander ausführe, dann klappt auch alles wunderbar (Es wird fehlerfrei geschrieben oder gelesen).
Jedoch möchte ich das Lese-Vi die ganze Zeit laufen lassen und in dieser Ausführungszeit auf den Bus mit dem Schreibe VI mehrmals schreiben,so das diese dann in dem Lese Vi während der Ausführungszeit gelesen werden können.

Ich habe aber das Problem, dass wenn das Lese Vi ausgeführt wird und ich auf den Bus mit dem anderen VI schreibe eine
Fehlermeldung (Fehler 5378:CANopen SDO Read Object.vi) im Lese Vi auftaucht. Irgendwie kollidieren die Telegramme..

Was kann ich dagegen tun?

Gruß
HCO
Die einzige Möglichkeit, die mir einfällt , um dieses Problem zu umgehen ist mit Globalen Variablen.
Wenn ich während der Ausführungszeit des Read VIs das Schreibe Vi aktiviere, dann könnte ich ein Delay am Anfang des Schreibe VIs einbauen, davor über eine boolsche globale Variable ein False ausgeben, dieses zum Read Vi während der Delay Zeit übergeben und dann das Read Vi über eine Case Struktur mit False deaktivieren.
Jetzt stellt sich nur noch die Frage, ob die globale Variable bei laufenden Read VI ein Wert übergibt?

Habt Ihr noch einen anderen Vorschlag ?

Gruß HCO


Nachtrag: Und nach dem Delay im Schreibe-VI dann wieder über die Globale Variable die Case Struktur im Read- Vi auf True setzen und mit " CAN Open SDO READ" die geschriebenen Werte einlesen.
Dafür gibt es eigentlich die Semaphore VIs.

Alternative: Pack dein Lese- und dein Schreib-VI in ein VI mit einer Case-Struktur, mit der du entweder die Ausführung von Lesen oder Schreiben auswählst. Mit diesem "Globale" Lese/SchreibVI ersetzt du alle bisherigen Aufrufe. Da das Lese/SchreibVI immer nur 1x ausgeführt werden kann (solange es nicht auf Reentrant steht), kann auch nur entweder Lesen oder Schreiben ausgeführt werden.

Gruß, Jens
Referenz-URLs