Also es ist nur ein Versuch, ich weiß nicht, ob das so funktioniert.
Ich habe für eine Profibuskarte, die 64 Byte In-Daten erhält folgendes gemacht.
Unter Datentypen eine Struct Profibus_in angelegt, dort dann die einzelenen Variablen definiert, z.Bsp.
Code:
TYPE Profibus_in :
STRUCT
Manual AT %IX60.0: BOOL;
Automatic AT %IX60.1: BOOL;
Ack AT %IX60.2: BOOL;
Reset AT %IX60.3: BOOL;
Restart AT %IX60.4: BOOL;
Emptying AT %IX60.5: BOOL;
Filling AT %IX60.6: BOOL;
TestInt1 AT %IW60: INT;
TestInt2 AT %IW64: INT;
TestInt3 AT %IW68: INT;
ModulError AT %IX124.0: BOOL;
InputError AT %IX125.0: BOOL;
OutputError AT %IX126.0: BOOL;
END_STRUCT
END_TYPE
Das funktioniert gut.
Du könntest mal folgendes versuchen:
Lege einen Datentyp Test an:
Code:
TYPE Test :
STRUCT
MyArray AT %ID60: ARRAY[1..10] OF DWORD;
END_STRUCT
END_TYPE
Definiere eine globale Variable:
Greife in deinem Programmcode darauf zu:
Code:
TestInt := DWORD_TO_INT(TestArray.MyArray[2]);
%ID60 ist nur mein Beispiel, leider kann ich das nicht testen, vielleicht auch %IB60.
Das projekt ist so übersetzbar, aber was letztendlich in dem Array wirklich landet, mußt du mal testen., Möglich, dass es so gar nicht geht.
PS. Unter Beckhoff haben wir z.Bsp. Festo-Inputs einem Array zugewiesen (Hardewarekonfig) und diese Arrayvariablen später auf die gewünschten Inputvariablen (globale Vars) zugewiesen. Da konnte man mit Index arbeiten. Bei anderen
Codesys-SPS (Bsp. oben ist aus einer Fest-SPS) geht das so nicht direkt in der Hardwarekonfig.