# Textfeld mit VB-Skript bearbeiten



## Earny (18 Juli 2008)

Hallo,
da bin ich schon wieder - mit meinem nächsten Problem.
Ich will über VB-Skript den Textinhalt eines Textfeldes verändern.
Dazu habe ich folgenden VB-Code geschrieben:

Dim objTextfeld
Set objTextfeld=HmiRuntime.Screens("Bild1").ScreenItems("Textfeld_3")
If SmartTags("G115")=True Then
objTextfeld.Text="Kugelhahn ist geschlossen."
End If
If SmartTags("G116")=True Then
objTextfeld.Text="Kugelhahn ist geöffnet."
End If

Ich weiß nicht, ob der Code stimmt, er wird nämlich nicht bearbeitet. Wie erreiche ich es , dass der Programmcode z.B. alle 100 ms einmal ausgeführt wird. 
Bemerkung: Bei VB2005 würde man den Code in einen Timer legen und den Timer auf z.B. 100 ms einstellen.

Gruß
Earny


----------



## johnij (18 Juli 2008)

Hey,
es muss eigentlich funktionieren
Ich habe einen verdacht:
versuch die temporäre Dateien zu löschen , das ganze projekt zu generieren.

johnij


----------



## JesperMP (18 Juli 2008)

Die ganze Idee ist dumm.
Verwende doch einen Symbolisches ausgabe feld mit ein Text-Liste und fertig damit.

Ich verstehe nicht, warum so viele Leute wollen alles mit Skripte machen. Skripte sind großartig, aber sollte sparsam verwendet werden


----------



## johnij (18 Juli 2008)

JesperMP schrieb:


> Die ganze Idee ist dumm.
> Verwende doch einen Symbolisches ausgabe feld mit ein Text-Liste und fertig damit.
> 
> Ich verstehe nicht, warum so viele Leute wollen alles mit Skripte machen. Skripte sind großartig, aber sollte sparsam verwendet werden


 
Dumm ist es, wenn man nix mit Skripting anfangen kann.

Es ist ja klar, dass Skripte die Leistung vom Panel_Prozessor beeinflussen , wenn sie ständig aufgerufen sind (only One Task is runing).
Manchmal kommt man aber nicht drum herum--> Skripte

johnij


----------



## Larry Laffer (18 Juli 2008)

Ich sehe das so wie Jesper (und der weiß wovon er redet ...).
Ich würde an dieser Stelle auch ähnlich vorgehen. Scripte sollte man dort einsetzen, wo man mit den Standard-Funktionen nicht mehr klarkommt.

@Johnij:
Deshalb hast du natürlich trotzdem Recht mit :


> Dumm ist es, wenn man nix mit Skripting anfangen kann.


 
Gruß
LL


----------



## repök (18 Juli 2008)

Also ich würde sowas an eine Variable (oder auch an zwei) hängen und dann bei Änderung ausführen. 
Und was das skripten ansich angeht sehe ich das wie Jesper. Wohl dosiert kann man was damit anfangen.


----------



## Earny (18 Juli 2008)

Hallo,
ich habe mein Problem gelöst. Der Programmcode war richtig.
Mir war nur nicht klar, wie ein Code zyklisch aufgerufen wird. 
Ich habe in der Zwischenzeit erfahren, dass in WinCC flexible die von VB6.0 und VB2005 altbekannten und altbewährten Timer nicht zur Verfügung stehen. Deshalb kommt hier nur eine Event-Abfrage in Frage.
Ich habe die Erfassungsart der beiden Variablen auf "Zyklisch fortlaufend" gestellt. Außerdem muss noch bei "Erfassung" - "Wertänderung" der Skript aufgerufen werden.
Das klappt jetzt. Allerdings ist die Logik falsch. Die habe ich jetzt richtig gestellt. Wenn ein Kugelhahn zwei Endschalter hat, so müssen nämlich vier Fälle unterschieden werden!

Ich habe meinen Programmcode erweitert:

Dim objTextfeld
Set objTextfeld=HmiRuntime.Screens("Bild1").ScreenItems("Textfeld_3")
If SmartTags("G115")=True And SmartTags("G116")=False Then
objTextfeld.Text="Kugelhahn ist geschlossen."
ElseIf
SmartTags("G115")=False And SmartTags("G116")=True Then
objTextfeld.Text="Kugelhahn ist geöffnet."
ElseIf
SmartTags("G115")=False And SmartTags("G116")=False Then
objTextfeld.Text=""
ElseIf
SmartTags("G115")=True And SmartTags("G116")=True Then
objTextfeld.Text="Endschalter defekt?"
End If

Womit ich schon beim nächsten Problem angekommen bin:
Der obenstehende Programmcode wird nicht kompiliert, weil er einen Fehler enthält. Der Flex-Kompiler sagt lediglich, dass der Skript einen Fehler enthält, zeigt aber nicht die Stelle.

Ich möchte mich auch für die von JesperMP vorgeschlagene Lösung bedanken. Ich werde das mal testen. 

Zum VB-Skript: Gibt es ein Buch oder pdf-Dokument, dass den Einsatz von VB-Skript unter WinCC flexible anhand von Beispielen zeigt. Das darf auch was kosten.
Ich meine nicht die Standardwerke zu VB6.0 oder VB.Net. Davon habe ich schon genug.

Noch was: Ich habe schon öfters Fragen in diesem Forum eingestellt und häufig geholfen bekommen. Ich habe mich eigentlich immer dafür bedankt, aber offensichtlich nicht richtig. Neben meinem Alias "Earny" steht bei: ... bedankt: 0
Frage: Wie bedankt man sich richtig?

Gruß
Earny


----------



## OHGN (18 Juli 2008)

Earny schrieb:


> .......
> Frage: Wie bedankt man sich richtig?
> 
> Gruß
> Earny


guggst Du hier...


----------



## Ralle (18 Juli 2008)

johnij schrieb:


> Dumm ist es, wenn man nix mit Skripting anfangen kann.



Im Zusammenhang mit der eigentlichen Frage gebührt dir heute die Krone.
Für den *"Dümmstem Spruch des Tages"*.
*ROFL*


----------



## Earny (18 Juli 2008)

Hallo,
ich habe meinen Fehler gefunden. Die Syntax der ElseIf-Zweige war falsch. Man darf nach ElseIf nicht die Enter-Taste drücken.
Der Code lautet richtig:

Dim objTextfeld
Set objTextfeld=HmiRuntime.Screens("Bild1").ScreenItems("Textfeld_3")
If SmartTags("G115")=True And SmartTags("G116")=False Then
objTextfeld.Text="Kugelhahn ist geschlossen."
ElseIf SmartTags("G115")=False And SmartTags("G116")=True Then
objTextfeld.Text="Kugelhahn ist geöffnet."
ElseIf SmartTags("G115")=False And SmartTags("G116")=False Then
objTextfeld.Text=""
ElseIf SmartTags("G115")=True And SmartTags("G116")=True Then
objTextfeld.Text="Endschalter defekt?"
End If 

Das funktioniert.

Gruß
Earny


----------

