# Real nach String



## bastler (27 März 2009)

Hallo
Ich habe folgende Aufgabe:
Ich möchte eine Realzahl in einen String umwandeln und Teile aus diesen String in einen anderen String kopieren und diesen dann auf ein Display per Profibus übertragen. Zur Umwandlung benutze ich den FC30 (R_STRING) und zum kopieren den SFC20(BLKMOV). Wandle ich z.B. die Zahl 3 dann steht die 3 im String im Byte 5. Wandle ich die Zahl 30 steht die 3 an der selben Stelle und der Exponent nimmt den Wert 2 an.
Wie muß man das programmieren, damit ich per SFC20 nun aber eine 30 in den String einfügen kann, es ändert sich ja nur der Exponent?

MfG
bastler


----------



## bastler (27 März 2009)

hat niemand eine Idee, oder hab ich mich schlecht ausgedrückt?


----------



## Larry Laffer (27 März 2009)

Hallo,
ich lese deine Anfrage jetzt erst ... muss aber gestehen, dass ich nicht so recht verstanden habe wo dein Problem ist ...

Gruß
KK


----------



## Hagen (27 März 2009)

Hallo bastler,

wenn ich dein Problem richtig verstanden habe, wird der Realwert in Exponentialschreibweise in einen String umgewandelt, während du den Wert in "klassischer" Darstellung benötigst. Richtig?

Falls, ja, unter oscat.de gibt es eine Funktion "REAL_TO_STRF" die deinen Bedürfnissen entsprechen sollte. 

Gruß Hagen


----------



## bastler (28 März 2009)

Hallo Hagen
du hast nicht nur mein Problem verstanden, sondern mit deinem Link konnte ich das Problem auch lösen. Die Bausteinbibliothek von oscat.de ist wirklich genial und zu empfehlen.
Übrigens, es gibt vereinzelt Downloadprobleme auf dieser Seite. Bei Klick auf die Links öffnet sich die Seite einfach nochmal. Ich habs so hin bekommen:
-den Link rechts anklicken und auf "Link-Adresse kopieren"
-ein neues Browserfenster öffnen und den Link in Adresszeile einfügen,
-Enter und der Download beginnt.

Danke nochmals.

MfG
bastler


----------



## s3amdrer (13 Mai 2009)

Kann mir noch jemand sagen was ich machen muss damit ich die Funktion in Step7 benutzen kann.
Wie kann ich die Funktion in Step 7 integrieren?


----------



## jabba (13 Mai 2009)

Hast Du ein Problem mit der Verwendung mit OSCAT oder der Funktion Real_to STRF


----------



## s3amdrer (13 Mai 2009)

Ich möchte in Step7 ein Real in String wandeln und dann per CP340 ausgeben. Mit FC30 bin ich irgendwie nicht erfolgreich. Weiterhin möchte ich den String im Format 25,55 haben und nicht Exponential.

Da benutzte ich die Forensuche und wollte "Real_to STRF" benutzen.
Weis aber nicht wie ich sie in Step7 einfügen kann.


----------



## jabba (13 Mai 2009)

Hast Du denn die Oscat-Lib schon installiert und den FC278 und Concat, DI_String, Replace aus den IEC Funkctionen in dein Projekt kopiert?


----------



## s3amdrer (13 Mai 2009)

Nein ist nicht installiert.
Habe "*oscat.lib 3.04 Step 7*" herrunter geladen.
Ich weis nicht wie ich sie installiere. 
Geht wohl nicht mit einer Setup Datei

Den Rest 
"und den FC278 und Concat, DI_String, Replace aus den IEC Funkctionen in dein Projekt kopiert? "
habe ich auch noch nicht gemacht.


----------



## jabba (13 Mai 2009)

Die Oscat Step7 hast Du doch als ZIP heruntergeladen.
Diese entpackst Du in ein Verzeichnis deiner wahl. (nicht Temp oder so)

Dann im Simatic-Manager 
Datei-Öffnen
den Reiter Bibliotheken auf durchsuchen und die Oscat auswählen.
Die Oscat sollte dann geöffnet werden.

In deinem Projekt legst du ein Netzwerk an, dann sollte in der Funktionsanwahl (normalerweise links) unter Bilbliotheken die Oscat304 auftauchen. dort kann Du dann den Real_to_Strf aussuchen.


----------



## s3amdrer (13 Mai 2009)

Deine Anleitung war super! Hat alles geklappt.
Das Längste war die Suche nach der Funktion:-D
Es sind ja immerhin über 400.

Werde morgen mal mit "REAL_TO_STRF" arbeiten und mal sehen was draus wird.

Danke  
Gruß Rene


----------



## Gerri (14 Mai 2009)

Gibt es irgendwo eine Übersicht der zur Verfügung ´stehenden FC/FB´s der Oscat Lib?


----------



## Ralle (14 Mai 2009)

Gerri schrieb:


> Gibt es irgendwo eine Übersicht der zur Verfügung ´stehenden FC/FB´s der Oscat Lib?



Es ist eine PDF dabei dort ist alles drin!


----------



## vita-2002 (14 Mai 2009)

Meinst du Dokumentation?
http://oscat.de/index.php?option=com_docman&task=cat_view&gid=23&Itemid=33


----------



## s3amdrer (14 Mai 2009)

Ja, da sind alle FC's u.s.w. beschrieben.


----------



## ChristianS (14 Mai 2009)

Hallo,

ich müsste mich auch mal mit in das Thema einmischen. Ich muss auch einen Real nach String wandel für serielle Kommunikation. Ich habe oskat eingebunden und die noch notwendigen FC's. Aber es kommt bei mir in der Simulation nichts sinnvolles raus.

Real: 1.1234 wird bei mir zu String: +1.....  ?? 

Hab ihr eine Ahnung was ich da falsch machen? Habe das Projekt angehängt.

Gruß Christian


----------



## jabba (15 Mai 2009)

Ich hab den Fehler auch.
Es liegt aber nicht an der Oscat-Lib , sondern am Befehl Insert.
Den habe ich mal Testweise aufgerufen, und der füllt mir den String bis zum Ende auf.
Nach langem suchen habe ich rausgefunden, das beim Insert der In und out nicht gleich sein darf. Ich habe in dem SCL eine weitere Variable eingefügt, jetzt geht es bei mir ohne Probleme.


```
(* @PATH := '\/String' *)
FUNCTION REAL_TO_STRF : STRING[20]
TITLE = 'REAL_TO_STRF'
//version 1.7 27. feb. 2009
//programmer  hugo
//tested by   
// 
//Real_to_strF converts a Real to a fixed length String.
//the string will be filles with zeroes to achieve the fixed length after the dot.
//
//uses: oscat/mathematical/EXP10
//      S7/Standard Library/IEC Function Blocks/CONCAT
//      S7/Standard Library/IEC Function Blocks/DI_STRING
//      S7/Standard Library/IEC Function Blocks/REPLACE
// 
//
VERSION : '1.7'
AUTHOR  : oscat
NAME    : REALSTR
FAMILY  : STRINGS
VAR_INPUT
    IN : REAL;
    N : INT;
END_VAR
VAR
    tN : INT;
    O: REAL;
    i: INT;
    str : STRING[20];
    [COLOR=red]str2: STRING[20];[/COLOR]
END_VAR
BEGIN
str := REAL_TO_STRF;
(* round the input to N digits and convert to string *)
(* LIMIT N to 0 .. 7 *)
tN := LIMIT(MN:=0,IN:=N,MX:=7);
(* round the input to N digits and convert to string *)
O := ABS(in) * EXP10(tN);
str := DINT_TO_STRING(REAL_TO_DINT(O));
(* add zeroes in front to make sure sting is at least 8 digits long *)
FOR i := LEN(str) TO tN DO str := CONCAT(IN1:='0', IN2:=str); END_FOR;
(* add a dot if n > 0 *)
IF tN > 0 THEN [COLOR=red]str2[/COLOR] := INSERT(IN1:=str, IN2:='.', P:=LEN(str) - tN); [COLOR=red]ELSE str2:=str;[/COLOR] END_IF;
(* add a minus sign if in is negative *)
IF in < 0 THEN [COLOR=red]str2[/COLOR] := CONCAT(IN1:='-', IN2:=str2); END_IF;
REAL_TO_STRF := [COLOR=red]str2[/COLOR];
 
(* revision history
hm  26 jan 2007 rev 1.0
    original version
hm  20. nov. 2007   rev 1.1
    when N=0 ther will be no dot at the end of the string.
hm  15. dec. 2007   rev 1.2
    changed code for better performance
hm  4. mar. 2008    rev 1.3
    result is now rounded instead of trunc
hm  20. mar. 2008   rev 1.4
    changed trunc to real_to_dint because trunc was generating wrong values on wago 842
hm  29. mar. 2008   rev 1.5
    changed STRING to STRING(20)
hm  4. apr. 2008    rev 1.6
    added variable O to avoid an error uner CoDeSys SP PLCWinNT V2.4
hm  27. feb. 2009   rev 1.7
    added a missing zero for IN < 1
*)
END_FUNCTION
```


----------

