-> Hier kostenlos registrieren
Hallo zusammen,
ich möchte gerne einen Schnittstellen-Baustein zu den Ein- und Ausgangskarten schreiben.
Bei den analogen Eingängen schreibe ich auf X13 (Any) den Pointer auf die Adresse mit länge: z.B. P#E100.0 WORD 8
Mit BLKMOV schieb ich die Daten dann auf das statische Array und ich kann die Datan dann "verwerten". Das funktioniert.
Nach dem selben Prinzip möchte ich nun die Ausgänge behandeln. Der Ausgang kann ich nicht als Any deklarieren. Wenn ich ihn als "Array [0 .. 3] of int" deklariere, kann ich ihn beim Aufruf nicht mit einem Pointer verbinden, da die Typen nicht aufeinander passen... Kann mir hier eventuell jemand einen Tipp geben?
Ich weiß, dass ich auch die Übertragung mit Doppelwörter oder Worter machen kann, das erhöt jedoch meine "Aufschaltung" und geht gegen das konzept, dass ich jedes IO-Modul dem Baustein übergebe.
Danke schonmal,
ich möchte gerne einen Schnittstellen-Baustein zu den Ein- und Ausgangskarten schreiben.
Bei den analogen Eingängen schreibe ich auf X13 (Any) den Pointer auf die Adresse mit länge: z.B. P#E100.0 WORD 8
Mit BLKMOV schieb ich die Daten dann auf das statische Array und ich kann die Datan dann "verwerten". Das funktioniert.
Nach dem selben Prinzip möchte ich nun die Ausgänge behandeln. Der Ausgang kann ich nicht als Any deklarieren. Wenn ich ihn als "Array [0 .. 3] of int" deklariere, kann ich ihn beim Aufruf nicht mit einem Pointer verbinden, da die Typen nicht aufeinander passen... Kann mir hier eventuell jemand einen Tipp geben?
Ich weiß, dass ich auch die Übertragung mit Doppelwörter oder Worter machen kann, das erhöt jedoch meine "Aufschaltung" und geht gegen das konzept, dass ich jedes IO-Modul dem Baustein übergebe.
Danke schonmal,
Code:
FUNCTION_BLOCK "IO_Interface"
VERSION : 0.1
VAR_INPUT
X13 : Any;
END_VAR
VAR_OUTPUT
X23 : Array[0..3] of Int;
END_VAR
VAR_IN_OUT
END_VAR
VAR
XIW13 : Array[0..7] of Int;
END_VAR
VAR_TEMP
tmp : Bool;
iTmp : Int;
buffer : DInt;
retval : Int;
END_VAR
BEGIN
// ----------- Eingänge ---------------
REGION X13 -> PIW700 .. PIW714
#retval := BLKMOV(SRCBLK := #X13,
DSTBLK => #XIW13);
#iTmp := #XIW13[0];
#iTmp := #XIW13[1];
#iTmp := #XIW13[2];
#iTmp := #XIW13[3];
#iTmp := #XIW13[4];
#iTmp := #XIW13[5];
#iTmp := #XIW13[6];
#iTmp := #XIW13[7];
END_REGION
REGION X23 -> PQW700 .. PQW714
#XIW23[0] := #iTmp;
#XIW23[1] := #iTmp ;
#XIW23[2] := #iTmp ;
#XIW23[3] := #iTmp ;
END_REGION
END_FUNCTION_BLOCK