TIA BCD Zahl erzeugen

LeonX4

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,
ich habe vor eine BCD Zahl zu erzeugen. Mit Hilfe von 2 Tasten (up und down) kann ich eine Binärzahl eingeben. Durch Druck auf die Tasten 1 und 2 werden die Eingänge %I23.0, %I23.1, %I23.2, %I23.3, %I23.4, %I23.5, %I23.6 und %I23.7 angesprochen. Diese hab ich als Bool definiert. Taste 2 zählt die Werte runter. Durch die Bool Variablen wird eine Binärzahl dargestellt. Mit der Suchfunktion hab ich hier im Forum auch einen ähnlichen Beitrag gefunden, aber es war nicht exakt das gleiche. Kann mir jemand sagen wie ich das jetzt am besten löse? Meine Idee war die Bool Variablen in eine Byte Variable zu schieben und dann in ein Merkerwort zu kopieren. Mit dem Funktionsblock CONV BCD16 TO INT könnte ich die Zahl wandeln. Dazu hab ich zuerst einen MOVE Baustein (FUP) verwendet, Bool Variablen kann ich diesem aber nicht zuweisen. Wie krieg ich diese Werte jetzt in ein dezimal Format das ich dann meinem BCD Display zuweisen kann?

Grüße
 
Zuletzt bearbeitet:
Wie steuern denn 2 Taster 8 eingänge?

Also ich würde vorgehen wie folgt: Trigger signal von Taster 1 zählt eine int Variable hoch, Trigger von Taster 2 Zählt selbige runter.

Dann lediglich den Int to BCD baustein zm konvertieren für das Display verwenden.

Oder verstehe ich mal wieder alles falsch?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ein guter Ansatz. Die Veränderung der Variablen kann ich durch Tastendruck auf meinem Bedienpanel in der PLC-Variablen Tabelle mit dem Button "Beobachten" sehen. Fangen wir mit dem ersten Schritt an: Ich habe jetzt diese Bool Variablen, die 8 Eingänge. Was mache ich damit? Bool Variablen kann ich dem MOVE Baustein nicht zuweisen um den Wert in einen Merker z. B. zu kopieren.
 
Hallo LeonX4,

vielleicht hilft diese Tabelle zum Verständnis:

Bit_Byte_Word.jpg

Darin siehst Du, dass man z.B. Eingänge als Bit, Byte, Wort, etc. ansprechen kann.

ich würde so vorgehen:

zuBCD.jpg
 
Also mir wird es irgendwie weniger deutlcih.

1. Was machen deine Eingänge? (Oder was sollen sie machen?)
2. Sind deine Tasten Hardware oder Software?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein Bedienpanel mit 8 Schaltern (Ein/ Aus). Dieses Panel ist mit meiner SPS verbunden. Durch Druck auf eine der Tasten wird eine Binärzahl erzeugt. Die Bits verändern Ihren Zustand von True auf False. Mit diesen Einsen und Nullen stelle ich die Binärzahl dar.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab noch ein Verständisproblem. Den Vorschlag von Peter hab ich umgesetzt, soweit ist alles klar. Aber: Eine BCD Zahl ist wie eine Hexadezimal Zahl 16 stellig und mit den Eingängen %I23.0, %I23.1, %I23.2 und %I23.3 stelle ich eine Binärzahl dar. Das sind 4 Bits. Wenn ich jetzt aber schreibe %IB23 und den dann mit dem CONV Baustein in eine BCD Zahl umwandle, dann rechnet das Progamm die Stellen %I23.0 bis %I23.7. Das sind 8 Bit. Soweit ich weiss werden die BCD Zahlen zerlegt. Auf meinem Bedienpanel kann ich die Zahlen einstellen und über die PLC Variablen Tabelle beobachten. Der Knopf der die 23.0 bis 23.3 ansteuert ergibt eine Zahl (Binär). Das gleiche Ergebnis erziele ich wenn ich die Eingänge I23.4 bis I23.7 ansteuere. Also bei beiden die gleiche Zahl vorgebe. Meine Idee wäre jetzt, jeweils 4 Bits in Merkern (%MW) zu speichern und diese dann dem Ausgang des BCD Displays zuzuordnen. Ich weiss nicht ob das der richtige Weg ist. oder wie das genau geht. Für weitere Hilfe wär ich dankbar.
 
Hallo LeonX4,

eine BCD Zahl ist nicht zwingend 16 stellig, eine BCD Zahl hat mindestens 1 Stelle und kann beliebig viele Stellen haben, wobei jede Stelle mit 4 Bit dargestellt wird.

BCD ist die Abkürzung für Binär Codierte Dezimalzahl, d.h. jede Ziffer einer Dezimalzahl (beliebige Stellenanzahl) wird als BCD-Code dargestellt -> Du brauchst also je Ziffer einer Dezimalzahl 4 Bit. Es gibt also je Ziffer die Wertigkeit 0->9 (in Dualformat).

https://de.wikipedia.org/wiki/BCD-Code
 
Hallo LeonX4,
ich weiß nicht genau, ob ich richtig liege, aber vielleicht hilft dir der "AT" - Befehl weiter. Ich habe mir damit eine Funktion gebastelt, die aus 8 Eingangsbits ein Ausgangsbyte macht. Zum Verständnis hänge ich mal ein Bildchen an, unten sieht man den Aufruf, oben die Funktion mit der Schnittstelle und dem einzigen Netzwerk.Bit2Byte.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Peter Wahlen Ja, danke. Das weiss ich schon. Vielleicht hab ich es schlecht erklärt. Ich möchte die Zahlen gerne auf mein Display übertragen. In der PLC Variablentabelle sehe ja was welches Bit macht. Wenn ich auf den Knopf für die ersten 4 Bit drücke und eine 1 darstellen will sehe ich, dass sich die Eingänge I23.0 bis I23.3 verändern (von True auf False, Binäre Darstellung). Drücke ich jetzt noch auf den Knopf daneben um eine 11 zu erzeugen, dann werden auch die Bits I23.4 bis I23.7 angesprochen. Jetzt konvertiere ich das ganze mit dem CONV Baustein in eine BCD Zahl so wie in deinem Beitrag. Dann erhalte ich nicht die 11 sondern die 16#0017 (nach BCD Umwandlung); Hexadezimal wär das 16#11. Ich schreibe dabei %IB23 (MOVE) Int-Variable -->CONV (INT-BCD16) %MW200.

Den AT Befehl schau ich mir an, danke!
 
_________________
| | | | | | | |
\ \ \ \ \ \ \ \
| | | | | | | |
----------
| In1-8 |
----------

So ist deine Hardware? Welche Taster hast du denn wann und wie betätigt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
schau Dir mal bitte die einzelnen Darstellungsformen in der Beobachtungstabelle an:

z.B.:
Code:
EW22     dez
EW22     bin

und Deine BCD Variable:
BCD       bcd
BCD       dez
BCD       bin
BCD       hex
 
Zuletzt bearbeitet:
Zurück
Oben