WinCC flexible 2008 PC-Runtime Varialblen sind im VB-Script nicht aktuell

Beiträge
45
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum

In einem VB-Script in einer PC-Runtime greife ich auf mehrere Variablen der Steuerung zu und generiere dann einen Ordner auf dem PC bestehend aus den Infos der Variablen.
sporadisch kommt es vor das hier noch versucht wird den gleichen Ordner erneut zu erstellen.

Das Script rufe ich mit Wertänderung einer Variable (Erfassung zyklisch fortlaufend) aus dem Programm auf. Im SPS Programm werden genau davor die Variablen (zyklisch bei Verwendung) beschrieben.
Dieses Variablen werden aber nur in dem Script verwendet.

Muss ich nun alle Variablen auf "zyklisch fortlaufend" stellen oder kann ich im Script die Variable aktualisieren bzw. eine Wartezeit einbauen?
Anbei das Script

Vielen Dank im vorraus.


'Ordner erstellen
Dim fso, f, Pfad, Ordner

Pfad = SmartTags("Komm_Daten\DB_Pfad_Name.Laufwerk_aktiv") & ":\"
Ordner = Pfad & SmartTags("Komm_Daten\DB_Pfad_Name.OrdnerName")

ShowSystemAlarm "Ordner: " & Ordner

' Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")

If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
Err.Clear
Exit Sub
End If

' Wenn Ordner nicht existiert,Ordner erstellen
'Set f = fso.CreateFolder (Ordner)
If Not fso.FolderExists(Ordner) Then
fso.CreateFolder (Ordner)

End If

If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description & Ordner
Err.Clear
Exit Sub
End If

Set fso = Nothing
Set f = Nothing

' Anforderung Skript ausführen wieder auf 0 schreiben
SetValue SmartTags("Komm_Daten\DB_Allgemein.HMI_Script_02"),0

' Ausgabe alles iO
ShowSystemAlarm "Ordner wurde erstellt: " & Ordner
Exit Sub
 
Versuch doch die Variablen in eine Rezeptur zu legen, diese Rezeptur kannst
aus dem Script überwacht laden, so hast du auch die Garantie das die Daten
Konsistent sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

die Variablen auf 'Zyklisch fortlaufend' zu stellen wird in den meisten Fällen ausreichen, um die beschriebenen Probleme zu lösen. Eine Gewähr für aktuelle Werte hat man nur, wenn man -z.B. wie rostiger Nagel beschrieben hat- die Variablen gezielt im Script aktualisiert. Seine Methode hat den Nachteil, dass man bei Änderungen am Variablen-Mengengerüst zusätzlich die Rezeptur mitpflegen muss, was mit dem Siemens-Rezepteditor (ob WinCC flex oder TIA) ein Graus ist. Im TIA-Portal gibt es mittlerweile eine Aktualisierungsart 'Auf Anforderung', diese habe ich aber noch nicht verwendet bzw. testen können.

Gruß, Fred
 
VBS-Codebeispiel für Variablen Lesen/Schreiben mit Fertigmeldung (GetDataRecordTagsFromPLC/SetDataRecordTagsToPLC)

Schau Dir auch mal diesen Thread an, besonders ab Beitrag #12, wo ein sicherer Export von Speicherbereichen aus der CPU in eine CSV-Datei beschrieben ist (ereignisgesteuert, kein Warten im Script).

Harald
 
Im TIA-Portal gibt es mittlerweile eine Aktualisierungsart 'Auf Anforderung', diese habe ich aber noch nicht verwendet bzw. testen können.
'Auf Anforderung' gibt es auch schon in WinCCflex, das löst aber das Problem nicht, da die zugehörige Systemfunktion "AktualisiereVariable" nicht in Skripten verwendet werden kann (und es außerdem nicht direkt eine Fertigmeldung gibt).

die Variablen auf 'Zyklisch fortlaufend' zu stellen wird in den meisten Fällen ausreichen, um die beschriebenen Probleme zu lösen.
Wir sind Automatisierer, wir müssen Programme schreiben, die immer sicher funktionieren und nicht nur "meistens". Da darf uns der Aufwand für Nachführung von Rezepturen nicht von abhalten.

Eine Gewähr für aktuelle Werte hat man nur, wenn man -z.B. wie rostiger Nagel beschrieben hat- die Variablen gezielt im Script aktualisiert. Seine Methode hat den Nachteil, dass man bei Änderungen am Variablen-Mengengerüst zusätzlich die Rezeptur mitpflegen muss, was mit dem Siemens-Rezepteditor (ob WinCC flex oder TIA) ein Graus ist.
Den Aufwand in WinCC flexible finde ich nicht so grausig - man muß doch lediglich die verwendeten Variablen in eine Liste der Rezepturelemente eintragen.
(TIA kenne ich nicht)

Nur mit Rezepturen (Datensatzvariablen) oder aufwendig selbstprogrammierten Handshakes bekommt man kontrolliert Variablen aus/in eine CPU gelesen/geschrieben. Arbeiten mit den in WinCCflex verfügbaren Variablen-Erfassungszyklen ergibt mehr oder weniger zufällige Ergebnisse.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

ich stütze meine Aussage über den Rezepteditor auf Erfahrungen mit Rezepten > 150 Variablen, solche -und dann gleich mehrere in einem Projekt!- müsste ich nämlich dann verwenden. Und das Einfügen/Sortieren von Variablen war damals und ist noch heute (TIA) für jede Variable EINZELN durchzuführen, es existieren kaum (besser: keine) Hilfsfunktionen wie z.B. Alphab. Sortierung o.ä., von der meiner Meinung nach sinnfreien Vorbesetzung der Rezeptelementnamen und der dadurch aufgeblähten Projekttextliste ganz zu schweigen.

Gruß, Fred
 
Hallo zusammen

Danke für die Rückmeldungen.

ich habe mich erstmal gegen die Variante entschieden eine Rezeptur anzulegen.
Das Script habe ich etwas angepasst, wobei die Variable der SPS gar nicht im Script zusammen gebaut wird sondern nur der Ordner.
Also müsste die Variable aktuell sein. Erfassung steht nun auch auf zyklisch.

Code:
'Ordner erstellen
Dim fso, f, Pfad, Ordner, Name

Pfad = SmartTags("Komm_Daten\DB_Pfad_Name.Laufwerk_aktiv")
Name = SmartTags("Komm_Daten\DB_Pfad_Name.OrdnerName") 

Ordner = Pfad &  ":\" & Name
Nun schreibe ich erst die Variablen in der SPS und nach 300ms wird das Script angestossen. Dann sollten die Werte im HMI aktuell sein.
Das Problem ist das die Anlage bereits beim Kunden steht (nicht um die Ecke) und ich nur eine schlechte Fernwartungsmöglichkeit habe.
Daher die Variante der Problemlösung. Wenn da was schief geht kann ich da hin........:sad:

Die ersten Versuche beim Kunden haben funktioniert. Wir werden mal abwarten wie es sich in der nächsten Woche verhält ob der Fehler noch wieder auftritt.

Schönes Wochenende
 
Ein bisschen OT, aber dennoch...

Ich sehe bei den meisten Scriptbeispielen hier im Forum und auch sonst, dass dort der Ausdruck 'Smarttags("<Variablenname>")' verwendet wird, wenn globale Variablen im Spiel sind. Bei Namen, die z.B. in Schleifen dynamisch zusammengesetzt werden, kann ich das auch nachvollziehen und mache dies ebenso. Ansonsten verzichte ich auf diese Kapselung (sofern keine Punkte im Variablennamen enthalten sind, diese ersetze ich aber schon von Anfang an durch Unterstriche). Gibt es eigentlich Nachteile durch diesen Verzicht?

Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man Variablen aus Variablen-Ordnern verwendet, dann geht das m.W. nur via Smarttags(...)
Warum dann einen Unterschied machen, wenn es ausnahmsweise mal auch ohne ginge?

Harald
 
@Faust:
Das war beim guten alten Protool auch schon so. Hintergrund dabei war, dass PT wie auch Flex heute, die "PTVars" bzw. "SmartTags" identifizieren konnte.
Bahandelt worden sind sie bzw. werden sie dadurch nicht anders was den Zugriff anbelangt ...

@TE:
Es ist alles gut, solange wie alles nach Wunsch funktioniert.
Nach meiner Erfahrung kannst du allerdings auf diese Weise niemals eine wirkliche Variablen-Konsistenz sicherstellen - das heißt : es wird immer wieder vorkommen, dass du in einer Reihe von korrekten Werten einen "uralten" Vorgängerwert mit drin haben wirst (oder sogar mehrere).

Gruß
Larry
 
Ich sehe bei den meisten Scriptbeispielen hier im Forum und auch sonst, dass dort der Ausdruck 'Smarttags("<Variablenname>")' verwendet wird, wenn globale Variablen im Spiel sind.
WinCC flexible Hilfe
WinCC flexible Hilfe - Zugriff auf Variablen schrieb:
Im Skript haben Sie Zugriff auf externe und interne Variablen, die Sie im Projekt angelegt haben.
[...]
Wenn der Variablenname im Projekt den VBS-Namenskonventionen entspricht, können Sie die Variable im Skript direkt verwenden
[...]
Wenn der Variablenname im Projekt nicht den VBS-Namenskonventionen entspricht, dann müssen Sie die Variable über die "SmartTags-Auflistung referenzieren.

Harald
 
Zurück
Oben