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

Ergebnis 1 bis 5 von 5

Thema: Array Bereich in SCL in String wandeln

  1. #1
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo SPS Freunde.

    Habe male eine Frage? Wie kann ich folgenden Bereich in SCL in eine STRING wandeln. Dieser Ausschnitt stammt von einem FB.

    VAR
    Kartencode : STRUCT
    Code_Anfang_16h02 : BYTE; // Beginnzeichen Codekarte 16#02
    Code_Nr : ARRAY [1..10] OF BYTE; // Kartennummer
    Code_CR_13 : BYTE; // Carray Return 13
    Code_LF_10 : BYTE; // Line feed
    Code_Ende_16h03 : BYTE; // Endezeichen Codekarte 16#03
    END_STRUCT;

    Was ich in eine STRING umwandeln möchte ist das komplette ARRAY Kartencode.Code_Nr [1..10] of Byte.
    Habe es nun mit verschiedenen Möglichkeiten probiert aber ich bekommen es einfach nicht ohne Fehler hin. Könntet Ihr mir vieleicht weiterhelfen wäre dringend? In AWL darf in nicht schreiben, denn es ist SCL gefordert, fragt aber nicht wiso.
    MfG

    Hubert

    \"Never change a running system. \"
    Zitieren Zitieren Array Bereich in SCL in String wandeln  

  2. #2
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hi,
    einfach mit Blockmove kopieren.
    Wobei "ret_SFC" bei dir unter Var oder Var_Temp als INT deklariert sein muss.
    Würde bei dir etwa so aussehen:

    ret_SFC := BLKMOV(SRCBLK:=Kartencode.Code_Nr, DSTBLK := DEIN_STRING);

    Gruss Zefix

  3. #3
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.849
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    wenn es dir darum geht das array an eine andere stelle zu kopieren dann so wie zefix schreibt.

    sollten die einzelnen bytes aus zahlen bestehen die du in einen string wandeln möchtest, schau die die fc5,16,30 aus den IEC an.

    beachte, das du das verwaltungsbyte vorher belegen musst.

    in awl sieht das dann so aus
    Code:
    temp: strg String[7] 0.0
     
          L     7                           //dem verwaltungsbyte die länge des strings übergeben
          T     LB     0
          CALL  FC     5                    //DI_STRING
           I      :=L#-678901
           RET_VAL:=#strg
          NOP   0
    willst du einen string mit sfc20 kopieren....
    Code:
          CALL  SFC   20
           SRCBLK :=P#L 0.0 BYTE 9          //muss 2 länger sein als der string
           RET_VAL:=MW10
           DSTBLK :=P#DB10.DBX0.0 BYTE 9
          NOP   0
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  4. #4
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hi,

    Hubert wollte ja ein Beispiel für SCL.

    Bin mir jetzt nicht sicher, aber eine direkte Zuweisung funktioniert evtl. auch:

    Dein_String:=Kartencode.Code_Nr ;

    Der String darf jedenfalls nicht kürzer sein als dein "Kartencode.Code_Nr"

    Gruss Zefix

  5. #5
    Avatar von hubert
    hubert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zefix und Volker.

    Habe die SCL Version mit BLKMOV (SCF20) ausprobiert und es funktionierte Super. Das ist genau das was ich haben wollte.
    Code:
    VAR
    Kartencode : STRUCT
    Code_Anfang_16h02 : BYTE; // Beginnzeichen Codekarte 16#02
    Code_Nr : ARRAY [1..10] OF BYTE; // Kartennummer
    Code_CR_13 : BYTE; // Carray Return 13
    Code_LF_10 : BYTE; // Line feed
    Code_Ende_16h03 : BYTE; // Endezeichen Codekarte 16#03
    END_STRUCT;
    STRING_Card : STRING [10];
    END_VAR
    BEGIN
    RET_VAL_BLOCKMOV := BLKMOV (SRCBLK:=Kartencode.Code_Nr, DSTBLK := STRING_Card);
    Die andere Version wie von Zefix vorgeschlagen Funktioniert leider nicht:
    Code:
    STRING_Card := Kartencode.Code_Nr ;
    Dies wir immer beim übersetzen mit dem Fehler "Unterschiedlich Datentyp beendet".

    Ich bedanke mich bei schon mal für eure schnelle Hilfe. Kann aber sein, das ich noch fragen habe, da ich in SCL noch nicht so gewandet bin.
    MfG

    Hubert

    \"Never change a running system. \"

Ähnliche Themen

  1. CHAR in STRING wandeln
    Von morpheuss im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.08.2011, 13:29
  2. Byte in String wandeln
    Von matchef im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 15.10.2010, 17:03
  3. String in Any wandeln im SCL
    Von Masticore666 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 29.09.2010, 16:02
  4. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  5. Satz in String wandeln
    Von Gerri im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.07.2008, 18:29

Lesezeichen

Berechtigungen

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