Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Pointer

  1. #1
    Registriert seit
    05.05.2008
    Ort
    Österreich
    Beiträge
    74
    Danke
    9
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich möchte dem Pointer "P#DB??.DBX0.0 Byte 10" über die IN Varieable "DB_NR" die Datenbausteinnummer vorgeben, aber ich habe keine Ahnung wie ich das bewerkstelligen soll.

    Hat vieleicht jemand einen kleinen Tip für mich wo ich ansetzen soll?
    Gruß OB1
    Zitieren Zitieren Pointer  

  2. #2
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Siehe die folgende FAQ zum Thema Any-Zeiger:

    http://www.sps-forum.de/showthread.php?t=12923

    Sowie das folgende Programmbeispiel:

    http://www.sps-forum.de/showpost.php...6&postcount=51

    Gruß Kai

  3. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    OB1 (20.02.2009)

  4. #3
    Registriert seit
    11.12.2008
    Beiträge
    73
    Danke
    39
    Erhielt 9 Danke für 8 Beiträge

    Standard

    die IN-variable in nem TEMP-integer zwischenspeichern, w#16#84000050 ins AR1 laden und indirekt zugreifen

    Code:
     
    TAR1 #DWORDMerker
     
    L #DB_NR   //die IN-variable
    T #DB_Nummer //die TEMP-variable
     
    AUF DB [#DB_Nummer] //veraendert das DB-Register
    LAR1 DW#16#84000050  // = P#10.0 innerhalb eines DBs
     
    L D [AR1, P#0.0] //um 32 bit zu laden
    L W [AR1, P#0.0] //um 16 bit zu laden
    L B [AR1, P#0.0] //um 8 bit zu laden
     
    set
    U [AR1, P#0.0] //um Bool zu laden
     
    LAR1 #DWORDMerker

    anmerkung:

    innerhalb von multiinstanzen musst du zu den DW#16#84000050 noch den wert des AR2 ohne bereichskennung addieren

    also statt LAR1 DW#16#84000050 dann:

    Code:
    TAR2
    L  DW#16#00FFFFFF
    UD
    L DW#16#84000050
    +D
    LAR1
    Geändert von Mangokind (20.02.2009 um 15:26 Uhr)

  5. Folgende 2 Benutzer sagen Danke zu Mangokind für den nützlichen Beitrag:

    OB1 (20.02.2009),SIGGI (21.02.2009)

  6. #4
    OB1 ist offline Benutzer
    Themenstarter
    Registriert seit
    05.05.2008
    Ort
    Österreich
    Beiträge
    74
    Danke
    9
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Danke Kai und Mangokind
    genau das hab ich gesucht
    Gruß OB1

  7. #5
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Hier ist noch einmal ein Programmbeispiel für die Verwendung eines ANY-Zeigers (P#DB100.DBX0.0 BYTE 10) mit einer variablen
    DB-Nummer:

    Code:
    FUNCTION FC 100 : VOID
    TITLE =Werte kopieren
    //16
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : 'ANY'
    VERSION : 1.0
     
    VAR_INPUT
      DB_QUELLE : INT ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      ANY_QUELLE : ANY ; 
      RETVAL : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =ANY-QUELLE (ANY)
     
          L     P##ANY_QUELLE; // ANY-QUELLE (ANY)
          LAR1  ; 
     
          L     B#16#10; // Syntax-ID (STEP 7)
          T     B [AR1,P#0.0]; 
     
          L     B#16#2; // Datentyp (BYTE)
          T     B [AR1,P#1.0]; 
     
          L     10; // Anzahl (10)
          T     W [AR1,P#2.0]; 
     
          L     #DB_QUELLE; // DB-Nummer (#DB_QUELLE)
          T     W [AR1,P#4.0]; 
     
          L     P#DBX 0.0; // Bereichszeiger (DBX0.0)
          T     D [AR1,P#6.0]; 
     
    NETWORK
    TITLE =Werte kopieren
     
          CALL SFC   20 (
               SRCBLK                   := #ANY_QUELLE,
               RET_VAL                  := #RETVAL,
               DSTBLK                   := P#DB110.DBX0.0 BYTE 10);
          NOP   0; 
     
    NETWORK
    TITLE =Register wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
          LAR1  #AR1_REGISTER; // AR1-Register
     
    END_FUNCTION
    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  8. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    on69 (18.09.2010),SIGGI (21.02.2009)

  9. #6
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und hier noch zwei Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

  10. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    SIGGI (21.02.2009)

Ähnliche Themen

  1. Pointer und Co
    Von mkd im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 31.07.2008, 14:30
  2. SCL: Pointer
    Von dinner4one im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.07.2008, 18:07
  3. Pointer in SCL ?
    Von AndreK im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.04.2008, 21:24
  4. DB und Pointer
    Von PhilippL im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 12.09.2007, 07:02
  5. VKE und Pointer im FC...
    Von halorenzen im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.07.2004, 13:16

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •