WinCC - Variablen per Skript erstellen

Houns

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

Leider habe ich im Internet nichts aussagekräftiges gefunden, deshalb
eine kurze grundsätzliche Frage:

Kann man Variablen im Variablenhaushalt von WinCC per Skript erstellen/einfügen?

Egal ob mit einem Skript in WinCC oder "außerhalb" des Editors.

Hintergrund:
Sind beim Kunden Updates per Fernwartung durchzuführen, soll möglichst viel vorbereitet werden, damit der Zugriff auch bei langsamen Verbindungen nicht zu lange dauert.

Danke und Gruß,
Houns
 
Du kannst Variablen über CSV-Dateien importieren, dazu gibt es ein extra Programm im WinCC Programmverzeichnis "Tag Import/Export".

Bei neueren WinCC-Versionen bei denen der Variableneditor in Tabellenformat ist, kannst du auch per Copy&Paste aus einer Excel-Tabelle die Variablen in WinCC einfügen. Das funktioniert auch über Remoteverbindungen, wenn das Programm was du dafür nutzt die Zwischenablage überträgt.

Es gibt von Siemens auch ein Excel Plugin mit dem sich auf alle WinCC Datei zugreifen lässt, das muss aber auch dem gleichen Rechner wie WinCC laufen. Außerdem finde ich das Teil unpraktisch. Über VBA Skripte in WinCC kannst du auch Variablen anlegen, aber das ist sicher nicht das was du hier benötigst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein kleines Problem. Ich möchte mit Hilfe eines Skriptes dieses Beispiel machen

Dim farbe, meineVar
Select Case meineVar
Case 0: HmiRuntime.Screens("Bild_2").BackColor =RGB(255,0,0) 'rot
Case 1: HmiRuntime.Screens("Bild_2").BackColor =RGB(0,0,255) 'blau

End Select

und ich sehe in Runtime nur "rot"
wie kann ich auch "blau" sehen?
 
Du musst meines Wissens ein Objekt anlegen.
Das ist jetzt nicht die Lösung.Aber das Prinzip halt
1.)objekt erstellen
2.)HMI-Adresse zuweisen
3.)Eigenschaft lesen
4.)Eigenschaft schreiben.
5.)zurück auf HMIVariable.



ist irre umständlich.Ich weiss nicht ob das einfacher geht.Hab mir auch bald einen abgebrochen.
Das ganze geht müsste aber auch ohne Skript mit dieser Zuweisung von den Objekteigenschaften
gehen.

Sub Click(Byval Item)
Dim HelpSetBitinWord

'Hier Bit 3 setzen(andere Bits bleiben gesetzt)

Set HelpSetBitinWord=HMIRuntime.Tags("TestSchalter") //WinCC Variabenadresse -->Objektvariable
HelpSetBitinWord.Read //Wert lesen
HelpSetBitinWord.Value=HelpSetBitinWord.Value Or 2 //Bit 3 setzen.

HMIRuntime.Tags("TestSchalter").Write HelpSetBitinWord.Value//Ergebnis zurückschreiben
End Sub
 
Geht irgendwie über das Screenobjekt.
Du brauchst den aktuellen Bildnamen.Aber frag mich nicht wie.Welches Ereignis soll den die Änderung auslösen?

Du brauchst ja noch ein Variablenänderung die dann dieses Script aufruft.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Select Case meineVar
Case 0: HmiRuntime.Screens("Bild_2").BackColor =RGB(255,0,0) 'rot
Case 1: HmiRuntime.Screens("Bild_2").BackColor =RGB(0,0,255) 'blau

End Select

und ich sehe in Runtime nur "rot"
wie kann ich auch "blau" sehen?
- entweder das Skript wird garnicht aufgerufen
- oder Deine meineVar ist immer 0
- oder das "Bild_2" wird gerade nicht angezeigt. Es können nur Eigenschaften von Objekten des gerade angezeigten Bildes geändert werden
- oder die Runtime kennt nicht die Objektnamen und findet deshalb die Objekte nicht --> in den Geräteeinstellungen "Namensinformationen transferieren" aktivieren

Harald
 
Hallo,Dim farbe, meineVar
Code:
Select Case meineVar
    Case 0:
        HmiRuntime.Screens("Bild_2").BackColor =RGB(255,0,0) 'rot
    Case 1: 
        HmiRuntime.Screens("Bild_2").BackColor =RGB(0,0,255) 'blau
    End Select
und ich sehe in Runtime nur "rot"
Nun, sofern du nichts bei "meineVar" nichts anderes gescriptet hast ist das Verhalte klar da meineVar in
deinem Schnipsel nirgenst zuwiesen wird und immer 0 ist.

Hier ein Beispiel wie es funktioniert und wie man von WinCC-Flex-Skript auf HMI-Variablen zugreifen kann.
Das sollte alles dabei sein...
attachment.php


PS: Ich empfehle dir deinen CODE in die CodeTags zu setzen - [CODE] [/CODE]
Dann wird er deutlich lesbarer.

@freaky:
Du musst meines Wissens ein Objekt anlegen.
Das ist jetzt nicht die Lösung.Aber das Prinzip halt

1.)objekt erstellen
2.)HMI-Adresse zuweisen
3.)Eigenschaft lesen
4.)Eigenschaft schreiben.
5.)zurück auf HMIVariable.
Auch bei WinCC-Scada-VBS muss man nicht so umständlich arbeiten.
Code:
'Variante 1
        HMIRuntime.Tags("meineLokaleHMIVar").Write HMIRuntime.Tags("meineLokaleHMIVar").Read + 1

'Variante 2
      SmartTags("meineLokaleHMIVar") = SmartTags("meineLokaleHMIVar") + 1
'Das aber erst ab v7. SmartTags wurde eigentlich für den Zugriff auf Vars innerhalb von fpt-Faceplates eingeführt, funktioniert aber im normalen Gebrauch auf problemlos.

'Das mit dem Objekt ist optional und manchmal einfacher da das ganze HMIRuntime.Tag-Dingens ganz schön lang ist.
       Dim myTagObj
       Set myTagObj = HMIRuntime.Tags("meineLokaleHMIVar")
       myTagObj.Read
       myTagObj.Write  (myTagObj.Value * 2) / (myTagObj.Value / 4) * (myTagObj.Value + 5)
 

Anhänge

  • WinCCFlex_SkriptVarZugriff_Case_BackCol.png
    WinCCFlex_SkriptVarZugriff_Case_BackCol.png
    18,3 KB · Aufrufe: 98
Zuletzt bearbeitet:
Kann man auch dort wo "Bild 2" steht den aktuellen Screen reinschreiben?
Dann könnte man das Script immer gerade auf das geöffnete Bild wirken lassen.
Hast du das alles au der Beschreibung rausgefunden vom Flexible.

Bei WinCC bietet er die Funktionen nach dem Punkt an.Ist das hier nicht so?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man auch dort wo "Bild 2" steht den aktuellen Screen reinschreiben?
Bei WinCC bietet er die Funktionen nach dem Punkt an.Ist das hier nicht so?[/
"Ja" und "Doch,schon"
attachment.php


Hast du das alles au der Beschreibung rausgefunden vom Flexible.
Verschieden. Das meiste kommt von Google bzw. SPS-Forum und ein bisschen was aus der Doku zu WinCC-Flex.
https://support.industry.siemens.com/cs/ww/de/view/26150018
https://support.industry.siemens.com/cs/ww/de/view/13408815
 

Anhänge

  • WinCCFlex_SkriptSetBackCol_2.png
    WinCCFlex_SkriptSetBackCol_2.png
    4,5 KB · Aufrufe: 88
Die Beispiel oben erhöhen die Variable einfach um 1... Plus Eins... :cool:

Man muss auf die Variable in der Variablenliste gehen, dort kann man unter Eigenschaften/Ereignisse/Wertänderung ein Skript hinterlegen.
 
Nun, sofern du nichts bei "meineVar" nichts anderes gescriptet hast ist das Verhalte klar da meineVar in
deinem Schnipsel nirgenst zuwiesen wird und immer 0 ist.

Hier ein Beispiel wie es funktioniert und wie man von WinCC-Flex-Skript auf HMI-Variablen zugreifen kann.
Das sollte alles dabei sein...
attachment.php


PS: Ich empfehle dir deinen CODE in die CodeTags zu setzen - [CODE] [/CODE]
Dann wird er deutlich lesbarer.

@freaky:

Auch bei WinCC-Scada-VBS muss man nicht so umständlich arbeiten.
Code:
'Variante 1
        HMIRuntime.Tags("meineLokaleHMIVar").Write HMIRuntime.Tags("meineLokaleHMIVar").Read + 1

'Variante 2
      SmartTags("meineLokaleHMIVar") = SmartTags("meineLokaleHMIVar") + 1
'Das aber erst ab v7. SmartTags wurde eigentlich für den Zugriff auf Vars innerhalb von fpt-Faceplates eingeführt, funktioniert aber im normalen Gebrauch auf problemlos.

'Das mit dem Objekt ist optional und manchmal einfacher da das ganze HMIRuntime.Tag-Dingens ganz schön lang ist.
       Dim myTagObj
       Set myTagObj = HMIRuntime.Tags("meineLokaleHMIVar")
       myTagObj.Read
       myTagObj.Write  (myTagObj.Value * 2) / (myTagObj.Value / 4) * (myTagObj.Value + 5)

Wieso meineGlobaleHMIVar,_ZWEI und _DREI....?
ich habe nur ein Variable 'meineVar' als Bool. in der Variabletabella definiert.
 
hallo Varol

Ist nur ein Bsp.Du nimmst deine Variable.Er wollte nur zeigen was man alles machen kann.
Wenn du nur 2 Zustände hast brauchst du kein select, dann reicht doch if und else if!
Du wolltest doch nur zwischen 2 Farben auswählen?
 
Zurück
Oben