Step 7 Addieren mit Kommastellen

heg_1907

Level-1
Beiträge
2
Reaktionspunkte
0
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
 
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
 
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 :cool:
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
 
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
 
Zurück
Oben