Hey,
Ich vermute dass das gar nicht geht. Zumindest sind in VisionTech, welches auch Ethernet-KRL benutzt die Zusatzattribute auch auf mehrere Variablen aufgeteilt, also:
<ELEMENT Tag="VTResponse/TaskResult/Attributes/Attribute1/Key" Type="String" />
<ELEMENT Tag="VTResponse/TaskResult/Attributes/Attribute1/Value" Type="String" />
<ELEMENT Tag="VTResponse/TaskResult/Attributes/Attribute2/Key" Type="String" />
<ELEMENT Tag="VTResponse/TaskResult/Attributes/Attribute2/Value" Type="String" />
...
Hier ist auch zu sehen, dass es sich bei dem Type nicht um einen ARRAY[CHAR] oder ähnliches handelt, sondern um einen eigentlich in der KRL unbekannten Typen String
Es wäre aber natürlich möglich die Struktur so auf zu bauen, dass man mehrere Variable noch durchnummeriert, also:
<ELEMENT Tag="JOBSTEP/POSITIONS/Val1" Type="FRAME"/>
<ELEMENT Tag="JOBSTEP/POSITIONS/Val2" Type="FRAME"/>
<ELEMENT Tag="JOBSTEP/POSITIONS/Val3" Type="FRAME"/>
...
<ELEMENT Tag="JOBSTEP/POSITIONS" Type="FRAME"/>
Oder in der Recive-Datei:
<JOBSTEP>
<POSITIONS>
<Val1 X="0.0" Y="0.0" Z="0.0" A="0.0" B="0.0" C="0.0" />
<Val2 X="0.0" Y="0.0" Z="0.0" A="0.0" B="0.0" C="0.0" />
<Val3 X="0.0" Y="0.0" Z="0.0" A="0.0" B="0.0" C="0.0" />
</POSITIONS>
</JOBSTEP>
Die Daten kann man dann ja sehr einfach in KRL in ein Array schreiben:
DECL FRAME Positions[3]
RET=EKI_GetReal(configFileName[],"JOBSTEP/POSITIONS/Val1", Positions[1])
RET=EKI_GetReal(configFileName[],"JOBSTEP/POSITIONS/Val2", Positions[2])
RET=EKI_GetReal(configFileName[],"JOBSTEP/POSITIONS/Val3", Positions[3])
Oder, falls es sich um ein sehr großes Array handelt, den String auch mit C_WRITE direkt erstellen lassen.
Anzumerken wäre noch, dass XML-Tag-Namen nicht mit einer Nummer Anfangen dürfen, deshalb in dem Beispiel "Valn"
Ein wirkliches Array hat ja in XML auch keine Nummerierung, weshalb ich mir die durchnummerierung auch schwierig vorstelle, das müsste dann ja bei der Deserialisierung geschehen, und in verschiedene Speicheradressen abgelegt werden.