Arrays in TwinCAT PLC

Softi11

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich hätte gerne einen Array variabler Länge in meinem Programm so in der Art feld: ARRAY [1..x] OF INT Ich habe x := 20 : INT. Beim Übersetzen meckert er aber rum, dass "Obergrenze x nicht bekannt" ist.
Meine Frage: Kann ich überhaupt mit Arrays variabler Länge arbeiten? In der Doku steht immer nur ein fester Wert.

Danke
 
Malloc

Hallo Leute,

ich hätte gerne einen Array variabler Länge in meinem Programm so in der Art feld: ARRAY [1..x] OF INT Ich habe x := 20 : INT. Beim Übersetzen meckert er aber rum, dass "Obergrenze x nicht bekannt" ist.
Meine Frage: Kann ich überhaupt mit Arrays variabler Länge arbeiten? In der Doku steht immer nur ein fester Wert.

Danke

Vom Prinzip her will man verhindern (Codesys 2.x), dass die Situation zur Runtime auftritt, dass nicht genügend Speicher frei ist, um eine Aktion durchzuführen. Deshalb gibt es keine Funktionalität, die on the Fly Memory Anforderungen (malloc() in anderen Sprachen) stellen kann. Der Compiler geht von festen Speicherbelegungen aus, der Lader verweigert spätestens, wenn die Hardware den Speicherausbau nicht besitzt.

Meine Abhilfe in so einem Fall (es ist Verschwendung) die Arrays so gross machen, dass alle vorstellbaren Anforderungen erfüllt werden können.

Mit moderneren Prozessoren und Codesys 3.x steht virtuelles Memory zur Verfügung (wie auf dem PC, wo einfach die Harddisk als Memory Auslagerungs Ersatz verwendet wird). Diese Umlagerung kostet aber Zeit, sprich von einem Zyklus zum nächsten können gewaltige Änderungen in der Zykluszeit auftreten!
 
Zurück
Oben