Step 7 UDT kopieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Step7 Klassik 5.6

Kämpfe mit SCL.Wie immer.Oben seht ihr den UDT Daten.Das ist ein 2 dimensionales Bool Array.
Die UDT-daten Soll/Ist befinden sich in einem globalen Datenbaustein
Ich wollte das mit Block Move kopieren, dann hat er gemeckert das die Daten durch 8 teilbar sein müssen.
Wie kann ich einfach die Daten von Soll nach Ist kopieren?
 
Vielleicht ist auch meine Vorgehensweise falsch.
Der UDT besteht aus 3 Arrays.Alle Typ Bool.
Das erste Array ist 2 dimensional, das 2 und 3 ist 1 dimensional.
Der Datensatz gibt es 2 mal im DB.
Nun möchte ich das 2 dimensionale innerhalb des DB's kopieren.
 
dann zeig doch mal wie der UDT Daten aussieht ,

wenn du das nicht willst
DeinGlobalerDB.Ist.wasauchimmer := DeinGlobalerDB.Soll.wasauchimmer;
 
Ja das ist schon richtig.
Aber ich kriege die Daten nicht rein in den Baustein.Intern habe ich die 2 Arrays angelegt.
Von aussen über die Schnittstelle kann ich die nicht reingeben.
Er bietet mir an Datenbaustein.UdtName.xxx und das wars.Ich wollte Soll und Ist reingeben und dann zuweisen.
Das X kann ich nicht auflösen.Oder mache ich da was falsch.
 
Das mit dem Block Move habe ich probiert.
Dann ist die Fehlermeldung gekommen die angelegten Adressen müssen durch 8 teilbar sein.
Das ganze sind ja Bool-Arrays.Es stand dann auch was im Fehlerwort drinnen.

Die zweite Variante wäre noch ich mache den ganzen DB im FC bekannt?
 
1728304731883.png

Im Baustein selbst konnte ich ein array of daten anlegen.Also den UDT.
Das übersetzt er auch.Aber an die Schnittstelle kann ich nichts schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Innenleben hat er übersetzt.

FUNCTION FC7 : VOID

//Der Baustein kopiert innerhalb eines DB die Daten von einem 2
dimensionalen Array in ein
// weiteres 2 dimensionalem Array das im gleichen Baustein liegt.
//Der Zugriff erfolgt Absolut über eine Flanke
VAR_TEMP


END_VAR

VAR_INPUT
Soll:
ARRAY[1..5,1..4] OF "Daten";


END_VAR

VAR_IN_OUT
Ist : //Solldaten von der 2 Maske. 1 Index
Schrittnummer,2 Index Zylindernummer
ARRAY[1..5,1..4] OF "Daten";


END_VAR



VAR_OUTPUT


END_VAR
Ist := Soll;


END_FUNCTION
 
Ich versteh dich nicht...

Du hast einen UDT "Daten". In deinem DB liegen zwei Instanzen dieses UDTs ab, einmal "Ist" und einmal "Soll". Der UDT "Daten" besteht aus mehreren unterschiedlichen Array Of Bool.

Wenn du den FC nur zum Kopieren nutzen willst, warum definierst du "Ist" dann als "Array of Daten" und nicht direkt als Daten? Dann brauchst du dich auch nicht zu wundern, wenn du "Ist" aus dem DB nicht an die "Ist"-Schnittstelle deines FCs knüpfen kannst.

TL;DR: Du kannst eine Variable vom Typ "Daten" nicht an eine Schnittstelle übergeben, die "Array of Daten" erwartet.
 
Das versteh ich jetzt nicht.
Mein programm ist in FUP.Wie kann ich das eine UDT array in das andere kopieren.
Sage mir konkret wo und wie ich das kopiere, dann mache ich das.
 
Zurück
Oben