String anzeigen lassen in der VISU

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde ja den Zustand nicht in 6 Variablen codieren, sondern in einer (Int/Word) und damit in der Visu eine Textliste umschalten. Damit hast Du mehrere Vorteile: Texte sind in der Visu, Du brauchst keine Texte übertragen, Du kannst Sprachen umschalten. Und die Logik ist in der SPS...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber ich frage mich: Selbst wenn es funktioniert, warum soll ich einen String ändern, wenn es Textlisten gibt, die man auch vernünftig pflegen kann, anstatt in irgendeinem Skript irgendwelche Texte zu schreiben. Wir sprechen hier ja anscheinend nicht von hochdynamischen Texten, die während der Laufzeit zusammengebaut werden müssen, sondern von banalen Statusanzeigen. :):unsure:
 
Ich vermute, der TE möchte erstmal eine "banale" Anzeige nach einer "banalen" Methode austesten bzw. zum Laufen bringen, bevor er sich auf die komfortable AlleskönnerVariante stürzt, die er sicherlich für dieses und/oder folgende Projekte im Hinterkopf behalten sollte. ;)
 
Der Code im Visu-Objekt wird doch nur beim Schliessen eines Visu-Dialogs ausgeführt, was sicher nicht Sinn der Sache ist. Er sollte im POU_drive stehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es soll permanent ein Text angezeigt werden der den Zustand angibt (GroupMoving, GroupHoming, GroupErrorStop, GroupStandby, GroupStopping, GroupDisabled) der Baustein MC_GroupReadStatus symbolisiert mittels TRUE/FALSE welcher Zustand aktiv ist. Hab versucht es anzeigen zu lassen indem ich die bedinungen in die Schaltfläche als ST Programm integriert habe. Diese Schaltfläche dient nur zum anzeigen und man betätigt diese nicht, es soll sich automatisch ändern, entsprechend dem Zustand. Dies hätte man auch mit einem ,,Textfeld" realisieren können, wäre wahrscheinlich auch eine bessere Alternative. Die Variabel ,,Tripod_betrieb_Status" wird nur in der Visu in der Schaltflche in der ST programmierung genutzt. Der Begriff ,,Textliste" ist mir neu, also empfehlt ihr mir damit zu arbeiten. Ich hoffe diese beschreibung hilft bei VerständnisScreenshot (100).png
 
Diese Schaltfläche dient nur zum anzeigen und man betätigt diese nicht, es soll sich automatisch ändern, entsprechend dem Zustand. Dies hätte man auch mit einem ,,Textfeld" realisieren können, wäre wahrscheinlich auch eine bessere Alternative.
Da wird vermutlich Dein Problem liegen, wie bereits in #15 und #25 geschrieben: Du hängst den Code an ein Ereignis des Elements (Schaltfläche). Wenn Du die Schaltfläche nicht betätigst, hast Du auch kein Ereignis. Also wie soll das Skript ausgeführt werden?

Ich kenne CoDeSys 3 nicht. Daher weiß ich nicht, welche alternativen Ereignisquellen Du hast. Manche Visualisierungen bieten das Ereignis "Variablenänderung". Oder Du hast einen Timer, der alle Sekunde das Skript aufruft, .... Ein Ausgabefeld überwacht natürlich selber die auszugebende Variable. Da müßtest Du den String dann aber in der SPS bilden und im Ausgabefeld anzeigen.

Jede Visualisierung hat irgendwo Text- und Grafiklisten. Dort weist man einem Wert einen bestimmten Text oder eine Grafik zu. Dann überwachst Du eine Variable und entsprechend des Wertes dieser Variable wird dann der entsprechende Text oder die entsprechende Grafik angezeigt. Wenn es dafür kein extra Steuerelement gibt, versuchs mal mit einer Dropdown-Liste, da kann man sicherlich eine Textliste dran hängen.
Und dann faßt Du Deine booleschen GroupXXX-Stati in einem INT zusammen (oder vom mir aus auch WORD und jedes Bit = ein boolescher Status).

Und dann hast Du fertige Texte im HMI und falls mal eine Übersetzung notwendig ist, sind die auch in der Sprach-Datenbank. Außerdem wiederverwendbar, falls Du an mehreren Stellen die gleichen Texte ausgeben mußt.
 
Es soll permanent ein Text angezeigt werden der den Zustand angibt (GroupMoving, GroupHoming, GroupErrorStop, GroupStandby, GroupStopping, GroupDisabled)
Dann muss der Code, der diesen Text erzeugt, auch permanent ausgeführt werden. Ein Visu-Objekt bietet diese Möglichkeit nicht, der Code muss in die POU_drive.
Möglichkeit 1 (einfach): Den Code aus dem Visu-Objekt in die POU_drive verlagern.
Möglichkeit 2 (elegant): Mit einer Textliste arbeiten. Aber auch dazu brauchst Du Code in der POU_drive, der die BOOL-Statusmeldungen dann nicht in einen Text, sondern in eine Textnummer übersetzt.
Am besten fügst Du der POU_drive eine Aktion hinzu, dort kannst Du den Code in ST schreiben. Die Aktion rufst Du dann aus dem CFC heraus auf.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dankeschön soweit habe ich es verstanden, in den "Textindex" des Dynamischen Text kommt dann eine Variabel welche ich in der POU_drive ändere, richtig ? hab es probiert und funktioniert nicht so ganz wie ich es gedacht habe.
Dann muss der Code, der diesen Text erzeugt, auch permanent ausgeführt werden. Ein Visu-Objekt bietet diese Möglichkeit nicht, der Code muss in die POU_drive.
Möglichkeit 1 (einfach): Den Code aus dem Visu-Objekt in die POU_drive verlagern.
Möglichkeit 2 (elegant): Mit einer Textliste arbeiten. Aber auch dazu brauchst Du Code in der POU_drive, der die BOOL-Statusmeldungen dann nicht in einen Text, sondern in eine Textnummer übersetzt.
Am besten fügst Du der POU_drive Screenshot (108).pngeine Aktion hinzu, dort kannst Du den Code in ST schreiben. Die Aktion rufst Du dann aus dem CFC heraus auf.

Screenshot (110).pngScreenshot (109).png
 
Wie funktioniert es denn? Anders als erwartet oder gar nicht?
Kann es sein, daß Du dich mit dem dritten Screenshot vertan hast? Der trägt nicht so recht zur Aufklärung bei.
Ich vermute mal, daß Du die Variable "POU_drive.a" in der Aktion "ST_program_status" mit den Werten 1-6 beschreibst. Rufst Du die Aktion denn auch auf?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der letzte Sceenshort dient nur dazu um die Variabel a zu zeigen. Hatte gedacht es funktioniert indem ich die Variabel in dem Code zuweise und es beim Textindex hinschreibe. Könnte mir jemanden
schritt für schritt erklären wie man mit einer Textliste mittels variabler index änderung arbeitet ? denke das wäre die einfachste variante
 
Versuche mal, a als INT zu deklarieren und probier es aus.
hab ich funktioniert leider immer noch nicht, statt dem text steht da nur %s. Da die variabel a ja Theoretisch nur eine Zahl wiederspiegelt könnt ihr euch meine verwirrung vorstellen, wieso das nicht funktioniert. Hier noch mal der Code, ihr könnt die IFs ignorieren das muss ich noch korregieren, nur die letzte Zeile ist wichtig
Screenshot (112).png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, ich hab mal in eCockpit nachgesehen, daß ich zufällig auf einem Test-Rechner habe.
Die ID in der Textliste ist anscheinend nicht, wie in anderen HMIs ein INT, sondern tatsächlich ein String. Du mußt also aus dem Programm raus die ID als String übergeben.
Ich würde das "%s" aus der statischen Textzuweisung raus nehmen, das überschreibt Dir vermutlich die Dynamisierung.
 
funktioniert leider immer noch nicht, irgendwie wird die variabel auch gar nicht gesetzt
:unsure:
Dann liegt's ja an Deinem Programm...

dann mach doch erst einmal testweise ein E/A-Feld für den ID-String. Dort siehst Du dann den Inhalt. Wird die Variable tatsächlich im Programm nicht gesetzt, kannst Du aber die ID händisch eingeben und siehst, ob Deine Textliste funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich, hab ein neues programm erstellt in dem ich nur auf eine Textliste zugreifen will. Das selbe Problem... die variabel habe ich selber gesetzt aber es funktioniert nicht wenn ich die Variabel 2 setzte. wenn ich aber in die Indexzeile 2 eingebe funktoniert ist. verstehe das nichtScreenshot (115).pngScreenshot (116).pngScreenshot (114).pngScreenshot (118).png
 
Zurück
Oben