[TIA V13] Durch (nichtstetige) Textlisten blättern mit Button

eternr3

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

habe ein kleines Problem, bei dem mein Arbeitskollege gemeint hat, dass es mit älteren Panels über die Folientastatur lösbar gewesen ist. Eine solche Funktion suche ich in TIA V13 WinCCflex für mein TP700 Comfort vergeblich.

Ich habe eine Textliste die ich per Dropdown anwählen kann. Die Nummerierung dieser Textliste ist nicht fortlaufend.
Beispiel für die Werte (in Spalte Werte): 0,1,2,3,50,51,52,53,... etc.

Zusätzlich zu dem Dropdown soll mit Pfeiltasten (auf dem HMI) durch die verschiedenen Textlisten navigiert werden und genau hier liegt das Problem. Lege ich einen Wert zum in-/dekrementieren des aktuellen Wertes (Zeigt auf die Textliste) auf die Pfeiltasten, so wird von 3 auf 4 gesprungen und nicht wie im obigen Beispiel auf 50. Ist ja auch logisch.

Ich würde halt gerne Mithilfe der Pfeiltasten direkt auf das nächste Textlistenelement springen.
Ist das durch irgendeine Funktion innerhalb von WinCCflex möglich oder muss ich mir etwas in der SPS basteln?


Danke und schönes Wochende.
 
Kann das TP700 Comfort Skripte?

Unter WinCC flexible funktionieren die folgenden Skripte.
Eine Schaltfläche ruft das Skript TL_Up() auf, eine zweite Schaltfläche ruft das Skript TL_Down() auf.
SmartTags("_Intern\listvalue") ist die mit dem symbolischen EA-Feld verbundene Prozessvariable.
Code:
[COLOR="#008000"]' Sub TL_Up()
' Textliste 1 Eintrag höher (kleinerer Wert) auswählen
' Sprachcode für LookupText: "de-DE" = 1031 = Deutsch-Standard / "en-US" = 1033 = Englisch-USA[/COLOR]

[COLOR="#0000FF"]Const[/COLOR] TL_minValue = 0 [COLOR="#008000"]'kleinster Wert der Textliste[/COLOR]
[COLOR="#0000FF"]Dim[/COLOR] i, listtext

[COLOR="#0000FF"]For[/COLOR] i = SmartTags([COLOR="#800000"]"_Intern\listvalue"[/COLOR]) - 1 [COLOR="#0000FF"]To[/COLOR] TL_minValue [COLOR="#0000FF"]Step[/COLOR] -1
  [COLOR="#800000"]LookupText[/COLOR] listtext, i, 1031, [COLOR="#800000"]"Textliste_1"[/COLOR]
  [COLOR="#0000FF"]If[/COLOR] listtext <> [COLOR="#800000"]""[/COLOR] [COLOR="#0000FF"]Then Exit For
Next
If[/COLOR] i < TL_minValue [COLOR="#0000FF"]Then[/COLOR] i = TL_minValue
SmartTags([COLOR="#800000"]"_Intern\listvalue"[/COLOR]) = i
Code:
[COLOR="#008000"]' Sub TL_Down()
' Textliste 1 Eintrag tiefer (größerer Wert) auswählen
' Sprachcode für LookupText: "de-DE" = 1031 = Deutsch-Standard / "en-US" = 1033 = Englisch-USA[/COLOR]

[COLOR="#0000FF"]Const[/COLOR] TL_maxValue = 53 [COLOR="#008000"]'größter Wert der Textliste[/COLOR]
[COLOR="#0000FF"]Dim[/COLOR] i, listtext

[COLOR="#0000FF"]For[/COLOR] i = SmartTags([COLOR="#800000"]"_Intern\listvalue"[/COLOR]) + 1 [COLOR="#0000FF"]To[/COLOR] TL_maxValue
  [COLOR="#800000"]LookupText[/COLOR] listtext, i, 1031, [COLOR="#800000"]"Textliste_1"[/COLOR]
  [COLOR="#0000FF"]If[/COLOR] listtext <> [COLOR="#800000"]""[/COLOR] [COLOR="#0000FF"]Then Exit For
Next
If[/COLOR] i > TL_maxValue [COLOR="#0000FF"]Then[/COLOR] i = TL_maxValue
SmartTags([COLOR="#800000"]"_Intern\listvalue"[/COLOR]) = i

Harald
 
Danke erstmal für den Code.
Wenn ich ihn mir anschaue, verstehe ich ihn und er ergibt Sinn.
Nur leider versteht die Simulation den Code nicht. :D

*Die Prozessvariable ist im DB als Wort definiert und entsprechend eingepflegt.
*Der Verweis auf die richtige Textliste.
*Die Sprache habe ich auf 1033 (Englisch) umgestellt, so wie in der Textliste projektiert.
*TL_maxValue bzw. TL_minValue angepasst.

Habe das Panel simuliert (mit PLCSim) und ein Aufruf des Skriptes per Schaltfläche ändert am Wert im DB nichts.
Kannst du mir auf die Sprünge helfen?

Code:
Const TL_maxValue = 101 'größter Wert der Textliste
Dim i, listtext


For i = SmartTags("DB_TP700: Interface_XY") + 1 To TL_maxValue
  LookupText listtext, i, 1033, "XY"
  If listtext <> "" Then Exit For
Next
If i > TL_maxValue Then i = TL_maxValue
SmartTags("DB_TP700: XY") = i
 
Hast Du Dich jetzt nur beim Posten vertippt?
Die beiden Smarttags(...) müssen die selbe Variable sein
Code:
Const TL_maxValue = 101 'größter Wert der Textliste
Dim i, listtext


For i = SmartTags("[COLOR="#FF0000"]DB_TP700: Interface_XY[/COLOR]") + 1 To TL_maxValue
  LookupText listtext, i, 1033, "XY"
  If listtext <> "" Then Exit For
Next
If i > TL_maxValue Then i = TL_maxValue
SmartTags("[COLOR="#FF0000"]DB_TP700: XY[/COLOR]") = i

[COLOR="#A52A2A"]ShowSystemAlarm "Skript TL_Down() wurde ausgeführt"[/COLOR] [COLOR="#008000"]'für Test eine Debug-Meldung ausgeben[/COLOR]

Wird der Wert im DB bei Dir vielleicht dauernd beschrieben? Ist die Variable im HMI-Teil richtig angelegt? Adresse richtig?
Probiere es mal mit einer Panel-internen Variable aus.

Wird das Skript auch tatsächlich aufgerufen?
- baue mal zum Test eine Laufmeldung ein: ShowSystemAlarm "Skript TL_Down() wurde ausgeführt"
- setze mal den Wert der Prozessvariable auf 200 und ruft dann TL_Down() auf --> das Skript muß den Wert auf 101 ändern

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du Dich jetzt nur beim Posten vertippt?

Ja. Wollte die Variablen eben hier einkürzen, da die doch sehr lang waren.

Probiere es mal mit einer Panel-internen Variable aus.

Also der DB wird über die Variable nur durch das DropDown-Menü gesetzt. Aus der PLC kommt nichts.
Ein ändern (nur des Skriptes) auf eine interne Variable bringt nichts.

Ich habe die Laufmeldung in das Skript eingebaut und es tut sich definitiv nichts. Auch die Prozessvariable wird nicht ersetzt (< 101).

Bin grade auf die Option Simulation mit Skript-Debugger gestoßen. WinCC gibt mir die Meldung "Es ist kein Skript-Debugger installiert." aus. Wird es daran liegen?
 
Nein. Ein Skript-Debugger bringt nicht viel, wenn die Runtime für ein Panel ist. (Der Debugger müsste in der Testumgebung installiert werden.) Ich habe jedenfalls noch nie einen gebraucht, ich mache mir passende Testausgaben rein mit ShowSystemAlarm, damit kann man notfalls auch Variablenwerte ausgeben.
Zum Skript-Debugger gibt es ein Hilfe-Thema, da steht näheres.

"tut sich definitiv nichts" - dann wird entweder das Skript nicht aufgerufen oder es kommt nicht bis zur Testmeldung oder Du siehst die Meldung nur nicht.
Kannst Du Systemmeldungen überhaupt sehen? Wenn nicht, dann bekommst Du Runtime-Errors und Testausgaben garnicht mit.
Mache mal in die Vorlage (oder wie heißt das Vorlagebild bei TIA???) ein Meldefenster für anstehende Meldungen nur der Meldeklasse System rein.
Praktisch ist auch eine Meldeanzeige für Meldeereignisse in einem Bild, dann kann man in Ruhe die Systemmeldungen nachlesen.

Harald
 
Kannst Du Systemmeldungen überhaupt sehen?

Ja natürlich. Systemmeldungen sind auf einem entsprechendem Bild schon lange projektiert.
Und genau hier wird nichts angezeigt, daher gehe ich davon aus, dass nichts aufgerufen wird.
Ich finde meinen Fehler aber einfach nicht.
 
Wenn Du bei einer der Schaltflächen beim Ereignis Klicken (oder Drücken) in der Funktionsliste vor und nach dem Skriptaufruf die Ausgabe von Systemmeldungen einfügst (ZeigeSystemmeldung oder ShowSystemAlarm), kommen dann diese Systemmeldungen?

Code:
Schaltfläche Liste_runter
Ereignisse
-> Klicken
   Funktionsliste:
   1  ZeigeSystemmeldung
      Text/Wert   "Schaltfläche Liste_runter: geklickt"
   2  TL_Down
   3  ZeigeSystemmeldung
      Text/Wert   "Schaltfläche Liste_runter: Ende Funktionsliste"

Harald
 
Wenn Du bei einer der Schaltflächen beim Ereignis Klicken (oder Drücken) in der Funktionsliste vor und nach dem Skriptaufruf die Ausgabe von Systemmeldungen einfügst (ZeigeSystemmeldung oder ShowSystemAlarm), kommen dann diese Systemmeldungen?

[...]

Sorry. Hatte plötzlich anderweitig zu tun und komme erst jetzt wieder dazu.
Habe das Ganze so ausprobiert, wie von dir vorgeschlagen. Es werden keine Systemmeldungen aufgerufen. Nehme ich das Skript raus, werden (natürlich) beide Systemmeldungen angezeigt.

Ich glaub ich mache es doch einfach über die SPS. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es in dem TIA sowas wie ein "alles übersetzen"?

Mache mal ein komplett neues Projekt mit nur einer Textliste, ein symbolisches E/A-Feld, 2 Schaltflächen und 2 Skripte. Nimm für die mit dem E/A-Feld verbundene Prozessvariable zunächst eine Panel-interne Variable.

Funktioniert es dann in der HMI-Runtime?
Ändere eventuell mal den Bediengerätetyp auf ein anderes Panel statt TP700 Comfort.

Danach füge eine PLC dazu, ändere die Prozessvariable zu einer PLC-Variable, starte PLCSIM und teste die HMI-Runtime erneut. Zuletzt teste es mit realen PLC und Panel.

Wie schonmal gesagt: bei mir funktionieren meine beiden Skripte unter WinCCflexible 2008 SP2.

Harald
 
Zurück
Oben