Step 7 Programmierhilfe FUP

In der TIA-Hilfe konnte ich das nicht finden (hatte aber auch keine Lust, länger zu suchen), aber in der Hilfe von Step 7 Classic findet man in der Einleitung zu den Schiebebefehlen u.a. folgende Erläuterung:
Hilfe Step 7 schrieb:
Das zuletzt geschobene Bit wird in das Bit A1 des Statusworts geladen. Die Bits A0 und OV werden auf "0" zurückgesetzt. Mit den Sprungoperationen können Sie das Bit A1 im Statuswort auswerten.
Die Erklärungen zu den Statusbits findet man auch in TIA:


Kleiner Tip noch - den Ausgang des jeweiligen Registers kann man so erst nach dem Schieben abfragen.
;)


PS: Das Ausgangsregister muss man per UND maskieren, um das entsprechend gewünschte Bit zu isolieren. Anschließend wieder per Status abfragen, um den Ausgang zuzuweisen.
 
PS: Das Ausgangsregister muss man per UND maskieren, um das entsprechend gewünschte Bit zu isolieren. Anschließend wieder per Status abfragen, um den Ausgang zuzuweisen.


Meinst du damit, dass ich den Block "Ausgabe" mit einem UND maskieren soll, sprich UND davor setzen dann #Register4 UND #Register4.x31 verknüpfen??

LG
EMZ

PS: also muss ich als Statusbit A1 als Variable nehmen oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinst du damit, dass ich den Block "Ausgabe" mit einem UND maskieren soll, sprich UND davor setzen dann #Register4 UND #Register4.x31 verknüpfen??
Nein, denn das Bit31 vom DWORD "Register4" kannst Du ja so bei der 300er nicht abfragen.

Das DWORD "Register4" muss mit einem anderen DWORD verUNDet werden, so dass beim Ergebnis alle Bits, außer dem 4., garantiert zu Null werden.
Dann kann man das Ergebnis wieder auf >0 abfragen und weiß, ob das 4. Bit gesetzt war oder nicht.
;)
 
.
@all,
lieg' ich falsch' oder ist hier auch die TIA-Hilfe falsch?



Das müsste doch bei <>0:

heißen, oder?
:confused:



Ja, die Doku ist falsch (mal wieder) :(
Code:
<>0 ergibt sich logischerweise aus:

 >0    A0 = 0 und A1 = 1
oder
 <0    A0 = 1 und A1 = 0

Harald

Hallo Harald und hucki,

z.B. Wortverknüpfungen beeinflussen die Statusbits A1, A0 und OV
im Statuswort.

Wenn mindestens ein Bit im Ergebnis "1" ist, wird das Statusbit
A1 auf "1" gesetzt.
Wenn im Ergebnis einer Wortverknüpfung alle Bits "0" sind, wird
das Statusbit A1 auf "0" zurückgesetzt.
Das Statusbit A0 verbleibt in beiden Fällen auf "0".

Daraus folgt, das im Dokument von hucki bei dem Vergleich auf
<> 0 die "0" (also nicht ungleich) als Ergebnis heraus kommt, beide
Statusbits = "0" gesetzt werden.

Gruss in den Harz und nach Sassnitz
 
.
Vielleicht nochmal mit anderen Worten:
es wird bei <>0 nicht auf <0 oder >0
abgefragt, sondern einfach auf =0 oder
auf <>0, unabhängig davon, ob
kleiner oder grösser.

Das Ergebnis <>0 setzt das A1, ist das
Ergebnis =0, sind Statusbits A0/A1=0.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das DWORD "Register4" muss mit einem anderen DWORD verUNDet werden, so dass beim Ergebnis alle Bits, außer dem 4., garantiert zu Null werden.
Dann kann man das Ergebnis wieder auf >0 abfragen und weiß, ob das 4. Bit gesetzt war oder nicht.

Und wie stelle ich das bitte an? Ich versteh nicht ganz was du meinst.
Was kann ich denn statt ".x31" einsetzen?
Muss ich dort eventuell mit einem Vergleicher auf "Ungleichheit" abfragen und dann dies verUNDen ?

:confused::confused:

Entweder denke ich zu kompliziert oder ich verstehe es nicht ...

LG
EMZ
 
Hallo Harald und hucki,

z.B. Wortverknüpfungen beeinflussen die Statusbits A1, A0 und OV
im Statuswort.
[...]
Daraus folgt, das im Dokument von hucki bei dem Vergleich auf
<> 0 die "0" (also nicht ungleich) als Ergebnis heraus kommt, beide
Statusbits = "0" gesetzt werden.
.
Vielleicht nochmal mit anderen Worten:
es wird bei <>0 nicht auf <0 oder >0
abgefragt, sondern einfach auf =0 oder
auf <>0, unabhängig davon, ob
kleiner oder grösser.

Das Ergebnis <>0 setzt das A1, ist das
Ergebnis =0, sind Statusbits A0/A1=0.

Gruss
2 verwirrende Beiträge sollten genug sein ... ;)

In Hucki's und meinem Beitrag ging es überhaupt nicht um Wortverknüpfung sondern darum, daß die TIA-Dokumentation zu den Statusbits A0 und A1 nach mathematischen Operationen falsch ist (ich würde sagen: schlampiger Kopierfehler).

Eine Abfrage "U <>0" berücksichtigt IMMER beide Fälle >0 und <0, egal ob die vorherige Operation überhaupt <0 ergeben konnte. Wie die Statusbits zu ihrem Zustand gekommen sind sieht man ihnen nicht an.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okey
und wie setze ich das jetzt mit hucki seinem Vorschlag um ?

Das DWORD "Register4" muss mit einem anderen DWORD verUNDet werden, so dass beim Ergebnis alle Bits, außer dem 4., garantiert zu Null werden.
Dann kann man das Ergebnis wieder auf >0 abfragen und weiß, ob das 4. Bit gesetzt war oder nicht.

Also muss ich statt #Register4.x31 ---> #Register4.U<>0 einsetzen oder wie kann ich das jetzt interpretieren?
:confused:
 
Okey
und wie setze ich das jetzt mit hucki seinem Vorschlag um ?



Also muss ich statt #Register4.x31 ---> #Register4.U<>0 einsetzen oder wie kann ich das jetzt interpretieren?
:confused:
Wenn Du Dir mal Deinen von mir übernommenen Code ansiehst, kannst Du mehrfach sehen, wie mittels eines ODERs in den jeweiligen DWORDs RegisterX das 1.Bit gesetzt wird, während alle anderen Bits ihren vorigen Zustand behalten.
Analog dazu funktioniert das UND nur mit dem Ziel, alle Bits, bis auf das eine gewünschte, zurück zu setzen. Das Ergebnis dieser DWORD-Verknüpfung wird dann auf >0 abgefragt, um zu ermitteln, ob dieses übrig gebliebene Bit vorher gesetzt (>0) oder nicht (=0) gesetzt war.
 
Also habe jetzt aus den OR-DWORDS, AND-DWORDS gemacht. Hoffe ich verstehe es richtig.

Allerdings weiß ich nicht wie ich das DWORD-UND abfragen.
Also ich habe jetzt ein > Vergleicher hingesetzt auf IN1 habe ich Register4 gesetzt auf den anderen 0.

Als Datentyp des Vergleichers habe ich Dint genommen

SO right?!

LG
EMZ
 
Ist das so richtig, wie ich das oben beschrieben habe?
Nein!

Warum liest Du nicht, was ich schreibe?

Deine RegisterX sind DWORDs! Die kann man nicht einfach in DINT-Vergleichern verwenden. Schon gar nicht in FUP.

Also nochmal:
1. Bei einer Schiebe-Operation geben die Statusbits an, ob das zuletzt ausgeschobene Bit >0 oder =0 war.
2. Bei einer UND-Verknüpfung geben die Statusbits an, ob das Verknüpfungsergebnis >0 oder =0 war.

Also musst Du was auf >0 prüfen?
;)



PS: Oder auf <>0. Deswegen war die Nachfrage, ob tatsächlich die TIA-Beschreibung falsch war. Wenn dem nicht so gewesen wäre, hätte man nur auf > prüfen dürfen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich suche vergeblich nach einer funktionierenden SCL variante in der ich Gutteile und Schlechtteile in einem Register speicher kann.
Kann mir hier jemand weiter helfen?
 
Zurück
Oben