FB_CoEWrite
Mit dem Funktionsbaustein FB_CoEWrite kann per SDO-(Service Daten Objekt)-Download ein Objekt aus dem Objektverzeichnis eines EtherCAT-Slaves beschrieben 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 beschrieben werden soll. Über CompleteAccess := TRUE kann der Parameter mit Unterelementen geschrieben werden.
Eingänge
VAR_INPUT
NetId : T_AmsNetID;(*netID of PC with NC*)
Index : WORD;(*CoE object index*)
SubIndex : BYTE;(*CoE sub index*)
pSrcBuf : PVOID;(*Contains the address of the buffer containing the data to be send*)
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 beschrieben werden soll. |
SubIndex | BYTE | Subindex des Objektes, das beschrieben werden soll. |
pDstBuf | PVOID | Adresse (Pointer) auf den Sendepuffer |
BufLen | UDINT | Anzahl der zu sendenden 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 auf 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
fbCoEWrite : FB_CoEWrite;
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
fbCoEWrite(
NetId := NetId,
Index := Index,
SubIndex := SubIndex,
pSrcBuf := ADR(vendorId),
BufLen := SIZEOF(vendorId),
Execute := Execute,
Timeout := Timeout,
CompleteAccess := CompleteAccess,
Axis := Axis
);
IF NOT fbCoEWrite.Busy THEN
Error := fbCoEWrite.Error;
AdsErrId := fbCoEWrite.AdsErrId;
CANopenErrId :=fbCoEWrite.CANopenErrId;
Execute := FALSE;
fbCoEWrite(Execute := Execute, Axis := Axis);
END_IF