VBScript

kuti

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

ich möchte gerne in einem VBScript Zugriff auf eine Merker/Eingang/Ausgang in der Symboltabelle haben. Wenn dieser true wird, soll ein Rechteck grün werden, ist er null, soll dieses Rechteck rot sein. Ja, das kann man auch ohne VBScript machen, nur geht es mir hauptsächlich vom Script auf den Merker zugreifen zu können. Ist das möglich?

Gruß
 
Du projektierst die SPS (300, 400, 1200, 1500?) mit TIA und das HMI mit WinCCflex?

andersrum konnte man irgendwie die Symbolik aus Step7 nach TIA bringen...

aber von TIA -> WinCCflex, hmm. Naja vielleicht weiss noch jemand anderes Rat.

Gruß.
 
Ja, das kann man auch ohne VBScript machen, nur geht es mir hauptsächlich vom Script auf den Merker zugreifen zu können. Ist das möglich?

Ja ... das ist möglich.
Du mußt hier nur beachten, dass dein Script nicht einfach so im Hintergrund läuft - du mußt es irgendwie antriggern um es zum Laufen zu bekommen.
Hierzu kannst du z.B. einen Button hernehmen, aber auch die Wertänderung einer Variablen - auch die deiner Merkers. Dieser muß dann nur "zyklisch fortlaufend" aktualisiert werden ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich möchte gerne in einem VBScript Zugriff auf eine Merker/Eingang/Ausgang in der Symboltabelle haben.
[...] nur geht es mir hauptsächlich vom Script auf den Merker zugreifen zu können. Ist das möglich?
Meinst Du das VBScript im WinCC flexible Projekt?
Das kann nur auf vorher im Projekt angelegte Variablen als "SmartTags" zugreifen. Erhält dann aber nur den irgendwann mal zuletzt aus der SPS gelesenen Wert der Variable. Oder auf Rezeptur-Variablen zugreifen: da kann das Skript das Lesen der Variable auslösen und drauf warten, ist aber nicht zu empfehlen (Stichwort: GetDataRecordTagsFromPLC). WinCC flexible RT führt immer nur 1 Skript "gleichzeitig" aus, solange ein Skript läuft werden keine weiteren Skripte ausgeführt. Es gibt eine kleine Warteschlange für Skripte, doch die läuft bei derartiger Programmierung sehr schnell über.

Wenn dieser true wird, soll ein Rechteck grün werden, ist er null, soll dieses Rechteck rot sein. Ja, das kann man auch ohne VBScript machen,
Wie Du schon selbst angemerkt hast kann man das auch ohne Skript machen. Per Skript sollte man wirklich nur Sachen machen, die anders gar nicht möglich sind. Das schnöde bunt-Färben von Objekten abhängig von externen Variablen gehört nicht dazu. Dafür projektiert man einfach eine Animation > Gestaltung an das Objekt und gut ist's.

Ein Skript kann Objekte animieren, entweder indem es den Wert einer an die Objekt-Animation angebundenen Variable verändert oder indem es direkt die Objekt-Eigenschaften verändert (Stichworte: HmiRuntime Objekte, ScreenItems).

VBS Beispiele
Code:
' auf Variablen zugreifen
If SmartTags("Variable_1") = True Then
    SmartTags("Variable_2") = 1
Else
    SmartTags("Variable_2") = 0
End If

' auf Bildobjekt zugreifen
Set objekt = HmiRuntime.Screens("Bild_1").ScreenItems("Rechteck_1")
If csv_Export_war_erfolgreich Then
    objekt.BackColor = RGB (102, 255, 153) 'hellgrün
Else
    objekt.BackColor = RGB (255, 124, 128) 'hellrot
End If

Harald
 
@Harald
If SmartTags("m20.0") = False Then
SmartTags("M20.2") = True
Else SmartTags("M20.2") = False

End If

Das ist bei mir ein Netzwerk im SPS-Programm. Wenn der M20.0 False ist, soll M20.2 true werden. Im WinCC flex habe ich eine Schaltfläche, wo das zugehörende Skript gestartet wird. Leider wird M20.2 nicht true.
 
Komisch. Habe in WinCC ein Rechteck eingefügt und eine Sichtbarkeit angelegt. Dort sieht man, dass sich das Bit M20.2 ändert, also das Rechteck sichtbar wird, wenn Bit Null ist, jedoch sieht man das im SPS-programm nicht. Ich habe gesagt, das Rechteck soll sichtbar sein, wenn M20.2 false ist. Er wird sichtbar und dann wieder unsichtbar. Na auf jeden Fall tut sich was. Nach einer kurzen Änderung geht er wieder in seinen Anfangszustand zurück. Hat das etwas mit dem Zyklus zu tun?
Kurz gesagt: er macht 1 sekunde was im Script steht, dann geht er auf seine Anfangslage zurück. Warum macht er das, warum bleibt er nicht in diesem Zustand?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Deine letzten beiden Beiträge.. irgendwie schaffe ich es nicht, zu verstehen, was Du denn da gemacht hast.. :confused:
If SmartTags("m20.0") = False Then
SmartTags("M20.2") = True
Else SmartTags("M20.2") = False

End If

Das ist bei mir ein Netzwerk im SPS-Programm.
:confused: Deine SPS wird mit VBS programmiert???
Ich glaube eher das ist Dein Skript was Du in WinCCflex geschrieben hast?
Weißt Du, daß die Skripte in der WinCCflex Runtime auf dem PC ausgeführt werden und NICHT in der SPS?
Und eigentlich schreibt man das so, dann ist es gleich viel verständlicher:
Code:
SmartTags("M20.2") = Not SmartTags("m20.0")

Wenn der M20.0 False ist, soll M20.2 true werden. Im WinCC flex habe ich eine Schaltfläche, wo das zugehörende Skript gestartet wird. Leider wird M20.2 nicht true.
Vielleicht weil die Variable SmartTags("m20.0") nie False sondern dauernd True ist?

Habe in WinCC ein Rechteck eingefügt und eine Sichtbarkeit angelegt. Dort sieht man, dass sich das Bit M20.2 ändert, also das Rechteck sichtbar wird, wenn Bit Null ist, jedoch sieht man das im SPS-programm nicht. Ich habe gesagt, das Rechteck soll sichtbar sein, wenn M20.2 false ist. Er wird sichtbar und dann wieder unsichtbar. Na auf jeden Fall tut sich was. Nach einer kurzen Änderung geht er wieder in seinen Anfangszustand zurück. Hat das etwas mit dem Zyklus zu tun?
Kurz gesagt: er macht 1 sekunde was im Script steht, dann geht er auf seine Anfangslage zurück. Warum macht er das, warum bleibt er nicht in diesem Zustand?
WANN wird das Rechteck sichtbar? Periodisch wechselnd oder einmalig nach einem Klick in der Runtime? Nach Aufruf des Skriptes? Mir scheint, Dein Klick ruft das Skript auf, dieses weist der Variable "M20.2" den Wert False zu - das Rechteck wird sichtbar - die RT schreibt den Wert in die SPS, wo die SPS-Variable aber dauernd auf True geschrieben wird - die RT liest die Variable und das Rechteck wird wieder unsichtbar... oder das Skript wird noch einmal aufgerufen und weist der Variable "M20.2" wieder True zu???

Das ist aber pure Spekulation, ich kann aus Deinen Angaben leider nicht entnehmen, was Du tatsächlich programmiert hast..
Schreib mal etwas ausführlicher.

Was soll Dein Skript eigentlich tun? Den M20.2 invertieren (togglen)?
Wann wird das Skript ausgeführt? Bei Klick auf eine Schaltfläche oder auch bei Wertänderung einer Variable?
Was hat es mit dem M20.0 auf sich - ist das ein Tippfehler? Oder warum machst Du diese Zuweisung in einem Skript und nicht in dem SPS-Programm?
Dein SmartTags("m20.0") ist eine Variable in WinCCflex, die mit der SPS-Adresse M20.0 verbunden ist?
Dein SmartTags("M20.2") ist eine Variable in WinCCflex, die mit der SPS-Adresse M20.2 verbunden ist?
Was passiert mit M20.0 und M20.2 in der SPS? Werden die da irgendwie beschrieben?
Wird die Variable "m20.0" irgendwo auf dem Bild verwendet wo Du die Schaltfläche zum Aufruf des Skriptes hast? Der Wert von Variablen wird von WinCCflex nur aktualisiert, wenn die Variable verwendet wird oder wenn sie auf "fortlaufend lesen" eingestellt ist.
Besteht überhaupt eine Verbindung der WinCCflex Runtime zur SPS?
Was hast Du für eine SPS?

Warum willst Du Skripte benutzen - gibt es eine reale Notwendigkeit dafür? Welche?

Harald
 
1. Mein Skript soll ausgeführt werden, wenn ich eine Schaltfläche betätige.
2. Ich habe diese Zuweisung im Skript gemacht, weil ich dieses Bit im SPS-Programm ändern möchte. Darf man das nicht? So wie ich bei einer normalen Schaltfläche eine Bit im SPS-Programm ändern möchte, so möchte ich das auf diesem Wege machen, einfach aus Übungszwecken.
3. "Dein SmartTags("m20.0") ist eine Variable in WinCCflex, die mit der SPS-Adresse M20.0 verbunden ist?" Ja, genau.
4. "Was passiert mit M20.0 und M20.2 in der SPS? Werden die da irgendwie beschrieben?" Nein, werden sie nicht. Ist nur ein FC mit diesem Netzwerk.
5. Ich arbeite mit dem PLCSIM.
6. Warum ich Skripte schreiben möchte, dient einfach Übungzwecken und weil ich das später mal bestimmt brauchen werde. Nur leider gibt es im Internet so wenig Literatur. Gibt es noch irgendwelche Übungen?

Gruß
 
2. Ich habe diese Zuweisung im Skript gemacht, weil ich dieses Bit im SPS-Programm ändern möchte. Darf man das nicht? So wie ich bei einer normalen Schaltfläche eine Bit im SPS-Programm ändern möchte, so möchte ich das auf diesem Wege machen, einfach aus Übungszwecken.
Warum machst Du das Skript dann verkomplizierend vom Zustand einer weiteren Variable abhängig? Du hast offensichtlich zu viele Einflußfaktoren auf Deinen Code und findest dadurch nicht, warum Dein Programm so eigenartig funktioniert.
Mache doch erstmal einfach nur ein Togglen der Variable und siehe wie Dein Rechteck dann sauber sichtbar und unsichtbar wird:
Code:
SmartTags("M20.2") = Not SmartTags("M20.2")

4. "Was passiert mit M20.0 und M20.2 in der SPS? Werden die da irgendwie beschrieben?" Nein, werden sie nicht. Ist nur ein FC mit diesem Netzwerk.
Und mit welchem Programmcode in "diesem Netzwerk"???
Laß Dir doch bitte nicht jede möglicherweise wichtige Einzelheit aus der Nase ziehen...;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt eine andere Frage: Ich habe einen Bildbaustein mit einem Rechteck erstellt. Für den Bildbaustein habe ich als Eigenschaft "Zustand" hinzugefügt. Wenn der Zustand 0 ist soll das Rechteck rot werden, wenn 1 dann grün. Mein "Zustand" ist eine boolesche Variable. Nun habe ich beim Rechteck, also unter "enthaltene Objekte", unter Gestaltung "Color". Meine Variable Zustand kann ich leider nicht mit diesem Color verbinden. Gibt es vielleicht einen anderen Weg?

Gruß
 
Zurück
Oben