TIA Ersatz Blkmov für 1500/1200er steuerungen

vollmi

Level-3
Beiträge
5.436
Reaktionspunkte
1.410
Zuviel Werbung?
-> Hier kostenlos registrieren
hi zusammen

Mittlerweile habe ich auch meine grösseren Programme komplett auf Optimierte Bausteine umgestellt. Also auf Pointer verzichtet, alles Symbolisch etc. Aber etwas macht mir noch üble Bauchschmerzen.
Viele meiner Kommunikationsalgorithmen funktionieren ähnlich. Ich definiere für die Sendebausteine (T Bausteine und S7-Bausteine für zweiseitige Kommunikation) ein Sendearray of Bytes in welches ich üblicherweise die zu sendenen Daten von Variabler Länge kopiere.

Code:
            #Status := BLKMOV(SRCBLK := "Signalliste".Signal[#index].setsymbol, DSTBLK => #comCouple.Snd.Sendebereich);
Code:
            #Status := BLKMOV(SRCBLK := "Signalliste".Signal[#index].getsymbol, DSTBLK => #comCouple.Snd.Sendebereich);
Code:
            #Status := BLKMOV(SRCBLK := "Signalliste".Signal[#index].setconfig, DSTBLK => #comCouple.Snd.Sendebereich);
Sendebereich ist ein Bytearray für die Sendebausteine kann dieses im Optimierten Bereich liegen.
setsymbol/getsymbol/config sind UDT variabler länge. Mit Blkmov konnte ich das wunderbar umkopieren. Es wurde einfach das komplette UDT kopiert und der rest vom Byte Array in ruhe gelassen.
Genauso ging der umgekehrte Weg
Code:
            #Status := BLKMOV(SRCBLK := #comCouple.Snd.Empfangsbereich, DSTBLK => "Signalliste".Signal[#index].Act_Symbolstatus);
Hier wurde aus dem Empfangsbereich einfach nur soviel Kopiert wie auch in den Act_Symbolstatus hineingepasst hat.

Ein äquivalent zu Blkmove mit der Funktion Alles kopieren was ins Ziel passt finde ich für Optimierte Speicherbereiche nicht.
Im ganzen Rest des Programms kann ich alles mit optimierten Bausteinen machen nur hierfür brauch ich die Datenbereiche Signalliste und comCouple im nicht optimierten bereich

Hat jemand ne Idee wie ich das hinkriegen könnte?

Eine Idee wäre ja alle Variablen des UDT einzeln an den richtigen Platz im Array zu kopieren. Dann muss ich aber Realvariablen in zwei Byte aufteilen, Int ebenfalls und überhaupt n haufen Typkonversionen durchführen was vermutlich wieder weniger Optimal ist als einfach den ganzen DB nicht optimiert zu verarbeiten.

mfG René
 
Zurück
Oben