TIA Inhalt von Textfeld mit Skript ändern

trabajador73

Level-2
Beiträge
136
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Tia Portal V16:

der Inhalt eines Textfeldes soll je nach Wert der Variable "intWelche_BMK_Anzeige" einen spez. Text ändern, "jedoch das Textfeld_36" wird nicht erkannt, obwohl dieses in Bild "001_Modul_1_1" vorhanden ist.
Was ist Ursache der Fehlermeldung?

Hier die Fehlermeldung:

wMokcBQUlKEiAAAAABJRU5ErkJggg==



Hier der Quellcode:

Dim objTextfeld_18VE03
Set objTextfeld_18VE03=HmiRuntime.Screens("001_Modul_1_1").ScreenItems(Textfeld_36)
If SmartTags("intWelche_BMK_Anzeige")=1 Then
objTextfeld_18VE03="18VE03"
ElseIf SmartTags("intWelche_BMK_Anzeige")=2 Then
objTextfeld_18VE03="AA73008"
End If


Zweite Frage: Wie ist es möglich das Skript aufzurufen bei Wertänderung der Variable "intWelche_BMK_Anzeige"?

Danke für Eure Unterstützung.
 
Man kann nur Eigenschaften von Objekten im gerade angezeigten Bild ändern, und die Änderung hält auch nur bis zum nächsten Bildaufbau.

Interne Variablen lösen bei Wertänderungen durch Zuweisungen keine Ereignisse aus (Loop Breaker).

Deine Lösung: anstatt Textfeld ein EA-Feld oder symbolisches EA-Feld verwenden und den anzuzeigenden Text direkt durch eine HMI-Variable steuern.

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort, Harald.
Das EA-Feld hat, einen Prozesswert zugewiesen bekommen und diesem eine HMI-Variable sowie dieser eine SPS-Variable für den Speicherplatz.

Der Quellcode ist jetzt fehlerfrei.

If SmartTags("intWelche_BMK_Anzeige")=1 Then
HMI_Modul1_1_EA_Feld_18VE03="18VE03"
ElseIf SmartTags("intWelche_BMK_Anzeige")=2 Then
HMI_Modul1_1_EA_Feld_18VE03="AA73008"
End If
 
Nutze doch wenn du Code einstellst den CODE Tag "#"
Dann ist der Code besser lesbar:

Code:
If SmartTags("intWelche_BMK_Anzeige")=1 Then 
    HMI_Modul1_1_EA_Feld_18VE03="18VE03"
ElseIf SmartTags("intWelche_BMK_Anzeige")=2 Then 
    HMI_Modul1_1_EA_Feld_18VE03="AA73008"
End If
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur zweiten Frage, Skript ausführen bei Wertänderung, noch die Lösung:
Auf die spezifische, bei mir, HMI-Variable klicken, dann den Reiter "Ereignisse" anwählen und bei Wertänderung (links) die gewünschte Funktion, in diesem Fall das "passende Skript" anwählen.
 
Das, was Du da machst, macht man normalerweise ganz ohne Skripterei und Ereignissen bei Wertänderung. Einfach ein symbolisches EA-Feld mit Textliste nehmen und den Werten der Prozessvariable in der Textliste den gewünschten Ausgabetext zuordnen. Die eine gepflegte Textliste kann man auch für mehrere EA-Felder auf mehreren Bildern verwenden.

Textliste_BMK
1 | 18VE03
2 | AA73008

Harald
 
Danke für den Hinweis. Es gibt jetzt in etwa 15 EA-Felder auf jeder Seite, bei welcher der BMK-Wert dynamisch nicht über die SPS erfolgt. Dann werden es nahezu 100 Textlisten, was das ganze viel unübersichtlicher macht. Dann ist die dynamische Zuordnung mit einem Skript für jede Seite und einem EA-Feld für mich passender.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@TE:
das mit deiner Textfeld-Zuweisung geht schon deshalb nicht weil du den neuen Text dem Objekt zuweisen willst und nicht der richtigen Property des Objektes. Ich habe leider gerade keine TIA und kann dir deshalb den Namen der Property des Textfeldes nicht sagen. - du bekommst das aber heraus wenn du versuchst den Text eines Textfeldes in einem Bildbaustein auf die Schnittstelle des Bildbausteins zu legen - hier werden dir dann die Namen der möglichen Properties angezeigt ...

Vielleicht versuchst du es mal so ... oder möglicherweise kann einer der anderen den Ball aufnehmen und aushelfen ...

Gruß
Larry
 
Was spricht dagegen eine interne WString-Variable auf dem HMI anzulegen, diese mit dem Textfeld zu verknüpfen und in einem zyklisch oder getriggert ausgeführten Skript mit dem entsprechenden Text zu belegen?
 
Was für eine WinCC Runtime verwendest Du? WinCC Advanced/Comfort ist nicht dafür gedacht, daß bei jeder Variablen-Aktualisierung eine Skripte-Lawine losgetreten wird.

Um wieviele verschiedene BMK geht es denn? Vielleicht könntest Du auch etwas planvoller vorgehen und nur ein paar wenige große Textlisten verwenden. Dann mußt Du halt ein paar mehr Index-Werte als nur 1 und 2 verwenden.
Oder Du zeigst mit 15 EA-Feldern 15 verschiedene interne String-Variablen an und weist beim Bildaufbau den 15 String-Variablen die anzuzeigenden Texte zu. Das ist relativ übersichtlich.
Ändert sich der Wert der Text-bestimmenden Variablen während ein Bild aufgebaut ist?

Wenn es unbedingt über die Eigenschaften von Objekten gehen soll, dann mußt Du etwa so skripten (ungetestet, hab jetzt kein TIA dabei):
Code:
Dim objTextField_BMK

Set objTextField_BMK = HmiRuntime.Screens("001_Modul_1_1").ScreenItems("dynTextfeld_BMK")
Select Case SmartTags("intWelche_BMK_Anzeige")
    Case 1     objTextField_BMK.Text = "18VE03"
    Case 2     objTextField_BMK.Text = "AA73008"
    Case Else  objTextField_BMK.Text = "???"
End Select
Damit diese Art Manipulation des Aussehens der Bilder auch für andere Programmierer übersichtlich und verstehbar bleibt, sollte den dynamisierten Objekten auch absichtsvoll ein sinnvoller Objektname gegeben werden (anstatt den nichtssagenden Durchnummerierungen). Immerhin sieht man dem Textfeld ja nicht an, daß es zur Laufzeit was ganz anderes anzeigt als im ES.

Falls das HMI mehrsprachig projektiert wird, dann kann man sich mit solchen Zuweisungen von Anzeigetexten auch tot skripten ;) Da sind dann die mehrsprachigen Textlisten für symbolische EA-Felder wesentlich bequemer zu projektieren.

Wie können Objekte in WinCC Comfort und WinCC Advanced mit Skripten dynamisiert werden?

Harald
 
Hallo Harald,
danke für Deine weiteren Ergänzungen. Dein Code passt und ist besser, da auch der Fehlerfall berücksichtigt wird.
Ja, verwendet wird als WinCC Runtime WinCC Advanced/Comfort und es sind zwischen 60 und 100 BMKs. Die Umschaltung erfolgt projektspezifisch einmalig je nach Kundenwunsch des Kunden. Mein Kunde möchte eine dynamische Zuweisung.
Das Skript wird auch nur bei Wertänderung ausgelöst, also dessen Ausführung ist auch überschaubar.
Danke für Eure Anregungen und Hinweise.
 
Die Umschaltung erfolgt projektspezifisch einmalig je nach Kundenwunsch des Kunden. Mein Kunde möchte eine dynamische Zuweisung.
Das Skript wird auch nur bei Wertänderung ausgelöst, also dessen Ausführung ist auch überschaubar.
Warum muß die Beschriftung zur Laufzeit umgeschaltet werden und auch während das Bild angezeigt ist?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

zur Laufzeit muss die Beschriftung umgeschaltet werden, weil die Umschaltung mit HMI-Buttons erfolgt auf einer Serviceseite. Es ist ausreichend, wenn nur die angezeigte Seite die gewünschten BMK-Bezeichnungen anzeigt oder ich habe den zweiten Teil Deiner Frage nicht verstanden.
 
Das Skript wird auch nur bei Wertänderung ausgelöst
Du meinst bei Wertänderung einer Variable? Einer Variable die sich nur bei Umschaltung von der HMI-Serviceseite ändert?
Dann brauchst Du das Skript nur bei "Bild aufgebaut" aufrufen.

Beachte:
- eine HMI-interne Variable löst bei Wertänderung durch Zuweisung keine Ereignisse aus, sondern nur wenn sich der Wert durch eine Eingabe am HMI ändert (Loop breaker)
- das Skript funktioniert nur, wenn das Bild auch gerade angezeigt wird, weil nur dann die Bild-Objekte existieren. Wird es nicht angezeigt, dann gibt es Runtime Error.

Wo liegt die Variable? HMI-intern oder in der SPS?
Falls in der SPS: wenn keine Verbindung zur SPS besteht, dann ist der Wert der Variable 0 oder der Wert den sie vor dem Verbindungsabbau hatte. Wenn die Verbindung wiederkommt, dann wird ggf. das Ereignis "Wertänderung" ausgelöst, egal ob das zugehörige Bild gerade angezeigt wird.
Ist die Variable remanent oder soll die bei jedem Start des HMI neu eingestellt werden?
Erzähl mal etwas mehr was Du da eigentlich tust/vorhast.

Meinst Du mit Deinem Projekt: Das HMI wird an verschiedene Anlagen angesteckt, oder mehrere HMI mit identischer Projektierung sollen an mehrere verschiedene Anlagen passen, und es wird auf der Serviceseite eingestellt an welcher Anlage es hängt?
Wäre es vielleicht sinnvoller, wenn Du oder der Kunde die Beschriftungen in einer Textdatei im HMI hinterlegt und auf der Service-Seite bzw. beim Runtime-Start werden die Texte eingelesen anstatt viele fest projektierte Texte per Skript umzuschalten? (Wenn eine andere Beschriftung gewünscht wird, müsstest Du die Skripte in TIA anpassen und neu aufs HMI laden.)

Könntest Du uns fast am Ende der zweiten Thread-Seite verraten um welches HMI-Gerät es bei Dir geht?

Harald
 
HMI ist ein TP1900 Comfort.
Die INT-Variable "intWelche_BMK_Anzeige" ist eine HMI-Variable und verknüpft mit einer SPS-Variablen, denn diese Information von "intWelche_BMK_Anzeige" wird auch in der SPS benötigt und zudem im remanenten Bereich (danke für den Hinweis, remanent oder nicht remanent). Loop breaker sollte daher nicht relevant sein.
Zudem die Skripte sollen nur bei Wertänderung aufgerufen werden, da eine Wertänderung viel weniger häufig passieren wird, als der Aufruf der Serviceseite (auch hier danke für die Anregung).
Die Anlage verkauft unser Kunde national und international an einen Endkunden und die Anlage besteht aus mehreren Modulen für jeden Fertigungsschritt ein Modul. Meine HMI-Projektierung enthält alle Module und wird vom Kunden, für den Endkunden, noch einmal angepasst mit dem geringsten Aufwand, wie nur möglich. Eine händische Änderung der BMK-Anzeigen, je nach Projekt, würde einen zu großen Aufwand beinhalten, daher die dynamische Zuweisung.
Eine Textliste ist auch eine guter Vorschlag, wobei ich jetzt nicht weiß, ob alle Objekte, also nicht nur die BMK-Objekte enthalten sein müssen. Klar es ist möglich die Texte zu exportieren und dann die Anpassungen vorzunehmen in einer zweiten Textliste und anschließend die angepasste Textliste in einem spezifischen Projekt importieren. Aber ich weiß nicht, ob sich diese Lösung für den Kunden zu kompliziert anhört???
Die Lösung Aufruf der Skripte bei Wertänderung der Variable "intWelche_BMK_Anzeige" ist für mich immer noch am praktikabelsten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwie habe ich das Gefühl, daß Du mich nicht verstehst und/oder daß wir aneinander vorbei reden.

1) Wann genau ändert sich die Variable "intWelche_BMK_Anzeige"?
2) Warum genau soll sich die Beschriftung zwischen 2 verschiedenen Möglichkeiten ändern?
3) Steuert die Variable die Anzeigen auf mehreren Bildern oder hat jedes Bild eine eigene Umschaltvariable?

4) Die von Dir gewollte Skript-Lösung ist nicht so wirklich dynamisch, wenn da lediglich aus 2 fest im Skript einprogrammierten Texten einer ausgewählt wird. Wenn es eine erhebliche Menge Maschinen national und international sind, gibt es da trotzdem nur die 2 fest einprogrammierten BMK?

Harald
 
1) Wann genau ändert sich die Variable "intWelche_BMK_Anzeige"?
Wenn auf der Serviceseite auf einen Button gedrückt wird, dann wird der Variablen "intWelche_BMK_Anzeige" ein Wert z.B. 1 zugewiesen. Wenn auf einen anderen Button gedrückt wird, dann wird der Variablen "intWelche_BMK_Anzeige" ein anderer Wert z.B. 2 zugewiesen.
Die entsprechende Button wird ganz am Anfang während der IBN oder kurz nach der IBN gedrückt und damit die Anzeige des BMK festgelegt.
Das Betätigen des passenden Buttons kann von einem Endkundenmitarbeiter mit Servicerechten vorgenommen werden oder vom Inbetriebnehmer in Absprache mit dem Kunden.

2) Warum genau soll sich die Beschriftung zwischen 2 verschiedenen Möglichkeiten ändern?
Ein Endkunde möchte die BMK-Anzeige nach den Schaltplankennzeichen und ein anderer Endkunde möchte eine Anlagenkennzeichnung.

3) Steuert die Variable die Anzeigen auf mehreren Bildern oder hat jedes Bild eine eigene Umschaltvariable?
Es gibt nur eine Umschaltvariable für das ganze HMI-Projekt, da es kein entweder oder gibt für den gewählten BMK-Typ, also diese eine Umschaltvariable steuert alle BMK-Kennzeichnungen.

4) Die von Dir gewollte Skript-Lösung ist nicht so wirklich dynamisch, wenn da lediglich aus 2 fest im Skript einprogrammierten Texten einer ausgewählt wird. Wenn es eine erhebliche Menge Maschinen national und international sind, gibt es da trotzdem nur die 2 fest einprogrammierten BMK?
Ja, es gibt aktuell nur 2 BMK-Anzeige Vorgaben. Ich habe dafür den Vorschlag von Dir mit der Case-Anweisung benutzt. Wenn noch eine weitere BMK-Anzeige hinzukommen sollte, dann wird eine weitere Case-Anweisung hinzugefügt.



 
Es gibt nur eine Umschaltvariable für das ganze HMI-Projekt, da es kein entweder oder gibt für den gewählten BMK-Typ, also diese eine Umschaltvariable steuert alle BMK-Kennzeichnungen.
Eine Alternative:

Mit einer 2. (deutschen) Projektsprache kannst Du die verschiedenen Bezeichnungen direkt in die Text-Eigenschaften jedes Textfeldes eintragen und dann zwischen den Varianten über die Sprachumschaltung hin und her schalten.
Wo Du keine Variante brauchst, kopierst Du einfach den originalen Text (wenn dies nicht ohnehin schon automatisch geschehen ist).
 
Zurück
Oben