TIA Problem FOR Schleife TP700 / TIA V14

DeltaMikeAir

User des Jahres 2018; 2023
Beiträge
21.465
Reaktionspunkte
7.076
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich habe ein Problem mit einer For Schleife, welche ich in einem Skript in TIA V14 für ein TP700 geschrieben habe.

Im Endeffekt ist alles recht einfach,

Code:
DIM i

FOR i = 0 TO 63 STEP 1
     Smarttags("Zielvariable")(i) = (Smarttags("Quellvariable")(i) + 100)
End For

Nach dieser FOR Schleife frage ich die ERR.NUMBER <> 0 ab und es kommt immer wieder die "6" dabei heraus.

Laut der VBA Fehlerliste bedeutet "6" => "Überlauf".

Smarttags(Zielvariable) ist ein Array 0..63 OF INT ( in WinCC und in der SPS )
Quellvariable ebenso. Die Startadressen dieser beiden Variablen passen.

WinCC habe ich schon Gesamtübersetzt ( mehrfach ). Die Variablen in dem Skript stehen alle auf "Zyklisch fortlaufend" + "100ms".


Auch noch interessant ist, wenn ich die Schleife von 0 TO 63 auf 0 TO 56 runtersetze, kommt der Fehler nicht immer, aber er kommt noch.



Vielleicht hat noch jemand eine Idee.
 
Kann da mit "Überlauf" vielleicht auch "Überlauf Kommunikationsaufträge" oder "Kommunikationsüberlastung" gemeint sein?
Weil bei jedem Zugriff auf ein Array wird das gesamte Array gelesen/geschrieben.
Versuche mal das gesamte Quell-Array in ein Script-internes Array einzulesen (internArray = Smarttags("Quellvariable")), dann addiere in einer Schleife die jeweils 100 dazu, dann kopiere das interne Array auf das Ziel-Array.
Irgendwo hier im Forum waren da auch schon mehrmals Beiträge zu der Problematik von Arrays in Skripten und Kommunikationsüberlastung. Im Siemens Support gibt es auch mindestens einen Beitrag dazu. (ich habe jetzt leider keine Zeit zum Suchen)

PS: laß mal das "STEP 1" bei dem FOR... weg

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

Kann da mit "Überlauf" vielleicht auch "Überlauf Kommunikationsaufträge" oder "Kommunikationsüberlastung" gemeint sein?

schwer zu sagen. Der Err.Number gibt 6 aus, was laut VBA Fehlerliste "Überlauf" entspricht

Weil bei jedem Zugriff auf ein Array wird das gesamte Array gelesen/geschrieben.
Versuche mal das gesamte Quell-Array in ein Script-internes Array einzulesen (internArray = Smarttags("Quellvariable")), dann addiere in einer Schleife die jeweils 100 dazu, dann kopiere das interne Array auf das Ziel-Array.

Ja, dies habe ich zwischenzeitlich auch aus diversen Beiträgen rauslesen können. Ich werde versuchen, dass Array 1x einzulesen, zu verarbeiten und wieder raus schreiben.

PS: laß mal das "STEP 1" bei dem FOR... weg

Dass Step 1 habe ich erst während der Fehlersuche eingefügt. Mit oder ohne Step 1 ändert sich das Verhalten nicht, ich entferne es wieder.


Wenn ich das mit dem Zwischenarray umgesetzt und probiert habe, schreibe ich noch einmal.

Danke für deine Antwort.
 
Zurück
Oben