Merkerwort mit index

NochEinProgrammierer

Well-known member
Beiträge
102
Punkte Reaktionen
30
Was willst Du machen?

Ein Index wie in Deinem Beispiel wäre für den Zugriff auf ein Arrayelement gedacht.
Wenn Du auf ein Bit innerhalb Deines MW zugreifen möchtest wäre (z.B) VAR1 := %MW.2 geeignet.
 

Ralle

Supermoderator
Teammitglied
Beiträge
15.254
Punkte Reaktionen
3.910
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:

Code:
TestArray: Test;

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.
 
Zuletzt bearbeitet:

NochEinProgrammierer

Well-known member
Beiträge
102
Punkte Reaktionen
30
Möglich wäre auch die einmalige Zuweisung der Eingangsdaten auf ein definiertes Array:


Code:
VAR_GLOBAL[INDENT]Messstelle : Array[1..5] of INT;

Messstelle[1] := %IW60;
Messstelle[2] := %IW64;
Messstelle[3] := %IW68;
Messstelle[4] := %IW72;
Messstelle[5] := %IW76;
[/INDENT]
END_VAR

Das Array "Messstelle" kann dann mit einer Schleife weiterbearbeitet werden.
 
OP
B

Babylonkiller

Member
Beiträge
23
Punkte Reaktionen
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo NochEinProgrammiere

also so funktioniert es. Eingangswörter oder Merkerwörte in ARRAY ablegen.
Code:
VAR_IN_OUT
    bAdresse:WORD;
END_VAR

VAR
    pAdresse:POINTER TO WORD;
       Save: ARRAY[1..10]OF WORD;
    index: INT;
END_VAR

pAdresse:=ADR(bAdresse);

FOR index:=1 TO 10 DO
Save[index]:=pAdresse^;
pAdresse:=pAdresse+ SIZEOF(pAdresse^);
END_FOR;

Merkerword.png

Merkerword1.png
 
Oben