TIA PN Device mehrer Eingangsbereiche in eine Struktur

quack

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe gerade ein Thema mit PN und einer S7-1513. Hier im Forum habe ich schon viel gefunden und bin dankbar das ich hier mitlesen konnte. Aber zu dem aktuellen Thema konnte ich noch nichts finden.
Ich habe ein PN Device mit mehreren Eingängen:
1. 64 Byte IN
2. 64 Byte IN
3. 64 Byte IN
4. 32 Byte IN
5. 16 Byte IN
6. 4 Byte IN
Diese rufe ich über GETIO ab und kopier sie in ein Array of Byte der selben größe. Soweit funktioniert auch alles.
Nun möchte ich die ganzen Daten aber in einer großen Struktur mit 244 Byte stehen haben, damit die Bereiche darin über die Namen adressiert werden können. Auf den alten 300er Steuerungen habe ich das immer mit BLKMOV gemacht und einfach den Pointer auf den Ziel DB händisch angegeben.
Ich wollte das jetzt in einem FB machen und diesen Manuellen Pointer weg haben, bekomme aber nichts zum laufen:
MOVE_BLK_VARIANT bringt Fehler 8281h -> Ungültiger Wert an COUNT
Serialize und deserialis bringt bei Deserialize Fehler 8153h -> Am Parameter SRC_ARRAY steht nicht genügend Speicherplatz zur Verfügung.

Jetzt bin ich mit meinem Latain am ende. Wie kann ich die Daten in eine Struktur zusammen kopieren?
Hier noch der Code den ich aktuell laufen habe:
Code:
FB_LeseDaten(ID := #HW_IO_Input_1,
              INPUTS := #IO_Daten_1,
              STATUS => #"status lesen"[1]);
#status_blkmov[1] := MOVE_BLK_VARIANT(SRC := #IO_Daten_1, COUNT := udint#64, SRC_INDEX := 0, DEST_INDEX := 0, DEST => #LeseDaten);
#laenge_Copy[7] := 0;
"Copy"(source := #IO_Daten_1, target := #LeseDaten, Pos := #laenge_Copy[7], "Return" => #status_blkmov[7]);

auf 300er ging es so:
Code:
#FB_LeseDaten(ID        := DINT_TO_DWORD(#conf_Adresse),
              INPUTS    := #IO_Daten_1,
              STATUS    => #"status lesen"[1]);
#status_blkmov[1] := BLKMOV(SRCBLK := #"IO_Daten_1",
                            DSTBLK => P#DB32.DBX10.0 BYTE 64);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und danke für den Tip. Manchmal sieht man den Wald vor lauter Bäumen nicht! Ich wollte es immer über die Hardware ID Lösen. Aber so geht es nachtürlich auch. Vielen Dank
 
Einen Nachteil hat es aber mit dieser Lösung. Wenn der Teilnehmer ausfällt dann hat die CPU immer Zugriffsfehler im Speicher stehen bei jedem Zyklus. Mit GetIO bekomme ich es über den Status mit. Oder wie wird das in der Praxis sonst überwacht?
 
Zurück
Oben