In RSLogix 5000 indirekt auf ein Variable aus einem Array eines UDT zugreifen

Erema

Level-1
Beiträge
57
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen User Definierten Datentyp welcher aus 3 INT ARRAYS besteht. Jedes ARRAYS besteht aus einer anderen Anzahl an INT.
Ich möchte jetzt in einem ADD ON indirekt und dynamisch auf die INT Variablen der einzelnen ARRAYS zugreifen.

Hat dies von ein schonmal jemand gemacht?

Hintergrund ist dieser:
in dem User Definierten Datentyp liegen alle meine Störungen drinnen.
Ich möchte jetzt die ARRAYS des User Definierten Datentyp in einer Schleife durchlaufen und schaun ob ein Bit 1 ist. Dann weiß ich das eine Störung aktiv ist.
Ich setze RSLogix Studio 5000 V28 ein.

Danke

LG

Markus
 
Hallo Markus,

Ich nehme mal an dass du nur die Elemente der Arrays indirekt Adressieren möchtest und die Anzahl der Elemente bestimmen möchtest, dann wäre die SIZE-Funktion dass was du suchst.
Unten ein Beispiel unter der Annahme dass dich nur interessiert ob überhaupt ein Bit gesetzt ist und nicht welches und wie viele.

UDT Faults:
R002_Faults.Hardware DINT[10]
R002_Faults.Funtion DINT[20]
R002_Faults.Diagnostic DINT[30]

Code:
SIZE(R002_Faults.Hardware[0],0,R002_ArrayLength);
R002_ArrayLength := R002_ArrayLength - 1;

FOR R002_Index := 0 TO R002_ArrayLength DO
    IF R002_Faults.Hardware[R002_Index] <> 0 THEN
        R002_HardwareFault := 1;
        EXIT;
    ELSE
        R002_HardwareFault := 0;
    END_IF;
END_FOR;

SIZE(R002_Faults.Function[0],0,R002_ArrayLength);
R002_ArrayLength := R002_ArrayLength - 1;

FOR R002_Index := 0 TO R002_ArrayLength DO
    IF R002_Faults.Function[R002_Index] <> 0 THEN
        R002_FunctionFault := 1;
        EXIT;
    ELSE
        R002_FunctionFault := 0;
    END_IF;
END_FOR;

Gruß
Mathias
 
Zurück
Oben