-> Hier kostenlos registrieren
Ich habe eine Bibliothek in meinem B&R Automation Studio erstellt. In Dieser Bibliothek befindet sich ein Funktionsblock, der mir ein zweidimensionales String-Array füllt. Damit ich nicht zu viel Speicher brauche, übergebe ich dem Funktionsblock das Array als Pointer. Soweit so gut.
Also lege ich in der Bibliothek mit folgendem Eintrag in der *.fun Datei mit folgendem Eintrag das Stringarray an:
VAR_INPUT
ptStringArr : REFERENCE TO ARRAY[1..diColumnMax, 1..diRowMax] OF STRING[diStringLength];
END_VAR
In der *.var Datei definiere ich die Grenzen als Konstante:
VAR CONSTANT
diColumnMax : DINT := 5;
diRowMax : DINT := 5;
diStringLength : DINT := 256;
END_VAR
In meiner Hauptapplikation übergebe ich der Instanz des Funktionsblocks das globale String-Array
Inst(ptStringArr := ADR(sStrArr));
Im Funktionblock der Bibliothek fülle ich dann das Array mit zwei FOR- Schleifen mit Werten:
ptStringArr [m,n]='Wert';
In meiner Hauptapplikation ist dann jeweils nur der erste Index beschrieben: sStrArr[1,1].
Wenn ich den Code ausserhalb der Bibliothek ausführe und das Stringarray global anlege funktioniert alles bestens.
Hat mir jemand einen Tip? Bei CoDeSys greift man auf Indizes eines Pointers mit dem ^-Zeichen zu, etwa so: ptStringAr^[m,n]='Wert', bei B&R bekomme ich einen Fehler, dass es sich nicht um einen Pointer handelt. Was mache ich falsch?
Herzlichen Dank für eure Hilfe.
Also lege ich in der Bibliothek mit folgendem Eintrag in der *.fun Datei mit folgendem Eintrag das Stringarray an:
VAR_INPUT
ptStringArr : REFERENCE TO ARRAY[1..diColumnMax, 1..diRowMax] OF STRING[diStringLength];
END_VAR
In der *.var Datei definiere ich die Grenzen als Konstante:
VAR CONSTANT
diColumnMax : DINT := 5;
diRowMax : DINT := 5;
diStringLength : DINT := 256;
END_VAR
In meiner Hauptapplikation übergebe ich der Instanz des Funktionsblocks das globale String-Array
Inst(ptStringArr := ADR(sStrArr));
Im Funktionblock der Bibliothek fülle ich dann das Array mit zwei FOR- Schleifen mit Werten:
ptStringArr [m,n]='Wert';
In meiner Hauptapplikation ist dann jeweils nur der erste Index beschrieben: sStrArr[1,1].
Wenn ich den Code ausserhalb der Bibliothek ausführe und das Stringarray global anlege funktioniert alles bestens.
Hat mir jemand einen Tip? Bei CoDeSys greift man auf Indizes eines Pointers mit dem ^-Zeichen zu, etwa so: ptStringAr^[m,n]='Wert', bei B&R bekomme ich einen Fehler, dass es sich nicht um einen Pointer handelt. Was mache ich falsch?
Herzlichen Dank für eure Hilfe.