Arrays in einer SPS

Arrays in einer SPS

Auf den Begriff Array in einer SPS wirst du mit Sicherheit früher oder später stoßen und in dieser SPS Lektion zeige ich dir wie Arrays funktionieren und wie sie in einem SPS Programm verwendet werden können.
 
 
 

Was ist ein Array?

Ein Array oder auf Deutsch Feld oder Ansammlung sind nur folgen von Werten eines bestimmten Datentyps.

Stell dir Beispielsweise eine einzige Schublade als Variable vom Datentyp INT vor.
Ein Array vom Datentyp INT wäre dann ein Schränkchen mit diesen Schubladen.
Wichtig zu wissen ist das in einem INT Array auch nur INT Werte hinein passen.
Array Beispiel

Aber was soll das den jetzt bedeuten?



Damit du das gut nachvollziehen kannst Wechsel ich direkt in das TIA Portal und erstelle einen globalen Datenbaustein und wir programmieren gemeinsam ein kleines Beispiel.
In diesen Datenbaustein soll zu jeder vollen Stunde die aktuelle Außentemperatur gespeichert werden.

Für die meisten von uns hat der Tag 24 Stunden und deshalb legen wir 24 Variablen vom Datentyp Real an, um die Temperaturen zu speichern.
Temperatur Datenbaustein
 
 

Ein Array in einem Datenbaustein anlegen

Daran wäre an sich überhaupt nichts auszusetzen, aber es geht auch noch viel einfacher, indem wir ein Array des Datentyps Real anlegen.

Das Machen wir, indem wir auf Datentyp klicken, ein Array auswählen und den Datentypen definieren welcher in diesem Fall ein Real sein soll.
Array anlegen

Klappen wir diesen Datentypen nun auf dann sehen wir das bereits 2 Variablen in diesem Array sind.
Array aufgeklappt

Wir benötigen aber 24 Stunden weshalb ich das Array von 0 bis 23 anlege.

In anderen Beispielen könntest du auch den Anfangswert von 0 auf Beispielsweise 10 und auch den Endwert ändern.
Array länge anpassen
 
 

Array Elemente beschreiben und verwenden

So weit haben wir das Array dann auch schon fertig und als Nächstes erstelle ich eine Variable „aktuelle Temperatur“,„Uhrzeit“ und „Freigabe Daten schreiben“ welche ich mit einem einfachen Zufallsgenerator bzw. einen Timer verschalte, um die Uhrzeit alle 2 Sekunden zu erhöhen.

Da das aber ein anderes Thema ist sehen wir uns das auch ein anderes Mal an und kümmern uns lieber wieder um unsere Aufgabe bzw. um unsere Arrays.
Array Beispiel 1

Dafür erstelle ich einen FB „Temperatur speichern“ und darin kopieren wir die aktuelle Temperatur mit einer MOVE BOX um, wenn die Uhrzeit passt und die „Freigabe Daten schreiben“ gegeben ist.

Sprich, wenn es 0 Uhr ist, dann wird in das Array Element 0 geschrieben und um 1 ins Array Element 1 usw.
Array Elemente beschreiben

Array Index beschreiben



Es gibt aber auch noch einen einfacheren Weg, um die einzelnen Array Elemente anzusprechen, und zwar kann die Zahl des Array Elements auch durch einen ganzzahligen Datentypen wie zum Beispiel einen Integer ausgetauscht werden.
Array Index

Und wie passend währe unsere Uhrzeit ein Integer und somit tauschen wir den statischen Array Index 0 gegen einen Variablen Array Index aus und schon haben wir die Aufgabe gelöst.

Ist die Uhrzeit Beispielsweise 10 dann wird die aktuelle Temperatur auch in den Array Index 10 geschrieben. Um 5 in den Array Index 5 usw.
Array Index Integer
 
 

Arrays über die Bausteinschnittstelle übergeben

Was wäre, wenn wir diesen Baustein noch öfters Aufrufen wollen?
So wie jetzt wäre er ja immer an diesen einen Datenbaustein bzw. an eine Datenbausteinstruktur gebunden.

Wenn wir uns an die Lektionen über die Funktionen (FC) und die Funktionsbausteine (FB) zurückerinnern dann können wir doch Variablen über die Bausteinschnittstelle übergeben und das geht auch mit einer Array Struktur.

Dazu schreiben wir die exakt gleiche Struktur in die Bausteinschnittstelle und ziehen die Struktur vom Datenbaustein dann an diesen ran.

Ob du die Input, die Output oder die InOut Schnittstelle benutzt kommt auf deine Aufgabenstellung an.
Array Bausteinschnittstelle

Arrays löschen / initialisieren



Jetzt sollen die gespeicherten Daten gelöscht werden, wenn das Signal „Freigabe Daten schreiben“ von 1 auf 0 wechselt.

Wie könnte das gemacht werden?
Eine Möglichkeit wäre jedes Array Element einzeln mit 0 zu beschreiben.
Ich persönlich aber nutze dafür lieber die temporären Variablen bzw. lege dort die gleiche Array Struktur nochmal an.
Array temporäre variablen

Dieses Array der temporären Variablen wird nun genommen und auf die bestehende Array Struktur umkopiert und schon sind diese Daten initialisiert.

Ganz wichtig zu wissen ist aber, dass das umkopieren so nur mit einem optimierten Baustein der 1200er und 1500er Steuerung funktioniert, weil hier die temporären Variablen vom System selbst immer initialisiert werden.
Bei älteren Steuerungen oder nicht optimierten Bausteinen müsstest du dann den Umweg über die statischen Variablen oder über andere Datenbaustein Variablen gehen wobei du aufpassen musst, das diese dann nur lesend verwendet werden und immer den Wert 0 haben.
Temporäre Array Variablen umkopieren
 
 

Array Struktur anlegen

Bis jetzt wissen wir das ein Array eine Ansammlung von Werten des gleichen Datentyps ist und nur dieser eine Datentyp reinpasst aber es gibt auch einen kleinen Umweg wie du verschiedene Datentypen in ein Array bekommst, und zwar mit einem "Array of Struct".
Array of Struct

In diesem Array einer Struktur kannst du nun verschiedene Datentypen reinschreiben, welche wie von einem Array bekannt wiederholt werden.
Array Struktur

Es ist sogar möglich ein weiteres Array in dieser Array Struktur einzufügen oder dieses mit weiteren Strukturen noch tiefer zu verschachteln.

Wichtig zu wissen ist das sich in den folgenden Arrays immer wieder die Struktur des ersten Arrays.
Sprich, wenn in der ersten Struktur zuerst eine REAL zahl vorkommt dann wird das auch bei den folgenden Strukturen so sein.
Array in Array
 
 

Array DB

Wenn du dir ganz sicher bist das in einem Datenbaustein auf jeden Fall nur ein klassisches Array mit einem einzigen Datentyp vorkommen soll bzw. ein Array von einem UDT Anwenderdatentyp dann kannst du auch auf ein Array Datenbaustein zurückgreifen.

Anlegen kannst du so einen Baustein unter „neuen Baustein anlegen“ und dann „Array DB“.
Array DB anlegen

Hier legst du fest welcher Datentyp und welche Array länger der Datenbaustein haben soll.
Array DB Datentyp

Sei hier aber vorsichtig was du auswählst den du kannst später zwar die Länge des Arrays unter den Bausteineigenschaften noch verändern aber nicht mehr den Datentyp.
Array DB Bausteineigenschaften

Da ich hier aber keinen Vorteil aber nur Nachteile von so einem vorgehen erkenne, habe ich bis dato darauf verzichtet einen Array DB zu verwenden.
Array DB verwenden
 
 

Mehrdimensionale Arrays

Auf was ich aber nicht verzichten kann sind mehrdimensionale Arrays.
Bis jetzt haben wir nur mit sogenannten eindimensionalen Arrays gearbeitet, welche wir uns wie Schubladen in einem Schrank vorgestellt haben.

Es gibt aber auch zweidimensionale Arrays.
Von der Schreibweise in der SPS sieht das dann so aus du die benötigten Array Felder, mit einem Komma getrennt nochmal hinschreibst.
zweidimmensionale Arrays

Somit hast du ein quasi ein Array in der X und ein Array in der Y Achse.
Besser vorstellen kannst du dir das sicher, wenn ich einen Schrank einblende, wobei die X Achse das erste Array darstellt und die Y Achse das zweite Array.
zweidimmensionale Arrays beispiel

Daraus ergibt sich das wir links unten das Feld X1 Y1 haben also Regalplatz "Regal".Regalplatz[1,1].
Array [1,1]

Rechts daneben sind wir in der X Achse immer noch auf 1 aber in der Y Achse 2 was "Regal".Regalplatz[1,2] ergibt.
Array [1,2]

Weiter rechts haben wir folglich 1,3 bis 1,5.
Array [1,3]

In der zweiten Reihe ganz links sind wir auf Platz 2 der Y Achse aber wieder auf Platz 1 der X Achse also "Regal".Regalplatz[2,1].
Array [2,1]

Rechts daneben ist dann logischerweise der Platz 2,2 und das Prinzip führt sich dann bis zum Array Ende fort.
zweidimmensionale Array

3 Dimensionales Array



Wenn du mir bis jetzt folgen konntest dann hast du es schon fast geschafft.
Den nun sehen wir uns noch ganz kurz ein 3 Dimensionales Array an.

Von der Schreibweise an sich ändert sich nur, dass noch eine Feldangabe mehr gibt und du quasi auch noch die Tiefe eines Objekts wie einen Würfel verarbeiten kannst.
3 dimensionales Array

Es wäre sogar möglich, dass du das Array bis zu 6 Dimensionen anlegen kannst aber ehrlich gesagt habe ich maximale 3 gebraucht und mir fehlt da auch ein wenig die Phantasie wo ein 6 Dimensionales Array benötigt werden könnte.
6 dimensionales Array
 
Damit sind wir für diese Lektion auch schon am Ende angekommen und ich hoffe du konntest das Thema Array gut verstehen.
 

2 Comments

  1. Amayry sagt:

    vielen dank für Erklärung.

    sollte man sich trotzdem damit befassen,wenn man in SPS Grundlagen nicht gut genug ist?

    • Rene sagt:

      Hallo Amayry,

      vieles das man am Anfang noch nicht zu 100 % verstanden hat, wird einem erst klarer wenn man eigentlich schon viel weiter ist.
      So war es zumindest bei mir selbst.
      Daher ist meine Antwort ein klares Ja.

      mit freundlichen Grüßen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.