Indirektes ansprechen einer (DB) Adresse als Schleife

judas78

Level-1
Beiträge
3
Reaktionspunkte
0
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 [COLOR=#00ff00]//+ 8 Byteweises Hochzählen)[/COLOR]
L #aktbyte [COLOR=#00ff00]//Datentyp DINT was anderes ging nicht)
[/COLOR]+D 
T [COLOR=#00ff00]#aktbyte
[/COLOR]L 304 [COLOR=#00ff00]//Ende bei Byte Adresse 38 Um die Suche im DB zu Beschränken
[/COLOR]L #aktbyte
==D 
SPBN next
L 48 [COLOR=#00ff00]//Anfang bei Byte Adresse 6 Um zu Sagen wo es los gehen soll) 
[/COLOR]T #aktbyte
next: L #aktbyte
L 48
>=D 
SPBN end [COLOR=#00ff00]// Überprüfung des Inhaltes auf 0
[/COLOR]AUF DB 1
L DBB [#aktbyte] [COLOR=#00ff00]//Hier hatte ich so meine Probleme AWL zu überlisten deshalb mit Datentyp Dint
[/COLOR]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?
 
Zuletzt bearbeitet:
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.
 
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
 
Zurück
Oben