Real nach String

bastler

Level-2
Beiträge
258
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du denn die Oscat-Lib schon installiert und den FC278 und Concat, DI_String, Replace aus den IEC Funkctionen in dein Projekt kopiert?
 
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:confused:

Den Rest
"und den FC278 und Concat, DI_String, Replace aus den IEC Funkctionen in dein Projekt kopiert? "
habe ich auch noch nicht gemacht.
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 

Anhänge

  • Real_To_String.rar
    260,6 KB · Aufrufe: 26
Zuviel Werbung?
-> Hier kostenlos registrieren
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.

Code:
(* @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
 
Zuletzt bearbeitet:
Zurück
Oben