MB auffüllen...

pinolino

Level-1
Beiträge
261
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem, für das ich keine Lösung finde:

Je nach Bedingung soll das Bit0, das Bit1, das Bit2, usw. bis Bit7 mit einer 1 beschrieben werden.

Das würde mir durch folgenden Code (aufgezeigt bis Bit2) gelingen :

Code:
      L 1
      UN E 0.0
      SPB M1
      L 2
      UN E 0.1
      SPB M1
      L 4
      UN E 0.2
      SPB M1
      BEA
M1: T MB 3

Sind aber z.B. die beiden Bedingungen (UN E0.0 und UN E0.1) erfüllt, so soll das Bit0 und das Bit 1 gesetzt werden - das klappt jedoch mit meinem Code nicht!

Wie könnte ich das programmieren?

Vielen Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,

ja das ginge natürlich auch.

Aber ich hätte es gerne mal auf diese Art und Weise versucht - und am Ende dann das MB auf die Bits mit Status "1" abgefragt...

pinolino
 
Wenn das unbedingt nach dem Schema sein muss (warum auch immer), vielleicht so:
Code:
      L     0
      UN    E      0.0
      SPB   m1
      L     1
      +I    
m1:   UN    E      0.1
      SPB   m2
      L     2
      +I    
m2:   UN    E      0.2
      SPB   m3
      L     4
      +I    
m3:   UN    E      0.3
.
.
.
.
 
Danke Thomas,

aber hierbei wird doch nichts in ein MB geschrieben, oder?

Und wenn keine Bedingung erfüllt ist, dann wird doch alles zusammenaddiert?
 
Zuletzt bearbeitet:
Hallo Thomas!

Hm, na so ganz klar ist es mir nicht - es muss ja irgendwo eine Transferanweisung stehen, damit in das MB (alternativ auch MW) transferiert wird. An welcher Stelle kann das bewerkstelligt werden?

UND:

Ist z.B. E0.0 = 0 und E0.1/E0.2 = 1 so würde ja zunächst zu der Sprungmarke m1 gesprungen werden und anschließend nacheinander 0 + 2 + 4 (also 6) geladen werden. Oder sehe ich das falsch?

Gewünscht wäre für diese Bedingung (E0.0=0) ja eine 1 in Bit 0 von MB3.

Grüße pinolino
 
Hi,

ich hab zwar deine Frage glaube ich zumindest nicht 100%ig verstanden... aber ich denke was du suchst geht so...

Code:
L     EB     0
L     B#16#FF
XOW   
T     MB     3
???

Gruß

PhilippL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Philipp,

das wäre ja dann die Auswertung auf Bits mit Status 1, oder?

Ich suche nach einem Code, um bei E0.0=0 das Bit 0 (eines MB oder MW) mit einer 1 zu belegen, bei E0.1=0 das Bit 1 mit einer 1 zu belegen, bei E0.2=0 das Bit 2 mit einer 1 zu belegen, usw.

Dies klappt ja mit meinem Code aus dem 1. Thread recht gut - das Problem ist aber:

Zusätzlich soll auch eine Kombination möglich sein, also z.B. E0.0 und E0.1 = 0, dann soll in Bit 0 und in Bit 1 eine 1 eingetragen werden...
 
das wäre ja dann die Auswertung auf Bits mit Status 1, oder?

Schau dir mal die Wahrheitstabelle von einem XOR an.
0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0

Die Lösung von Phillip stimmt schon.

Gruß
Dieter

FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
 
...Gewünscht wäre für diese Bedingung (E0.0=0) ja eine 1 in Bit 0 von MB3...

Hi,

genau das passiert bei Thomas seinen Code, Du musst es nur bis zum ende fertig schreiben und beim letzten Sprung in das MB3 transferieren.

+ 1 ist binär 00000001
+ 2 ist binär 00000010
+ 4 ist binär 00000100
+ 8 ist binär 00001000
+ 16 ist binär 00010000
usw.

z.B. 0 +1 +2 = 3 schaut es binär so aus 00000011

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      L     0
      UN    E      0.0  // bei FALSE Sprung zu m1
      SPB   m1
      L     1
      +I    
m1:   UN    E      0.1  // bei FALSE Sprung zu m2
      SPB   m2
      L     2
      +I    
m2:   UN    E      0.2  // bei FALSE Sprung zu m3
      SPB   m3
      L     4
      +I    
m3:   UN    E      0.3  // bei FALSE Sprung zu m4
      SPB   m4
      L     8
      +I    
m4:   UN    E      0.4  // bei FALSE Sprung zu m5
      SPB   m5
      L     16
      +I    
m5:   UN    E      0.5  // bei FALSE Sprung zu m6
      SPB   m6
      L     32
      +I    
m6:   UN    E      0.6  // bei FALSE Sprung zu m7
      SPB   m7
      L     64
      +I    
m7:   UN    E      0.7  // bei FALSE Sprung zu m8
      SPB   m8
      L     128
      +I    
m8:   T     MB     3    // Ausgabe in MB

;)

Gruss Daniel
 
Hi,

ach so, falls Du es anders herum benötigst einfach aus dem UN ein U machen.

Gruss Daniel
 
Vielen Dank für eure Unterstützung!

@Daniel:

Du schreibst in deinem Code: // bei FALSE Sprung zu m...

Wird der Sprung nicht dann ausgeführt, wenn das VKE davor den Status "1" hat, also nicht FALSE sondern TRUE ist?

Danke, pinolino
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

nein, der Sprung wird abhängig vom VKE ausgeführt bei TRUE, aber der Eingang ist ja durch UN invertiert, daher Sprung zu mx bei FALSE.

Man hätte auch schreiben können.
Code:
U  E 0.0
SPBN m1
Somit wird zu m1 gesprungen wenn der E0.0 = FALSE ist.

Gruss Daniel
 
Aja ok Daniel - du beziehst dieses FALSE auf den Status der Eingänge.

Ich hatte es auf das VKE bezogen!

Danke dir...
 
...
Ich suche nach einem Code, um bei E0.0=0 das Bit 0 (eines MB oder MW) mit einer 1 zu belegen, bei E0.1=0 das Bit 1 mit einer 1 zu belegen, bei E0.2=0 das Bit 2 mit einer 1 zu belegen, usw.
...
Zusätzlich soll auch eine Kombination möglich sein, also z.B. E0.0 und E0.1 = 0, dann soll in Bit 0 und in Bit 1 eine 1 eingetragen werden...
...
Warum negierst Du dann das Eingangsbyte nicht einfach?
Code:
L     EB     0
INVI  
T     MB     3
 
Dank' euch für eure Beispiele!

In der Tat - auf die Einfachheit mit dem Invertieren des Eingangsbyte bin ich schlichtweg nicht gekommen... ja, das Gute liegt oft so nah! ;)

Nochmals danke an Alle!

Grüße
pinolino
 
Zurück
Oben