Datenbausteinverwaltung.

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ihr SPS'ler.

Ich muss aus einer Reihe von Datenbausteinen ( zB DB100 - DB120 ) die niedrigste DB-Nummer raussuchen der leer ist. Ein Bit, das mir sagt DB ist leer habe ich.
Jetzt könnte ich natürlich eine Menge Vergleicher einsetzen aber ich hoffe das mir jemand zu einen eleganteren Lösung verhelfen kann.

Vielen Dank

Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vergleiche die Datenbausteine mit einem Referenzbaustein. Der Vergleich muss positiv sein. d.H. der Datenbaustein ist gleich und somit leer. Das muss nicht zwangsläufig 0 sein da ich auch CHAR im Baustein verwende.
 
Hallo Axel,

wenn die DB-Nummern fortlaufend vergeben sind und du ohnehin schon einen Vergleich durchführst, kannst Du doch mit dem Vergleichen beim kleinsten DB anfangen und den Vergleich abbrechen wenn der Vergleich positiv ist. Wo liegt dein Problem?

mfG, Stefan
 
hab hier mal ne schleife geschrieben, ist aber sicher noch möglich das teil zu vereinfachen...
funktion kann ich auch nicht gewährleisten, habs nicht getestet...

Code:
      L     100
      T     MD   104                    //Pointer DB
      L     0
      T     MD   108                    //Pointer M


      L     20
M001: T     MD   100                    //Schleifenzähler

      U     M [MD 108]                  //Merker DB frei?
      SPB   M002

      L     MD   108
      +     1
      T     MD   108                    //Ein Merker weiterzählen

      L     MD   104
      +     1
      T     MD   104                    //Ein DB weiterzählen


      L     MD   100                    //Schleifenzähler wieder laden
      LOOP  M001


M002: NOP   0

//Adresse für den DB steht jetzt in MD104
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Stefan

Ob ein DB ( Lagerplatz) leer oder nicht leer muss ich für die Visualisierung wissen. Daher der Vergleich der Bausteine mit dem Referenzbaustein.
Den "kleinsten" leeren Platz brauche ich für das Auffüllen des Lagers

@ Markus

Das könnte gehen. Leider habe ich mit Schleifenprogrammierung bisher wenig bis keine Erfahrung.
Ich bin König der Schrittketten ;-)... ist auch einfacher, finde ich ....

Vielen Dank für Eure Hilfe.

Axel
 
Die Schleife sieht schon richtig aus, wenn die Merker bei M0.0 beginnen und die DBs bei 100.
Ich würde aber nur eine Zähler für die Merkeradresse in der Schleife hochzählen. Spart im worst case 60 Operationen in der Scheife.
Die Adresse des DB kann nachher errechnet werden:
...
M002: NOP   0
L MD 108
L 100
+I
T MD 104

//Adresse für den DB steht jetzt in MD104
 
jo klar, die zahlen für die pointer müssen natürlich noch angepasst werden...

agepasst und vereinfacht sollte sie schon noch werden, aber ich denke zum verständniss ist das so ganz ok.

/
kleiner tipp
wenn ihr awl code in eure beiträge einfügt, dann benutzt den code-tag des forums. einfach vor dem awl code den tag öffnen mit [ code ] und am ende mit [/ code ] wieder schließen. dann sieht das so aus wie bei mir oben.
(die tags natürlich ohne leerzeichen)
 
Zurück
Oben