WinCC VBS, Listenfeld und Dynamisierung von Textfeldern

AWolf

Level-1
Beiträge
17
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, wieder ich :)

System: WinCC 7.4

Also es geht um das WinCC Objekt "Listenfeld". Es muss ein Listenfeld mit verschiedenen Prozessphasen dynamisch dargestellt werden ungefaehr so:
Phase 1 't1
Phase 2 't2
Phase 3 't3

Wenn Phase 1 aktiv ist, muss die gruen sein usw.

Mein Fragen sind:

1. Ich weiss nicht wie ich auf die einzelne Textfelder im Listenfeld in VBS zugreifen und Textfarbe (ForeColor) aendern kann. Mit SetPropWord/Char erzeuge ich ein Listenfeld (obwohl das geht auch ueber Eigenschaften).
Mit
Code:
Dim Liste, t1, t2, t3, tag1
Dim gruen, weiss, grau
gruen = RGB(0,206,0)
weiss = RGB(255,255,255)
grau = RGB(109,109,109)
Set tag1 = HMIRuntime.Tags("HMI_cycleTyp")
tag1.Read
expression = tag1.value
Set Liste = ScreenItems("Listenfeld1") 'kann ich auf das Listenfeld zugreifen. 
Set t1 = Liste.SelIndex(1) 
If expression = 1800 Then
   t1.ForeColor = weiss
Elseif expression = 1828 Then
t1.ForeColor  = gruen 
Else 
  t1.ForeColor  = grau 
end if


aendert es sich beim t1 nix.

Ich denke, dass
Code:
Set t1 = Liste.SelIndex(1)
ein falscher Zugriff ist.

2. Wie ich das Listenfeld staendig aktualisieren kann. Beim Bildwechsel ist mir klar, aber wenn das Bild schon aktiv ist und die Phase sich geaendert hat? Wo und wie soll das Skript aufgerufen werden?
3. Der Kunde moechte, dass die Listenfeld wie eine Tabelle aus Excel aussieht. Wie kann man das machen?
 
Die Farbe eines einzelnen Eintrags in einer Textliste lässt sich meines Wissens nach nicht anpassen. Nur die Farbe der gesamten Liste an sich.

Die Textliste kannst du in VBS z.B. so befüllen:
Code:
Dim tag1
Dim oListenfeld
Dim i
Dim texte(3, 3)

texte(1, 1) = "a Text 1"
texte(1, 2) = "a Text 2"
texte(1, 3) = "a Text 3"

texte(2, 1) = "b Text 1"
texte(2, 2) = "b Text 2"
texte(2, 3) = "b Text 3"

texte(3, 1) = "b Text 1"
texte(3, 2) = "b Text 2"
texte(3, 3) = "b Text 3"

Set tag1= HMIRuntime.Tags("HMI_cycleTyp")
tag1.Read

Set oListenfeld = ScreenItems("Listenfeld1")

oListenfeld.NumberLines = 3 ' Anzahl der Einträge in der Liste
For i = 1 To 3
	oListenfeld.Index = i ' Listenfeld Eintrag der bearbeitet werden soll selektieren
	oListenfeld.Text = texte(tag1.Value, i) ' Text eintragen
Next

In Abhängigkeit vom Wert in "HMI_cycleTyp" der sich hier zwischen 1 und 3 befinden muss werden dann die entsprechenden Texte eingetragen. Eine Abfrage auf einen gültigen Wertebereich solltest du noch einfügen.

Das Script zum Befüllen solltest du ausführen wenn sich der Wert von "HMI_cycleTyp" ändert. Also z.B. im Bild mit der Textliste ein EA-Feld einfügen welches den Wert von "HMI_cycleTyp" ausgibt, und an das Ereignis der Änderung des Ausgabewertes hängst du dein Skript an. Du kannst das EA-Feld auch unsichtbar schalten wenn der Wert für den Benutzer nicht interessant ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, danke für dein Tipp mit der EA-Feld!
Dein Beispiel zum Befüllen des Listenfeldes ist auch sehr hilfreich. Kann ich auch benutzen, wenn z.B. die Rezeptur sich ändert.
Textfarbe ist aber immer noch ein Rätsel für mich. Wenn das nicht geht mit dem Listenfeld, muss ich eine andere Lösung finden.
Auf jeden Fall danke für deine Hilfe Thomas_v2.1 !
 
Wenn du die Listenanzeige nicht zur Eingabe von Werten sondern z.B. zur Schrittanzeige einer Schrittkette verwenden möchtest, dann kannst du auch den Eintrag des aktiven Schrittes über das VBS Skript selektieren.
Die Darstellungsart des selektierten Eintrags kannst du auch über VBS einstellen. Dann könntest du auch die Farben des selektierten Eintrags variabel gestalten, also Eintrag 1 selektiert grün, Eintrag 2 selektiert rot usw.
 
Hi, genau das will ich machen, aber mit dem
Code:
Set Liste = ScreenItems("Listenfeld1") 'kann ich auf das Listenfeld zugreifen. 
Set t1 = Liste.SelIndex(1) 
If expression = 1800 Then
t1.ForeColor = weiss
Elseif expression = 1828 Then
t1.ForeColor  = gruen 
Else 
  t1.ForeColor  = grau  
end_if
geht das nicht. Was mache ich hier falsch?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Farbe musst du direkt über das Listenfeld einstellen, also
Code:
Liste.BackColor = RGB(255, 0, 0)
Liste.ForeColor = RGB(0, 0, 0)

Den Eintrag den du mit ListeSelIndex(1) aktivierst, ist dann immer in der voreingestellten Farbe (vermutlich blau).

Bei der Farbe für die Selektion habe ich dir etwas falsches geschrieben. Denn diese lässt sich nur für eine Textliste und nicht für ein Listenfeld einstellen. Eine Textliste ist aber vermutlich nicht die Darstellung die du für das was du vorhast benötigst, weil dort immer nur ein einziger Eintrag sichtbar ist.
 
Zurück
Oben