Hallo Titus,
Zitat:Ich bekomme einen Array mit Clustern gleicher CAN-ID aus der ich die acht Datenbytes filtere, in den ersten vier Bytes steht quasi die Adresse der Variablen in welche die vier nachfolgenden Bytes geschrieben werden müssen.
Das ist im CANopen-Protokoll so implementiert, zumindest für SDOs…
Zitat:Ich habe es so gelöst, dass die ersten vier Bytes verglichen werden und wenn diese zu einer Variablen passen wird ein "true" ausgelöst und ein "case" gibt die Variable darauf hin zum Beschreiben frei. Das funktioniert auch einwandfrei, aber wenn ich jetzt mit der Variablen weiter rechnen will, bleibt mir nichts anders übrig mit lokalen Variablen zu arbeiten, da ich ja aus dem "case" auch wieder rauskommen will.
Kennt jemand eine bessere Lösung ohne lokale Variablen bemühen zu müssen?
Eine solche Lösung gibt es immer!
Wieviele "Variablen" willst du überhaupt verarbeiten? Willst du wirklich für jede "Variable" eine neue lokale Variable anlegen???
Hast du schon mal eine FGV bemüht? Diese könnte deine "Variablen" verwalten…
Du könntest eine LUT verwenden, um deine "Variablen" zu speichern und auf ihre Werte zuzugreifen…
Wenn es dir bei deiner Frage nur um den DATAFLOW geht, könntest du auch mit TagChannels/Notifier/globalen Variablen arbeiten…
Wenn du mit LabVIEW programmierst, solltest du den Begriff "Variable" nur sehr sparsam verwenden. Es geht immer um
Daten und wie man Daten weiterleitet (THINK DATAFLOW!)…
Edit: Vorschlag zum Aufbau einer LUT
Es wird jeweils die aktuellste SDO-Message (pro LUT-Eintrag) im Array im Schieberegister gespeichert…
(Der Check auf das gültige Cmd ist etwas "komisch", außer du erwartest garantiert immer 4 Datenbytes in der Message. Eigentlich verwendet man das, um die Anzahl der gültigen Datenbytes in der SDO-Message zu bestimmen.)