TIA Arrayvariable im Skript schreiben

PENT89

Level-2
Beiträge
56
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

hab mal ne kurze Frage an die Skript experten unter euch.

Ich möchte Werte aus meiner Steuerung (1214C) über meine PC HMI in Excel sheet schreiben.

.Cells(4, 2).value = SmartTags("Tageswerte.Stunde[0].Aussentemperatur")
.Cells(5, 2).value = SmartTags("Tageswerte.Stunde[1].Aussentemperatur")
.Cells(6, 2).value = SmartTags("Tageswerte.Stunde[2].Aussentemperatur")
.Cells(7, 2).value = SmartTags("Tageswerte.Stunde[3].Aussentemperatur")

Wenn ich es so schreibe funktioniert das einwandfrei. Wenn ich dies aber in einer For schleife Packe bekomme ich nur "Null" werte angezeigt.

For i = 0 To 3

.Cells(i+3, 2).value = SmartTags("Tageswerte.Stunde["&i&"].Aussentemperatur")


next

Ich habe auch schon probiert die Daten aus dem Excel sheet in das Array zu schrieben. Das funktioniert!!!

Ich habe das Gefühl das die Varible nicht sauber initialisiert wird.

Habt ihr ne Idee wie ich das hinbekomme?

Danke und Gruß
 
wie und wann wird denn dein Array aktualisiert ?
und ... wann läuft dein Script ?

Der Hintergrund ist, dass du die Aktualisierung der Variablen sehr wahrscheinlich auf "zyklisch fortlaufend" stellen mußt. Dessen ungeachtet kann es dir dennoch passieren, das der Inhalt der gespeicherter Variable nicht mit dem Wert des Zeitpunktes übereinstimmt - du kannst die Aktualisierung auf diese Weise nicht kontrollieren ...

Gruß
Larry
 
In der Steuerung wird jedes Arrayfeld nur einmal am Tag beschrieben. Also ist die Aktualisierung nicht so wichtig. Meine Variablen stehen momentan noch auf "Zyklisch im Betrieb", dass kann ich nochmal umstellen auf "zyklisch fortlaufend"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du bastelst den Name einer HMI-Variable zusammen, dadurch weiß die WinCC Runtime nichts von deren Verwendung und aktualisiert den Wert nicht.
Beim Durchlauf des Skriptes wartet das Skript nicht auf die Aktualisierung, sondern stellt die Lesezugriffe und Schreibzugriffe in den Aktualisierungs-Auftragspuffer und aktualisiert irgendwann später. Für Lesezugriffe ist das allerdings zu spät - das Skript hat bereits den "Null"-Wert verwendet, bei Schreibzugriffen fällt es Dir nicht auf, daß die Werte erst einige Millisekunden später in die HMI-Variablen geschrieben wurden.

Harald
 
Du musst bei TIA das Pendant zu dem finden :
Damit das natürlich funktionieren kann muss in den Grundeinstellungen "Runtime-Einstellungen\Allgemein" noch "Namen laden" eingestellt/aktiviert sein.
Ansonsten kann die Visu sich die Variablen-Namen gar nicht zusammen-basteln ...
Der zitierte Beitrag von mir bezog sich auf WinCCFlexibel - die Grund-Thematik an sich hat sich aber nicht geändert (nur der Platz, an dem sich die Checkbox bedindet).
Außerdem natürlich noch die Sache mit der Aktualisierung, die ich schon erwähnt habe ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, und was kann ich dagegen tun?
- die Aktualisierung der Variablen auf "zyklisch fortlaufend" stellen - die "dümmste" Variante, wenn der Wert nur einmal am Tag gebraucht wird
- oder das Skript bzw. das Variablenlesen zweimal aufrufen mit dem Abstand von einigen Sekunden, beim ersten Mal wird dadurch das Einlesen angestoßen und beim zweiten Mal sind (sehr wahrscheinlich aber nicht sicher!) die Variablenwerte aktualisiert und können übernommen/gespeichert werden
- oder die sichere Variante: die Variablen mit Handshake/Fertigmeldung lesen, z.B. alle Variablen in eine Rezeptur packen und die Rezeptur lesen mit GetDataRecordTagsFromPLC

Mehr zum Thema: benutze die Forumsuche mit dem Suchbegriff "GetDataRecordTagsFromPLC"

Harald
 
Es gibt keinen Befehl der abfragt ob die Variable geladen wurde?
Nein. gibt es nicht bei WinCC adv.

Man könnte der Variable einen vom aktuellen Wert abweichenden Wert zuweisen und warten bis der Wert sich ändert - da wurde der Wert aus der SPS gelesen (möglicherweise: oder konnte nicht in die SPS geschrieben werden und wurde wieder auf den Wert von vorher gesetzt? z.B. bei Verbindung abgebaut - da bin ich aber nicht sicher)

Harald
 
Ich hab das jezt mal ausprobiert. Wenn ich die Variablen auf "Zyklisch fortlaufend" stelle funktioniert das.

Euch allen vielen Dank für die Unterstüzung.
 
Ich hab das jezt mal ausprobiert. Wenn ich die Variablen auf "Zyklisch fortlaufend" stelle funktioniert das.
scheinbar, einmal

So klingt Deine Lösung aber wenigstens modern nach "Big Data" - ständig megabyteweise Daten kommunizieren, weil einmal am Tag 100 Byte davon benötigt werden ...

Erwartet Dein Kunde eine Lösung, die bei gelegentlichen Vorführungen funktionert, oder erwartet er daß die Lösung immer sicher funktioniert? ;)

Auch mit "zyklisch fortlaufend" kann es passieren, daß falsche Werte in das Excel geschrieben werden. Wann ändern sich die Daten, wann kommt der Übernahme-Trigger, wieviel Zeit ist dazwischen?
Wenn die SPS einen neuen Datensatz zur Verfügung stellt und ziemlich zeitgleich das Übernahme-Triggerbit setzt, dann kann es passieren, daß das HMI zuerst die Änderung des Triggerbits mitbekommt bevor die Datenwerte aktualisiert wurden, und es werden alte Werte in Excel geschrieben.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
scheinbar, einmal

So klingt Deine Lösung aber wenigstens modern nach "Big Data" - ständig megabyteweise Daten kommunizieren, weil einmal am Tag 100 Byte davon benötigt werden ...

Erwartet Dein Kunde eine Lösung, die bei gelegentlichen Vorführungen funktionert, oder erwartet er daß die Lösung immer sicher funktioniert? ;)

Auch mit "zyklisch fortlaufend" kann es passieren, daß falsche Werte in das Excel geschrieben werden. Wann ändern sich die Daten, wann kommt der Übernahme-Trigger, wieviel Zeit ist dazwischen?
Wenn die SPS einen neuen Datensatz zur Verfügung stellt und ziemlich zeitgleich das Übernahme-Triggerbit setzt, dann kann es passieren, daß das HMI zuerst die Änderung des Triggerbits mitbekommt bevor die Datenwerte aktualisiert wurden, und es werden alte Werte in Excel geschrieben.

Harald

Ja, das ist ein bisschen Big Data...:wink:. Der Kunde ist an der Stelle ziemlich Pflegeleicht. Das ist für mich Privat.

Beim Kunden würde ich auch andere Wege gehen. Da habe ich dann aber auch andere Möglichkeiten.

Gruß Jens
 
Zurück
Oben