Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: 4 Byte PROFINET einlesen

  1. #1
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren 4 Byte PROFINET einlesen  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Liegt dein Eingang überhaupt im Prozessabbild?

    mfG René

  3. #3
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard

    Wenn Eingangen in processabbild liegen mit

    L ED512
    T DB1.DBD26

    Wenn sie nicht in Processabboild liegen mit

    L PED512
    T DB1.DBD26

    Gruss

    Joop

  4. #4
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also wenn ich
    L ED512
    mache geht die CPU in STOP.
    L PED512 funktioniert

  5. #5
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Dann musst du dein Prozessabbild anpassen (HW-Einstellungen).
    Blkmove kann nur aufs Prozessabbild zugreifen.

    mfG René

  6. #6
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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ß ???
    Geändert von TimeOUT (20.02.2014 um 11:05 Uhr)

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    TimeOUT (20.02.2014)

  9. #8
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ahh okay, vielen Dank!

    Irgendwie habe ich mir sowas in der Richtung schon gedacht

  10. #9
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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: Integerwert als Adresse für Peripheriezugriff?)

    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ß
    Geändert von TimeOUT (26.02.2014 um 15:40 Uhr)

  11. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
          L     #AddrOut
          SLD   3
          T     #dAddress_Peripherals
          L     #Device.OutData.Data
          T     PAW [#dAddress_Peripherals]
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    TimeOUT (27.02.2014)

Ähnliche Themen

  1. Wie kann man Hi-Byte Low-Byte spiegeln?
    Von Klärmolch im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 11.12.2010, 20:58
  2. Umwandeln von INT nach Byte u Byte + n
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.04.2009, 10:07
  3. Libnodave / HB LB / Byte drehen / DB incl. DB in PC einlesen
    Von Softi79 im Forum Hochsprachen - OPC
    Antworten: 10
    Letzter Beitrag: 15.10.2008, 07:58
  4. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  5. HI-Byte und LOW-Byte
    Von Danielegger im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 27.08.2004, 00:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •