Step 7 Ausgang Zähler auf Vergleicher I

Dalioga2014

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

ich habe einen Zähler und nehme den DUAL - Ausgang um ihn auf einen Vergleicher CMP I zu setzen, um ihn mit einer ganzen Zahl zu vergleichen. Wieso funktioniert das, wenn das Ausgangssignal doch dual-codiert vorliegt?

Grüße Thomas

Gesendet von meinem SM-G903F mit Tapatalk
 
Was bedeutet denn Dual-Codiert bzw. was ist es das dein Zähler in Dual-codierter Form in deinen WORD-Datentypen ablegt?

Erstmal musst du bedenken dass ein WORD eigentlich keine Zahl ist, es ist ein Speicherbereich von 16Bit in dem man ein beliebiges Bitmuster speichern kann.
Das können z.B. in BCD-Code dargestellte Zahlen, als CHAR kodierte Zeichen, ein sinnloses Bitmuster oder eine ganz gewöhnliche Ganzzahl sein

Genau dass ist es was der DUAL-Ausgang macht. Er legt den Zählerstand als Ganzzahl in einen 16-Bit-Speicher.
Im Endeffekt ist das nichts anderes als ein Integer, das ist auch eine Ganzzahl welche binär in einem 16-Speicher liegt.
"Integer" definiert den Inhalt dieser Bits aber eben fix als Ganzzahl, während ein WORD nur 16Bit von irgendwas sind.

In dem Moment wo du die 16Bit im WORD betrachtest und versuchst diese als Zahl zu lesen, machst du eigentlich schon einen Integer draus, denn du legst ja damit fest dass der Inhalt eine Zahl repräsentieren sollte. Wenn du dein Merkerwort MWxxx vom DUAL-Ausgang auf den CMP>I legst, macht der CPM>I genau das, er nimmt einfach an dass in den 16-Bit eine binärkodierte Ganzzahl steht.
Womit er in diesem Fall recht hat, muss er aber nicht, im WORD hätte auch sonstwas stehen können.

Das du deinen DUAL-Ausgang einfach so auf den CMP>I legen kannst, liegt vermutlich daran dass du ein einfaches Merkerwort "MWxxx" ohne symbolische Bezeichnung verwendest. Das symbolische MWxx hat keine Datentypdefinition, deswegen verhindert Step7 nicht dass du dieses an Ausgängen verschiedenen Datentyps verwendest. Wenn du nämlich deinem Merkerwort mit einen symbolischen Namen versiehst muss du diesem auch einen Datentyp INT oder WORD geben, in diesem Moment kannst du diese nicht mehr an beide Bausteine verschalten.

Die korrekte Vorgehensweise wären zwei Variablen, eine vom Typ WORD und eine vom Typ INT.
Den WORD legst du auf den DUAL-Ausgang und lässt dort das 16-Bitmuster reinschreiben, dann musst du dein Bitmuster in einen Integer (Ganzzahl) umwandeln (eigentlich casten) denn das ist es ja was CMP>I erwartet. Der CMP>I will keine Bitmuster, der will einen INT.
Dazu verwendest du den Baustein MOVE mit dem WORD am Eingang und dem INT am Ausgang. Damit wäre der Inhalt des WORD jetzt im INT und der 16-Bit-Wert aus dem WORD wird jetzt überall, da INT, automatisch als Zahl interpretiert. Damit ist der CPM>I dann zufrieden.

Das ist jetzt lang geworden, hoffentlich nicht zu verwirrend.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Super, vielen Dank für diese ausführliche Erklärung, ich denke das hat mir viel gebracht. Werde mich damit noch mal intensiv auseinandersetzen, also die einzelnen Punkte von dir durchgehen.

Grüße Thomas

Gesendet von meinem SM-G903F mit Tapatalk
 
Zurück
Oben