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

Ergebnis 1 bis 3 von 3

Thema: Indirektes ansprechen einer (DB) Adresse als Schleife

  1. #1
    Registriert seit
    12.05.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Folgendes Problem: Ich habe einen Datenbaustein gefüllt mit Buchstaben. Diese sollen als Rezept an einer externen Anzeige erscheinen. Nun verhält es sich so das die Länge des Rezeptes 32 Byte Lang ist also 32 Buchstaben. Jetzt habe ich das Problem das ich keinen Einfluss auf die Externe Anzeige habe. Aber eine 0 wird dort als # Angezeigt und das sieht doof aus. Kurz ich möchte aus der 0 in dem Datenbaustein ein Leerzeichen machen.

    Ich habe mir überlegt jedes Byte in dem DB zu überprüfen auf 0 und wenn ja schreib ein Leerzeichen rein sonnst mache nichts. Klare if then else Sache.
    Ich könnte nun hingehen und jedes Byte einzeln abzufragen das ganze dann 32mal. Warum nicht von Startadresse bis Endadresse Zählen lassen und dabei die Abfrage laufen lassen. Hier mein Code: Das ganze in einem FC Zyklisch aufgerufen in AWL.

    Code:
    L 8 //+ 8 Byteweises Hochzählen)
    L #aktbyte //Datentyp DINT was anderes ging nicht)
    +D 
    T #aktbyte
    L 304 //Ende bei Byte Adresse 38 Um die Suche im DB zu Beschränken
    L #aktbyte
    ==D 
    SPBN next
    L 48 //Anfang bei Byte Adresse 6 Um zu Sagen wo es los gehen soll) 
    T #aktbyte
    next: L #aktbyte
    L 48
    >=D 
    SPBN end // Überprüfung des Inhaltes auf 0
    AUF DB 1
    L DBB [#aktbyte] //Hier hatte ich so meine Probleme AWL zu überlisten deshalb mit Datentyp Dint
    L 0
    ==I 
    SPBN end
    L 32
    T DBB [#aktbyte]
    end: NOP 0
    Im PLCSIM mit OB, nur diesem FC und einem DB funktioniert die Funktion. Lade ich es in mein Projekt zählt er das #aktbyte ins Nirvana und versucht Adressen zu lesen die es natürlich nicht gibt.

    Gibt es eine Andere Lösung für das Problem mit AWL?
    Geändert von judas78 (19.09.2012 um 17:42 Uhr)
    Zitieren Zitieren Indirektes ansprechen einer (DB) Adresse als Schleife  

  2. #2
    Registriert seit
    19.10.2010
    Beiträge
    325
    Danke
    15
    Erhielt 36 Danke für 31 Beiträge

    Standard

    Guten Abend,

    also deinen Programmcode verstehe ich so beim ersten Überfliegen nicht, aber sollte es nicht auch etwas abgewandelt gehen?
    So ungefähr:

    Code:
    L 0
    T #aktByte
    T #Schleifenzaehler
    
    ANF: NOP 0
    
    L Schleifenzaehler   //Schleifenzaehler für jeden Durchlauf erhöhen
    L 1
    +D
    T Schleifenzaehler  
    
    L 32                      //Schrittweite der Einzelnen Rezepte
    L Schleifenzaehler   // Anzahl der Durchläufe
    *D
    L 32
    -D
    T #aktByte               // aktuelle Byteadresse
    
    AUF DB 1
    
    L DBB[#aktByte]       // Vergleichen ob Character >0 (weiß nicht ob das jetzt Stimmt)
    L *Zeichen ungleich 0*
    >=I
    SPB M000
    
    L *Leerzeichen*        // Leerzeichen in die Byteadresse laden
    T DBB[#aktByte]
    
    M000: NOP 0
    
    L Schleifenzaehler
    L *Anzahl an Rezepten*  //Maximale Anzahl an Durchläufen
    >D                              //falls ja, Schleife verlassen
    SPB ENDE
    
    SPA ANF
    
    ENDE: NOP 0
    Den Code hab ich jetzt gerade so ausn Kopf geschrieben, aber sollte doch so ungefähr die Richtung sein, mit der es Funktionieren sollte.

  3. #3
    judas78 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.05.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @SPS-freak1

    Also dein Code hat mir sehr geholfen. Ich hab Ihn etwas abgewandelt und dann hat es geklappt. Danke

    Code:
         U     M      1.0
          SPBN  ENDE
          L     0
          T     #aktbyte
          L     6
          T     #Schleifenzaehler
    ANF:  NOP   0
          L     #Schleifenzaehler           //Schleifenzaehler für jeden Durchlauf erhöhen
          L     1
          +D    
          T     #Schleifenzaehler
    
          L     8                           //Schrittweite der Einzelnen Rezepte
          L     #Schleifenzaehler           // Anzahl der Durchläufe
          *D    
          L     8
          -D    
          T     #aktbyte                    // aktuelle Byteadresse
          AUF   DB     1
          L     DBB [#aktbyte]              // Vergleichen ob Character >0 (weiß nicht ob das jetzt Stimmt)
          L     0
          <>I   
          SPB   M000
          L     32                          // Leerzeichen in die Byteadresse laden
          T     DBB [#aktbyte]
    M000: NOP   0
          L     #Schleifenzaehler
          L     37                          //Maximale Anzahl an Durchläufen
          >D                                //falls ja, Schleife verlassen
          SPB   ENDE
          SPA   ANF
    ENDE: NOP   0

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 04.02.2012, 00:06
  2. Problem bei einer Such-Schleife
    Von Imker im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 26.01.2012, 19:40
  3. Antworten: 15
    Letzter Beitrag: 09.09.2011, 10:56
  4. Realisierung einer Schleife
    Von simon-brl im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 05.07.2011, 20:56
  5. Zeit als schleife
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.02.2006, 07:57

Lesezeichen

Berechtigungen

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