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

Ergebnis 1 bis 6 von 6

Thema: Auf DB-Inhalt zugreifen

  1. #1
    Registriert seit
    21.10.2005
    Beiträge
    48
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    derzeit bastele ich an einem FB herum und habe augenblicklich folgendes Problem:

    Unter anderem kann man am Eingang meines FB's als Input-Variable einen Global-DB verknüpfen. Wie kann ich nun innerhalb des FB's auf die einzelnen Adressen des verknüpften DB's zugreifen? Mir z.B die Adresse 2.0 holen und weiterverarbeiten. Ich möchte eine Art Pointer programmmieren, der innerhalb einer Schleife immer auf die nächste Adresse im angeschalteten DB springt, bzw. hochzählt. Es wäre schön, wenn mir diesbezüglich einer weiterhelfen könnte...

    Danke!

    Grüsse delacasa
    Zitieren Zitieren Auf DB-Inhalt zugreifen  

  2. #2
    Registriert seit
    07.06.2006
    Ort
    Bayern
    Beiträge
    623
    Danke
    27
    Erhielt 156 Danke für 139 Beiträge

    Standard

    Hallo Kollege,

    anbei ein Programmbeispiel wie man so etwas bewerkstelligen kann.

    Kurze Erläuterung dazu:

    1. Das Adressregister 1 muss gesichert werden, da wir es in unserem FB
    selber verbiegen werden.

    2. Da der FB wahrscheinlich Multiinstanzfähig werden soll muss der Adressoffset des aufrufenden FB´s ermittelt werden.

    3. Der übergebenen Zeiger wird mit dem Adressoffset verrechnet.

    4. Der Zeiger wird in seine Bestandteile DB-Nummer und Adresse zerlegt

    5. Die Adresse wird in das Adressregister geladen

    6. Der ermittelte DB wird aufgeschlagen

    7. Im Schleifenbeispiel wird pro Aufruf 15 mal die Schleife ausgeführt.
    Dabei werden jeweils 2 aufeinanderfolgende Worte geladen.
    Nach jedem Schleifendurchlauf wird das Adressregister um 4 Byte erhöht,
    somit werden beim nächsten Durchlauf die 2 nächsten Worte geladen.
    Innerhalb der Schleife können die geladenen Worte dann beliebig weiterverarbeitet werden.

    8. Zum Schluss muss das Adressregister wieder zurückgesichert werden

    Ich hoffe Dir damit geholfen zu haben
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Auf DB-Inhalt zugreifen  

  3. #3
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard

    Hab mir grad eben einen Baustein geschrieben mit dem ich mir REAL-Werte in einen DB schreiben kann, angetriggert mit einem Impuls.
    Vielleicht kannst du ja damit was anfangen

    Hier die AWL-Quelle:
    Angehängte Dateien Angehängte Dateien
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

  4. #4
    Registriert seit
    21.10.2005
    Beiträge
    48
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Euch beiden. Schon einmal ein Anfang. Bin nämlich ein Neuling in Sachen indirekter Adressierung. Morgen mache ich weiter. Den DB habe ich schon. Er sieht folgender Maßen aus:

    0.0 dummy
    2.0 xxxx vom Typ int
    4.0 xxxx vom Typ int
    6.0 xxxx vom Typ Word
    8.0 xxxx vom Typ Word
    10.0 xxxx vom Typ int
    12.0 xxxx vom Typ int
    14.0 xxxx vom Typ Word
    16.0 xxxx vom Typ Word
    '
    '
    V
    usw

    Der Pointer soll nun solange die Zeilen abklappern, bis die erste Int-Variable eine 0 enthält. Er soll immer 4 Zeilen lesen und jeweils auf vier interne Variablen im FB schreiben. Ich benötige dafür eine Art Schleifenprogrammierung. Vielleicht kann mir noch Einer von Euch auf die Sprünge helfen.

    Danke!
    delacasa

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.260
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Such in Step7 mal nach LOOP, das ist der Schleifenbefehl, ein Beispiel ist auch dabei. Zu indirekter Adressierung hast du ja schon etwas, bei Step7 mal unter 'indirekt' suchen (Nimm den Reiter "SUCHEN" in der Hilfe, dann findest du auch die Beispiele dazu.).

    Hier mal noch ein einfaches Beispiel mit Schleife und indirekter Adressierung:

    Code:
     
          AUF   "STOERMELDUNGEN DB"
          L     P#0.0
          T     #pointer_1
          L     0
          T     #ergebnis
          L     125                         //Anzahl Störmeldungen (Wortweise)
    SC02: T     #zaehler
          L     DBW [#pointer_1]            // Lade Datenwort
          L     0                           // Lade 0
          ==I                               // keine Störmeldung !!!
          SPB   NUL2                        // Ergebnis nicht hochzählen
          L     #ergebnis                   // bei Erg <> 0 Ergebnis hochzählen
          L     1                           // um 1 erhöhen
          +I    
          T     #ergebnis
    NUL2: NOP   0                           // Zeiger erhöhen aud nächstest DW
          L     #pointer_1
          L     P#2.0
          +D    
          T     #pointer_1
          L     #zaehler
          LOOP  SC02                        // Schleife solange, bis #zaehler auf 0
          L     #ergebnis                   // bei Ergebnis <> 0 liegt Fehler vor
          L     0
          <>I   
          =     "M1.0 Sammelfehler"
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So in etwa könnte das aussehen, da müsstest du jetzt noch was dran machen weil die statischen Variablen durch die Schleife immer wieder überschrieben werden bis die besagte 0 kommt.

    Code:
     
     
          UN    #Enable                     // keine Freigabe
          BEB                               // Baustein beenden
          AUF   #Arbeits_DB                 // DB aufschlagen
          L     #Offset                     // Anfangsadresse in Byte
          SLD   3                           // 3Bit links 
          LAR1                              // Pointer in Adressregister 1
    loop: L     DBW [AR1,P#0.0]             // wenn erste INT = 0
          L     0                           // *
          ==I                               // *
          BEB                               // Ende
          L     DBW [AR1,P#0.0]             // Anfangsadresse
          T     #INT_1                      // statisch 1
          L     DBW [AR1,P#2.0]             // +2 Byte
          T     #INT_2                      // statisch 2
          L     DBW [AR1,P#4.0]             // +4 Byte
          T     #WORD_1                     // statisch 3
          L     DBW [AR1,P#6.0]             // +6 Byte
          T     #WORD_2                     // statisch 4
          TAR1                              // Adressregister in Akku
          L     P#8.0                       // hochzählen zum nächsten 
          +D                                // 4er Paket
          LAR1                              // neue Adresse Register
          SPA   loop                        // Schleife
    Den DB würde ich in STRUCt´s von jeweils deinen 4 Werten aufteilen
    Geändert von Lars Weiß (10.06.2006 um 11:48 Uhr)
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

Ähnliche Themen

  1. Datenbaustein Inhalt in DB [?] verschieben
    Von Rambo im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.01.2011, 19:07
  2. S5-110 Eprom-Inhalt interpretieren
    Von Cisdur im Forum Suche - Biete
    Antworten: 6
    Letzter Beitrag: 13.03.2010, 22:28
  3. DB Inhalt überschreiben
    Von Black Scorpion im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.07.2009, 00:02
  4. FC-Aufruf mit DB-Inhalt
    Von Drain im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 25.09.2007, 07:56
  5. DB Inhalt löschen mit SCL
    Von Rose im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.06.2006, 12:29

Lesezeichen

Berechtigungen

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