Ok, zuerst noch ein Link:
http://www.sps-lehrgang.de/bcd-code/
Ein BCD-Codierter Schalter sollte dir für jede Ziffer 4 Inputs an die SPS liefern.
Nach der Tabelle (siehe Link) kannst du aus diese 4 Bit jeweisl eine Zahl decodieren.
Dafür gibt es in der SPS verschiedene Möglichkeiten.
Angenommen, die hast genug Eingänge zur Verfügung, dann legst du je 4 Bit auf 4 Eingänge eines Bytes.
E0.0 - Bit0, Ziffer 1
E0.1 - Bit1, Ziffer 1
E0.2 - Bit2, Ziffer 1
E0.3 - Bit3, Ziffer 1
E1.0 - Bit0, Ziffer 2
E1.1 - Bit1, Ziffer 2
E1.2 - Bit2, Ziffer 2
E1.3 - Bit3, Ziffer 2
Jetzt kannst du einfach das Eingangsbyte 0 laden und mit der gewünschten Zahl vergleichen.
L EB0
L 1
==I
= Merker_X_Ziffer1
L EB0
L 2
==I
= Merker_Y_Ziffer1
Oder du nutzt SCL und die Case-Anweisung oder in AWL die Sprungleiste.
Hast du nicht genügend Eingänge, dann legst du alles auf ein Byte und nutzt die BCD-Wandlung der SPS um daraus eine Dezimalzahl zu machen oder schiebst/kopierst so lange, bis du die je 4 Bit wieder in einem Byte stehen hast.
E0.0 - Bit0, Ziffer 1
E0.1 - Bit1, Ziffer 1
E0.2 - Bit2, Ziffer 1
E0.3 - Bit3, Ziffer 1
E0.4 - Bit0, Ziffer 2
E0.5 - Bit1, Ziffer 2
E0.6 - Bit2, Ziffer 2
E0.7 - Bit3, Ziffer 2
L EB0
SLW 12
SLR 12
T MB0 //hier steht nun Ziffer 1
L EB0
SRW4
T MB1 //hier steht nun Ziffer 2
Jetzt wieder wie oben weiter.
Hast du einen Simulator oder eine SPS, da kann man das schön testen und sich in einer Variablentabelle die Ergebnisse ansehen.
PS: In einer realen SPS sollte man noch beachten, dass es im Moment des Schalten des Schalters zu "irregulären" oder falschen Bitbelegungen kommen kann.
Daher mache ich es immer so, dass ich mir den aktuellen Wert des Bytes merke, bei einer Änderung des Eingangsbytes noch eine Zeit X warte bis es sich nicht mehr ändert (Triggern mit Flanke, TON zum Warten), dann das Byte in eine Zwischenvariable kopiere und diese auswerte.
PS2: BCD-Wandlung Step7
L EB0
BTI
T #Nummer