Integer in ASCIII wandeln

matziane

Level-1
Beiträge
120
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ist es möglich auf einer S5 115U eine positive 32 Bit Integer Zahl ins ASCIII Format zu wandeln?
Ich denke mal sicherlich schon, aber wie.

Vielleicht hat ja einer von euch eine Idee bzw. schon ein fertiges Programm welches das übernimmt.
 
Hallo,
ich nehme mal an, dass dein Ziel dann ein Char (KC) sein soll ...
Ein Char ist immer ein Byte lang (groß) - ein DINT beinhaltet 4 Bytes. Du mußt also die einzelnen Bytes anpacken.
Was soll denn aber dabei herauskommen ? Es handelt sich hierbei ja eigentlich nur um eine andere Darstellungsweise des gleichen Inhalts.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jup, das hast du in gewisser Weise schon richtig erfasst.

Habe diese positiven DINT Zahlen, diese sollen dann an ein angeschlossenes Gerät geschickt werden.
Dieses Gerät kann aber wohl nur mit Zahlen im ASCII Format umgehen.
Müsste mir also jede einzelne Zahl aufdröseln und diese in ein Byte packen und das ganze dann rüber schicken.

Passt mir zwar alles nicht so recht, denn in dem Gerät ist ein Rechner und von der Sache können die da ja aus dem DINt ihr ASCII zaubern.
Von der Sache würde es mich eben mal interessieren wie groß der Aufwand ist um auf der S5 Ebene aus der positiven DINT Zahl etwas zu basteln womit die umgehen können.
 
Hallo matziane!

Brauchst Du wirklich eine Integer die görßer ist als ein Wort?
Dann wird es ein wenig aufwendiger, da die S5 von Hause aus
nur mit INT rechnen kann.
Wenns ein DINT sein muss, dann brauchst Du auf jeden Fall auch die
FBs DIV:32 und MULT:32 (weiss jetzt nicht, ob sie genauso heissen)

Bei INT-Zahlen kannst Du mit den Befehlen:
DED
L DH 3030 3030
OD
Deine ASCII Zahlen zusammenbauen.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo matziane!

Brauchst Du wirklich eine Integer die görßer ist als ein Wort?
Dann wird es ein wenig aufwendiger, da die S5 von Hause aus
nur mit INT rechnen kann.

... ausser du hast eine 945er CPU.

Ich würde das ganze so angehen, dass ich die Zahl durch 10 Teile , den Rest als Einer-Stelle in ASCII wandeln und speichern würde und das Ergebnis wiederum durch 10 teilen, Rest als Zehner-Stelle speichern und das Ergebnis wiederum durch 10....

Das ganze dann für alle 10 Stellen...
 
...achja es ist eine 945er ;)

Ja so ungefähr ist es mir auch schon durch den Kopf gegangen, werd mich wohl mal hinsetzen müssen und etwas basteln um den ganzen Spass zu realisieren.
 
... ausser du hast eine 945er CPU.
Aber DINT dividieren kann die doch auch nicht?!

Ich hab' mal ein wenig "gebastelt":
Code:
DB 1                                  BIB=
NETZWERK 1               
   0:KF = +00000                              ;Schleifenzaehler
   1:KH = 0000                                ;DINT-Zahl Byte 0 und 1
   2:KH = 0000                                ;DINT-Zahl Byte 2 und 3
   3:KH = 0000                                ;Divisor Byte 0 und 1
   4:KH = 0000                                ;Divisor Byte 2 und 3
   5:KH = 0000                                ;Quotient Byte 0 und 1
   6:KH = 0000                                ;Quotient Byte 2 und 3
   7:KH = 0000                                ;Rest Byte 0 und 1
   8:KH = 0000                                ;Rest Byte 2 unf 3
   9:KH = 0000                                ;Schmierwort
  10:C  ='  '                                 ;Vorzeichen
  11:KC ='          '                         ;ASCII-Zahl
  16:KH = 0000                                ;




FB 1                                  BIB=

NETZWERK   1            
     NAME :DINT_ASC                           ;

0005      :A   DB 1                           ;Daten-DB
0006      :                                   ;
0007      :L   KF +0                          ;Schleifenzaehler initialisieren
0009      :T   DW 0                           ;Schleifenzaehler
000A      :                                   ;
000B      :L   DH 3B9A CA00                   ;1000000000
000E      :T   DD 3                           ;Divisor initialisieren
000F      :                                   ;
0010      :L   KF +0                          ;Divisor 2 initialisieren
0012      :T   MW 10                          ;
0013      :L   KF +10                         ;
0015      :T   MW 12                          ;
0016      :                                   ;
0017      :L   DD 1                           ;DINT-Zahl laden
0018      :SLD   1                            ;Vorzeichen rausschieben
0019      :SPZ =POS                           ;Springe wenn Vorzeichen positiv
001A      :L   KF +45                         ;
001C      :T   DW 10                          ;Minuszeichen ASCII ablegen
001D      :TAK                                ;geschobene DINT-Zahl in Akku1
001E POS  :RRD   1                            ;DINT-Zahl ohne Vorzeichen
001F      :T   DD 1                           ;Ablegen
0020      :                                   ;
0021 LOOP :SPA FB 4                           ;32-Bit-Dividierer
0022 NAME :DIV:32                             ;
0023 Z12  :    DW 1                           ;
0024 Z11  :    DW 2                           ;
0025 Z22  :    DW 3                           ;
0026 Z21  :    DW 4                           ;
0027 OV   :    M 0.0                          ;
0028 FEH  :    M 0.1                          ;
0029 Z3=0 :    M 0.2                          ;
002A Z4=0 :    M 0.3                          ;
002B Z32  :    DW 5                           ;
002C Z31  :    DW 6                           ;
002D Z42  :    DW 7                           ;
002E Z41  :    DW 8                           ;
002F      :                                   ;
0030      :U   D 0.0                          ;Schleifenzaehler ungerade
0032      :SPB =UNG                           ;
0033      :                                   ;
0034      :L   DW 6                           ;Quotient
0035      :L   KH 0030                        ;
0037      :OW                                 ;
0038      :T   DL 9                           ;Ziffer ASCII
0039      :SPA =NEXT                          ;
003A      :                                   ;
003B UNG  :L   DW 6                           ;Quotient
003C      :L   KH 0030                        ;
003E      :OW                                 ;
003F      :T   DR 9                           ;Ziffer ASCII
0040      :                                   ;
0041      :L   DW 0                           ;Schleifenzaehler
0042      :D     1                            ;
0043      :L   KF +2                          ;
0045      ::F                                 ;
0046      :I     11                           ;Offset fuer ASCII Zahl
0047      :T   MW 2                           ;Adresse Zeichen
0048      :L   DW 9                           ;Zeichen laden
0049      :B   MW 2                           ;Adresse indirekt laden
004A      :T   DW 0                           ;ASCII Ziffer ablegen
004B      :                                   ;
004C NEXT :L   DW 0                           ;Schleifenzaehler
004D      :I     1                            ;
004E      :T   DW 0                           ;um 1 erhoehen
004F      :                                   ;
0050      :L   DD 7                           ;Rest der Division
0051      :T   DD 1                           ;umladen als neuer Dividend
0052      :                                   ;
0053      :SPA FB 4                           ;Divisor durch 10
0054 NAME :DIV:32                             ;
0055 Z12  :    DW 3                           ;
0056 Z11  :    DW 4                           ;
0057 Z22  :    MW 10                          ;
0058 Z21  :    MW 12                          ;
0059 OV   :    M 0.0                          ;
005A FEH  :    M 0.1                          ;
005B Z3=0 :    M 0.2                          ;
005C Z4=0 :    M 0.3                          ;
005D Z32  :    MW 14                          ;
005E Z31  :    MW 16                          ;
005F Z42  :    MW 18                          ;
0060 Z41  :    MW 20                          ;
0061      :                                   ;
0062      :L   MD 14                          ;Quotient
0063      :T   DD 3                           ;Als Divisor fuer naechste DIV
0064      :                                   ;
0065      :L   DW 0                           ;Schleifenzaehler
0066      :L   KF +10                         ;10 Ziffern bearbeitet
0068      :<F                                 ;
0069      :SPB =LOOP                          ;
006A      :                                   ;
006B      :BE                                 ;

Ich hoffe es ist so richtig. (Ich hab's nicht getestet!)
Der FB 4 gehört zu den Grundfunktionen in der Datei S5AA55ST.S5D

Grüße
Gebs
 
Zurück
Oben