DB auswerten aber wie?

Servernexus

Level-1
Beiträge
260
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus, ich habe folgendes Problem.
Fakten: ein DB mit 10 Int, jeder ist mit einem Wert belegt, diese ändern sich und manche sind mit 0 beschrieben.
Ich muss nun überprüfen, wenn z.B im Wort 1 eine 4 steht, im Wort 2 eine 1, im Wort 3 eine 0, Wort 4 eine 2 usw. dann mache das, ändern sich die Werte dann mache das. Kann ich die Werte des kompletten DB irgendwie auswerten, ohne dass ich die einzelnen Wörter mit Werten vergleichen muss?
Ich hoffe Ihr wisst was ich meine.
Danke
 
Nicht ganz...
Soll nur auf Wertänderungen reagiert werden?
Oder soll die Wertänderung UND der Wert betrachtet werden, um z.B. unterschiedliche Aktionen je nach Wert auszuführen?

Vielleicht konkretisierst Du das Ganze noch etwas.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

In einer Schleife die Wörter einlesen, vergleichen, reagieren, Zeiger zum nächsten Wort .... einlesen..

Stichwörter: Loop,Next, Zeiger, Inc, Pointer

Suchfunktion: Schleife, DB auswerten...
 
Nicht ganz...
Soll nur auf Wertänderungen reagiert werden?
Oder soll die Wertänderung UND der Wert betrachtet werden, um z.B. unterschiedliche Aktionen je nach Wert auszuführen?

Vielleicht konkretisierst Du das Ganze noch etwas.

Mache mit Teil 1 Maschine 2 z.B. fräsen
nächster Befehl -> Mache mit Teil Typ 2 Maschine 3 z.B. Bohren
Es soll also immer verglichen werden welche Werte in welchem Wort stehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann ist die Antwort von Verpolt schon fast alles was Du brauchst. Wo klemmt es denn?

Habe mir das von Verpolt mal kurz angesehen, aber bis ich da durchsteige (wenn überhaupt) das dauert, bin in AWL leider nicht sehr fit. Werds mir mal genauer anschauen.
Beispiel AWL Quelle, die ich gefunden habe ist von Volker.
 
Zuletzt bearbeitet:
Hallo,
dein Hauptproblem hier wird sein, die Aufgabestellung (für dich) vernünftig zu formulieren.
Wenn du z.B. die genannten 10 INT's auf eine Änderung gegenüber der letzten Einstellung überprüfen willst so geht das nur wenn du auch weißt, was zuletzt eingestellt war - also vergleiche DB1.DBW2 (akt. Einstellung) mit DB1.DBW42 (letzte Einstellung), wenn ungleich dann (z.B.) setze Bit und übertrage DB1.DBW2 nach DB1.DBW42 (akt. Wert als letzten erkannten "merken"). Das wäre sicher ein Fall für eine Scheife.
Wenn jedoch jedes Wort einer Station oder einem Aggregat die Arbeitsweise diktiert dann geht das doch praktikabler über den "Standard"-Vergleich.

Gruß
Larry
 
Sollte Dich dennoch die Schleife interessieren, dann gib mal in S7-AWL

Code:
LOOP Next
ein

Danach F1 auf den Befehl LOOP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe z.B fogenden Befehl im DB stehen 1135041350 auf den ich reagieren muss.
kommt der nächste Befehl, im selben DB, das heist der Wert hat sich folgendermaßen geändert z.B. 3315035041 dann muss ich eine andere Aktion starten.
 
Das wäre ja dann Minimum ein Doppelwort (32bit)

Es sind 10 Int mit den entsprechenden Werten



Der nächste Befehl im selben Doppelword? Oder in einem anderen?

Der nächste Befehl steht in den selben Int aber halt mit anderen Werten

Es sind 10 Int mit den entsprechenden Werten
Der nächste Befehl steht in den selben Int aber halt mit anderen Werten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So ähnlich könnte es ohne Schleife gehen

Code:
L "BefehlsDoppelwort"
L "Befehlskombi" // 12365444    
==D
SPBN _be2 //springe nicht, wenn "1"

= "machWas"

SPA Ende // Springe immer

_be2: L "BefehlsDoppelwort"
L "Befehlskombi" // 444555666
==D

SPBN _be3

= "machWiederWas"

SPA Ende
.
.
_be3: 




Ende: nop 0
 
Super jetzt wirds interressant.
Nur wie bekommeich nun die 10 Int in die erste Zeile und den Vergleichswertwert mit 10 Int in die 2. Zeile deiner Anweisung?
 
Code:
L "BefehlsDoppelwort" [COLOR=#ff0000]//Befehlswort ändert sich zur Laufzeit ?[/COLOR]
 L "Befehlskombi[COLOR=#ff0000]1[/COLOR]" // [COLOR=#ff0000]Vergleich mit 1. Wert[/COLOR] // 1234556 
==D 
SPBN _be2 //springe nicht, wenn "1"
  = "machWas"

 SPA Ende // Springe immer

_be2: L "BefehlsDoppelwort" 
L "Befehlskombi[COLOR=#ff0000]2[/COLOR]" // [COLOR=#ff0000]Vergleich mit 2. Wert[/COLOR] / 4445555
 ==D  
SPBN _be3

  = "machWiederWas"  

SPA Ende 

_be3: L "BefehlsDoppelwort" 
L "Befehlskombi[COLOR=#ff0000]3[/COLOR]" // [COLOR=#FF0000]Vergleich mit 3. Wert [/COLOR]/ 88885555
 ==D  

SPBN _be4  

= "machdochWas"
SPAEnde

_be4: ...


Ende: Nop 0

Also es gibt 10 Befehle und die sind fix, dann für Befehlskombi deine "Wünsche eintragen"

10 mal den DOPPELInteger mit deinen möglichen 10 Befehlen vergleichen. Einer wird schon passen--->machWas, oder sprung zum nächsten Vergleich.

PS: Werde aber aus deiner Formulierung/Aufgabe immernoch nicht schlau. 10 mögliche Befehle für 1 Doppelinteger (10 Kombi's) oder pro (10)Doppelinteger 10 Befehle (100 Kombi's)
 
Zuletzt bearbeitet:
Ich glaube, der TE meint, dass in jedem Int eine Ziffer steht, und dass er 10 Integer mit je einer Ziffer hat.

genau so 10 Int für einen Befehl und in jedem Int steht eine Zahl (Wert). Aus diesen Zahlen oder Ziffern setzt sich ein Befehlssatz zusammen auf den ich reagieren muss
z.b xxx1xx4xx3 heisst xxxMaschine1xxTyp4xxbohren.
So verständlicher?
 
Dann wärs fast einfacher das Int zum String wandeln und auf die einzelnen Zeichen zu vergleichen...
Wären sogar mit KOP, pro Int, nur ein paar (grosse) Netzwerke.
 
Okay, ich werd hier auch nicht schlau. Dein DB sieht so aus:

Zeile 1 - INT - 4
Zeile 2 - INT - 3
Zeile 3 - INT - 2
etc

zusammengefügt gibts das bei dir dann sowas: 0040302 ??

mach es einfach so: 2 (* 1) + 3 * 100 + 4 * 10000 ....

so hast du deine Zahlenkette quasi horizontal vor dir und kannst sie mit 0020109 oder so vergleichen...

musst halt aufpassen, dass keiner von den Int dann den nächsten verändert...

wenn du das so zusammengebaut hast, kannst du ohne weiteres den code von Verpolt verwenden.
 
Zuletzt bearbeitet:
Zurück
Oben