UDT`s flecibel kopieren

Olav

Level-1
Beiträge
31
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, allerseits!

Ich habe hier eine Anlage, bei der ich 100 "Rezepte" verwalten muß, die ich in Form von UDT`s mit je 50Byte Länge in einem Array Rezept[1..100] of UDT
global abgelegt habe. Nun kann ich bis zu 24 Materialien und die zugehörigen Rezepturen gleichzeitig in der Anlage haben, möchte also die Information über die "Belegung" der Anlage in der Form eines Arrays hinterlegen, nach dem Muster Belegung[1..24] of Int, wobei der Intererwert den jeweiligen Speicherplatz des Rezeptes darstellt.
Aufbau ist etwa so:

Belegung[1] = 12 -> In Platz 1 liegt Produkt mit Rezept Nr. 12
Belegung[2] = 04 -> In Platz 2 liegt Produkt mit Rezept Nr. 04
...
Belegung[24] = 0 -> In Platz 24 liegt gar kein Produkt (kein Rezept)


Das ist soweit auch kein Problem, aber...

1.
Gibt es eine Möglichkeit, direkt über den Index auf Werte der UDT`s im globalen DB zuzugreifen, nach der Art

U DB10.Rezept[variable].boolwert1
= DB10.Rezept[variable].boolwert2

Geht das???

2.
Bearbeitet (also nicht zu verwechseln mit der Belegung!) werden immer max. 2 Produkte. Diese zwei Rezepte möchte ich zur Sicherheit vor der Bearbeitung nochmal lokal in einem DB ablegen, falls mittendrin jemand über die Visu das Rezept ändert...

Ich würde also gerne eine Möglichkeit haben, relativ komfortabel folgendes zu realisieren:

Rezept[Belegung[x]] -> BLKMOV -> LokalDB.Rezept1

Einen UDT kann ich ja mit BLKMOV kopieren, aber STEP7 möchte immer absolute Zeiger bei SRCBLK und DSTBLK haben. Rezept[15] geht z.B., aber nicht Rezept[Variable].

Ich denke, ich könnte mir einen Any-Zeiger mühsam zusammenbasteln, aber geht das nicht auch einfacher???

Bin für jeden Tip bzw. Anregung dankbar...
 
Was du gerne machen möchtest ist mit SCL problemlos zu realisieren.
Ohne SCL kommst du um indirekte Adressierung nicht herum, also Zeiger auf das Rezept zurechtbasteln und dann über den Zeiger und das AR1 auf die einzelnen Variablen zugreifen. Dazu gabs hier gerade in der letzen Zeit einige Beiträge. Das Umkopieren geht mit einem Baustein, den du hier:
http://www.sps-forum.de/showthread.php?t=4462&highlight=SFC20
findest, darin ist der Blk_move enthalten. Als Input legt man die DB-Nummer und die DW-Nummer von Quelle und Ziel an, sowie die Anzahl der zu kopierenden Bytes.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf UDT zugreifen:

Du kannst an einen FC/FB bei den In/OUT/INOUT-Daten auch direkt ein UDT als Variablentyp angeben. Diesen UDT mußt du dann beim Aufruf dort anparametrieren, entweder symbolisch, oder wie einen Any-Typ (der wird dann in der symbolischen Schreibweise dargestellt und nicht mehr zurückgewandelt, nicht wundern!) In dem Baustein kannst du dann auf die UDT-Variablen direkt zugreifen z.Bsp. mit L #UDT_INOUT_DEF.UDT_Variable_Int ;
 
Zurück
Oben