TIA Bereichszeiger in SCL auslesen

Verithas

Level-2
Beiträge
25
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich habe einen FB in SCL mit einer Input variable Any;
Ist es möglich diesen auszulesen, sprich DBnr, Länge, Bitadresse, usw..?
wenn ja wie?

in AWL ist es mir klar
ANY-Pointer Auslesen.jpg

Gruß
 
Jop das ist möglich. mit eine AT Sicht drauf:

Code:
TYPE "ANY_POINTER"
VERSION : 0.1
  STRUCT     
   SyntaxID : BYTE ;    
   Bereichstyp : BYTE ;    
   Anzahl_Werte : INT ;    
   DB_Nr : INT ;    
   Startadresse : DWORD ;    
  END_STRUCT ;    
END_TYPE

Code:
FUNCTION_BLOCK "Baustein_1"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      Startdaten : Any;
      pStartdaten AT Startdaten : "ANY_POINTER";
      versatz : Int;
   END_VAR


   VAR 
      anypointer : "ANY_POINTER";
      anypointer_out : "ANY_POINTER";
      IN_Byte { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Int;
      IN_Bit : Int;
      OUT_Byte : Int;
      OUT_Bit : Int;
   END_VAR


   VAR CONSTANT 
      Eingänge : DWord := 16#8100_0000;
      Ausgänge : DWord := 16#8200_0000;
      Merker : DWord := 16#8300_0000;
      Datenbaustein : DWord := 16#8400_0000;
      Instanz_DB : DWord := 16#8500_0000;
      LokalDaten : DWord := 16#8600_0000;
      VorherigeLokalDaten : DWord := 16#8700_0000;
   END_VAR




BEGIN
    #anypointer := #pStartdaten;
    
    #IN_Byte := DWORD_TO_INT(SHR(IN := SHL(IN := #pStartdaten.Startadresse, N := 8), N := 11));
    #IN_Bit := DWORD_TO_INT(SHR(IN := SHL(IN := #pStartdaten.Startadresse, N := 29), N := 29));
    
    #OUT_Byte := 30;
    #OUT_Bit := 3;
    
    #anypointer_out.Startadresse := SHL(IN := INT_TO_DWORD(#OUT_Byte), N := 3) OR INT_TO_DWORD(#OUT_Bit) OR #Datenbaustein;
    
END_FUNCTION_BLOCK

Edit: Etwas vereinfacht, damit man auch sieht wie man die Startadresse auch wieder zusammenbauen kann.

mfG René
 
Zuletzt bearbeitet:
Zurück
Oben