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

Results 1 to 5 of 5

Thread: mehrstellige INT in CHAR u. in DB schreiben

  1. #1
    Anonymous Gast

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    also eine vielstellige INT Zahl oder DINT Zahl umzuwandeln ist ja nicht so schwer. Das ganze habe zum ausprobieren mal statisch gemacht. Aus dem DINT 1234567 berechne ich die einzelnen Stellen mit einer Division durch 1000000, dann durch 100000.....bis hin zu 10 und die 1er bleiben dann noch übrig. Funzt auch soweit und die Daten liegen dann im DB43 in einem langen Char Array.Ich schreibe jeden CHAR einzeln, da ich danach dann eine Textdatei aus den DB43 gemacht habe, mit String würde das glaub ich nicht gehen,besser gesagt eine CSV-Datei, die ich dann in Excel bearbeiten kann.
    Jetzt meine Frage, besser gesagt mein Problem:
    Ich habe ca.100 7-stellige DINT Zahlen in einem Datenbaustein stehen, die jetzt umgewandelt werden müssen und einzeln als chars hintereinander in meinen DB43 eingetragen werden müssen.
    Man müßte also einen DINT aus einem Datenbaustein holen umwandeln( dabei die einzelnen chars schreiben), dann um einen DINT hochzählen,den nächsten DINT holen,umwandeln,und der char pointer müsste dann noch an der alten Stelle stehen, wo man die Daten dann weiter einträgt.

    Hier ist der Code, wie ich die Ints gewandelt hab.(Ne bessere Lösung ist mir nicht eingefallen):
    /----------------------------------------- 1000000 -------------------------------------------------------
    L DB1.DBD 0
    L L#1000000
    /D
    T MW 20 //1000er liegen in MW20
    L W#16#30 //W#16#30 wir addiert daraus wird char
    +D

    T DB43.DBB 20 //Fertiger Char in DB43 an Stelle 20

    //--------------------------------------------100000 ---------------------------------------------------------------
    L MW 20 //Bestimmung der 100000er
    L L#-1000000
    *D
    L DB1.DBD 0
    +D
    T #ZwSpeicher
    L L#100000
    /D
    T MW 22
    L W#16#30
    +D
    T DB43.DBB 21

    usw.
    Reply With Quote Reply With Quote Answered: mehrstellige INT in CHAR u. in DB schreiben  

  2. "wiseo wandelsd du die ints nicht mit der iec funktion DI_STRNG

    von int in einen string.

    dann hast du die einzelen zahlen jeweils in einem byte stehen...

    wenn du nicht den char wert willst sondern die zahl, musst du glaube ich noch 30 abziehen.

    dann würde es so ablaufen:

    zähler+1
    l zahl[zähler]
    Distring zahl ==> text

    text [2] ==> ziffer 1 usw...

    zielbyte = zähler*länge des zielstrings
    ziffer1==>zielbyte,p0
    ziffer2==>zielbyte,p1...

    hoffe das ist so verständlich..."


  3. #2
    Join Date
    17.06.2004
    Location
    Offenau
    Posts
    4,081
    Danke
    210
    Erhielt 466 Danke für 366 Beiträge

    Default

    wiseo wandelsd du die ints nicht mit der iec funktion DI_STRNG

    von int in einen string.

    dann hast du die einzelen zahlen jeweils in einem byte stehen...

    wenn du nicht den char wert willst sondern die zahl, musst du glaube ich noch 30 abziehen.

    dann würde es so ablaufen:

    zähler+1
    l zahl[zähler]
    Distring zahl ==> text

    text [2] ==> ziffer 1 usw...

    zielbyte = zähler*länge des zielstrings
    ziffer1==>zielbyte,p0
    ziffer2==>zielbyte,p1...

    hoffe das ist so verständlich...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Reply With Quote Reply With Quote ints wandel....  

  4. #3
    SchwesterEster Gast

    Default

    Hmm, das könnte klappen.....

    Ich will ja am Schluß die CHAR´s in mein dickes Array reinschreiben. Strings gehen da nicht rein.Da wird dann keine Text-Datei raus.

    Also, wenn ich das richtig verstanden habe:

    1. Die INT mit DI_STRING in Strings wandeln, das sieht dann so aus "1234567" als String. Jede Zahl belegt ein Byte,richtig?

    2. Die einzelnen Bytes "abfahren" und in das Char Array übertragen,richtig?

    Wie krieg ich denn die einzelnen INT nacheinander in meine Funktion um sie erst mal in einen String zu Wandeln, den ich ja dann nochmal zwischenspeichern muß,oder nicht? und dann muß ich nochmal die Strings alle abarbeiten um die Chars rauszufischen, ist das denn dann nicht genau so kompliziert?
    Reply With Quote Reply With Quote int´s wandeln  

  5. #4
    Join Date
    27.02.2008
    Posts
    1
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo zusammen,
    ich habe ein Ähnliches Problem. Ich muss DInt-Werte als Arrays fom typ CHAR zur weiterverarbeitung speichern. Die Länge von meinen Dint-Werten kenne ich nicht, aber nicht mehr als 10 Stellen, in einen String werden die auf jeden Fall passen. Also habe ich es mir so vorgestellt:
    Mit DI_STRING (FC 5 aus iec Bibliothek) wandle ich meinen Dint_Wert in ein CHAR_String.
    Mit LEN (FC 21 iec) kann ich die Länge vom CHAR_String ermitteln.
    Anschliessend nacheinander in einer Schleife die Byte's aus dem CHAR_String in den CHAR_Array kopieren.
    Nun mein Problem: Die FC 5 scheint nicht richtig zu funktionieren, d.h., dass ich bekomme uberhaupt nicht zurück. Woran kann es liegen?


    Code:
     
    CALL "DI_STRING"
      I :=#DInt_Wert
      RET_VAL:=#CHAR_String
    NOP 0
     
    CALL "LEN"
      S :=#CHAR_String
      RET_VAL:=#String_Laenge // als Int
    NOP 0
     
    // weiter werde ich abkürzen, denn hier kommen viele operationen mit
    // Pointer und Zählern die nicht unbedingt wichtig sind
            L #String_Laenge
    loop: T #String_Laenge
    ... // die Adresse im Pointer wird hochgezählt
    L CHAR_String[#pointer] 
    T CHAR_Array[#pointer]
    ...
    L #String_Laenge
    LOOP loop
    nop 1
    Nun erhalte ich schon nach dem aufruf von FC 5 keinen String zurück. Wo ist mein Problem?
    Bin für jede Hilfe dankbar!

  6. #5
    Join Date
    07.03.2004
    Posts
    4,462
    Danke
    948
    Erhielt 1,169 Danke für 837 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by PORTAL View Post
    ...
    Nun erhalte ich schon nach dem aufruf von FC 5 keinen String zurück. Wo ist mein Problem?
    Bin für jede Hilfe dankbar!
    Bei Step7 sollte man Strings immer explizit initialisieren. In SCL ging das so:
    #CHAR_String := '';
    Vielleicht hilft das ja schon.
    If you open your Mind too much, your Brain will fall out.

Similar Threads

  1. TIA Kommunikation Char Array zu Int wandeln
    By RogerSchw85 in forum Simatic
    Replies: 11
    Last Post: 30.12.2018, 14:38
  2. Step 7 Int in Char Umwandeln
    By NWGauggelTech in forum Simatic
    Replies: 15
    Last Post: 25.01.2017, 18:31
  3. TIA Umwandlung von Char nach INT
    By CZach001 in forum Simatic
    Replies: 3
    Last Post: 13.01.2017, 16:56
  4. Step 7 Char in einen String oder als Int
    By bluebird277 in forum Simatic
    Replies: 9
    Last Post: 30.09.2014, 09:51
  5. Char to int
    By Energie85 in forum Simatic
    Replies: 7
    Last Post: 12.06.2012, 00:26

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •