Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Integer in ASCIII wandeln

  1. #1
    Registriert seit
    08.05.2009
    Beiträge
    117
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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.
    Zitieren Zitieren Integer in ASCIII wandeln  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    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

  3. #3
    matziane ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.05.2009
    Beiträge
    117
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  4. #4
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    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

  5. #5
    matziane ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.05.2009
    Beiträge
    117
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jup muss wirklich größer als INT sein, idealerweise DINT

  6. #6
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von Gebs Beitrag anzeigen
    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...
    mfG Aventinus

  7. #7
    matziane ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.05.2009
    Beiträge
    117
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ...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.

  8. #8
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Aventinus Beitrag anzeigen
    ... 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

Ähnliche Themen

  1. Integer in Char Array wandeln ?
    Von Power_Pete im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 28.01.2010, 15:26
  2. integer 32Bit in integer 16 Bit wandeln
    Von slk230-power im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 09.11.2009, 22:35
  3. Integer in S5Time wandeln
    Von Nethacks im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 07.08.2009, 09:46
  4. Date in 3 mal Integer wandeln
    Von steffen21m im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 21.09.2007, 14:06
  5. Integer in S7 Zeit wandeln
    Von Anwender im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 19.02.2007, 10:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •