Dynamischer speicehr / listen

Soll Deine SPS genauso unzuverlässig und absturzfreudig wie PC-Programme werden? ;)

Bei TWINCAT 3 gibt es wohl dynamische Speicherallokation. Welches System hast du?

Ist Deine Aufgabe nicht mit maximal ausgelegten festen Arrays lösbar?

Harald
 
Zuletzt bearbeitet:
Hallo,

ich benutze so was recht viel. Allerdings wurde mir immer davon abgeraten. Ich habe mich dann darauf beschränkt das dynamische Anlegen von Listen auf den Beginn der Laufzeit zu legen. Sonst bekommt man in CodeSys schnell fragmentierten Speicher.
Was möchtest Du denn dynamisch anlegen? Funktionsbausteine oder eigene Strukturen? Habe für beides zwei verschiedene Varianten gewählt. Bei Funktionsbausteinen ist der Trick __NEW(). Allerdings lässt Codesys das für selbstdefinierte Datentypen nicht mit einem Array zu.

Siehe Screenshot.
dynamischFB.png
Wichtig ist, dass in dem zu instanzierenden Baustein (bei mir FBZylinder) ganz oben sowas steht:

{attribute 'enable_dynamic_creation'}
FUNCTION_BLOCK FBZylinder

mit ppZylinder[d]^(); kannst du die dann aufrufen

Mit Strukturen habe ich es anders gemacht. Dort habe ich mir einen FB gebaut welcher mir einen gewissen speicher anlegt den ich dann via Pointer mit Daten beschreiben kann. Wenn Du Interesse hat kann ich es Dir gerne zukommen lassen. Ist jetzt etwas zu viel zu schreiben :)

Edit:
Achso, du musst auch noch bei Eigenschafter der Applikation unter Optionen Applikationserzeugung einen Haken bei "dynamische Speicherallozierung verwenden" setzen und die größe des maximal zu Verfügung stehenden Speichers angeben.
 
Zuletzt bearbeitet:
Zurück
Oben