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

Ergebnis 1 bis 4 von 4

Thema: Bereich kopieren (symbolisch)

  1. #1
    Registriert seit
    30.01.2007
    Beiträge
    24
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe einen FC von dem ich im Temp Bereich Daten kopieren möchte. Dieser ist folgendermaßen deklariert.

    Empfangen "Senden S7_STATUS UDT" 0.0 Empfangsdaten vom Leitrechner
    -Telegrammtyp Char 0.0 Telegrammtyp
    -Station1 Char 1.0 Station
    -Station2 Char 2.0 Station
    -Station3 Char 3.0 Station
    -Station4 Char 4.0 Station
    -Station5 Char 5.0 Station
    -Station6 Char 6.0 Station
    -Station7 Char 7.0 Station
    -Station8 Char 8.0 Station
    -Station9 Char 9.0 Station
    -Station10 Char 10.0 Station
    -MotorID1 Char 11.0 aktuelle-/letzte Motor-ID
    -MotorID2 Char 12.0 aktuelle/letzte Motor-ID
    -MotorID3 Char 13.0 aktuelle/letzte Motor-ID
    -MotorID4 Char 14.0 aktuelle/letzte Motor-ID
    -MotorID5 Char 15.0 aktuelle/letzte Motor-ID
    -MotorID6 Char 16.0 aktuelle/letzte Motor-ID
    -MotorID7 Char 17.0 aktuelle/letzte Motor-ID
    -MotorID8 Char 18.0 aktuelle/letzte Motor-ID
    -MotorID9 Char 19.0 aktuelle/letzte Motor-ID
    -MotorID10 Char 20.0 aktuelle/letzte Motor-ID
    -MotorID11 Char 21.0 aktuelle/letzte Motor-ID
    -MotorID12 Char 22.0 aktuelle/letzte Motor-ID
    -MotorID13 Char 23.0 aktuelle/letzte Motor-ID
    -MotorID14 Char 24.0 aktuelle/letzte Motor-ID
    -MotorID15 Char 25.0 aktuelle/letzte Motor-ID
    -...
    Senden "Senden S7_STATUS UDT" 206.0 Sendedaten an Leitrechner
    -Telegrammtyp Char 0.0 Telegrammtyp
    -Station1 Char 1.0 Station
    -Station2 Char 2.0 Station
    -Station3 Char 3.0 Station
    -Station4 Char 4.0 Station
    -Station5 Char 5.0 Station
    -Station6 Char 6.0 Station
    -Station7 Char 7.0 Station
    -Station8 Char 8.0 Station
    -Station9 Char 9.0 Station
    -Station10 Char 10.0 Station
    -MotorID1 Char 11.0 aktuelle/letzte Motor-ID
    -MotorID2 Char 12.0 aktuelle/letzte Motor-ID
    -MotorID3 Char 13.0 aktuelle/letzte Motor-ID
    -MotorID4 Char 14.0 aktuelle/letzte Motor-ID
    -MotorID5 Char 15.0 aktuelle/letzte Motor-ID
    -MotorID6 Char 16.0 aktuelle/letzte Motor-ID
    -MotorID7 Char 17.0 aktuelle/letzte Motor-ID
    -MotorID8 Char 18.0 aktuelle/letzte Motor-ID
    -MotorID9 Char 19.0 aktuelle/letzte Motor-ID
    -MotorID10 Char 20.0 aktuelle/letzte Motor-ID
    -MotorID11 Char 21.0 aktuelle/letzte Motor-ID
    -MotorID12 Char 22.0 aktuelle/letzte Motor-ID
    -MotorID13 Char 23.0 aktuelle/letzte Motor-ID
    -MotorID14 Char 24.0 aktuelle/letzte Motor-ID
    -MotorID15 Char 25.0 aktuelle/letzte Motor-ID
    -...

    Nun möchte ich gerne die 10 Chars Stationsdaten und 15 Chars MotorID vom Empfangsbereich in den Sendebeich kopiern. Am besten natürlich mit einem Rutsch und nicht mit 10 bzw. 15 MOVE befehlen.
    Idealerweise wären natürlich im Deklarationsteil ein Array von Chars, das geht allerdings nicht, da die Daten von der Schnittstelle so ankommen und wenn ich ein Array daraus mache, dann verschieb er mir den Anfangsbereich jedes Array auf eine gerade OffsetAdresse. Somit entstehen Lücken und das Telegram würde nicht mehr funktionieren.

    Danke schon mal für die Tipps.

    Gruß Alex
    Zitieren Zitieren Bereich kopieren (symbolisch)  

  2. #2
    Registriert seit
    27.07.2007
    Beiträge
    223
    Danke
    17
    Erhielt 42 Danke für 40 Beiträge

    Standard

    MOVE_BLK bei den Verschiebefunktionen macht das. Da kannst du eine Quelle, das Ziel und die Anzahl der zu kopierenden Elemente angeben.

  3. #3
    Registriert seit
    27.07.2007
    Beiträge
    223
    Danke
    17
    Erhielt 42 Danke für 40 Beiträge

    Standard

    Scheinbar geht das wohl doch nicht so, weil der MOVE_BLK laut Hilfe nur Arrays verarbeitet.

    Wenn die neuen CPUs das noch unterstützen kannst du den BLKMOV aus der Verschiebefunktionen\Legacy verwenden.

  4. #4
    Registriert seit
    16.04.2014
    Ort
    Hamburg
    Beiträge
    46
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    du kannst unter deinem UDT eine "AT" Variable anlegen und dann kopieren.

    1. Wenn du gerne mit MOVE_BLK arbeiten möchtest kannst du ein Array vom type Char der Länge deines UDT nehmen.

    oder
    2. Du baust dir einen Strukt der die Bereiche des UDT's beschreibt und kopierst dann die Teile einzeln.



    Ich nutze Variante 2 und das würde dann so aussehen:

    Code:
    FUNCTION "Copy" : Void
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_TEMP 
          Empfangen : "Senden S7_STATUS UDT";
          Empfangen_Copy AT Empfangen : Struct
             "Type" : Char;
             Part1 : Array[0..9] of Char;
             Part2 : Array[0..15] of Char;
             Rest : Array[0..177] of Char;
          END_STRUCT;
          Senden : "Senden S7_STATUS UDT";
          Senden_Copy AT Senden : Struct
             "Type" : Char;
             Part1 : Array[0..9] of Char;
             Part2 : Array[0..15] of Char;
             Rest : Array[0..177] of Char;
          END_STRUCT;
       END_VAR
    
    
    
    
    BEGIN
        
        // TestDaten
        #Empfangen.MotorID3 := 'A';
        
        
        // kopieren
        #Senden_Copy.Part1 := #Empfangen_Copy.Part1;
        #Senden_Copy.Part2 := #Empfangen_Copy.Part2;
        
        
        // Schauen ob es geht
        #Senden.MotorID3 := #Senden.MotorID3;
        
        
    END_FUNCTION
    Gruß Thomas

Ähnliche Themen

  1. TIA Bereich kopieren - verschiedene Datentypen
    Von Snape im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 04.02.2016, 08:44
  2. Antworten: 1
    Letzter Beitrag: 23.10.2015, 13:29
  3. DB bereich kopieren / Syntaxproblem
    Von Kodan im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.04.2008, 19:21
  4. Antworten: 0
    Letzter Beitrag: 25.04.2007, 07:50
  5. Daten von einem DB inTemp Bereich kopieren
    Von neuer_user im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 05.10.2006, 14:29

Lesezeichen

Berechtigungen

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