Record Daten

PROFINET Record-Daten

PROFINET Record-Daten können auch über die SPS direkt empfangen werden. Dafür wird in der SPS ein "Indication" gesetzt (READINDICATION für das Lesen und WRITEINDICATION für das Schreiben). Die RECORD-Datenstruktur ist in RecStruct beschrieben

Record Data

    WORD    Index;
    WORD    Length;            //zum Lesen auf 0
    WORD    TransferSequence;
    WORD    LengthOfAligned;

PROFINET RECORD DATEN abgebildet auf ADS

PROFINET

Länge in Byte

Kommentar

ADS

-

String

AMS NET ID des PROFINET Device

AMSNETID

-

2

0xFFFF
Bei der Nutzung der virtuellen Schnittstelle ist die Port-Nummer aus dem System Manager zu entnehmen

Port

Read/Write

2

0 - Read
1 - Write

Read - ReadIndication
Write - WriteIndication

Number of AR

2

0x0000

-

API
Application Process Identifier

4

0x00000000

-

Slot

2

Slot Nummer
0x0000-0x7FFF

IndexOffset High Word

SubSlot

2

SubSlot Nummer
0x0000-0x8FFF

IndexOffset Low Word

Record Data Index

2

0x0000-0x1FFF

IndexGroup Low Word

-

2

0x8000

IndexGroup High Word

Record Data Length

2

zum Lesen auf "0"

LENGTH

Record Data Transfer Sequence

2

fortlaufende Nummer

-

Record Data Length of Aligned

2

kann Null sein

-

Beispiel

Beispiel für das Lesen von Daten, der PROFINET Controller will Daten über die Record Daten von einem Beckhoff Device lesen. Bei diesem Beispiel werden alle RecIndex Werte angenommen und immer das gleiche zurückgegeben - 10 Byte die im Datenarray "Data" stehen.

CASE i OF
0:   ADSREADIND(
        CLEAR:=FALSE ,
        VALID=> ,
        NETID=> ,
        PORT=> ,
        INVOKEID=> ,
        IDXGRP=> ,
        IDXOFFS=> ,
        LENGTH=> );
    IF ADSREADIND.VALID THEN
       IdxGroup:=ADSREADIND.IDXGRP;
       IdxOffset:=ADSREADIND.IDXOFFS ;
        i:=10;
        END_IF
10: ADSREADRES(
        NETID:=ADSREADIND.NETID,
        PORT:=ADSREADIND.PORT,
        INVOKEID:=ADSREADIND.INVOKEID ,
        RESULT:=0 ,
        LEN:=10 ,
        DATAADDR:=ADR(Data),
        RESPOND:=TRUE );
        i:=20;
    ADSREADIND(CLEAR:=TRUE);
20: i:=0;
    ADSREADRES(RESPOND:=FALSE);
END_CASE