SCL Beispiel für ANY Pointer Bearbeitung

clweb

Level-1
Beiträge
35
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht nützt es dem einen oder anderem. Hatte das mal kodiert um mit SCL zu arbeiten.

Code:
//------------------------------------------------------------------------------------------------------
//
//  Beispiel FC: zeigt wie man ein ANY Pointer dynamisiert bevor man ihn als //  Parameter dem SFC20 übergibt.
//
//------------------------------------------------------------------------------------------------------

FUNCTION FC200 :VOID
VAR_TEMP
    // Temporäre variable
        
    SOURCE:ANY;  // Symbolischer Name des ANY Pointers
    VON AT SOURCE: STRUCT  // Mit dem  AT Befehl wird der gleiche Bereich in einer anderen Form définiert
       ID  : WORD;  // ID für ANY (1002 hex = es wird mit Bytes gearbeitet)
       NBR :INT;    // Anzahl Daten
       DBN : INT;   // DB der im ANY Pointer benutzt wird ANY
       PTR : DWORD; // Pointer Doppelwort um den Angfang des Datenbereichs und den Datentyp zu definieren (84hex = DB Datentyp)
    END_STRUCT;
       
              
        
    DESTIN:ANY;
    NACH AT DESTIN: STRUCT
       ID  : WORD;
       NBR : INT;
       DBN : INT;
       PTR : DWORD;
    END_STRUCT;
        
    ORIG : INT;
    SFC_Err:INT;  // RETVAL des SFC

END_VAR

    // Befehle
    //__________________________
    
    ORIG := 10; // Beispiel: man will bei DBX10.0 anfangen
    
    // Aufbauen des ANY Pointers der Quelle (VON) (z.B. P#DB150.DBX10.0 BYTE 100)
    
    VON.ID  := 16#1002;  // ID 10 et 02 um mit Bytes zu arbeiten
    VON.NBR := 100;  // entspricht BYTE 100. Könnte eine Variable sein.
    VON.DBN := 150; // DB 150
    VON.PTR := INT_TO_DWORD (8*ORIG) OR 16#8400_0000;  // Pointer zeigt zuf Bit, deshalb 8*Byte Nummer
    
    // Aufbauen des ANY Pointers des Ziels (NACH)(P#DB200.DBX10.0 BYTE 100)
    NACH.ID   := 16#1002;
    NACH.NBR  := 100;
    NACH.DBN  := 200;
    NACH.PTR:= INT_TO_DWORD (8*ORIG) OR 16#8400_0000;

  
   
    
    
    // Aufruf des SFC 20
    SFC_Err := BLKMOV(SRCBLK := SOURCE // IN: ANY
           ,DSTBLK := DESTIN // OUT: ANY
           ); // INT
      
   
   
   
   END_FUNCTION
 
Zurück
Oben