Step 7 Vergleich Merkerdoppelwort auf ungleich Null

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ihr,

ich hänge grad an einem (eigentlich einfachen) Problemchen - und zwar soll ein MD auf ungleich Null abgefragt werden und dann ein Ausgang gesetzt werden.


Das klappt genau 1x!

ABER: Sobald danach der Ausgang rückgesetzt wird und es abermals zu einer Zustandsänderung von MD55 kommt, so wird der Ausgang nicht mehr neu gesetzt, da ja keine Flankenänderung stattgefunden hat...

Code:
      L     MD    55
      L     0
      <>D   
      FP    M     30.0
      S     A      2.0

      U     E      5.0
      R     A      2.0


Wie könnte ich das Ganze ummodeln, damit mit nur einer Flanke bei jeder Zustandsänderung von MD55 der Ausgang neu gesetzt wird?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

schaut nach Neualarmerkennung aus. Dann funktioniert das von Gerhard nicht, weil die Störungslampe auch bei gehender Störung angeht. Positive Flankenerkennung doppelwortweise. Wenn Flanken-DW ungleich 0 -> Bit setzen.

André
 
Soll der Ausgang immer an sein wenn MD55 <> 0 ist oder nur wenn es von 0 weg wechselt?

Im Moment hast Du Variante zwei programmiert, da der Merker M30.0 nur zurückgesetzt wird wenn das MD auf 0 ist...
 
Soll der Ausgang immer an sein wenn MD55 <> 0 ist oder nur wenn es von 0 weg wechselt?

Im Moment hast Du Variante zwei programmiert, da der Merker M30.0 nur zurückgesetzt wird wenn das MD auf 0 ist...

Also im Grunde soll der Ausgang an sein, wenn MD55 <> 0, aber er soll dennoch rückgesetzt werden können und erneut angehen, wenn sich der Zustand von MD55 erneut ändert!

1) Zustand am Anfang: Alle Bits in MD55 = 0 --> A2.0 = 0

2) Bit1 wechselt in MD55 von 0 nach 1 --> A2.0 = 1

3) Jetzt wird der Ausgang A2.0 rückgesetzt!

4) Bit1 noch immer 1 - und Bit3 in MD55 von 0 nach 1 --> A2.0 soll neu gesetzt werden!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
4) Bit1 noch immer 1 - und Bit3 in MD55 von 0 nach 1 --> A2.0 soll neu gesetzt werden!

Hallo,
das ja aber kein Vergleich auf ungleich 0!
Du suchst eine Zustandsänderung irgendwelcher Bits. Nimm Bitsum und schau wieviele hi sind, speichere es ab, und vergleiche danach wieder wieviele hi sind.
 
Hallo,

Du suchst eine Zustandsänderung irgendwelcher Bits. Nimm Bitsum und schau wieviele hi sind, speichere es ab, und vergleiche danach wieder wieviele hi sind.

Ähm, so gesehen ja! :)

Der Ausgang soll halt immer wieder gesetzt werden, wenn im MD55 ein weiteres Bit den Zustand von 0 nach 1 ändert!

Meinst du so etwas wie "XOW"?
 
Bitte präzise formulieren:
Soll ein Bit gesetzt werden, wenn irgendein Bit in MD55 von 0 auf 1 wechselt? --> Doppelwort-Flankenerkennung und Ergebnis <> 0 (so wie André schon schrieb)
Oder auch wenn irgendein Bit von 1 auf 0 wechselt? --> Vergleich MD55 <> MD55_vorher

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

der Ausgang soll immer nur dann neu gesetzt werden, wenn irgendein Bit in MD55 von 0 auf 1 wechselt, falls er vorher rückgesetzt wurde!
 
Was heißt nun wieder "falls er vorher rückgesetzt wurde!"?
Einen Ausgang auf 1 setzen auch wenn er schon 1 ist - das tut dem Ausgang nicht weh ;)

Harald
 
Du willst ein neuen Störung erkennen und dies auf ein bit melden, etwa wie "Störung gekommen !".


Code:
      L     #ALARMMEM //Speicher von die vorigen Störmeldungen
      XOW   W#16#FFFF
      L     #ALARMRAW  //Störmeldungen
      AW    
      L     0
      <>I   
      S     "AlarmNew"

      L     #ALARMRAW
      T     #ALARMMEM
Ah, zu langsahm.
 
Zuletzt bearbeitet:
Was heißt nun wieder "falls er vorher rückgesetzt wurde!"?
Einen Ausgang auf 1 setzen auch wenn er schon 1 ist - das tut dem Ausgang nicht weh ;)

Harald

... na da wollen wir mal hoffen, dass er nicht wehleidig ist! Es heißt doch DER Ausgang und sind Männer nicht etwas wehleidig? :p


Wenn ich nun die Musterlösung auf mein Problem ummünze, so hieße das ja:

Code:
      L     MW   200
      XOW   W#16#FFFF
      L     MW    55
      L     0
      <>I   
      S     A      2.0

      L     MW    55
      T     MW   200

1) Nun lässt sich aber der Ausgang A2.0 nicht rücksetzen, solange ein Bit in MW55 gesetzt ist.
2) Bei mir handelt es sich ja eigentlich um ein Merkerdoppelwort und da klappt ja XOW nicht
 
1) Nun lässt sich aber der Ausgang A2.0 nicht rücksetzen, solange ein Bit in MW55 gesetzt ist.
Doch, der Ausgang wird nur gesetzt wenn ein neuen Störbit gestzt wird.

2) Bei mir handelt es sich ja eigentlich um ein Merkerdoppelwort und da klappt ja XOW nicht

Code:
      L     #ALARMMEM //Speicher von die vorigen Störmeldungen. Doppelwort !
      INVD
      L     #ALARMRAW  //Störmeldungen. Doppelwort !
       UD    // english: AD, deutsch UD !
      L     L#0
      <>D   
      S     "AlarmNew"


      L     #ALARMRAW
      T     #ALARMMEM

NB. Es gibt ein XOD für Doppelwort, aber "Invert" ist schöner als "Exclusive Or usw.."
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank JesperMP!

Habe gesehen, dass ich AW bzw. AD nicht programmiert habe - aber das wird im Programm nur rot dargestellt und nicht übernommen.
 
Mein STEP7 ist auf Englisch eingestellt, und deiner ist auf Deutsch, vermute ich ;)

Anstatt AD, dann UD.

Aja klar, wie doof von mir!

... wenn ich nun beispielsweise zwei MD's abfragen und damit nur einen Ausgang ansprechen möchte, so könnte ich das vermutlich mit einem ODER lösen, richtig?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieviele Bytes müssen in diese Weise getestet werden ?

Den obengenannte Code-Schnippsel ist eigentlich von ein Schleife wo ich einen grösseren Anzahl von Störmeldungen behandelt.
Wenn nur 8 Bytes, (2 Doppelwörter) dann ist es sicherlich das einfachste den Code zu verdoppeln.
Du brauchst kein Oder, weil den Ergebniss mit S (Set) getsetzt wird.
 
Einfach den Code 4-mal eintippen, und fertig.

Wenn du willst, kannst du dich üben eine Schleife zu programmieren.
Es lohnt sich wenn du irgendwann in den Zukunft nicht 2, 4 oder 8 Bytes behandeln muss, sondern 1000.
 
Zurück
Oben