Step 7 Pointer auf FC-Ausgang

fluz

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> 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,

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
 
Soll Dein Baustein ein FC oder ein "FUNCTION_BLOCK" (FB) sein? Falls FB: warum? Warum in/aus STAT der FB-Instanz umkopieren?
Bei einem FB geht ANY nicht als OUTPUT. (Du könntest den Ausgangs-Any in INPUT oder IN_OUT deklarieren, dann stimmt allerdings nicht der Zugriffstyp in den Referenzdaten)
Wohin/woher sollen die E/A-Werte denn eigentlich kopiert werden?
Werden Deine E/A immer im Prozessabbild PAE/PAA liegen?

Für welche CPU soll der Programmcode sein?
Welche Step7- bzw. TIA-Version verwendest Du?
Möglicherweise kannst Du über Deine E/A UDTs legen und brauchst dann nicht mit BLKMOV und ANY hantieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Und "X23" als INOUT zu deklarieren ist auch nicht möglich?

Code:
FUNCTION_BLOCK FB3
VERSION : '0.1'
   VAR_INPUT 
      X13 : Any;
   END_VAR

   VAR_OUTPUT 
      
   END_VAR

   VAR_IN_OUT 
    X23 : Any;
   END_VAR

   VAR 
      XIW13 : Array[0..7] of Int;
   END_VAR

   VAR_TEMP 
      tmp : Bool;
      iTmp : Int;
      buffer : DInt;
      retval : Int;
   END_VAR

BEGIN


retval := BLKMOV(SRCBLK := X13,
                  DSTBLK => X23);

  
END_FUNCTION_BLOCK
 
Hey, Danke für die schnellen antworten.

@PN/DP:
-
Soll Dein Baustein ein FC oder ein "FUNCTION_BLOCK" (FB) sein? Falls FB: warum?
Ich hab den Code für das Forum ein wenig abgespeckt. Digitale Ein-/Ausgangskarten Übergebe ich als ein WORD und splitte das word über dee AT-Befehl in ein Array. Das funktioniert so nicht in einem FC.

-
Warum in/aus STAT der FB-Instanz umkopieren?
Weil ich X13 in den Array X13[] Überführen möchte.

Bei einem FB geht ANY nicht als OUTPUT.
Bei einem FC kann ich das machen. Weißt du was der Hintergrund ist, dass ich das nicht bei einem FB machen kann? das erschließt sich mir leider nicht...

Wohin/woher sollen die E/A-Werte denn eigentlich kopiert werden?
Werden Deine E/A immer im Prozessabbild PAE/PAA liegen?
- Ich brauche eine konfigurierbare Schnittstelle, bei der ich die I/O der Baugruppe je nach konfiguration Ändern kann.
Ich kann natürlich auch alle Ein-/Ausgangswörter einzeln auflegen. Dachte aber, es sollte irgendwie möglich sein Karten mit manchmal 8 Wörtern als ganzes einzuspielen. Vorgabe ist Übrigens, dass ich die PAE/PAA nicht direkt im Baustein aufrufe.

Für welche CPU soll der Programmcode sein?
Welche Step7- bzw. TIA-Version verwendest Du?
- CPU 1510SP-1 PN mit TIA14

@Verithas:
Probier ich gleich mal aus... danke
 
Zurück
Oben