TIA HMI (KP400 Basic) String ohne Buchstaben...

escride1

Level-1
Beiträge
1.110
Reaktionspunkte
262
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe an einer KD-Anlage vor die OP77a auszutauschen, es sollten KP400 kommen.

An einer Stelle wird ein String[10] per Eingabe/Ausgabe-Feld zum eingeben eines Codes genutzt.
Dieser Code heisst soviel wie 0012345678

Beim OP77a kann per Enter - Zahleneingabe direkt dieser Code eingegeben werden.
Beim KP400 nun aber würde das T9 aktiv werden, womit die Zahlen umständlich einzugeben sind.
Alternative mittels an Position bewegen und Pfeil auf/ab nutzen ist nicht schnell genug.

Als Idee hatte ich dann gehabt einfach eine Realzahl zu nutzen (wegen 10 Stellen) und diese in einen String[10] umzuwandeln.
Blöd nur, das Real nach der Umwandlung in String soviel ausgibt wie '1234567E" also ... nicht mehr leserlich und auch nicht auswertbar.
Hinzu kommt, das führende Nullstellen bei einer Zahl abgeschnitten werden.

Das mit den abgeschnittenen Nullstellen würde ich hinkriegen. Einfach den String[10] auf String setzen und per LEN abfragen wieviele Zeichen noch da sind um dann vorne die '0' en anhängen die fehlen.

Problem bleibt aber das E in der Realzahl. Das bekomme ich nicht weg.
Zwei Eingabefelder für vorderen und hinteren Teil zu nutzen kommt nicht in Frage.

Gibt es also irgendwie die Möglichkeit

A - Real leserlich in String umzuwandeln
oder
B - Beim KP400 das T9 abzuschalten.

Genutzt wird CPU 314-2DP in TIA V15

Besten Dank für Eure Überlegungen ;)

edit:
PS: OP77 raus, weil A - TIA nötig wegen Erweiterung (1200), B - verblasst, C - Tasten teilweise defekt
 
Warum REAL-Eingabe? REAL hat nur eine Auflösung von ca. 7 Ziffern, werden mehr eingegeben dann wird gerundet, was REAL für Deine Codeeingabe absolut ungeeignet macht.
Ist die erste Ziffer immer 0 oder 1? Dann könntest Du ein Eingabefeld für DINT machen, da können 9..10 Ziffern eingegeben werden und der Eingabewert wird nie gerundet.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab meinen Fehler gesehen. Ich hab im Eingabefeld natürlich 9999999999 eingegeben, also 10 Zeichen. DINT hat aber 11...Vorzeichenbit. Also wurde das letzte Zeichen bei der Umwandlung in String[10] gelöscht und nach rechts geschoben damit das Vorzeichenbit im DB Platz findet. Hatte ich nicht nachgeschaut, blöd.

REAL...belassen wir es bei Montag, war wohl echt nicht mein Tag ^^. Gut das bald Urlaub ist :D

Zu der anderen Frage:
Es ist schon der richtige Weg eine Zahl zu nehmen und dort bei kürzerer LEN im String (nachdem das Vorzeichenbit auch gelöscht wurde) als 10 die fehlenden Nullen voranzuschreiben. Oder sieht da jemand eine bessere Lösung wie z.B. das das Tastenfeld bei einer Zeichenketteneingabe auf Zahlen beschränkt wird.

In der Steuerung brauche ich wie geschrieben die Zeichenkette zur weiteren Auswertung.
 
Meines Wissens kann man in TIA nicht gezielt angeben, welche OnScreen-Eingabetastatur erscheinen soll (ich kenne nur TIA bis V13 SP1). Wenn nur die Ziffern-Tastatur erscheinen soll, dann muß man halt ein numerisches Eingabefeld machen, sprich es muß eine numerische Prozessvariable angebunden werden.

Wenn im späteren Programmverlauf der eingegebene Code als Zeichenkette verwendet werden soll, dann kann man trotzdem die Eingabe als Zahl machen und dann mit S_CONV in einen String umwandeln.

Harald
 
Meines Wissens kann man in TIA nicht gezielt angeben, welche OnScreen-Eingabetastatur erscheinen soll (ich kenne nur TIA bis V13 SP1). Wenn nur die Ziffern-Tastatur erscheinen soll, dann muß man halt ein numerisches Eingabefeld machen, sprich es muß eine numerische Prozessvariable angebunden werden.

Wenn im späteren Programmverlauf der eingegebene Code als Zeichenkette verwendet werden soll, dann kann man trotzdem die Eingabe als Zahl machen und dann mit S_CONV in einen String umwandeln.

Harald

Ja, hätte sein können das irgendwer einen nicht-Siemens Trick kennt um das Verhalten zu ändern, echt bedeppert was vorgegeben wird.

Einfach mal umwandeln ist nicht sooooo leicht.

aus Zahl 1234 macht er nach der Umwandlung nämlich '+1234'

Also muss man dann erstmal das '+' entfernen, dann Länge prüfen, dann fehlende Anzahl Zeichen vorne mit '0' auffüllen.

Das ist für mich jetzt nicht das Problem, aber wenn der nächste dabei sitzt fragt der sich auch erstmal...was soll das jetzt hier, und ewig lange Romane an Kommentaren schreiben ist ja ein bisserl übertrieben.


Da es sich bei dem KP nicht um ein Touch handelt kommt ja keine Tastatur sondern ich wollte das mechanische Tastenfeld nutzen. Nur das dort bei einer Zahleneingabe dann auch die Zahlen kommen, bei Zeichenkette aber a la T9 X-mal die 1 gedrückt werden muss bis die 1 auch kommt, da alle Buchstaben zuerst dran sind. Und Zahlen muss man wieder bearbeiten, String nicht.

Nicht ganz so optimal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist für mich jetzt nicht das Problem, aber wenn der nächste dabei sitzt fragt der sich auch erstmal...was soll das jetzt hier, und ewig lange Romane an Kommentaren schreiben ist ja ein bisserl übertrieben.

Wie willst du dass denn programmieren ?
Mein Ansatz dafür wäre SCL. Hier kannst du dann auch für jeden Befehl schreiben, welchen Sinn er hat - also z.B. "führendes Vorzeichen abschneiden, weil .." oder "gewandelten String mit führenden Nullen auffüllen".
Aus meiner Sicht ist das Ganze (inkl. der Convertierung) ein 3 Zeiler als Code und du würdest dann noch weitere 3 Kommentarzeilen benötigen ...

Gruß
Larry
 
Servus,
nur zur Info weil ich das Umwandlungsthema DINT zu String gerade selber hatte:

Es gibt zwei verschiedene Funktionen im TIA für diese Umwandlung. Die oben beschriebenen Funktionen DINT_TO_STRING oder REAL_TO_STRING sind die
"Beckenrandschwimmer-Garantiert-Falsch-Formatiert" Funktionen.

Dann gibt es aber noch "VAL_STRG".
Die ist zwar um einiges komplexer aufzurufen aber dafür kannst du die Formatierung steuern. Für deinen Fall willst du genau die Funktion haben.
Mit den Parameter "Size" kannst du deine 10 Zeichen vollmachen (rechtsbündig formatiert) und (auch wenn gerade nicht relevant) du kannst die Formatierung z.B. bei Real zahlen wählen.
Also ob du die Zahl als Exponent im String haben willst oder als "0.00".

So wie ich das sehe brauchst du NUR die Funktion aufrufen und bist schon fertig.
 
Genutzt wird CPU 314-2DP
Die oben beschriebenen Funktionen DINT_TO_STRING oder REAL_TO_STRING sind die
"Beckenrandschwimmer-Garantiert-Falsch-Formatiert" Funktionen.

Dann gibt es aber noch "VAL_STRG".
[...]
So wie ich das sehe brauchst du NUR die Funktion aufrufen und bist schon fertig.
Na, ob er wohl die CPU und alle E/A-Baugruppen gegen S7-1x00 austauscht, um diese FormatierFunktion für "Warmduscher" nutzen zu können? ;)

Harald
 
Hallo Gemeinde,
der Beitrag ist zwar schon etwas älter, aber vielleicht stolpert ja (so wie ich) noch mal jemand hier rein.
Das Ausgangsproblem von escride1 war ja, dass er mit einem KP400 (Comfort?) in eine Stringvariable eine reine Zahlenfolge eingeben wollte.
Dazu habe ich in dem Handbuch zum Gerät noch einen guten Tipp gefunden:
Wenn man die entsprechende Taste etwas länger drückt, wird direkt die Zahl eingetragen. Ich habe das mit einem KP400 Comfort getestet. Das ist für mich eine gute Alternative. Man behält die Möglichkeit eine alphanumerische Zeichenfolge einzugeben!
 
Zurück
Oben