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

Ergebnis 1 bis 5 von 5

Thema: Addieren mit Kommastellen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo miteinander!


    U "db_taster".Zahl_1 //Taste Zahl 1
    SPBN _031
    L 1.000000e+001
    L "db_zahlen_real".Zahl // 1
    *R
    T "db_zahlen_real".Zahl // 1 * 10 = 10

    L 1.000000e+000
    +R
    T "db_zahlen_real".Zahl //10 + 1 = 11
    SET
    R "db_taster".Zahl_1

    U "db_taster".zahl_x_x //Taste Komma ( , )
    SPBN _600

    L "db_zahlen_real".Zahl //11
    L 1.000000e+001
    /R
    T "db_zahlen_real".Zahl //11 / 10 = 1,1
    _600: NOP 0

    _031: NOP 0

    Wenn ich "db_taster".Zahl_1 drücke habe ich am Ausgang 1.
    Wenn ich zuerst "db_taster".Zahl_1 dann "db_taster".zahl_x_x ( Komma zeichen) drücke und dann nochmal "db_taster".Zahl_1 drücke kommt am Ausgang 1,1


    Aber wenn ich nach 1,1 nochmal "db_taster".Zahl_1 drücke kommt am ausgang 1,2
    Wie kann ich ,wenn ich schon am Ausgang 1.1 habe , nach jedem druck auf "db_taster".Zahl_1
    1,11 bzw. 1,111... rauskriegen.
    Kann mir jemand bitte helfen?

    vielen Dank!

    heg_1907

    Simatic s7
    CPU 300
    HMI KTP 600
    Zitieren Zitieren Addieren mit Kommastellen  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Du könntest den Wert zunächst als String eingeben und bei jedem Tastendruck das entsprechende Zeichen an den String anhängen und dann den String in die REAL-Zahl umwandeln (und zur Kontrolle wieder in den String zurück).
    Das macht sich so auch leichter, wenn Du das jeweils letzte Zeichen wieder löschen willst, z.B. mit Backspace "<--", dann löschst Du einfach das letzte Zeichen im String.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    heg_1907 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für dein Antwort aber "String" kenn ich leider nicht, habe noch nie gehört
    Kann ich es nicht mit einer einfache Formel lösen?

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Da wirst Du Dich wohl weiterbilden müssen und Dir in der Step7 Hilfe mal den Datentyp String und die IEC-Funktionen für String-Bearbeitung ansehen müssen
    Ich vermute, daß Du Dein Problem wegen der Rechenungenauigkeit von REAL nicht fehlerfrei mit einer "einfachen Formel" lösen kannst.

    Warum machst Du nicht einfach ein EA-Feld auf dem KTP600? Das kümmert sich selber um die zeichenweise Eingabe samt Edit und gibt Dir am Ende einen gültigen REAL-Wert.
    Wieviele Stellen vor und nach dem Dezimalpunkt/-komma willst Du eigentlich eingeben?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Idee für Eingabemöglichkeit ohne String bis max 9999.9999
    Prinzip in Pseudocode:
    Code:
    //Init bei Beginn Eingabe (evtl. mit rZahl vorbelegen):
    iVorkomma := 0; iNachkomma := 0; rDivNachkomma := 1.0;
    xModusNachkomma := 0;
    
    //Ziffernweise Eingabe mit Zifferntasten 0..9 + Kommataste:
    WENN xModusNachkomma = 0 UND iVorkomma < 1000 DANN
      iVorkomma := iVorkomma * 10 + Tastenwert;
    END_WENN;
    
    WENN xTaste_Komma DANN
      xModusNachkomma := 1;
      rDivNachkomma := 1.0;
    END_WENN;
    
    WENN xModusNachkomma = 1 UND rDivNachkomma <= 1000.0 DANN
      iNachkomma := iNachkomma * 10 + Tastenwert;
      rDivNachkomma := rDivNachkomma * 10.0;
    END_WENN;
    
    rZahl := INT_TO_REAL(iVorkomma) + INT_TO_REAL(iNachkomma)/rDivNachkomma;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. TIA Date and Time mit x Monaten addieren
    Von rr_zx im Forum Simatic
    Antworten: 19
    Letzter Beitrag: 25.11.2014, 13:06
  2. Antworten: 4
    Letzter Beitrag: 04.05.2012, 12:44
  3. addieren mit step 7 (s7-300)
    Von stay im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 29.08.2009, 21:46
  4. Kommastellen in REAL ( mit SCL )
    Von paula23 im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 16.10.2008, 21:57
  5. Antworten: 2
    Letzter Beitrag: 21.07.2006, 10:21

Stichworte

Lesezeichen

Berechtigungen

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