TIA S_Conv Bug oder Feature?

Hadante

Level-2
Beiträge
78
Reaktionspunkte
14
Zuviel Werbung?
-> Hier kostenlos registrieren
So eigentlich was ganz simples.

Ich will einen UDint in einen String konvertieren.
Ich verwende SCL und möchte kein Vorzeichen (+/-) haben.

Gesagt getan, S_Conv eingefügt, dabei ist mir aufgefallen das er es in der Beschreibung des Bausteins (KOP) ohne Vorzeichen macht aber in SCL mit.

Kop:

Anhang anzeigen 2020-05-27 08_52_50-Window.bmp

SCL:

Anhang anzeigen 2020-05-27 08_53_05-Window.bmp

Ich meine das Vorzeichen nachträglich zu entfernen ist klar möglich, aber erfordert schon wieder ein paar Arbeitsschritte (String Länge,.....). Diese würde ich mir gerne sparen.
Übersehe ich etwas?

Interessant ist auch das bei der KOP Anweisung eine Länge von 11 ausgegeben wird????? bei 7 Zeichen wird anscheinend mit 4 Leerzeichen gefüllt, gut damit hätte ein DINT in Maximaler Länge mit Vorzeichen Platz.
Bei der SCL Anweisung wird eine Länge von 8 ausgegeben, welches mit Vorzeichen die echte Länge ist.
 
Zuletzt bearbeitet:
Moin,
Das mit der Länge steht so ähnlich in der Hilfe:
S_Conv.PNG
Wenn SCL also keine Leerzeichen auffüllt, ist die Länge also kürzer. Grundsätzlich hätte ich dir (wie die Siemens-Hilfe auch) eher zum Val_Strg geraten. Dort kann man nämlich über den Eingang Format angeben, was mit dem Vorzeichen passieren soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Das mit der Länge steht so ähnlich in der Hilfe:
Anhang anzeigen 49939
Wenn SCL also keine Leerzeichen auffüllt, ist die Länge also kürzer. Grundsätzlich hätte ich dir (wie die Siemens-Hilfe auch) eher zum Val_Strg geraten. Dort kann man nämlich über den Eingang Format angeben, was mit dem Vorzeichen passieren soll.

Das witzige daran ist wenn ich s_conv einfüge wird es in UDINT_TO_STRING gewandelt, also an sich zieht man die selbe Funktion ins Programm mit der selben Beschreibung und bekommt ein anderes Ergebnis.
Das Problem an Val_Strg ist dass es immer die Stringlänge mit Leerzeichen auffüllt, allerdings ist dies nicht gewünscht, denn dann muss ich nach dem letzten Leerzeichen nach dem String Anfang suchen.

z.B. P=1 und Size 10
UDINT = 50 String = xxxxxxxx50
UDINT = 5050 String = xxxxxx5050

Ist nicht unbedingt vorteilhafter wenn man den String weiterverarbeiten will ;)

Ich habe es in der SCL Variante gemacht, da ich eh schauen muss ob der String am Ende 6 Zeichen hat und wenn nicht mit führenden Nullen auffüllen muss, von daher ist es am Ende wieder egal. Wollte nur wissen ob es eine elegantere Lösung gibt.
Bei länge 7 gibt es halt ein delete und bei länge 6 ein replace, da er laut Definition nur zwischen 10000 und 999999 haben kann.
 
Zuletzt bearbeitet:
Naja, die Conv-Funktionen gibt es halt in SCL nicht, weil man dort halt wie in C o.ä. castet - also die xxx_To_yyy()-Funktionen nutzt.
Der Val_Strg füllt extra mit Leerzeichen auf, weil sich diese halt besser suchen lassen. Würde er mit Nullen auffüllen, müsste man ja wieder unterscheiden ob diese Null zu meiner Zahl gehört oder nicht.
Wenn dein String nur 6 Zeichen haben darf, dann würde ich auch als Ziel-String nur 6 Zeichen vorsehen und die Größe vorher, also noch als Int, überprüfen. Dann den Val-Strg anwenden und auf das Ergebnis einen Replace von Blanc auf 0. Finde dein Vorgehen ein wenig kompliziert - aber viele Wege führen ja bekanntlich nach Rom. ;)
 
Zurück
Oben