# Arrays in PC Worx



## Daywalker (11 August 2010)

Moin zusammen,
ist es in PC Worx möglich, Arrays von der Länge her variabel zu halten und innerhalb einer FU oder eines FB's die Länge dieses Array auszulesen?

Hintergrund der ganzen Sache ist: Ich bekomme in mehreren Array's diverse Messdaten in die Phoenix SPS geschickt. Nun möchte ich mir eine FU oder einen FB schreiben der die Saklierung der Messdaten übernimmt. Problem dabei ist, dass die Array's im schlimmsten Fall immer eine unterschiedliche Länge haben. Für die Skalierung möchte ich in ST Schleifendurchläufe programmieren, das Array Feld für Feld durchparsen und die Werte auslesen. Hierfür (Laufvariable der Schleife) benötige ich dann aber genau die Länge des anliegenden Arrays.

Versteht man diese Problemstellung? 

Vielen Dank im Vorraus.


----------



## bonatus (11 August 2010)

Hallo,

variable Arraylänge ist in dem Sinne nicht möglich, du kannst eine konstante Variable deklarieren mit der du die Grenzen des Arrays festlegst.

Du müsstest versuchen eine Abbruchbedingung für deinen Schleifendurchlauf mit ein programmieren.


----------



## Daywalker (11 August 2010)

Hm...wie soll das mit der konstanten Variable für die Länge funktionieren. In PC Worx muss ich ein Array doch unter Datentypen neu deklarieren. Hier kann ich die Länge des Arrays nur im Stil [1..20] angeben. Ersetze ich die 20 in der Klammer durch eine Variable, meckert der Compiler.


----------



## IBFS (11 August 2010)

Daywalker schrieb:


> Hm...wie soll das mit der konstanten Variable für die Länge funktionieren. In PC Worx muss ich ein Array doch unter Datentypen neu deklarieren. Hier kann ich die Länge des Arrays nur im Stil [1..20] angeben. Ersetze ich die 20 in der Klammer durch eine Variable, meckert der Compiler.


 
Och menno - ist denn das so schwer zu verstehen. In der SPS-Welt
gibt es im Prinzip keine dynamischen Arrays. D.h. du mußt deine 
Arraygröße auf die maximal zu erwartende Arraygröße stellen.

Die Abbruchbedingung ist dann z.B. das erste Wertepaar, das komplett NULL ist.

Frank


----------



## bonatus (11 August 2010)

ich  habs mal als globale Variable gemacht, geht aber auch als lokale Variable:

```
VAR_GLOBAL CONSTANT
    Anz_Messdaten : INT:=20;
END_VAR
```


----------



## Daywalker (13 August 2010)

Danke euch beiden. Hatte glaube ich ne kleinen Denkfehler drin der jetzt beseitigt wurde.


----------

