Step 7 Bereich mit einem Pointer prüfen und auswerten

tech_it

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte aus einem Merkerbereich zwischen 200-250 die Bits MX.0, MX.1 und MX.2 auf 1 überprüfen.
Sollte eines dieser Bits 1 haben, soll der jeweilige Ausgang beschrieben werden.

Ich habe da auch schon etwas zusammengeschrieben. Allerdings möchte ich es zusammenfassen. Evtl. mit einem LOOP??

Kann mir da jemand helfen?

L 200
SLW 3
LAR1
O M [AR1,P#0.0]
O M [AR1,P#0.1]
O M [AR1,P#1.0]
O M [AR1,P#1.1]
O M [AR1,P#2.0]
O M [AR1,P#2.1]
//...
= A 1.0

O M [AR1,P#0.2]
O M [AR1,P#1.2]
O M [AR1,P#2.2]
//..
= A 1.1
 
Hi,
ich hätts jetzt mal so gemacht, ich hab schnell mal nen FC gemacht der das auswertet:
z.B:
Code:
      L     P##ADDR                     //IN Parameter POINTER
      LAR1  
      L     W [AR1,P#0.0]
      T     #dbnr
      AUF   DB [#dbnr]
      L     D [AR1,P#2.0]
      LAR1                              
      L     #MENGE                     //IN Parameter INTEGER
next: T     #zaehler
      O      [AR1,P#0.0]
      O      [AR1,P#0.1]
      =     #OUT                        //OUT Parameter BOOL
      SPB   end
      +AR1  P#1.0
      L     #zaehler
      LOOP  next
end:  BEA

Ginge für deine Anforderung jetzt auch einfacher, aber so wärs universeller (Funktioniert mit Merkeren und einem DB-Bereich), man könnte das Spiel noch weiter treiben und die Zeile +AR1 P#1.0 als Parameter übergeben usw...

Und für den zweiten ausgang halt AR1,P#0.0 durch P#0.2 ersetzen...

Edit: Man könnte auch ein gewünschtes Bitmuster als Byte übergeben und anhand dessen vergleichen... Dann wäre man wirklich flexibel.
 
Zuletzt bearbeitet:
Hallo,
ich hab das mit dem Bitmuster auch vorhin gemacht, denke das kann ich selbst mal brauchen :)
Code:
      L     P##ADDR                     //IN Parameter POINTER
      LAR1  
      L     W [AR1,P#0.0]
      T     #dbnr
      AUF   DB [#dbnr]
      L     D [AR1,P#2.0]
      LAR1                              //IN Parameter INTEGER
      L     #MENGE
next: T     #zaehler
      L     #BITMUSTER                  //IN Parameter BYTE
      L     B [AR1,P#0.0]
      UW    
      L     0
      <>I   
      =     #OUT                        //OUT Parameter BOOL
      SPB   end
      +AR1  P#1.0
      L     #zaehler
      LOOP  next
end:  BEA

Zur Erklärung der Parameter falls es noch wer brauchen kann...

ADDR erwaret einen Pointer auf den Start des zu prüfenden bereichs z.B.: P#M200.0
MENGE gibt an wieviele Bytes ab der Startadresse man prüfen will
BITMUSTER ist ein Byte gibt an welche Bits man prüfen will, also z.B. für Bits x.0 und x.1 hängt man hier ein Byte mit Inhalt 3 an, für Bit x.2 eine 4 usw... Binärcodiert eben.

LG
 
Zurück
Oben