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

Ergebnis 1 bis 5 von 5

Thema: Zeichenketten addieren

  1. #1
    Registriert seit
    17.09.2009
    Beiträge
    7
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    erst mal ein DICKES Lob an diesen Forum....sehr
    informativ für Anfänger und Profis.
    (ich zähle mich zur ersten Kategorie )

    habe folgendes Problem:

    Eingangswert ASCII z.B. '126385298473'

    Nun will ich den String in 3 "Stücke" teilen und diese dann addieren also so:

    1263
    +8529
    +8473
    --------
    18265

    Wie löse ich das Problem am besten...?
    Zitieren Zitieren Zeichenketten addieren  

  2. #2
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    In der Standardbibliothek gibt es die IEC-Standardfunktionen zum bearbeiten von Strings.
    FC20 LEFT: Linker Teil eines STRING.
    FC26 MID: Mittlerer Teil eines STRING.
    FC32 RIGHT: Rechter Teil eines Strings.
    FC38 STRNG_I: Umwandlung einer String-Variablen in eine Variable vom Typ INT.
    und
    FC39 STRNG_R: Umwandlung einer String-Variablen in eine Variable vom Typ REAL.

  3. Folgender Benutzer sagt Danke zu marlob für den nützlichen Beitrag:

    snowkopp (19.09.2009)

  4. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    zu Marlobs Vorschlag:
    Achtung, zusätzlich darauf achten, daß Step7-Strings 2 Byte "Kopfdaten" haben, die die maximale und die tatsächliche Länge des Strings enthalten. Am besten in einem DB diese Strings definieren und dann damit arbeiten, sonst streiken die IEC-Funktionen.

    Alternative:
    Es gäbe auch die Möglichkeit der direkten Umwandlung aus Ascii-Zeichen in Zahlen. Die Scii-ZEichencodierung enspricht in HEX dem Zahlenwert + 30hex

    0 = 30hex
    1 = 31hex
    .
    .
    .
    9 = 39hex

    Du könntest also das ganze "zu Fuß" machen.

    Bsp.:
    '126385298473'

    Im DB steht je eine Zahl als Ascii in einem Byte.
    DB10.DBB0 Kopf Byte 0 Step7-String, falls als solcher schon abgespeichert.
    DB10.DBB1 Kopf Byte 1 Step7-String, falls als solcher schon abgespeichert.

    Der eigentliche String geht dann hier los, die Position kannst du dir ja aus deinem DB heraussuchen:

    DB10.DBB2 --> 31hex
    DB10.DBB3 --> 32hex
    DB10.DBB4 --> 36hex
    DB10.DBB5 --> 33hex
    DB10.DBB6 --> 38hex
    DB10.DBB7 --> 35hex
    DB10.DBB8 --> 32hex
    DB10.DBB9 --> 39hex
    DB10.DBB10 --> 38hex
    usw.

    Wenn du die erste Zahl hernimmst:

    31hex --> Tausender
    32hex --> Hunderter
    36hex --> Zehner
    33hex --> Einer

    Kannst du rechnen:

    Ergebnis = (31hex-30hex) *1000 + (32hex-30hex) *100 + (36hex - 30hex) *10 + (33hex-30hex)

    In AWL:

    Code:
    L 0
    T #Ergebins1  //Int
    
    L DB10.DBB2  //Tausender
    L W#16#30    //30hex
    -I
    L 1000
    *I
    T #Ergebnis1
    
    L DB10.DBB3  //Hunderter
    L W#16#30    //30hex
    -I
    L 100
    *I
    L #Ergebnis1
    +I
    T #Ergebnis1
    
    L DB10.DBB4  //Zehner
    L W#16#30    //30hex
    -I
    L 10
    *I
    L #Ergebnis1
    +I
    T #Ergebnis1
    
    L DB10.DBB5  //Einer
    L W#16#30    //30hex
    -I
    L #Ergebnis1
    +I
    T #Ergebnis1  --> Endergebnis ist die erste Zahl
    Diese Berechnung in einen FC gepackt, der die 4 Byte der Zahl als Input und das Ergebnis als Output hat.

    Dann hast du aus 3 FC-Aufrufen die Zahlen und kannst das Ergebnis berechnen.
    Geändert von Ralle (18.09.2009 um 10:50 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    snowkopp (19.09.2009)

  6. #4
    snowkopp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.09.2009
    Beiträge
    7
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ralle, marlob ihr seit Spitze

    auf den iec Standardfunktionen wäre ich garnicht
    gekommen....manchmal hat man halt ein Brett vorm
    Kopf

    ich werde wohl trotzdem die Lösung von Ralle nehmen,
    da weiss ich wenigstens was gemacht wird und
    ein Lerneffekt hat die ganze Sache auch noch

    Also, Danke nochmal!!!!

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn es mal mehr als 4 Dezimalstellen werden, würde ich die Berechnung so machen,
    wie mal gaaaaanz früher in der Schule gelernt:

    Von hinten (Einer) nach vorn Stelle für Stelle addieren und den Übertrag zur nächsten
    Stelle davor mitnehmen und da addieren.

    Mit diesem Verfahren ist die Anzahl der Dezimalstellen der zu addierenden Zahlen nur
    durch die maximal mögliche Stringlänge begrenzt (S7-STRING: 254 Zeichen)

    Gruß
    PN/DP
    Zitieren Zitieren Schulrechnen (schriftlich)  

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    snowkopp (19.09.2009)

Ähnliche Themen

  1. S5, Zähler addieren
    Von Boardmaker im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.04.2010, 23:21
  2. Libnodave VB.NET Zeichenketten
    Von StefanK im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 26.10.2008, 01:07
  3. Wincc flex 2005 Lange Zeichenketten
    Von wurm1986 im Forum HMI
    Antworten: 5
    Letzter Beitrag: 24.09.2008, 17:32
  4. BCD addieren CPU 224
    Von digidax im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 13.02.2006, 07:33
  5. Doppelworte addieren
    Von hubert im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.12.2005, 14:18

Lesezeichen

Berechtigungen

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