ETCSlaveStack.SlaveAddr (PROP) ¶ PROPERTY SlaveAddr : UINT returns the physical address of the slave (same value as property PhysSlaveAddr)
ETCSlaveStack.VendorID (PROP) ¶ PROPERTY VendorID : DWORD returns the current vendor id as read from the EEprom
Ethernet_over_EtherCAT ¶ EoE setup on a Raspberry Pi // The Router, to access the internet or WAN is at 192.168.1.1 // Windows PC: // Ethernet2 192.168.1.30 / 255.255.255.0 / 192.168.1.1 // with CMD-prompt run as administrator // add a route so Windows knows to route packets through the raspberry route add - p 172.16 . 1.0 mask 255.255 . 255.0 192.168 . 1.40 // Raspberry Pi: // Runtime used was CODESYS Control for Raspberry Pi SL V4.0.0.0, EtherCat 3.5.16.40 // eth0 192.168.1.40 / 255.255.255.0 / 192.168.1.1 // tap0 172.16.1.1 / 255.255.255.0 // EtherCAT-Slave: // Important that the "Standard-gateway" is the tap0 of the Raspberry Pi // EoE settings: 172.16.1.20 / 255.255.255.0 / 172.16.1.1 // to add the tap0 to the raspberry, use the following commands: sudo / sbin / ip tuntap add tap0 mode tap sudo / sbin / ip link set tap0 up sudo / sbin / ip addr add 172.16 . 1.1 / 24 dev tap0 sudo nano / etc / sysctl.conf // add this line if it is not already there: net.ipv4.ip_forward = 1 // Save the file // Reboot the pi, perhaps with sudo reboot now // Now to test it: // from windows PC ping the Ethercat slave ping 172.16 . 1.20 EoE_For_Raspberry (Function)
EoE_For_Raspberry (FUN) ¶ FUNCTION EoE_For_Raspberry only dummy function to see folder documentation
File_over_EtherCAT ¶ Function blocks for FoE (File over EtherCAT) Example: File over EtherCAT This example shows how to download a firmware file with File over EtherCAT. It is also demonstrated how to get information about the master and slaves, like the number of active slaves or the state of the slave. The File over EtherCAT functions are implemented theoretically, without hardware. PROGRAM FoE VAR FoEDownload : ETC_FoE_Download ; FoEMailBox : ETC_FoE_Mailbox ; FoEUpload : ETC_FoE_Upload ; abyDataDownload : ARRAY [1..16] OF BYTE ; dwPassword : DWORD := 16#00000000 ; sFileName : STRING := 'firmwarefile' ; (* File on the device*) sErrorText : STRING ; abyDataUpload : ARRAY [1..16] OF BYTE ; udiBytesRead : UDINT ; (* Bytes read from the Upload *) uiReceived : UINT ; (* bytes received from the Mailbox *) abyMailInput : ARRAY [1..16] OF BYTE ; abyMailOutput : ARRAY [1..16] OF BYTE ; hFileHandle : RTS_IEC_HANDLE ; Result : RTS_IEC_RESULT ; xwFileSize : __XWORD ; pbyFirmware : POINTER TO BYTE ; pSlave : POINTER TO ETCSlave ; (* Pointer to slave in in the device Tree *) iState : INT ; END_VAR (* This File over EtherCAT demonstrates a firmware download to the EtherCAT Slave. The specific firmware file is opened. Afterwards the memory is allocated dynamically. The slave is set to Boot Mode (this is only necessary for firmware download) and then the data is downloaded and the memory is released.*) EtherCAT_Master (); CASE iState OF 0 : (* Wait for the EtherCAT to be ready. *) IF Ethercat_Master.xConfigFinished THEN iState := iState + 1 ; END_IF 1 : (* Get the size of the file for the memory allocation *) xwFileSize := SysFileGetSize ( szFileName := sFileName , pResult := ADR ( Result )); (* Allocate the memory dynamically.*) pbyFirmware := SysMemAllocData ( szComponent := 'FoE' , udiSize := xwFileSize , pResult := ADR ( Result )); IF pbyFirmware = 0 THEN iState := 32767 ; END_IF (* Open the file, which includes the firmware. *) hFileHandle := SysFileOpen ( szFile := sFileName , am := ACCESS_MODE.AM_READ , pResult := ADR ( Result )); IF Result <> 0 THEN iState := 32767 ; END_IF (* Read the firmware file. *) SysFileRead ( hFile := hFileHandle , pbyBuffer := pbyFirmware , ulSize := xwFileSize , pResult := ADR ( Result )); IF Result <> 0 THEN iState := 32767 ; END_IF (* Close the file, because it is not needed anymore *) Result := SysFileClose ( hFile := hFileHandle ); IF Result <> 0 THEN iState := 32767 ; END_IF (* Search for the correct slave. The address is found unter the device in the "Slave" tab. Hence this is just a demonstration, the address could be another one.*) WHILE pSlave <> 0 DO (* get the address of the Slave fith FoE Function. This can also be another number.*) IF pSlave ^. SlaveAddr = 1004 THEN (* Set the slave in boot mode. This is neccessary for the firmware download. *) IF NOT pSlave ^. SetOpMode ( wOpMode := ETC_SLAVE_STATE.ETC_SLAVE_BOOT ) THEN iState := 32767 ; END_IF EXIT ; END_IF pSlave := pSlave ^. NextInstance ; END_WHILE 2 : (* Download the firmware, to the specified slave. The filename is the file in the device to where the data is downloaded.*) FoEDownload ( xExecute := TRUE , usiCom := 1 , uiDevice := 1004 , pbyData := pbyFirmware , udiDataSize := __XWORD_TO_UDINT ( xwFileSize ), dwPassword := dwPassword , strFilename := sFileName ); IF FoEDownload.xDone THEN sErrorText := FoEDownload.strErrorText ; (* Save the error text *) iState := iState + 1 ; FoEDownload ( xExecute := FALSE ); ELSIF FoEDownload.xError THEN iState := 32767 ; END_IF 3 : (* Release the used memory *) SysMemFreeData ( szComponent := 'FoE' , pMemory := pbyFirmware ); 4 : (* An example, how to do an upload from the device.*) FoEUpload ( xExecute := TRUE , usiCom := 1 , uiDevice := 1004 , pbyData := ADR ( abyDataUpload ), udiDataSize := SIZEOF ( abyDataUpload ), dwPassword := dwPassword , strFilename := sFileName ); IF FoEUpload.xDone THEN udiBytesRead := FoEUpload.udiDataRead ; iState := iState + 1 ; FoEUpload ( xExecute := FALSE ); ELSIF FoEUpload.xError THEN iState := 32767 ; END_IF 32767 : (* error *) END_CASE ETC_FoE_Download (FunctionBlock) ETC_FoE_Upload (FunctionBlock) Enums ETCERRORCODES (Enum)
ETC_FoE_Download (FB) ¶ FUNCTION_BLOCK ETC_FoE_Download Function block to download a file from the EtherCAT Slave. Could be also used for downloading a firmware file to the slave. Slave must be set to boot mode with pSlave^.SetOpMode(3); first in this case. InOut: Scope Name Type Initial Comment Input xExecute BOOL Rising edge: ACTION starts Falling edge: Resets outputs If a falling edge occurs before the function block has completed its action, the outputs operate in the usual manner and are only reset if either the action is completed or in the event of an error. In this case, the corresponding output values (xDone, xError) are present at the outputs for exactly one cycle. usiCom USINT 1 Index of master 1: first ETC master uiDevice UINT The physical slave address to access the EtherCAT slave usiChannel USINT 1 not used in the moment because channel is set automatically pbyData POINTER TO BYTE Pointer to the data of the file udiDataSize UDINT Size of data dwPassword DWORD Password for file transfer strFilename STRING Filenname to save on the EtherCAT slave Output xDone BOOL TRUE: Action successfully completed xBusy BOOL TRUE: Function block active xError BOOL TRUE: Error occurred, function block aborts action, FALSE: No error Errorcode ETCERRORCODES if xError is true, then this output shows the error reason strErrorText STRING Error code as an string
ETC_FoE_Upload (FB) ¶ FUNCTION_BLOCK ETC_FoE_Upload Function block to upload a file from the EtherCAT Slave. InOut: Scope Name Type Initial Comment Input xExecute BOOL Rising edge: ACTION starts Falling edge: Resets outputs If a falling edge occurs before the function block has completed its action, the outputs operate in the usual manner and are only reset if either the action is completed or in the event of an error. In this case, the corresponding output values (xDone, xError) are present at the outputs for exactly one cycle. usiCom USINT 1 Index of master 1: first ETC master uiDevice UINT The physical slave address to access the EtherCAT slave usiChannel USINT 1 not used in the moment because channel is set automatically pbyData POINTER TO BYTE pointer to buffer to read udiDataSize UDINT Size of buffer dwPassword DWORD Password for file to read strFilename STRING Filenname to read fromthe EtherCAT slave Output xDone BOOL TRUE: Action successfully completed xBusy BOOL TRUE: Function block active xError BOOL TRUE: Error occurred, function block aborts action, FALSE: No error Errorcode ETCERRORCODES if xError is true, then this output shows the error reason strErrorText STRING Error code as an string udiDataRead UDINT Number of Bytes that could be read
Enums ¶ ETCERRORCODES (Enum)
ETCERRORCODES (ENUM) ¶ TYPE ETCERRORCODES : Error codes for FoE function blocks Attributes: qualified_only InOut: Name Initial ECAT_FOE_ERRCODE_NOTDEFINED 0 ECAT_FOE_ERRCODE_NOTFOUND ECAT_FOE_ERRCODE_ACCESS ECAT_FOE_ERRCODE_DISKFULL ECAT_FOE_ERRCODE_ILLEAGAL ECAT_FOE_ERRCODE_PACKENO ECAT_FOE_ERRCODE_EXISTS ECAT_FOE_ERRCODE_NOUSER ECAT_FOE_ERRCODE_BOOTSTRAPONLY ECAT_FOE_ERRCODE_NOTINBOOTSTRAP ECAT_FOE_ERRCODE_INVALIDPASSWORD ECAT_FOE_ERRCODE_MEMORYALLOCATIONFAILED 200 ECAT_FOE_ERRCODE_TIMEOUT 201 ECAT_FOE_ERRCODE_SERVICEACTIVE 202 ECAT_FOE_ERRCODE_BUFFERTOSMALL 203
Library Information ¶ GetLibVersion (Function) GetLibVersionNumber (Function) IsLibReleased (Function)