In einem byte schauen ob ein Bit für ca. 1M lang 0 ist

Backdoor

Level-1
Beiträge
132
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

Hab da mal ne frage, steh heute auch total auf dem Schlauch.

Folgendes

Möchte In einem byte(word) schauen ob ein Bit für ca. 1min lang 0 ist, egal welches, aber wie realisier ich das?? :confused:


Die Bits die ich nicht brauche in dem byte (word) würd ich mir ausmaskieren
in dem ich sie einfach auf 1 setze.

Lg Chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die superschnelle Antwort

Mit deiner Lösung würde ich aber für jedes Bit einen eigenen Timmer benötigen und genau das möchte ich nicht.
Brauche eine Lösung in der ich nur 1 timer brauche.

Lg Chris

Hallo

Code:
UN "BIT"
L S5T#1M
SE T "1minute"
U T "1minute"
= "1_minute_0_Signal
 
Das Byte mit CMP<>I mit der Zahl 0 vergleichen, evtl. ist bei aktiver Typüberprüfung(Einstellung des Editors),
noch ein Move auf eine Temp-Variable notwendig.

Mfg
Manuel
 
Danke habs grad gefunden, da ich mit FUP nicht viel arbeite war mir CMP nicht geläufig, also wenn ich das richtig verstanden hab sollte ein Vergleich auf <>I 0 die Lösung sein.

Soweit war ich eig schon

Code:
L MB 200
L 0
<>I
=Mx.x

und Mx.x wird immer 1 sein?

Das ist genau mein Problem ich will wissen ob ein Bit in dem Byte für 1m 0 ist, oder steh ich noch immer am Schlauch hmmm :)


Vergleich <> 0


Compare: einfügen Leerbox-Zeichen--> CMP<>I auswählen
 
Ok ich hab mal nen Ansatz der auch funktioniert, aber ev. kann das von den Pro´s noch jemand eleganter lösen.

Code:
      L     MB   200
      L     2#11111111
      XOW   
      T     MB   204

    

      O     M    204.0
      O     M    204.1
      O     M    204.2
      O     M    204.3
      O     M    204.4
      O     M    204.5
      O     M    204.6
      O     M    204.7
      L     S5T#1M
      SE    T    445
 
Hi,

Code:
L   MB204
L    0
<>I
L S5T#1M
...
wäre das selbe. ;)

Gruss Daniel

aber du kannst die einzelnen bits nicht maskieren außer du schreibst

Code:
L   MB204
L    0  //mit 0 wird das erste bit, mit 2 das zweite, mit 4 das vierte und soweiter....
<>I
L S5T#1M
...

und hoffst, dass sich die anderen bits ja nicht ändern.
 
mir schwebt ja eine lösung mit einem array[0..7] of int als timer-puffer für alle bits vor, getriggert vom plc-puls 1hz und dann über das ganze byte in geguckt, ob sich ein bit geändert hat und wenn 0, läuft die zeit für das bit los ... das ganze in einem FB und fertsch :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube ich habe die Frage auch nicht richtig verstanden aber es ist das selbe wie die 8x oder es kommen ja durch das XOR eh nur noch die die er haben will raus. ;)

Gruss Daniel
 
Vielleicht reicht schon die folgende Lösung aus:

Code:
      L     MB   200                  // Byte
      L     2#10011001                // Bits ausmaskieren (Bits = log 1 setzen)
      OW    
      L     2#11111111                // Abfrage, ob ein Bit = log 0  
      <>I   
      L     S5T#1M                    // Zeitverzögerung
      SE    T    445

Gruß Kai
 
Da hab ich mich wohl verlesen, du hast geschrieben, wenns "0" ist ...

Dann halt so (im Prinzip die Kurzvariante der XOW Maskierung):
Code:
L MB...
INVI
L 0
<>I
L S5T#1m
SE T0

Wobei die Varianten den Nachteil hat, wenn Bit0 jetzt 0 wird, nach 30s wird Bit1 0, einen Zyklus später Bit0 wieder 1,
dann läuft dein Timer trotzdem ab...

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

Hab da mal ne frage, steh heute auch total auf dem Schlauch.

Folgendes

Möchte In einem byte(word) schauen ob ein Bit für ca. 1min lang 0 ist, egal welches, aber wie realisier ich das?? :confused:


Die Bits die ich nicht brauche in dem byte (word) würd ich mir ausmaskieren
in dem ich sie einfach auf 1 setze.

Lg Chris

Meinst Du
a) genau EIN Bit
b) genau dasselbe Bit

zu a)
wenn Du 1111 0011 für 60s lang anstehen hast, ist dann Deine Bedingung auch erfüllt?

zu b) wenn Du 1111 0111 für 30 Sekunden und dann 1111 1011 für 30 Sekunden hast, ist dann Deine Bedingung erfüllt?

lG
Karl
 
Dann halt so (im Prinzip die Kurzvariante der XOW Maskierung):
Code:
L MB...
INVI
L 0
<>I
L S5T#1m
SE T0

Der Programmcode mit einem INVI-Befehl (Einerkomplement eines 16-Bit-Wertes) funktioniert leider nur mit einem MW (16-Bit-Wert) und nicht mit einem MB (8-Bit-Wert).

Wenn man ein MB (8-Bit-Wert) lädt und dann den INVI-Befehl (Einerkomplement eines 16-Bit-Wertes) anwendet, werden im AKKU die Bits 8 - 15 auf log = 1 gesetzt. Der nachfolgende Vergleich auf <> 0 funktioniert dann nicht mehr.

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Möchte In einem byte(word) schauen ob ein Bit für ca. 1min lang 0 ist, egal welches, aber wie realisier ich das?? :confused:

Geht es jetzt um Byte oder ein Wort?
Musst du auch erkennen, wenn nach dem 1. Wechsel nach null ein weiteres Bit sich ändert?

Mit den bisher vorgestellten Lösungen ist folgendes Problem:
Bit 0 wird null
Zeit startet
Nach ca 58 sec
Bit 1 wird Null
Zeit läuft ja schon, also geschieht nix.
Nach 59sec
Bit 0 wird eins
Jetzt lässt Bit 1 die Zeit weiter ablaufen,
aber das Bit 1 war nicht 1 Minute eins.

Kannst du uns das genauer bitter erklären was du willst?


Danke

bike
 
Ich habe jetzt eine halbe Stunde nachgedacht und bin der Meinung, dass wenn es sich um ein spezielles Bit handelt - also nicht so wie Beitrag 15 b) dann ist es mit einem Timer nicht lösbar.

Es geht einfach die Information der zeitlichen Reihenfolge verloren.
Bit 2 geht
15s später geht Bit6
7s später geht Bit3
12s später kommt Bit2 wieder... jetzt müsste ich wissen wie spät es bei Bit6 ist
;-)

Wenn ich so ein Problem hätte, würde ich dies in einem FB mit zB 16 IEC-Timern lösen.

lG
Karl
 
Zurück
Oben