TIA Bereich kopieren (symbolisch)

Loipe

Level-2
Beiträge
28
Reaktionspunkte
2
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
 
MOVE_BLK bei den Verschiebefunktionen macht das. Da kannst du eine Quelle, das Ziel und die Anzahl der zu kopierenden Elemente angeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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
 
Zurück
Oben