Hallo Titus,
Zitat:das sind fertige VIs vom Hersteller die werden doch die RaceConditions berücksichtigt haben
Die Code-Qualität von DeviceDrivern der verschiedenen Hersteller schwankt sehr stark. Richtig "guten" Code habe ich bisher nur selten gesehen…
Dein Treiber scheint aus einer relativ alten LabVIEW-Version zu stammen und wurde seitdem kaum überarbeitet. (Einige Konstrukte sind Rube-Goldberg-würdig.)
Dein Treiber verwendet ebenfalls die einfachen CAN-Funktionen. Wenn ich das richtig deute, wurde er auch so programmiert, dass er davon ausgeht, dass das CHROMA exklusiv am CAN-Interface angeschlossen ist. Damit wäre es kein Wunder, wenn die Kommunikation durcheinander kommt, wenn ein zweites Gerät am CAN-Bus mitreden will…
Ich verwende für meine Sachen hier entweder direkt CANopen-Funktionen (die dann strikt auf die jeweilige ArbID achten) oder "einfaches" CAN, wobei aber eine (konfliktfreie) CAN-DBC als Grundlage dient…
Die RaceConditions traten oben in deinem VI auf, in welchem die VIs des Geräteherstellers verwendet wurden. Warum muss man "Strom", "Spannung", etc. als lokale Variable verwenden, wenn direkt daneben das Terminal vorhanden ist?
Als Ergänzung hier mal ein Bild, wie ich die MicroControl-Box initialisiere:
Es werden Funktionen aus der NI-CANopen-Library verwendet. Im späteren Programmverlauf werden dann einfach die PDOs gelesen/geschrieben und ein paar Settings per SDO vorgenommen…
Wichtige Info dazu: Du kannst leider auf einem CAN-Interface nicht gleichzeitig Funktionen aus NI-CAN mit NI-CANopen mixen. Das führt sofort zu einem BSOD! (Ja, auch ein relativ modernes Windows kann man noch in einen BSOD zwingen…)