Step 7 DB mit Pointer durchsuchen (AWL)

danix46

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
sollte der Code nicht eigentlich Funktionieren?
Den DB Lagerplatzdaten ab dem Offset 10 nach dem Wert 123 zu durchsuchen ?

Code:
      OPN   "Lagerplatzdaten"
      LAR1  P#10.0

      L     3
Suchen : T  "Schleifenzähler"
      L MW [ AR1 , P#0.0 ]
      L     123
      ==I

      JC    out
      +AR1  P#2.0
      L     "Schleifenzähler"
      LOOP  Suchen

      CLR
      =     "Vergleich_Erfolgreich"

      JU    end
out:  SET
      =     "Vergleich_Erfolgreich"

end:  NOP 0
 
Noch eine kleinigkeit. Das ist mein DB. Nun muss ich ,wenn der Vergleich Wahr ist, das dazugehörige Bit "Platzdaten_Fertigungsabschluss" setzen. Hättest du dafür vielleicht einen Lösungsansatz ?
Code:
    Static                                        
    Platze_Verfügbar    Int    0.0           
    Plätze_Gesamt    Int    2.0         
    Länge_Platzdaten    Int    4.0               
    Beginn_Platzdaten    Int    6.0             
    Lagerplatzkennung    Int    8.0              
    Platzdaten_Auftragsnummmer    Int   10.0
    Platzdaten_Belegung    Int    12.0
    Platzdaten_Fertigungsabschluss    Bool     14.0
    Platzdaten_Auftragsnummmer_1    Int    16.0    
    Platzdaten_Belegung_1    Int         18.0
    Platzdaten_Fertigungsabschluss_1    Bool       20.0
    Platzdaten_Auftragsnummmer_2    Int    22.0     
    Platzdaten_Belegung_2    Int    24.0  
    Platzdaten_Fertigungsabschluss_2    Bool    26.0
 
Code:
out:  SET
   =     "Vergleich_Erfolgreich"
   [B]S     DBX [AR1,P#26.0][/B]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Volker,
vielen Dank für die Hilfe !!!
Aber das muss ja nicht zwingend P#26.0 sein. Außerdem könnte der Wert öfter vorkommen. Sollte ich dann mit dem 2.ten Register arbeiten und nebenbei Hochlaufen lassen und das dann setzen wenn der Vergleich wahr ist ?
 
Sorry
Hab mir deine Struktur nicht genau genug angeschaut.
Muss natürlich

Suchen : T "Schleifenzähler"
L DBW [ AR1 , P#0.0 ]
L 123
==I
S DBX [AR1,P#4.0] heißen

die tatsächliche Adressee ergibt sich durch das AR1 + den Versatz P#4.0

Schöner sähe das aus wenn du die sich wiederholenden Daten in ein array packen würdest.
entweder eine struct oder ein udt/plc-datentyp

Code:
Daten    ARRAY[1..10]            
    STRUCT            
       Platzdaten_Auftragsnummm    INT    0        
       Platzdaten_Belegung    INT    0        
       Platzdaten_Fertigungsabs    BOOL    FALSE        
    END_STRUCT
 
Zuletzt bearbeitet:
Ich danke euch vielmals !!!!!!
EDIT:
Wie würdet ihr das Lösen wenn der Wert öfter vorkommt. Den jetzt funktioniert es ja nur wen der Wert 1 mal vorkommt da ich dann ja aus der Schleife raus springe.

EDIT2:

Habs hinbekommen. Nur das komische ist es macht einen Unterschied ob ich unten " L DBW [ AR1 , P#10.0 ] " schreibe oder oben es mit
Code:
//L     "Lagerplatzdaten".Beginn_Platzdaten
//SLD   3
//LAR1
deklariere. Solte das normal nicht das selbe sein ?

Code:
      L     123
      T     #io_I_Auftragsnummer

      L     1
      T     #io_I_Nummer_Lagerdatenbaustein

      L     #io_I_Nummer_Lagerdatenbaustein
      T     #t_T_Nummer_Lagerdatenbaustein

      OPN DB [ #t_T_Nummer_Lagerdatenbaustein]
//L     "Lagerplatzdaten".Beginn_Platzdaten
//SLD   3
//LAR1

      A     #i_X_Start
      JCN   start

      L     "Lagerplatzdaten".Plätze_Gesamt
Suchen : T  "Schleifenzähler"

      OPN DB [ #t_T_Nummer_Lagerdatenbaustein]
      L DBW [ AR1 , P#10.0 ]
      L     #io_I_Auftragsnummer
      ==I
      = DBX [ AR1 , P#14.0 ]

      L     "Lagerplatzdaten".Länge_Platzdaten
      SLD   3
      +AR1

      L     "Schleifenzähler"
      LOOP  Suchen

start: NOP 0
Schöne Grüße,
Daniel
 
Zuletzt bearbeitet:
Zurück
Oben