Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
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!
Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo an Alle,
Ich bin gerade dabei die ADS Schnittstelle von Beckhoff zu nutzen (Austausch von Daten zwischen PLC und LavIEW) und wollte Meldungen an
den Benutzer senden, um ihm den Status des Prüfstandes / den aktuell aktivierten Vorgang mitzuteilen.
Verwendet habe ich hierfür ein Array mit 50 Einträgen vom Datentyp Bool, welches über in LabVIEW eingelesen wird. Abhängig davon welcher Zustand aktiviert / ausgeschaltet wird, wird eben jeweils ein Bit im Array gesetzt / rückgesetzt.
Mein Problem ist nun - Wie kann ich auf eine Bitänderung in LabVIEW am einfachsten reagieren um eine Zustandsmeldung auszugeben?
Meine Idee war ursprünglich "LED anzeigen" mit einem eindeutigen Namen zu verwenden und deren Status in einer Eventschleife abzufragen. Abhängig von der Zustandsänderung der LED wird anschließend eine Meldung ausgegeben.
Dies funktioniert leider nicht - weil die Statusänderung der LED, in der Eventschleife bei "Value Change" nicht erkannt wird. - (wofür man die LED dann auswählen kann, obwohl die Statusänderung Value Change nicht funktioniert - ist in meinen Augen zwar sinnbefreit, aber das ist ein anderes Thema... )
Kann mir vl jemand einen sauberen Weg sagen, wie ich Bitmeldungen an den Benutzer ausgeben kann, abhängig vom jeweiligen Zustandsbit im Array? - ist mir aktuell noch ein Rätsel, wie man diese
Funktionalität am besten in Labview umsetzt.
Hätte gerne : eine Meldung mit: Datum / Uhrzeit, Information für Bediener, und Status (I / Information, bzw F / Fehler) und alle chronologisch in einer Liste. (Listbox?)
Wäre super könnte mir hier jemand behilflich sein.
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo Stefan,
die meisten, die LabVIEW schon etwas länger verwenden, haben aus guten Gründen meist eine etwas ältere LabVIEW Version im Einsatz. Wenn du dein VI für eine ältere LabVIEW Version speicherst, dann bekommst du zwangsläufig auch mehr Antworten. Du solltest dabei mindestens bis LabVIEW 2021 zurück gehen. Es dürfte aber hier und in anderen Foren noch etliche geben, die LabVIEW 2019, 2018 verwenden.
Ich kann dein VI zur Zeit auch nicht öffnen.
Das mit dem Value Change ist vollkommen ok. Kein Benutzer hat den Status der LED geändert. Es war dein Programn und damit hast du es auch in der Hand auf die Änderung zu reagieren. Das was du vor hattest ist ungefär so, wie wenn du über Japan von Frankfurt nach Köln fährst anstatt den direkten Weg zu nehmen.
Martin Henz
17.04.2025, 23:25 (Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2025 23:27 von stefan1312.)
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo,
Vielen Dank für den Hinweis!, werde versuchen mein VI morgen noch einmal als Vorgängerversion zu speichern und anschließend zu posten.
ok danke für den Hinweis, ist für mich zwar nicht ganz klar nachdem die Eigenschaft "Value Change" heißt, hätte ich angenommen das beides funktionieren sollte.
Entweder ich betätige eben selbst einen Button, wodurch der Interrupt ausgelöst wird oder der Programmablauf erledigt dies für mich.
Die Frage die sich mir dann aber noch immer stellt, wie ich diese benötigten Bitmeldungen am besten umsetzen kann?
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hi Stefan,
um ein wenig auf dein ursprüngliches Anliegen zurück zu kommen:
Ich wüsste nicht, wie es gehen sollte, dass dir die Event Struktur in irgend einer Weise helfen könnte. Ich wollte deshalb auch erst einmal auf dein VI warten - jetzt warte ich das doch nicht ...grrr.
Wenn du auf dem Front Panel ein numerisches Eingabefeld hast und der Benutzer dort einen neuen Zahlenwert eingibt, dann wird auch ein Value Change Event ausgelöst. Wenn du den in der Event Struktur bekommst, dann macht das absolut Null Aussage darüber, ob sich der Zahlenwert auch tatsächlich geändert hat. Es sagt nur aus, dass ein anderer Zahlenwert eingegeben wurde. Ein Programm kann auch über einen property node einen value change event auslösen. Auch dabei muss sich der Wert nicht ändern. Kurzum: Wenn du den in der Event Struktur einen Value Change Event bekommst und du eine Aktion nur ausführen willst, wenn sich der Wert (Zustand, Zahl, Text usw.) auch tatsächlich geändert hat, dann muss dein Programm das zunächst überprüfen.
Die Event Struktur hilft dir Null-Komma-Nichts bei deinem Problem.
Ich bin geneigt zu schreiben: Es gibt die wunderschöne und uralte Funktion mit den Namen "Equal?" in LabVIEW. Die löst dein Problem.
Du liest von deiner Hardware mehr oder weniger regelmäßig ein immer gleich großes Array of Boolean ein. Dein Programm kennt die boolschen Werte vor der Abfrage und die boolschen Werte nach der Abfrage. Die beiden kannst du mit "Equal?" vergleichen (im Modus Compare Elements). Das Ergebnis st alles, was du brauchst um daraus die Meldung für den Benutzer zu generieren.
Vielleicht gibt die das eine Idee davon, wie es funktionieren könnte:
Martin Henz
22.04.2025, 07:56 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2025 08:12 von stefan1312.)
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo!,
Zunächst einmal vielen Dank für die Rückmeldung! und den Tip!
Ich habe versucht, mein Programm als älterer LabVIEW Version abzuspeichern. Leider funktioniert das scheinbar nicht so einfach, weil die "ADS Bibliothek" ein Passwort von
mir dafür habe möchte. Habe deshalb nur zwei Bilder von meinem VI anhängen können.
Der Hauptgrund warum ich einen EventCase verwenden wollte, ist das ich diese Variante recht übersichtlich finde. - für jedes Bit einen eigenen Event - Case und darin eine Meldung ausgeben. Find ich
persönlich super übersichtlich - leider bin ich gerade für einen alternativen Ansatz, der ähnlich funktioniert etwas "blind" =/
Eine Wertänderung zu erkennen, ist das eine .. (vielen Dank dafür! ) - aber wie könnte ich unterschiedliche Meldungen hier am übersichtlichsten / kompaktesten einpflegen?
Vielen Dank noch einmal!
LG Stefan
22.04.2025, 08:00 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2025 08:01 von GerdW.)
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo Stefan,
Zitat:Eine Wertänderung zu erkennen, ist das eine .. (vielen Dank dafür! ) - aber wie könnte ich unterschiedliche Meldungen hier am übersichtlichsten einpflegen?
Ein einzelnes Bit kennt nur 2 Werte: du könntest die "unterschiedlichen Meldungen" also per Select oder AppendTrueFalseString "einpflegen"…
Bitte , du benutzt ja nicht mehr (ausschließlich) LV2017…
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Tut mir leid, da hab ich mich jetzt falsch ausgedrückt.
Auf die verschiedenen Bitänderungen in meinem Array wollte ich schreiben..( jedes Bit soll hier mit einer eigenen Meldung verknüpft sein ).
Auf den SPS`n die ich bis jetzt kenne funktioniert das super einfach, eine Bitmeldung in der Visualisierung zu erstellen.. In Labview fehlt mir eben leider
gerade der Blick / die Funktion dafür.
LG Stefan
( werde mein Profil gleich ergänzen - Danke für den Hinweis! )
22.04.2025, 09:23 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2025 09:24 von GerdW.)
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Persönlich hätte ich das jetzt wohl eher als einzelne Ganzzahl gemacht. Ein UInt64 kann da sehr wohl 50 separate Zustände representieren. Wobei dann kommt auch gleich die Frage auf: Können mehrer Zustände gleichzeitig wahr sein? Und was soll dann in dem Fall getan werden?
Wenn jeweils nur ein Zustand wahr sein kann dann wäre eine einzelne Nummer, wo 0 angibt dass nichts wahr is eine einfachere Lösung.
RE: Bitmeldung an Benutzer - TwinCAT (Beckhoff) - LabVIEW
Hallo Rolf,
es sicher besser, wenn die Zustände von von der TwinCAT als Byte-Array, U64 übertragen wird. Ich schieße aus, dass bei 50 einzelnen Zustandsbits immer nur ein einziger Zustand aktiv ist. Ich schließe auch aus, dass sich immer nur ein einziger Zustand ändert. Stefan habe ich so verstanden, dass er Änderungen der Bits (=Zustände) feststellen will und dann je nach geänderten Bits eine passende Meldung ausgeben werden soll. So habe ich das zumindest verstanden. Es können sich mehrere Bits gleichzeitig ändern und er will die Änderungen als Text anzeigen.
Wenn die Zustände nun als 64 Bit Integer vorliegen lassen sich die geänderten Bits einfach mit XOR feststellen. Die zu den geänderten Bits passenden Meldungen (Texte) hat er damit noch nicht. Für jemanden wie Stefan ist es meiner Ansicht nach leichter zu verstehen, wenn in einem Bool-Array nach TRUE gesucht wird um die Textmeldungen zu ermitteln, als wenn in einem U64 nach den Bitnummern mit dem Wert 1 gesucht wird (ohne Umweg über ein Array of Boolean).
Ok, ich würde einfach ein paar vorhandene VIs zusammenklicken und hätte dann die Meldungen - ganz egal ob die Zustände nun als Array of Boolean, Array of Bytes, U64 oder einem anderen Integer Datentyp vorliegen. Das kann Stefan vermutlich nicht machen.
Wenn die Anzahl der Zustände in eine Größenordnung von 50 kommt, dann kommen auch ganz schnell noch weitere Quellen für weitere Zustände dazu. Die könnten zwar alle separat betrachtet werde, was aber manchmal gar nicht gewünscht oder möglich ist. Ein Array of Boolean um einige Werte zu erweitern ist einfacher, als Bits zu einem U64 hinzuzufügen. Und ... die paar Bytes und CPU-Takte die ein Array of Boolean zusätzlich kosten, sind es nicht Wert den Stefan zu verwirren