Hallo Noob,
ich weiß zwar nicht was du unter GI-Nummern (?) verstehst, aber prinzipiell kann man das auch über ein Array (Feld) von RobTargets lösen.
Also in etwa so:
CONST robtarget rtP1:=...;
CONST robtarget rtP2:=...;
CONST robtarget rtPN:=...;
CONST robtarget rtPosArray{3}:=[rtP1, rtP2, rtPN];
! oder auch direkt deklariert, d.h. ohne vorherige Dekl. der Einzelpos.
CONST robtarget rtPosArray{3}:=[[...],[...],[...]];
! und dann so aufrufen:
MoveL rtPosArray{GI}, ....
Ist aber nur dann sinnvoll, wenn deine GI-Nummerierung möglichst fortlaufend ist und möglichst bei 1 beginnt, sonst wird's aufwändiger bzw. problematisch (könnte man lösen über Lookup/Hash-Tabelle von GI auf RobTarget-Index, blablabla...)
Vergleiche hierzu auch folgendes Posting:
http://www.roboterforum.de/roboter-forum/index.php?topic=1286.0Das Gleiche gilt wenn unterschiedliche Bewegungen (MoveL, MoveJ, ...) und/oder variable Bewegungsparameter pro Bewegung notwendig sind (Zone, Speed, etc.)
Dann muß man für jeden Parameter ein gleichlanges "paralleles" Array mit den entsprechenden Werten pflegen und beim Aufruf der Instruktion einsetzen.
Alternativ (und besonders elegant) ist hier der Einsatz von benutzerdefinierten Datentypen (siehe in Doku unter RECORD/ENDRECORD) zu bevorzugen, d.h. man definiert einen eigenen Datentyp, der sämtliche benötigten Parameter enthält und deklariert dann ein Array dieses Datentyps: jedes Element des Feldes enthält dann einen kompletten Parametersatz...
Aber Achtung, soweit ich mich erinnern kann (!), muß für benutzerdefinierte Datentypen die Software-Option "Developer Functions" installiert sein (zumindest auf der S4C (?)).
Ich hab das nämlich mal fix in ein Programmkonzept mit eingebaut um dann festsstellen zu müssen, dass das ohne diese Option nicht funzt.
Das steht wahrscheinlich irgendwo im "Klitzeklitzeklein-Gedruckten"

(oder auf schwedisch

)
Gruß
Rainer