BCD Zahlen in DB, Step7 V.5

Sh4gr4th

Level-1
Beiträge
33
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
habe irgendwie ein Problem mit den BCD Zahlen.
Ich wandle eine Ganzzahl mittels DTB in eine BCD Zahl, aber habe jetzt Probleme die BCD Zahlen Stelle für Stelle in einen DB zu schreiben, da ich irgendwie ja nur ein Byte (2 BCDs) laden kann.

Bsp:
L 1234
DTB
T MD 20
L ??????????? <- ja wie nur?
T DB20.DBB 0
L ???????????
T DB20.DBB 1

Wenn ich also bspw. 1234 in BCD wandle, habe ich Binär ja
0001 0010 0011 0100
im MD 20 stehen. Mit welchen Ladebefehlen kann ich jetzt die einzelnen Ziffern in eine DB laden, so dass in dem DBB20.0 eine Eins, DBB20.1 eine Zwei, usw. steht?

Edit: Step 7 V.5
 
wieso macht man denn sowas?!? :shock:


aber als lösungsvorschlag würde ich "auskommentieren" und/oder "hin- und her schieben"anführen.



in einer s5 würde auskommentieren dann ungefähr so aussehen

A DB20
L MD20
L KM 0000 0000 0000 1111 oder L KH 000F
UW
T DBB0

EDIT: gibts in einer S5 überhaupt DBB´s?!? :?

da ich es in einer s7 noch nich gemacht hab, muss du mal schaun wie es da von der notation aussieht. vom prinziep aber eigentlich ähnlich.


die nächsten stellen auch auskommentieren und entsprechned nach rechts verschieben.
wäre so mein erster gedanke...

wenns nicht stimmt, danke fürs lesen :lol:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in diesem fall reicht auch ein itb

L 1234
t mw 20

l mb20
srw4
t dbb20

l mb20
l w#16#00001111
uw
t dbb21

l mb21
srw4
t dbb22

l mb21
l w#16#00001111
uw
t dbb23
 
e4sy schrieb:
wieso macht man denn sowas?!? :shock:

Tja, wahrscheinlich macht man sowas gar nicht... aber mir ist nichts anderes eingefallen und zwar will ich einen DB über SFC14 senden, und in dem DB soll ein Sollwert ASCII codiert in 6 Bytes stehen.
Der Sollwert wird vorher aber als Ganzzahl eingegeben und ich muss den jetzt so umwandeln, dass ich in einem Array von 6 Bytes diesen Sollwert Ziffer für Ziffer stehen habe.
Also aus 123407 soll letztenendes ein DB entstehen, der folgende Werte drin stehen hat:
[31] [32] [33] [34] [30] [37]

Wenn es da natürlich eine viel einfachere Variante gibt, ich bin da in jede Richtung (solange ich es verstehe...) offen.

@volker
hmm, irgendwie haute das beim ersten Versuch nicht hin, hab dann komische Werte im DB stehen, aber hab das jetzt auch erstmal nur reinkopiert und überlege jetzt erstmal, was da überhaupt passiert...
 
du hast recht. ich habe da nicht richtig gedacht. :oops:

bei einer dezimalen zahl ligen die ziffern ja gar nicht in 1 tetrade.
deshalb muss man die natürlich erst ins bcd wandeln.

so gehts
Code:
AUF   DB    10
      L     1234
      DTB   
      T     MW    20

      L     MB    20
      SRW   4
      T     DBB    1

      L     MB    20
      L     W#16#F
      UW    
      T     DBB    2

      L     MB    21
      SRW   4
      T     DBB    3

      L     MB    21
      L     W#16#F
      UW    
      T     DBB    4
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, vielen Dank, die Idee mit dem Schieben und Ausmaskieren hab ich jetzt verstanden und auch umgesetzt. Klappt jetzt so, wie ich das will.
Wandel erst den eingegebenen Wert in BCD und speicher den in einem MD.Dann wird der MB geladen und nach einer Schiebeoperation (SWL 4) gespeichert, dann nochmaliges Laden und UND-Verknüpfen mit 00001111 und erneutes Speichern und das ganze halt 3-4 Mal.
Hoffentlich schaut sich nie jmd. den Code an, dass ist sicherlich keine vorbildliche Programmierung :oops:
...aber es klappt :D
 
Sh4gr4th schrieb:
Hoffentlich schaut sich nie jmd. den Code an, dass ist sicherlich keine vorbildliche Programmierung :oops:
...aber es klappt :D

wieso? ist doch ok.
alternativ kannst du ja mal die fc 5 und 16 aus den iec's testen.
 
Zurück
Oben