TIA Teilbereich einer Struct aus Static in DB kopieren

Eduard Schleich

Level-2
Beiträge
60
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA Versionen: V17, V18
System: S7-1500

Hallo zusammen,

Hintergrund ist dass ich von einem Denso-Roboter die Ein-/Ausgänge in einen DB schreiben will. Das lesen der Roboterausgänge, also
Eingänge an der SPS, erfolgt über DPRD_DAT unter Angabe der Hardwareadresse.

Innerhalb des FB werden die Standardsignale gesteuert und im Static des FB innerhalb einer STRUCT(SendStd) gespeichert. (Aufbau siehe erster Code)
In dieser STRUCT sind nach Byte 72 noch weitere Daten angelegt. Die ganze Struct ist 32 Byte groß.
(Entspricht dem Gesamtbereich des Roboters der 32 Byte für Ein- und Ausgänge hat)
Ist es einfacher wenn ich die STRUCT nur auf die Daten die ich kopieren möchte beschränke?

Ich möchte die ersten 5 Byte dieser Static STRUCT in einen globalen DB in eine STRUCT kopieren. Diese STRUCT beginnt ab Byte 288 und ist auch
insgesamt 32 Byte lang. Die nachfolgenden Bytes ab 293 sind freie Eingänge am Roboter und werden innerhalb des SPS Programms in den DB geschrieben.

Mit DPWR_DAT wird der gesamte Inhalt der DB STRUCT (32 Byte) dann an den Roboter gesendet.

Beide STRUCT sind identisch aufgebaut.

Wichtig ist noch:
Der Ziel-DB wird dem FB als Input-Variable (INT) übergeben da der Baustein instanziert einsetzbar sein soll.

Der zu kopierende Bereich:
Code:
SendStd    Struct
    IO512_Schrittstop        Bool    68.0
    IO513_Reserviert        Bool    68.1
    IO514_Sofort_Stopp        Bool    68.2
    IO515_Taktsignal        Bool    68.3
    IO516_Interr_Uebers        Bool    68.4
    IO517_Reserviert        Bool    68.5
    IO518_Reserviert        Bool    68.6
    IO519_Impar_Befehl        Bool    68.7
    IO520_Datenbereich_1    Byte    69.0
    IO528_Datenbereich_2    Word    70.0
    IO544_Befehlsbereich_0    Bool    72.0
    IO545_Befehlsbereich_1    Bool    72.1
    IO546_Befehlsbereich_2    Bool    72.2
    IO547_Befehlsbereich_3    Bool    72.3
    IO548_Reserviert        Bool    72.4
    IO549_Reserviert        Bool    72.5
    IO550_Reserviert        Bool    72.6
    IO551_Reserviert        Bool    72.7

Mein Zielbereich:
Code:
SEND_Standard    Struct
    IO512_Schrittstop        Bool    288.0
    IO513_Reserviert        Bool    288.1
    IO514_Sofort_Stopp        Bool    288.2
    IO515_Taktsignal        Bool    288.3
    IO516_Interr_Uebers        Bool    288.4
    IO517_Reserviert        Bool    288.5
    IO518_Reserviert        Bool    288.6
    IO519_Impar_Befehl        Bool    288.7
    IO520_Datenbereich_1    Byte    289.0
    IO528_Datenbereich_2    Word    290.0
    IO544_Befehlsbereich_0    Bool    292.0
    IO545_Befehlsbereich_1    Bool    292.1
    IO546_Befehlsbereich_2    Bool    292.2
    IO547_Befehlsbereich_3    Bool    292.3
    IO548_Reserviert        Bool    292.4
    IO549_Reserviert        Bool    292.5
    IO550_Reserviert        Bool    292.6
    IO551_Reserviert        Bool    292.7

Das ist der Lesevorgang den ein Kollege für eine Sinumerik-Steuerung geschrieben hat. (Funktioniert auch hier)
Lesen.png
Das kopieren in den DB und schreiben an den Roboter ging an der Sinumerik so: (Funktioniert an der 1500er nicht)
Schreiben.png

Wenn ich in SCL z.B. Blkmov einsetze, wie kann ich denn den Staticbereich als SRC nutzen? Wenn ich den STRUCT Namen einsetzte gibt es einen Fehler.

Wie kann ich das denn mit FUP oder SCL umsetzen. AWL würde auch gehen, da bin ich aber nicht ganz so fit.

Grüße
Edi
 
Ohne das komplett durchgelesen zu haben:
Einfach mal Datentypen definieren und damit probieren. Die kannst Du auch für E+A in der PLC-Variablentabelle benutzen. Du brauchst dann nicht mehr DPWR_DAT.
Du kannst auch mehrere Datentypen verschachteln. Dann kannst du immer symbolisch alles zusammengefasst oder einzelne Elemente adressieren.
Zusammengefasste in SCL einfach zuweisen oder sonst per MOVE. Bei Änderungen hast Du dann nach einem Übersetzen alle Stellen autom. angepasst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok. Ich werd mal sehen was ich hinbekomme.
Habs gestern noch so gemacht dass ich die Signale einzeln übergebe. Bin noch nicht ganz zufrieden damit.

Kollege macht sich jetzt auch mal Gedanken drüber, ist ja seine Grundidee gewesen. Dann sehen wir weiter.

Danke Dir.
 
Zurück
Oben