Step 7 4 Byte PROFINET einlesen

TimeOUT

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

ich möchte gerne 4 Byte eines PROFINET Slaves auslesen und in einen DB schreiben.
Zuvor habe ich das Auslesen immer mit "DPRD_DAT" gelöst, was ja aber nicht für 4 Byte funktioniert :S

Nun versuche ich das ganze über die "UBLKMOV" Funktion zu lösen.

Code:
  CALL  "UBLKMOV"
       SRCBLK :=P#E 512.0 BYTE 4
       RET_VAL:=#Ret_Val_SFC14
       DSTBLK :=P#DB1.DBX 26.0 BYTE 4

RetVal liefert mir 0x8122 zurück. Scheint wohl irgendeine allgemeine Fehlerfunktion zu sein, da sie nicht direkt beschrieben ist.

Was mache ich falsch bzw. wie kann man es sonst lösen?
Ich möchte eigentlich auch die Variable für SRCBLK variabel ;) halten. Hatte an einen ANY-Ptr gedacht, der funktioniert aber wohl nicht auf Peripheriebereiche??!

Danke und Gruß
timeout
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay danke,

Reicht es eigentlich eine Struktur an den Parameter "RECORD" zu schreiben bei "DPWR_DAT"?

Also die Struktur is:
Device.OutData.Index (Word)
Device.Outdata.Value (DWord)

In meiner HW-Konfig zeigt er mir an:
Baugruppe:
Code:
Steckplatz     Baugruppe     A-Adresse
10                Daten            514**
10.1             Index             514..515
10.2             Value             516..519

Reicht es nur die Struktur an RECORD zu übergeben oder muss ich ein ANY-Pointer erzeugen?

Code:
      CALL  "DPWR_DAT"
       LADDR  :=#AddrOut                    //A-Address 514 in hex
       RECORD :=#Device.OutData
       RET_VAL:=#Ret_Val_SFC15

Mach ich es so, wie oben beschrieben sagt er mir "Die Länge des angegebenen Quellbereichs ist ungleich der mit STEP 7 projektierten Nutzdatenlänge. "

Aber es sind doch beide 6 Byte groß ???
 
Zuletzt bearbeitet:
Mit DPRD_DAT/DPWR_DAT darf man nur jeden Steckplatz einzeln lesen/schreiben. Steckplatz-übergreifendes lesen/schreiben geht nicht.

Übrigens: auch L/T kann nicht Steckplatz-übergreifend zugreifen.
Wenn ein Steckplatz als 4 Byte mit Konsistenz über alles festgelegt ist, dann muß man "L PED..."/"T PAD..." machen.
Wenn das aber 4 Steckplätze mit je 1 Byte sind, dann muß man auch 4 einzelne "L PEB..."/"T PAB..." machen.

Wenn die E/A-Adressen im Prozessabbild liegen, dann braucht man das nicht beachten, dann kümmert sich die CPU selber drum.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich melde mich nochmal zurück.

Im Bezug auf die Adressen meiner Steckplätze in Post #6,

lese und schreibe ich meine Daten, indem ich direkt auf den Peripheriebereich zugreife.

Also T PAW 514, T PAD 516, L PED 512,etc...

Die Adresswerte möchte ich nun variabel halten und übergebe die Anfangsadressen (AddrOut) als DINT Input am FB.
Anschließend speicher ich sie in einer temporären Variable (dAddress_Peripherals)vom Typ DINT zwischen. (Aus Thread: http://www.sps-forum.de/simatic/20879-integerwert-als-adresse-fuer-peripheriezugriff.html)

Code:
  L     #AddrOut
      T     #dAddress_Peripherals
      L     #Device.OutData.Data
      T     PAW [#dAddress_Peripherals]

Er bringt mir nun an der Stelle

Code:
T     PAW [#dAddress_Peripherals]

Die Fehlermeldung: "Ausrichtungsfehler beim Schreiben"

Wo genau ist der Fehler zu deuten?

Gruß
 
Zuletzt bearbeitet:
Zurück
Oben