Step 7 String aus DB in eine Temp-Variable schreiben

SchnitzelMatzi

Level-2
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

mich würde interessieren ob mein Plan überhaupt zu realisieren ist, da ich nach langem suchen nichts derartiges im www gefunden habe.

Kann man in einer Funktion, aus einem DB, einen String auslesen und diesen einer Var_Temp des Types String zuweisen?
Oder gibt es eine andere Methode, die mir vielleicht noch nicht in den Sinn gekommen ist,
um diesen besagten (DB)String zu verändern, bzw. zu erweitern und ihn anschließend in einen anderen DB wieder rein zuschreiben?

Bisher habe ich es mit den S7-FCs "Left" bzw. "Right" versucht und auch mit "BLKMOV", welcher jedoch nicht zum verändern des Strings dient.

Code:
VAR_INPUT
  FGDB          : BLOCK_DB;
END_VAR

VAR_TEMP
  FailName      : STRING[30];
  FCName        : STRING[18];
END_VAR

BEGIN
FCName        := LEFT(IN :=  FGDB.DB[10], L :=  19);
FailName       := '';
FailName       :=CONCAT(IN1:= 'z.B.SPS',
                                  IN2:=FCName);
END_FUNCTION

Es erscheint immer wieder in der Zeile mit der Funktion "LEFT" der Fehler "Ungültiger Datentyp".

Dieser Quelltext ist nur ein Auszug aus der gesamten Funktion jedoch sind, glaube ich, alle für diese Aktion nötigen dinge hier drinnen.

Ich bin für alle Vorschläge und Tipps offen.
Arbeite derzeit auf S7V5.5

Grüße
Matthias
 
Bin mir nicht sicher, das BLOCK_DB der richtige Datentyp ist. Ist vermutlich nur ein Zeiger und enthält nicht deine Nutzdaten.
Kopier mal die LBs, die davon belegt werden in Merker und schau dir an was da drinn steht.

Oder lass deinen Code testweise in einem FB laufen, mit statischen Variablen statt temporären, um nachsehen zu können was da so abgeht und welche Daten abgelegt werden.
 
FGDB.DB[10] ergibt keinen STRING sondern ein BYTE. Die Struktur des von Außen übergebenen DB FGDB ist unbekannt - es wird nicht interpretiert, daß an DBB10 ein String beginnt.

String-Funktionen können nicht mit Strings direkt aus Übergabeparametern arbeiten, die Strings müssen erst in TEMP oder STAT umkopiert werden.

Code:
VAR_INPUT
  In_String : STRING[30] ;
END_VAR

VAR_TEMP
  temp_String : STRING[30];
  FCName      : STRING[18];
END_VAR

temp_String := In_String ; //String von IN nach TEMP kopieren
FCName := LEFT(IN := temp_String, L :=  18) ; //nun kann man damit arbeiten

END_FUNCTION

Harald
 
Danke für die raschen Antworten.

Das ich aus der Funktion heraus nicht weiß was für ein Typ an der Stelle 10.0 liegt hat mir schon geholfen.
Leider bekomme ich aber nur den DB übergeben und muss dann mehrere Daten verarbeiten, wobei an der Stelle 10.0 immer ein String liegt.

Ich werde jetzt versuchen diesen String mithilfe eines Array of Char, Byte für Byte auszulesen und dann zusammenzufügen.

lg
Matthias
 
Zurück
Oben