TIA Zeichenkette in (D)INT umwandeln

Geisterkarle

Level-2
Beiträge
126
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich hab ein Array[6] of Char in der eine Zahl steht. Diese muss ich in einen vernünftig verwertbaren Wert (D)INT (mir wär auch ein REAL egal...) umwandeln.

Prinzipiell könnte ich das so ähnlich wie hier:
http://www.sps-forum.de/simatic/14708-bytes-int-wandeln.html#post91392
von "Hand" machen.
Wobei das ganze auch ein EA-Feld im Panel ist und da müsste ich dem Bediener ja erstmal beibringen, das 123 nicht 123 ist, sondern 000123 (oder selber per SPS auffüllen...), weil sonst die Berechnung falsch ist.

Ansonsten dachte ich, kann die SPS das ja vielleicht und hab in der TIA-Bibliothek auch die Funktionen S_CONV und ATH gefunden. Leider verweigern die ihre Arbeit und ich weiss nicht warum ...

Hier mal der etwas "sinnfreie" (sieht ja nix besonderes am Aufruf) AWL-Code, den ich grad am testen habe:
------
CALL S_CONV
src_type:=String
dest_type:=DInt
IN :="DB_RumTEST".Stringtest
OUT :="Tag_22" // MD120

CALL ATH
IN :="DB_Rezept".Scandaten.Anzahl
N :=6
RET_VAL :=#wdummy // Rückgabewert immer 16#1E00
OUT :="Tag_23" // MD124
-------
Also das "DB_Rezept".Scandaten.Anzahl ist mein Array. Der Rumtest-String ist derzeit einfach ein String, den ich von Hand beschreibe; wenn es funktionieren würde könnte ich ja mein Array einfach in einen String rüberschieben.
Wie gesagt machen beide Funktionen gar nichts! Soll heissen: Ich kann die OUT Testvariablen mit einer Variablentabelle beliebig ändern, die Funktion setzt mir da gar nichts zurück.
Die ATH Funktion gibt mir ein 1E00 zurück; egal was ich reinschreibe oder nicht. Was heisst das überhaupt? Die Infoseite kennt als Rückgabewerte nur 0 (alles ok) und 7 (fehlerhafte Zeichen).

Wo ist mein Fehler?
Ich arbeite noch nicht so lange mit TIA; früher hätte ich diese Funktionen vermutlich irgendwie einspielen müssen, weil es vermutlich eigene FCs sind. (im gegoogel kam was von FC37/38 ) Muss ich hier auch noch irgendwas machen? Er meckert beim einspielen zumindest mal nicht!

Danke für Hinweise!

grüße
Geisterkarle
 
Hi Geisterkarle

also der S_CONV funktioniert bei mir. Natürlich nur dann, wenn im "DB_RumTEST".Stringtest auch eine Zahl drin steht. Bei 1200/1500 steckt hinter dem S_CONV ein SFC206, da musst du vorher nix ins Projekt reinkopieren, das macht das TIA-Portal selber -- ausnahmsweise mal ein Segen, dieses konsistente Laden.
Also musst du aus deinem Array[1..6] of Char erstmal die Daten in den String[6] kopieren, der darf auch länger sein. Das geht z.B. mit CharsToStrg.
Zum Rum-Testen, kann man das mit einer Beobachtungstabelle machen.

Der ATH ist zum lesen von HEX-Zahlen da, den kannst du hier nicht brauchen.

Und wenn dir die voreingestellten Formate am S_CONV nicht gefallen, dann gibt es da auch noch den STRG_VAL, der hat ein paar Parameter mehr.


Und dann gibt es noch das Zaubermittel der F1 Taste. Zuerst S_CONV markieren, dann F1 drücken. "Gelegentlich" bekommst du damit die Hilfe für die markierte Funktion, welche auch oft funktionierende Beispiel hat.

'n schön' Tach auch
HB
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo HB,

Danke! Deine Erwähnung mit 1200/1500 und konsistentem Laden hat mich darauf gebracht! Denn ich ich hab ja nur ne IM151 CPU (ich benutze TIA nur, weil mir ein TP 900 vor die Nase gesetzt wurde) und hier muss ich tatsächlich einen Baustein einspielen! Und da ich neu mit TIA bin wusste ich nicht, dass ich das Fehlen erst sehe, wenn ich links den Baum zu den "Systembausteinen" aufmache... Nun funktioniert der S_Conv! Naja, ich mach keinen S_Conv, sondern primitive FC37 String_DI, sieht man nur nicht, wenn man es nicht weiss! Und da hab ich mich jetzt gestern hingesetzt und mir meinen eigenen Baustein geschrieben ... Mist, Arbeit umsonst :) Wobei, hier muss ich den Char-Array nicht in einen String konvertieren ... mal schauen, ob ich wieder auf Standardbaustein setze, als auf mich :)

Danke nochmals!

grüße
Geisterkarle
 
Zurück
Oben