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

Ergebnis 1 bis 8 von 8

Thema: Char to int

  1. #1
    Registriert seit
    27.11.2011
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte eine Zeichenkette vom Datentyp char die auf einen Datenbaustein liegt in einen Integer umwandeln.
    Wie mache ich das am besten? Könnt ihr mir da weiter helfen?
    Zitieren Zitieren Char to int  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Es gibt in der standartlib den FC37 der einen String in einen DI wandelt!

    Ich hab mir irgenwann mal selber einen geschrieben:

    Code:
    FUNCTION FC 138 : VOID
    TITLE =
    //===================================================
    //Technische Daten:
    //====================================================
    //           Version: 2.00
    //             Datum: 01.09.2009
    //====================================================
    //             Autor: Kühner J.
    //Baustein Name Symb: STD_ASCII_TO_DINT
    //====================================================
    //Beschreibung:
    //
    //Dieser FC wandelt einen Pointer auf Ascii Zeichen in
    //einen DINT um. Falls zwischen den Ziffern noch andere
    //Zeichen stehen gibt er 0 raus. Am Anfang dürfen noch
    //andere Zeichen stehen, nur nicht dazwischen!
    //====================================================
    //Versionsänderungen:
    //
    //von 1.00 auf 2.00
    //  - backup DB, AR1
    VERSION : 0.1
    
    
    
    
    VAR_INPUT
      ASCII : ANY ;	
    END_VAR
    VAR_OUTPUT
      DINTVAL : DINT ;	
    END_VAR
    VAR_TEMP
      ASCII_LOC : DWORD ;	
      RETVAL : INT ;	
      SCHLEIFE_MAX : INT ;	
      SCHLEIFE : INT ;	
      FAKTOR : DINT ;	
      ZAHL : DINT ;	
      ZAHL_WAR_DA : BOOL ;	
      DB_NR : INT ;	
      backup_DB : INT ;	
      backup_AR1 : DWORD ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    
    //Backup
          L     DBNO; 
          T     #backup_DB; 
          TAR1  ; 
          T     #backup_AR1; 
    
    
    //Initialisieren
          L     0; 
          T     #ZAHL; 
          T     #DINTVAL; 
          SET   ; 
          R     #ZAHL_WAR_DA; //Es wurde schon eine Zahl gelesen. (Es wird damit geprüft ob zwischen den Ascii Zeichen ein Buchstabe kommt, dann 0 als ergebniss!)
    
    
    //Pointer auf Ascii laden
          L     P##ASCII; 
          LAR1  ; 
    
    
    //Schleife mit Länge des Pointers initialisieren
          L     W [AR1,P#2.0]; 
          T     #SCHLEIFE_MAX; 
    
    
    //Datentyp ermitteln, nur Byte gültig!
    //      L     B [AR1,P#1.0]
    // 4 - 5 -->  Länge 2
    // 6 - 8 -->  Länge 4
    
    
    //DB des Pointers öffnen (falls vorhanden!)
          L     0; 
          L     W [AR1,P#4.0]; 
          ==I   ; 
          SPB   spOK; 
          T     #DB_NR; 
          AUF   DB [#DB_NR]; 
    
    
    //Wenn Speicherbereich DI, in DB ändern
          L     B [AR1,P#6.0]; 
          L     B#16#85; //Speicerbereich DI??
          ==I   ; 
          SPBN  spOK; 
          L     B#16#84; //Speicherberich DB
          L     B [AR1,P#6.0]; 
    
    
    //Startadresse in AR1 laden
    spOK: L     D [AR1,P#6.0]; 
          LAR1  ; 
    
    
    //Potenzfaktor Startwert
          L     L#1; 
          T     #FAKTOR; 
    
    
    //max Potenzfaktor bestimmen (10^(LängeAny-1), ausser wenn Schleife_max = 1, da loop sonst ins negative dekrementiert!
          L     0; 
          L     #SCHLEIFE_MAX; 
          +     -1; 
          ==I   ; 
          SPB   sl2; 
    
    
    sl1:  T     #SCHLEIFE; 
          L     L#10; 
          L     #FAKTOR; 
          *D    ; 
          T     #FAKTOR; 
          L     #SCHLEIFE; 
          LOOP  sl1; 
    
    
    //Aktuelles Zeichen laden und prüfen ob Ziffer
    sl2:  U(    ; 
          L     '0'; 
          L     B [AR1,P#0.0]; 
          >I    ; 
          )     ; 
          O(    ; 
          L     '9'; 
          >I    ; 
          )     ; 
          SPBN  GU; 
    
    
    //Ungültige Ziffer in den Zahlen
          U     #ZAHL_WAR_DA; 
          SPB   ende; 
    
    
          SPA   niGU; 
    
    
    //Wenn Ziffer dann zu Zahl addieren
    GU:   L     B [AR1,P#0.0]; 
          L     '0'; 
          -I    ; 
          L     #FAKTOR; 
          *D    ; 
          L     #ZAHL; 
          +D    ; 
          T     #ZAHL; 
    
    
          SET   ; 
          S     #ZAHL_WAR_DA; 
    
    
    niGU: L     1; 
          L     #FAKTOR; 
          ==D   ; 
          SPB   Fin; 
          L     L#10; 
          /D    ; 
          T     #FAKTOR; 
    
    
          L     P#1.0; 
          +AR1  ; 
          SPA   sl2; 
    
    
    Fin:  L     #ZAHL; 
          T     #DINTVAL; 
    
    
    ende: L     #backup_DB; 
          AUF   DB [#backup_DB]; 
          L     #backup_AR1; 
          LAR1  ; 
    END_FUNCTION
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Ok, die Prüfung des Speicherbereichs des Pointers ist im Moment noch nicht drinnen
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #4
    Registriert seit
    27.11.2011
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Funktion wandelt doch einen String in einen Integer um.
    Kann die Funktion auch Zeichen vom Datentyp char in einen Integer umwandeln?

  5. #5
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Energie85 Beitrag anzeigen
    Die Funktion wandelt doch einen String in einen Integer um.
    Kann die Funktion auch Zeichen vom Datentyp char in einen Integer umwandeln?
    Also der von mir gepostete FC wandelt einen Pointer auf ein Char Array in einen DInt!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #6
    Registriert seit
    27.11.2011
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Oh Danke
    Ist dies auch mit den STRING_I Baustein möglich?

  7. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Energie85 Beitrag anzeigen
    Oh Danke
    Ist dies auch mit den STRING_I Baustein möglich?
    Ich denke der String_I Baustein braucht einen string, d.h. die ersten 2 bytes müssen noch die Längenangaben enthalten!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #8
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe mal die Suchfunktion hier im Forum bemüht:

    http://www.sps-forum.de/showthread.p...light=char+int

    http://www.sps-forum.de/showthread.p...light=char+int


    Sicher wirst du da fündig
    kind regards
    SoftMachine

Ähnliche Themen

  1. INT oder DINT in CHAR/BYTE Umwandeln
    Von MAVI im Forum Simatic
    Antworten: 41
    Letzter Beitrag: 29.04.2016, 12:51
  2. Antworten: 5
    Letzter Beitrag: 10.12.2011, 13:58
  3. Antworten: 25
    Letzter Beitrag: 06.07.2010, 23:25
  4. INT TO ARRAY-INT aus DB
    Von hoT im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 23.11.2009, 17:30
  5. mehrstellige INT in CHAR u. in DB schreiben
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 28.02.2008, 17:22

Lesezeichen

Berechtigungen

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