Array in FB unter TwinCat 3 neu initialisieren

Parallax

Level-2
Beiträge
93
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo die Programmierer Gemeinde,

ich habe eine Frage zwecks Variablendeklaration innerhalb einens FBs.

Ich möchte ein Array[0..N] deklarieren um dort eine gewisse Anzahl an Werten aufzunehmen. N ist eine Eingangsvarialbe des FBs. Das klappt leider so nicht. Es geht nur wenn ich N als Konstante innerhalb des FBs festlege. Allerdings kann ich somit beim Aufruf der Bausteininstanz nie festlegen, wie viele Werte ich speichern möchte. Gibt es irgendeine Möglichkeit das ganze so anzulegen, das bei einer Änderung der Eingangsbeschaltung (N ändert sich von 20 auf 50) das Array neu mit Array[0..N] initialisiert wird? Oder habt ihr eine andere funktionale Lösung?

Grüße,
Andre
 
Sowas sollte bei SPSen eigentlich vermieden werden, da bei nicht genügend Speicher der Befehl scheitert oder es zu einem Speicherüberlauf kommt und dann alles steht.
Ansonsten schau mal hier ganz unten nach.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
ich komme zwar aus der Siemens-Welt aber auch bei euch kann man doch ein unspezifiziertes Array mit Array
[*] als InOut übergeben. Anschließend halt mit LOWER_BOUND und UPPER_BOUND durchs Array surfen.
 
Moin,
ich komme zwar aus der Siemens-Welt aber auch bei euch kann man doch ein unspezifiziertes Array mit Array
[*] als InOut übergeben. Anschließend halt mit LOWER_BOUND und UPPER_BOUND durchs Array surfen.

Hallo zusammen,

die Geschichte mit dem Stern - Operator geht allerdings nur in Kombination mit einer Methode und nicht im Baustein direkt. Es muss also irgendwo eine Konstante hinterlegt sein.

Viele Grüße
 
Moin...
Das mit dem __NEW Operator hat funktioniert. Das mit dem * ist aber auch keine Lösung, da ich das Array erst bei der Bausteinabarbeitung mit diversen Werten füllen möchte und daher nicht von vornherein ein Array übergeben möchte. So funzt das aber ganz gut.

Danke und Viele Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin...
Das mit dem __NEW Operator hat funktioniert. Das mit dem * ist aber auch keine Lösung, da ich das Array erst bei der Bausteinabarbeitung mit diversen Werten füllen möchte und daher nicht von vornherein ein Array übergeben möchte. So funzt das aber ganz gut.

Danke und Viele Grüße


Denk dran den Speicher vielleicht mit __DELETE wieder frei zu geben ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und mach vielleicht mal einen Test was passiert, wenn man es mit der Speicherreservierung übertreibt und poste das Ergebnis mal.

Bei einer Arraylänge von irgendwas zwischen 15 und 20 Millionen geht die Steuerung in ErrorMode.
Aber da ich als Eingangsvarialbe für die Arraylänge den Datentype Byte verwende, hab ich noch etwas Platz nach oben... :)
 
Zurück
Oben