Drive-Referenz ST_DriveRef

Auf den Antrieb wird über eine Drive-Referenz zugegriffen. Bibliotheksintern wird dafür die Struktur ST_DriveRef aus der Tc2_EtherCAT Bibliothek mit der NetID als String verwendet. Da auf I/O-Ebene die NetID üblicherweise als Bytearray vorliegt, wird zusätzlich eine Struktur ST_PlcDriveRef, auch aus der Tc2_EtherCAT Bibliothek, mit der NetID als Bytearray zur Verfügung gestellt. Die beiden Strukturen müssen ineinander überführt werden.

Struktur ST_PlcDriveRef

TYPE ST_PlcDriveRef :
STRUCT
    aNetId     : T_AmsNetIdArr; (* AmsNetId (array[0..5] of bytes) of the EtherCAT master device.*)
    nSlaveAddr : UINT; (* Address of the slave device.*)
    nDriveNo   : BYTE; (* Drive number*)
    nDriveType : BYTE; (* Drive type*)
END_STRUCT
END_TYPE

Struktur ST_DriveRef

TYPE ST_DriveRef :
STRUCT
    sNetId     : T_AmsNetId; (* AmsNetId (string(23)) of the EtherCAT master device.*)
    nSlaveAddr : UINT; (* Address of the slave device.*)
    nDriveNo   : BYTE; (* Drive number*)
    nDriveType : BYTE; (* Drive type*)
END_STRUCT
END_TYPE

Mapping der Antriebsreferenz in die SPS

Die Antriebsreferenz kann im System Manager in die SPS gemappt werden. Lokieren Sie dazu eine Instanz der Struktur ST_PlcDriveRef als AT %I*. Verlinken Sie anschließend aNetID auf netId, nSlaveAddr auf port und nDriveNo auf Chn0 (A) bzw. Chn1 (B). Bei mehrkanaligen Antrieben beziehen sich beide Kanäle auf dieselbe netId und port-Nummer, da es sich um einen EtherCAT-Slave handelt.

Drive-Referenz ST_DriveRef 1:

Überführung ST_PlcDriveRef und ST_DriveRef

Die Bausteine der Bibliothek Tc2_Drive verwenden eine Instanz der Struktur ST_DriveRef. Im Unterschied zu der Struktur ST_PlcDriveRef wird die NetID als T_AmsNetId erwartet (also als STRING(23)). Zum Wandeln des Bytearrays verwenden Sie die Funktion F_CreateAmsNetId() der PLC Lib Tc2_System.

stDriveRef.sNetId     := F_CreateAmsNetId(stPlcDriveRef.aNetId);
stDriveRef.nSlaveAddr := stPlcDriveRef.nSlaveAddr;
stDriveRef.nDriveNo   := stPlcDriveRef.nDriveNo;
stDriveRef.nDriveType := stPlcDriveRef.nDriveType;