Global constants

VAR_GLOBAL CONSTANT

EC_AMSPORT_MASTER            :UINT   :=16#FFFF;
EC_MAX_SLAVES           :UINT   :=16#FFFF;

(* Device states *)
EC_DEVICE_STATE_MASK         :BYTE   :=16#0F;
EC_DEVICE_STATE_INIT        :BYTE   :=16#01;
EC_DEVICE_STATE_PREOP       :BYTE   :=16#02;
EC_DEVICE_STATE_BOOTSTRAP           :BYTE   :=16#03;
EC_DEVICE_STATE_SAFEOP      :BYTE   :=16#04;
EC_DEVICE_STATE_OP              :BYTE   :=16#08;
EC_DEVICE_STATE_ERROR       :BYTE   :=16#10;
EC_DEVICE_STATE_INVALID_VPRS    :BYTE   :=16#20;
EC_DEVICE_STATE_INITCMD_ERROR   :BYTE   :=16#40;

(* Link states *)
EC_LINK_STATE_OK         :BYTE   :=16#00;
EC_LINK_STATE_NOT_PRESENT           :BYTE   :=16#01;
EC_LINK_STATE_LINK_WITHOUT_COMM :BYTE   :=16#02;
EC_LINK_STATE_MISSING_LINK          :BYTE   :=16#04;
EC_LINK_STATE_ADDITIONAL_LINK   :BYTE   :=16#08;
EC_LINK_STATE_PORT_A        :BYTE   :=16#10;
EC_LINK_STATE_PORT_B        :BYTE   :=16#20;
EC_LINK_STATE_PORT_C        :BYTE   :=16#40;
EC_LINK_STATE_PORT_D        :BYTE   :=16#80;

(* Device/Link state IG/IO *)
EC_ADS_IGRP_MASTER_STATEMACHINE  :UDINT :=16#00000003;
EC_ADS_IOFFS_MASTER_CURSTATE    :UDINT :=16#00000100;
EC_ADS_IOFFS_MASTER_REQSTATE    :UDINT :=16#00000101;
EC_ADS_IOFFS_MASTER_INTERNALSTATE       :UDINT :=16#00000102;

EC_ADS_IGRP_MASTER_COUNT_SLAVE  :UDINT :=16#00000006;
EC_ADS_IOFFS_MASTER_COUNT_SLAVE     :UDINT :=16#00000000;
EC_ADS_IOFFS_MASTER_COUNT_PORT  :UDINT :=16#00000001;
EC_ADS_IOFFS_MASTER_COUNT_ROUTER    :UDINT :=16#00000002;

EC_ADS_IGRP_MASTER_SLAVE_ADDRESSES      :UDINT :=16#00000007;
EC_ADS_IGRP_SLAVE_STATEMACHINE  :UDINT :=16#00000009;
EC_ADS_IGRP_MASTER_SLAVE_IDENTITY       :UDINT :=16#00000011;
EC_ADS_IGRP_MASTER_SLAVE_CRC    :UDINT :=16#00000012;

(* SoE IG/IO *)
EC_ADS_IGRP_ECAT_SOE         :UDINT :=16#0000F420;
EC_ADS_IGRP_ECAT_SOE_LASTERROR  :UDINT :=16#0000F421;

EC_SOE_ELEMENT_DATASTATE        :BYTE :=16#01;
EC_SOE_ELEMENT_NAME         :BYTE :=16#02;
EC_SOE_ELEMENT_ATTRIBUTE        :BYTE :=16#04;
EC_SOE_ELEMENT_UNIT         :BYTE :=16#08;
EC_SOE_ELEMENT_MIN          :BYTE :=16#10;
EC_SOE_ELEMENT_MAX          :BYTE :=16#20;
EC_SOE_ELEMENT_VALUE        :BYTE :=16#40;
EC_SOE_ELEMENT_DEFAULT      :BYTE :=16#80;

(* FoE IG/IO *)
EC_ADS_IGRP_FOE_FOPENREAD           :UDINT :=16#0000F401;
EC_ADS_IGRP_FOE_FOPENWRITE          :UDINT :=16#0000F402;
EC_ADS_IGRP_FOE_FCLOSE      :UDINT :=16#0000F403;
EC_ADS_IGRP_FOE_FREAD       :UDINT :=16#0000F404;
EC_ADS_IGRP_FOE_FWRITE      :UDINT :=16#0000F405;
EC_ADS_IGRP_FOE_PROGRESSINFO    :UDINT :=16#0000F406;
EC_ADS_IGRP_FOE_LASTERROR           :UDINT :=16#0000F407;

(* CoE IG/IO *)
EC_ADS_IGRP_CANOPEN_SDO         :UDINT :=16#0000F302;
EC_ADS_IGRP_CANOPEN_SDO_LASTERROR       :UDINT :=16#0000F303;


EC_DCTIME_DELTA_OFFSET  : T_ULARGE_INTEGER := ( dwHighPart := 16#01BF53EB, dwLowPart := 16#256D4000 ); (* Number of 100ns ticks between 1.1.1601 and 1.1.2000 *)
EC_DCTIME_DATEDELTA_OFFSET       : DWORD := 730120; (* Number of past days since year zero until 1 January 2000 *)

EC_DCTIME_TICKSPERMSEC  : T_ULARGE_INTEGER := ( dwHighPart := 16#00000000, dwLowPart := 16#000F4240);(* Number of nanosecond ticks per millisecond *)
EC_DCTIME_TICKSPERSEC    : T_ULARGE_INTEGER := ( dwHighPart := 16#00000000, dwLowPart := 16#3B9ACA00);(* Number of nanosecond ticks per second *)
EC_DCTIME_TICKSPERDAY    : T_ULARGE_INTEGER := ( dwHighPart := 16#00004E94, dwLowPart := 16#914F0000);(* Number of nanosecond ticks per day *)

Requirements

Development environment

Target system type

PLC libraries to be linked

TwinCAT v2.10.0 or higher

PC or CX (x86)

TcEtherCAT.lib
( Standard.Lib; TcBase.Lib; TcSystem.Lib, TcUtilities.Lib are included automatically )

TwinCAT v2.10.0 Build >= 1301 or higher

CX (ARM)