FB_CoERead
Mit dem Funktionsbaustein FB_CoERead können per SDO-(Service Daten Objekt)-Zugriff Daten aus dem Objektverzeichnis eines EtherCAT-Slaves ausgelesen werden. Dazu muss der Slave eine Mailbox besitzen und das CoE-(CANopen over EtherCAT)-Protokoll unterstützen. Mithilfe der Parameter SubIndex und Index wird ausgewählt, welches Objekt ausgelesen werden soll. Über CompleteAccess := TRUE kann der Parameter mit Unterelementen gelesen werden.
Eingänge
VAR_INPUT
NetId : T_AmsNetID;(*netID of PC with NC*)
Index : WORD;(*CoE object index*)
SubIndex : BYTE;(*CoE sub index*)
pDstBuf : PVOID;(*Contains the address of the buffer for the received data*)
BufLen : UDINT;(*Contains the max. number of bytes to be received*)
Execute : BOOL;(*Function block execution is triggered by a rising edge at this input.*)
Timeout : TIME := DEFAULT_ADS_TIMEOUT;(*States the time before the function is cancelled.*)
CompleteAccess : BOOL;(*Function block reads the complete object with all sub index*)
END_VAR
Name | Typ | Beschreibung |
---|---|---|
NetId | T_AmsNetID | String, der die AMS-Netzwerkkennung des PCs enthält (Typ: T_AmsNetId). |
Index | WORD | Index des Objektes, das gelesen werden soll. |
SubIndex | BYTE | Subindex des Objektes, das gelesen werden soll. |
pDstBuf | PVOID | Adresse (Pointer) auf den Empfangspuffer |
BufLen | UDINT | Maximal verfügbare Puffergröße für die zu lesenden Daten in Bytes |
Execute | BOOL | Der Baustein wird über eine positive Flanke an diesem Eingang aktiviert. |
Timeout | TIME | Maximale Zeit, die bei der Ausführung des Funktionsbausteins nicht überschritten werden darf. |
CompleteAccess | BOOL | Über Complete Access kann das komplette Objekt auf einmal zugegriffen werden. |
Index und SubIndex können der entsprechenden Antriebsdokumentation entnommen werden. Für den AX8000 von Beckhoff siehe AX8000 Objektbeschreibung. |
Ein-/Ausgänge
VAR_IN_OUT
Axis : AXIS_REF;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Axis | Achsdatenstruktur, welche eine Achse eindeutig im System adressiert. Sie enthält unter anderem den aktuellen Status der Achse, wie Position, Geschwindigkeit oder Fehlerzustand. |
Ausgänge
VAR_OUTPUT
Busy : BOOL;
Error : BOOL;
AdsErrId : UINT;
CANopenErrId : UINT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Busy | BOOL | Dieser Ausgang wird bei der Aktivierung des Funktionsbausteins gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt. |
Error | BOOL | Dieser Ausgang wird gesetzt, nachdem der Busy-Ausgang zurückgesetzt wurde, wenn ein Fehler bei der Übertragung des Kommandos auftritt. |
AdsErrId | UINT | Liefert bei einem gesetzten Error-Ausgang den ADS-Fehlercode. |
CANopenErrId | UINT | Liefert bei einem gesetzten Error-Ausgang den CANopen-Fehlercode. |
Beispiel für eine Implementierung in ST:
PROGRAM MAIN
VAR
fbCoERead : FB_CoERead;
NetId : T_AmsNetID := '';
Index : WORD := 16#1018;
SubIndex : BYTE := 1;
Execute : BOOL := TRUE;
Timeout : TIME := T#5S;
CompleteAccess : BOOL := TRUE;
Axis : AXIS_REF;
vendorId : UDINT := 2;
Error : BOOL;
AdsErrId : UDINT;
CANopenErrId : UDINT;
END_VAR
fbCoERead(
NetId := NetId,
Index := Index,
SubIndex := SubIndex,
pDstBuf := ADR(vendorId),
BufLen := SIZEOF(vendorId),
Execute := Execute,
Timeout := Timeout,
CompleteAccess := CompleteAccess,
Axis := Axis
);
IF NOT fbCoERead.Busy THEN
Error :=fbCoERead.Error;
AdsErrId :=fbCoERead.AdsErrId;
CANopenErrId :=fbCoERead.CANopenErrId;
Execute := FALSE;
fbCoERead(Execute := Execute, Axis := Axis);
END_IF