TIA Elemente eines Array addieren

Lowe21X

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich arbeite mit TIA V17, meine CPU ist eine CPU 1516-3 PN/DP. Mit SCL hab ich eine Funktion erstellt, welche Elemente eines Arrays summiert. Das Array geht von 1 bis 99 und es hat den Typ Real. Bei jeder Messung wird ein Wert eingetragen bspw in Array[1], der nächste wird nach Array[2] geschrieben usw. Am Ende soll alles addiert werden und auf dem HMI ausgegeben werden. Mein Code tut was er soll, ich hab nur eine Verständnisfrage. Warum sind die ersten zwei Zeilen notwendig? Meine Schleife durchläuft doch den Bereich 1 bis 99 und dann wieder von vorne. Hier ist der Code.

Array .. of Real
Result Real
Count Int
Sum Real

#Sum := 0;
#Count := 0:
For #Count := 1 To 99 Do
#Sum := #Sum+ Array[#Count];
;
END_FOR;
#Result := #Sum;
 
Zuletzt bearbeitet:
#Count := 0; ist unnötig, das kannst Du gefahrlos weglöschen, weil sofort danach bei Beginn der Schleife der Wert auf 1 geschrieben wird.

#Sum := 0; muß man machen, damit nicht im nächsten Zyklus mit dem Wert vom vorherigen Zyklus oder mit einem undefinierten Anfangswert weitergerechnet wird. Falls #Sum in TEMP deklariert ist, dann wird bei S7-1x00 der Wert automatisch auf 0 initialisiert für diejenigen SPS-Programmierer, die keine Ahnung von den speziellen Eigenschaften von TEMP und Static und ... haben oder sich keinen Kopf darum machen. Sicherheitshalber sollte man aber immer selber die Initialisierung auf 0 direkt vor der Verwendung in der Schleife machen, dann ist nämlich egal wo man das Codestück einfügt und wo #Sum deklariert ist und was vorher mit #Sum angestellt wurde.

#Sum := + Array[#Count]; ist syntaktisch falsch. Das muß #Sum := #Sum + Array[#Count]; oder #Sum += Array[#Count]; heißen.

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Auszug aus dem Programmierleitfaden für S7-1200/S7-1500:

Hinweis
Optimierte Bausteine: Temporäre Variablen werden in jedem Aufruf des
Bausteins mit dem „Defaultwert“ initialisiert (S7-1500 / S7-1200 ab Firmware V4).
Nicht optimierte Bausteine: Temporäre Variablen sind bei jedem Aufruf des
Bausteins undefiniert.
 
Die Temp-Variablen werden nur initialisiert wenn optimierter Bausteinzugriff aktiv ist.
Siehste. Dieses total unnötige initialisieren von TEMP-Variablen "für Dummies" wird auch noch nur unter ganz bestimmten besonderen Bedingungen gemacht.
Weil die allermeisten "internationalen" Steuerungen solchen Quatsch Service nicht machen, ist es viel leichter sich zu merken: bei TEMP-Variablen generell vor Lesezugriffen erst was hineinschreiben, anstatt sich die paar Siemens-Ausnahmen zu merken, wo das eventuell nicht nötig wäre.

Harald
 
Zurück
Oben