Step 7 Adresse von Datentyp Struct im Datenbaustein.

PraviMarkus

Level-2
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo meine Liebe SPS Community

Um mich kurz Vorzustellen Markus 20J PCS7 Anfänger
Ich stehe aktuell an .
Ich soll aktuell Bausteine vergleichen . Der Baustein fordert mir den Datentypen STRUCT
1695639048696.png
Weil der Datentyp Struct keine eigene Adresse hat soll man diesen ja in einen DB geben soweit ich verstanden habe 1695639339697.png
1695639297998.png

Aktuell Versuche ich die Adresse vom Struct Datatypen herauszufinden. Damit ich diese den Eingang Anlage verknüpfen kann .
Im Internet fand ich nicht wirklich viel dazu was mir weitehilft .
Würde mich um jede Information / Hilfe freuen

LG Markus
 
Hallo Markus,

um auf die konkrete Frage einzugehen: Du schaltest in der DB-Ansicht auf Datenansicht, dann siehst Du nicht nur die Offsets, sondern auch die Adressen.

ABER: Warum willst Du absolut adressieren, gerade in PCS7?
Du gibst Deinem Vergleicher-Baustein als Eingangs-Datentyp den Datentyp "Anlage1", dann kannst Du direkt den Struct übergeben und auch so intern damit weiterarbeiten.
Sollte der sich dann irgendwann ändern, funktioniert Dein Programm weiter, weil Du ja symbolisch arbeitest. Deine Vergleichsoperation müßtest Du nur ggf. anpassen.
Wenn Du nur auf = prüfen willst, solltest Du das auch direkt so vergleichen können (zumindest in SCL) : IF Anlage[1] = Anlage[2] THEN
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Adressen im DB kann man nicht selbst eingeben, die werden automatisch vergeben.
Die Adresse wo ein STRUCT beginnt, ist die selbe Adresse, wo die erste Variable in dem STRUCT beginnt. Bei Dir also DBX0.0 (DB1300.DBX0.0)

Was meinst Du mit "Bausteine vergleichen"? Falls ein STRUCT den belegten Speicher nicht lückenlos belegt, dann kann es passieren, daß die Füllbytes und Füllbits unterschiedliche Werte haben, daher müsste man jede Variable in dem einen STRUCT mit der entsprechenden Variable des anderen STRUCT vergleichen, und nicht den Inhalt der Speicherbereiche vergleichen.
 
Hallo Markus,

um auf die konkrete Frage einzugehen: Du schaltest in der DB-Ansicht auf Datenansicht, dann siehst Du nicht nur die Offsets, sondern auch die Adressen.

ABER: Warum willst Du absolut adressieren, gerade in PCS7?
Du gibst Deinem Vergleicher-Baustein als Eingangs-Datentyp den Datentyp "Anlage1", dann kannst Du direkt den Struct übergeben und auch so intern damit weiterarbeiten.
Sollte der sich dann irgendwann ändern, funktioniert Dein Programm weiter, weil Du ja symbolisch arbeitest. Deine Vergleichsoperation müßtest Du nur ggf. anpassen.
Wenn Du nur auf = prüfen willst, solltest Du das auch direkt so vergleichen können (zumindest in SCL) : IF Anlage[1] = Anlage[2] THEN
Mein Ziel ist es den Datentyp Struct hiermit zu verbinden. Damit ich den Block testen kann
1695640847238.png
 
Ja, von welchem Datentyp ist denn der Eingangsparameter "Anlage" momentan? Du kannst Direkt den UDT "Anlage1" als Datentyp angeben...
dann übergibst Du direkt Dein Array-Element
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Adressen im DB kann man nicht selbst eingeben, die werden automatisch vergeben.
Die Adresse wo ein STRUCT beginnt, ist die selbe Adresse, wo die erste Variable in dem STRUCT beginnt. Bei Dir also DBX0.0 (DB1300.DBX0.0)

Was meinst Du mit "Bausteine vergleichen"? Falls ein STRUCT den belegten Speicher nicht lückenlos belegt, dann kann es passieren, daß die Füllbytes und Füllbits unterschiedliche Werte haben, daher müsste man jede Variable in dem einen STRUCT mit der entsprechenden Variable des anderen STRUCT vergleichen, und nicht den Inhalt der Speicherbereiche vergleichen.
Hätten 2 Bausteine die eigentlich gleich sind . Aber die bei mir hätten bedenken das der Baustein vielleicht nicht das gleiche Signal ausgibt daher sollte ich dieses Testen . Leider wird bei mir DB1300.DBX0.0 nicht angenommen (Invalid Parameter in the call)
 
Hätten 2 Bausteine die eigentlich gleich sind . Aber die bei mir hätten bedenken das der Baustein vielleicht nicht das gleiche Signal ausgibt daher sollte ich dieses Testen .
???
Leider wird bei mir DB1300.DBX0.0 nicht angenommen (Invalid Parameter in the call)
Wie sieht denn dein Programmcode mit dem "call" aus?
DB1300.DBX0.0 ist die Anfangsadresse des STRUCT (genauer: des ARRAY [1..10] OF STRUCT). Dein Programm braucht vermutlich Anfangsadresse + Länge des STRUCT. Du müsstest da vermutlich den STRUCT symbolisch angeben, z.B. "TESTOE".Anlage oder "TESTOE".Anlage[1]
 
Zurück
Oben