Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: String aus DB in eine Temp-Variable schreiben

  1. #1
    Registriert seit
    11.02.2014
    Beiträge
    20
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Idee


    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
    Zitieren Zitieren String aus DB in eine Temp-Variable schreiben  

  2. #2
    Registriert seit
    11.03.2011
    Beiträge
    384
    Danke
    32
    Erhielt 80 Danke für 69 Beiträge

    Standard

    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.

  3. #3
    Registriert seit
    14.10.2010
    Ort
    Franken
    Beiträge
    116
    Danke
    47
    Erhielt 40 Danke für 32 Beiträge

    Standard

    Hallo,

    ich bin mir ziemlich sicher, die Funktion Left erwartet am IN Eingang eine Variable vom Typ String.

    Viele Grüße
    Klaus

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SchnitzelMatzi (03.07.2014)

  6. #5
    SchnitzelMatzi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.02.2014
    Beiträge
    20
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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

Ähnliche Themen

  1. TwinCat 2.11 Dateinamen Lesen und in String Variable schreiben?
    Von iLLneSs im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 12.12.2013, 15:36
  2. Step 7 String in SCL aus DB in statische Variable schreiben
    Von fabries im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.09.2013, 11:26
  3. Konstante String in Variable String schreiben
    Von sailor im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.12.2009, 18:01
  4. Antworten: 3
    Letzter Beitrag: 23.05.2005, 11:34
  5. Antworten: 17
    Letzter Beitrag: 06.10.2004, 12:02

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •