MW mit geringstem Wert ausgeben

PättPit

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit, werte Forengemeinde...

Mein Problem besteht darin, daß ich anhand ausgerechneter Werte jeweils anstehende Wartungsmeldungen ausgeben lassen möchte, mir aber die Idee der Realisierung fehlt.

Im Einzelnen ist es so, daß ich Werte von xStd - 0Std in MWs geschrieben bekomme. Diese Werte sind die Stunden bis zur jeweils nächsten Wartung. Es sind insg. 5 MWs.

Nun möchte ich mir das jeweilige MW mit dem geringsten Wert (evtl durch einen Vergleich?:rolleyes:) ausgeben lassen.

Hat jemand eine Idee, wie man das Problem lösen kann?


Beste Grüße,

PättPit
 
Du solltest..

mal die Forensuche nach Bubblesort durchforsten.
Da findest du bestimmt eine Lösung

der_iwan
 
@Günni:

Verzeih mir bitte aber ich beschäftige mich nun noch keine 3 Monate mit der Materie. Etwas nicht zu wissen ist für mich keine Schande. Eine Schande ist es nur, wenn man sich nicht informiert ;)
Ich kenne bisher nur die normalen Vergleicherfunktionen.
Sprich auf größer, kleiner, gleich ungleich mit boolschem Ausgang.
Ich möchte halt eine Reihe von MW vergleichen und das kleinste ausgegeben bekommen. Das habe ich bisher noch nie gemacht. :oops:


@Iwan:
Danke, ich werde mich nachher mal mit mit Deinem Stichwort auseinanersetzen. Nun ruft erstmal die Sonne ;)


Dank und Gruß,

PättPit
 
(evtl durch einen Vergleich?:rolleyes:)
Natürlich durch einen Vergleich!
Mit 4 simplen Vergleichen nacheinander kann man den kleinsten Wert ermitteln.
Man muß nur im Akku1 den jeweils kleinsten Wert zum nächsten Vergleich mitnehmen
(AWL-Stichwort: POP oder auch TAK, falls Akku2 der kleinere ist).

Du kannst Dein Problem aber auch mit der IEC-Function MIN "erschlagen".
Frag' mich aber bitte nicht, in welcher Step7-Bibliothek Du die findest.
Ich benutze diesen oversized-Baustein nie für sowas simples. ;)

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
// Min-Funktion
L #MW1 // Ersten Wert auf Ausgabe vorbesetzen, ist keiner der anderen 
T #MIN // Werte kleiner, Verbleibt der Erste Wert als Ausgabe

L #MIN // Eigendlich überflüssig! Dient nur dem besseren Verständnis
L #MW2 // Zweiten Wert Laden und 
<=I // mit bisher kleinstem Wert vergleichen
SPB nc01 // Wenn der letzte Wert kleiner oder gleich dem aktuellen ist, springe zum nächsten Vergleich

T #MIN // Sonst speichere aktuellen Wert als kleinsten Wert und fahre mit nächstem Vergleich fort
nc01: L #MIN // Wiederholung mit drittem Wert
 L #MW3
<=I
SPB nc02

T #MIN
nc02: L #MIN // Wiederholung mit viertem Wert
L #MW4
<=I
SPB nc03

T #MIN
nc03: L #MIN // Wiederholung mit fünftem Wert
 L #MW5
<=I
SPB nc04

T #MIN
nc04:

Nur als kleines Beispiel zum generellen Verständinis.
Hier kann man noch ne ganze Menge sparen und für mehr Übersicht sorgen!:ROFLMAO:
 
Schau die mal das Beispiel an, ist zwar DB und der größte Wert, es muss aber nur der Vergleicher geändert werden. Falls man den DB nicht braucht kann man das auch auf Merker umschreiben falls die hintereinander liegen.
 
Spar-Variante

Hier kann man noch ne ganze Menge sparen und für mehr Übersicht sorgen!:ROFLMAO:
Code:
// kleinsten Wert von 5 INT-Werten ermitteln: nacheinander vergleichen, 
// den jeweils kleineren Wert im Akku1 zum nächsten Vergleich mitnehmen
      L     #MW1
      L     #MW2
      <I                // #MW1(Akku2) < #MW2(Akku1) ? 
      SPBN  M003        // nein -> #MW2(Akku1) mitnehmen
      POP               // ja -> #MW1(Akku2) in Akku1 mitnehmen

M003: L     #MW3
      <I                // bisheriger Min-Wert(Akku2) < #MW3(Akku1) ?
      SPBN  M004        // nein -> #MW3(Akku1) mitnehmen
      POP               // ja -> Min-Wert(Akku2) in Akku1 mitnehmen

M004: L     #MW4
      <I    
      SPBN  M005
      POP   

M005: L     #MW5
      <I    
      SPBN  MMIN
      POP   

MMIN: T     #MIN        //Akku1 enthält kleinsten Wert -> ausgeben

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
// kleinsten Wert von 5 INT-Werten ermitteln: nacheinander vergleichen, 
// den jeweils kleineren Wert im Akku1 zum nächsten Vergleich mitnehmen
      L     #MW1
      L     #MW2
      <I                // #MW1(Akku2) < #MW2(Akku1) ? 
      SPBN  M003        // nein -> #MW2(Akku1) mitnehmen
      POP               // ja -> #MW1(Akku2) in Akku1 mitnehmen

M003: L     #MW3
      <I                // bisheriger Min-Wert(Akku2) < #MW3(Akku1) ?
      SPBN  M004        // nein -> #MW3(Akku1) mitnehmen
      POP               // ja -> Min-Wert(Akku2) in Akku1 mitnehmen

M004: L     #MW4
      <I    
      SPBN  M005
      POP   

M005: L     #MW5
      <I    
      SPBN  MMIN
      POP   

MMIN: T     #MIN        //Akku1 enthält kleinsten Wert -> ausgeben
Gruß
Harald

So und jetzt das ganze bitte noch mit loop schleife :ROFLMAO:

Hallo das war ein witz
 
Zurück
Oben