Step 7 REAL to String

heini36

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

habe viel über das Thema gelesen aber bin leide nicht schlauer geworden. Vielleicht hat jemand zu diesem Thema ein Beispiel.

Ich möchte eine Real Variable in ein String umwandeln und Später dann in Char, für FTP export.

Leider bekomme ich am Ausgang vom FC30 keinen Wert. Habe am Ausgang des FC30 eine Varibale mit Datentyp String[14].

Danke für eure Unterstützung
Heinrich
 
In welchem Speicherbereich liegt denn der String auf den du schreiben willst? Wenn es eine Temp-Variable ist, musst du den String erst initialisieren, andernfalls ist die Stringlänge nicht korrekt definiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
vielen Dank für die rasche Antwort.
Ich habe in einem Globalen DB eine Variable als String [14] angelegt.
Wie kann ich diese am Besten Initialisieren?
Mein Ziel ist später diesem String dann in Char aufzusplittern. Damit ich beim direkten DB FTP Export die Werte am PC ohne Probleme lesen kann.
 
Wenn du einen String in einem DB anlegst, wird das eigentlich alles automatisch angelegt.
Wie stellst du denn fest, dass du am Ausgang des FC30 keinen Wert bekommst? Du kannst String-Variablen nämlich nicht online beobachten, weder im Programmbaustein, noch im Datenbaustein.

Die einzige Möglichkeit die du im Simatic Manager hast, ist eine Variablentabelle.
Mal angenommen du hast den String im DB1 ab Adresse 0 angelegt, dann fügst du dir eine Variablentabelle ein, und fügst folgende Zeilen ein;
- DB1.DBB0 mit Anzeigeformat DEZ (das ist die Maximallänge des Strings, sollte bei dir 14 sein)
- DB1.DBB1 mit Anzeigeformat DEZ (das ist die aktuelle Länge des String, steht im String "10.0" sollte hier eine 4 stehen, diese Länge wird vom FC30 passend eingetragen)
- DB1.DBB2 mit Anzeigeformat ZEICHEN (das ist das erste Zeichen des Strings)
- DB1.DBB3 bis DBB16 fügst ebenfalls mit Anzeigeformat ZEICHEN hinzu, das sind die restlichen Zeichen des Strings

Das kannst du dann beobachten.
 
Guten Morgen
vielen dank für die Antwort, es hat funktioniert.
Wie wäre jetzt der nächste Schritt mit diesem String ein Array of Char zu füllen? Zeichen für Zeichen vom String zu übergeben?
Danke und Schönen tag
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Am schönsten in SCL mit einer AT-Sicht auf den String realisierbar.
Oder eventuell mit BLKMOV den Stringinhalt in das Char Array kopieren.
Oder ...
Kommt drauf an, was Deine unbekannte CPU kann und zuläßt.

Harald
 
Danke für den Tipp hättest du einen kleine Lösungsansatz wie ich es mit BLKMOV oder AT Sicht machen kann?
Ich verwende eine S7-315 und Projektiert in STEP7V5.5.

Meine Idee ist nachher einen File DB zu erstellen und dann mittels FTP export Messwerte am PC zu lesen. Weil Pc kann ja leider nur Char erkennen. Wenn ich real werte in den File DB mache, dann kommen am PC im Editor nur so komische zeichen...

Danke
 
Weil Pc kann ja leider nur Char erkennen. Wenn ich real werte in den File DB mache, dann kommen am PC im Editor nur so komische zeichen...
Der PC kann auch direkt mit Werten im REAL-Format umgehen (kommt drauf an, mit welcher Anwendung die Daten ausgewertet werden) - DU bist die Schwachstelle, die nur Char erkennen/auswerten kann ;)


hättest du einen kleine Lösungsansatz
SCL, ungetestet:
Code:
VAR_TEMP
  tmpChar : ARRAY [1..14] OF CHAR ;
  tmpStringChar : STRUCT
    maxLen : BYTE ;
    curLen : BYTE ;
    Chars  : ARRAY [1..14] OF CHAR ;
  END_STRUCT;
  tmpString AT tmpStringChar : STRING[14] ;
  CurLen : INT ;
  i : INT ;
END_VAR

tmpString := '';
tmpString := R_STRNG(IN:=123.4);

//String zeichenweise in CHAR-Array kopieren
CurLen := LIMIT(MN:=0, IN:=BYTE_TO_INT(tmpStringChar.curLen), MX:=14);
IF CurLen > 0 THEN
  FOR i := 1 TO CurLen DO
    tmpChar[i] := tmpStringChar.Chars[i];
  END_FOR;
END_IF;

Harald
 
Zurück
Oben