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

Ergebnis 1 bis 1 von 1

Thema: Any-Zeiger für Datentypen

  1. #1
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    von Volker

    Bevor ihr euch mit dem Any-Zeiger beschäftigt, solltet ihr über den Pointer Bescheid wissen.
    Schaut euch dazu vorher dieses Thema an. Pointer Zeiger FIFO LIFO

    Der Aufbau des ANY-Zeigers:
    Code:
    Bit    |15..         ..8 | 7..         ..0 |
    Byte 0 |   10h für S7    |    Datentyp     | Byte 1
    Byte 2 |        Wiederholungsfaktor        | Byte 3
    Byte 4 |         DB-Nummer (oder 0)        | Byte 5
    Byte 6 | Speicherbereich | 0 0 0 0 0 B B B | Byte 7
    Byte 8 | B B B B B B B B | B B B B B b b b | Byte 9
    Datentyp [in HEX]:
    Code:
    00 NIL     01 BOOL     02 BYTE
    03 CHAR    04 WORD     05 INT
    06 DWORD   07 DINT     08 REAL
    09 DATE    0A TOD      0B TIME
    0C S5TIME  0E DT       13 STRING
    Speicherbereich [in HEX]:
    Code:
    81 Eingänge        82 Ausgänge     83 Merker
    84 Datenbaustein   85 Instanz-DB   86 Lokal daten (L-Stack)
    87 Vorherige Lokal daten
    B = Byteadresse , b = Bitadresse
    ------------------------------------------------------
    So. Nun wollen wir das ganze mal anwenden.
    Aufgabe:
    Kopieren sie Mithilfe der SFC20 einen variablen Merkerbereich (im Beispiel ab MB 20) mit 8 Byte Länge in den DB10 ab DBB4.
    Zuallererst definieren wir uns im Deklarationsbereich eine Variable (myZeiger) im TEMP-Bereich vom Typ ANY. (diese Variable ist die erste Variable dort und beginnt ab Adresse 0.0, belegt also den Bereich 0.0-9.7)
    Nun bauen wir uns den Zeiger, um auf den Merkerbereich zugreifen zu können.
    Code:
          L     B#16#10                   //10h für s7
          T     LB     0
          L     B#16#02                   //Typ BYTE
         T     LB     1 
          L     8                         //Anzahl (Wiederholungsfaktor)
         T     LW     2 
          L     0                         //*1 Datenbaustein (hier 0 da wir ja auf
          T     LW     4                  //   einen Merkerbereich zugreifen wollen) 
          L     20                        //Anfangsadresse
         SLD   3                         //Pointer bauen
         T     LD     6 
          L     B#16#83                   //Speicherbereich (hier Merker)
         T     LB     6
    Mit diesen Anweisungen haben wir nun folgenden Any-Zeiger gebaut.
    P#M 20.0 BYTE 8
    *1 Es wäre nicht wirklich tragisch, wenn an der DB-Adresse ein anderer Wert als 0 stehen würde, da dies ignoriert wird, wenn nicht auf einen DB zugegriffen wird.
    Der Korrektheit halber sollte hier aber trotzdem eine 0 eingetragen werden.

    Vom Prinzip das gleiche Ergebnis würden wir erziehlen, wenn wir den Zeiger so bauen.
    Code:
          L     B#16#10                   //10h für s7
          T     LB     0
          L     B#16#04                   //Typ WORD 
          T     LB     1
          L     4                         //Anzahl (Wiederholungsfaktor)
          T     LW     2
          L     0                         //Datenbaustein
          T     LW     4
          L     20                        //Anfangsadresse
          SLD   3                         //Pointer bauen
          T     LD     6
          L     B#16#83                   //Speicherbereich (hier Merker)
          T     LB     6
    Mit diesen Anweisungen haben wir nun folgenden Any-Zeiger gebaut.
    P#M 20.0 WORD 4

    Jetzt transferieren wir den, durch den Zeiger adressierten Bereich, in den DB10.
    Code:
          CALL  SFC   20
           SRCBLK :=#myZeiger
           RET_VAL:=MW200
           DSTBLK :=P#DB10.DBX 4.0 BYTE 8
    Wir haben jetzt MB20-27 in den DB10 DBB4-11 kopiert.
    -------------------------------------------------------------------
    Zum Abschluss bauen wir noch einen Zeiger auf einen Bereich in einem Datenbaustein.
    Code:
          L     B#16#10                   //10h für s7
          T     LB     0
          L     B#16#02                   //Typ BYTE
          T     LB     1
          L     8                         //Anzahl (Wiederholungsfaktor)
          T     LW     2
          L     33                         //Datenbaustein
          T     LW     4
          L     14                        //Anfangsadresse
          SLD   3                         //Pointer bauen
          T     LD     6
          L     B#16#84                   //Speicherbereich (hier DB)
          T     LB     6
    Mit diesen Anweisungen haben wir nun folgenden Any-Zeiger gebaut.
    P#DB33.DBX 14.0 BYTE 8
    -------------------------------------------------------------------
    Der Any-Zeiger lässt sich nun auch noch mit dem Pointer kombinieren um noch unabhängiger zu sein.
    Nehmen wir an, der Anyzeiger liegt im Lokalbereich ab LB10

    LAR1 P##myZeiger
    Mit dieser Anweisung laden wir die Anfangsadresse unseres ANY-Zeigers in das Adressregister 1.
    Die folgenden Transferbefehle, in Verbindung mit dem Adressregister, beziehen sich nun auf dieses Adresse.

    Code:
          LAR1  P##QANY                     //zeiger ins adressregister laden
          L     W#16#10                     //SyntaxID. bei S7 immer 10
          T     LB [AR1,P#0.0]
          L     W#16#2                      //Typ BYTE
          T     LB [AR1,P#1.0]
          L     #Anzahl_Bytes               //Anzahl Bytes
          T     LW [AR1,P#2.0]
          L     #Quell_DB                   //Quell-DB
          T     LW [AR1,P#4.0]
          L     #QAnfang                    //Anfang der Quelle
          SLD   3
          T     LD [AR1,P#6.0]
          L     B#16#84                   //Speicherbereich (hier DB)
          T     LB [AR1,P#6.0]
    Geändert von volker (01.07.2008 um 15:47 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation
    Zitieren Zitieren Any-Zeiger für Datentypen  

  2. Folgende 111 Benutzer sagen Danke zu volker für den nützlichen Beitrag:

    /*Matthias*/ (08.07.2008),11koma00010100 (11.03.2016),==UNti== (23.11.2015),Androfias (03.12.2013),apachler (23.04.2007),art123 (19.05.2011),B3nnY (31.05.2015),badgoes (26.04.2010),Befree (28.10.2009),BiBi (11.05.2011),Bienenkoenig (13.10.2009),BillHearts (26.04.2013),BlueDogi (11.07.2014),bresner1 (16.07.2008),Bär1971 (31.01.2011),CaBr (05.10.2016),Centrulior (07.07.2011),chrigu (30.07.2010),cosmomaster (07.04.2011),Credofire (28.08.2017),cth (13.07.2008),Dagobert (04.04.2009),dan_mue (03.08.2010),david (09.07.2012),de vliegende hollander (19.02.2014),DJ78 (01.08.2010),donix (05.04.2017),Dotzi (16.09.2008),dread (12.10.2015),drmicha (29.08.2009),ebt'ler (05.07.2013),Einherjer14 (08.09.2008),EliteGurke (17.11.2010),Eraser (18.01.2017),erick_wick (10.11.2011),Fl0Bru (19.02.2014),fraschfn (17.03.2017),frickel (25.04.2008),funkey (19.10.2012),Ganz (01.11.2007),Gerhard K (08.10.2008),Gerri (03.07.2008),gingele (16.07.2010),gordon (02.12.2013),HEI-TA (01.12.2011),HelmiMUC (10.07.2013),Human (08.10.2008),iswtbl (09.05.2011),jomatic (06.08.2015),Jordy (05.04.2008),justbql (15.03.2014),kiestumpe (17.04.2007),Kira2000 (06.02.2012),Koch (19.08.2013),Kreativ (18.01.2016),kruz_007 (10.03.2014),kuti (04.03.2015),logo78 (18.11.2010),made215 (09.06.2011),mad_max (12.12.2007),mdosch (08.11.2010),Mike Vanstrike (20.07.2011),Oboil (26.04.2010),Panzerknacker (08.04.2016),pelae (17.01.2013),pepi09 (15.06.2011),Perfektionist (15.08.2008),Peter31 (18.05.2010),Petri.f (19.02.2014),Pizza (31.10.2007),PLC-Gundel (30.10.2009),polarbeer (28.08.2013),PORTAL (08.04.2013),poweronat (24.02.2009),pylades (13.09.2015),raf77 (17.11.2015),Rainer_Eifel (02.04.2007),roadrunner (20.04.2012),Robin (27.02.2008),roman06 (24.10.2017),RONIN (20.09.2012),scrabble (02.07.2008),SebastianR (19.11.2015),Sesssko (13.09.2010),SIGGI (06.10.2008),skks (01.11.2010),skyvan (11.09.2008),SPS_S5_S7 (16.09.2010),Sputnik555 (19.10.2009),Stefan592 (25.06.2015),sterni2004 (12.04.2013),Syntaxfehler (22.02.2009),t-poke (31.08.2009),TheQuest (10.08.2016),thomass5 (19.09.2010),tichuman (31.01.2013),Tjalf_Fjornirson (19.11.2016),tnt369 (20.11.2010),TobiasA (12.04.2007),Topse (23.07.2008),Tuffi (06.01.2016),underxpressure (16.12.2013),vierlagig (05.02.2009),vollmi (17.05.2011),Werner v. Siemens (22.01.2012),wichi (19.01.2016),Wotsen (25.07.2011),xhasx (22.02.2008),xvitali (17.03.2011)

Ähnliche Themen

  1. Zeiger
    Von snowleopard1702 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.05.2011, 17:07
  2. Datentypen mit TSEND
    Von Papa_Bene im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.02.2011, 20:11
  3. ANY-Zeiger
    Von RAN im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.07.2006, 17:42
  4. Zeiger???
    Von Jochen Kühner im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.09.2004, 08:33
  5. Any-Zeiger
    Von Anonymous im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 16.10.2003, 20:28

Lesezeichen

Berechtigungen

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