f2838x_cm_cia402_solution/F2838x CM EtherCAT Slave.c
Alex 9661838676 rev.(UML-1899): рабочий пример EtherCAT Slave на CM
Работает. Есть CiA402, OD из SSC Tool. Автономный со своим main(). Проверялся тестами на SOEM.
2024-02-02 12:33:48 +03:00

216 lines
6.9 KiB
C

/*
* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany.
* The corresponding license agreement applies. This hint shall not be removed.
*/
/**
\addtogroup F2838xCMEtherCATSlave F2838x CM EtherCAT Slave
@{
*/
/**
\file F2838x CM EtherCAT Slave.c
\brief Implementation
Created with SSC Tool application parser 1.6.4.0
\version 0.0.0.1
*/
/*-----------------------------------------------------------------------------------------
------
------ Includes
------
-----------------------------------------------------------------------------------------*/
#include "ecat_def.h"
#include "applInterface.h"
#define _F2838X_CM_ETHER_CAT_SLAVE_ 1
#include "F2838x CM EtherCAT Slave.h"
#undef _F2838X_CM_ETHER_CAT_SLAVE_
/*--------------------------------------------------------------------------------------
------
------ local types and defines
------
--------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------
------
------ local variables and constants
------
-----------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------
------
------ application specific functions
------
-----------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------
------
------ generic functions
------
-----------------------------------------------------------------------------------------*/
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief The function is called when an error state was acknowledged by the master
*////////////////////////////////////////////////////////////////////////////////////////
void APPL_AckErrorInd(UINT16 stateTrans)
{
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\return AL Status Code (see ecatslv.h ALSTATUSCODE_....)
\brief The function is called in the state transition from INIT to PREOP when
all general settings were checked to start the mailbox handler. This function
informs the application about the state transition, the application can refuse
the state transition when returning an AL Status error code.
The return code NOERROR_INWORK can be used, if the application cannot confirm
the state transition immediately, in that case this function will be called cyclically
until a value unequal NOERROR_INWORK is returned
*////////////////////////////////////////////////////////////////////////////////////////
UINT16 APPL_StartMailboxHandler(void)
{
return ALSTATUSCODE_NOERROR;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\return 0, NOERROR_INWORK
\brief The function is called in the state transition from PREEOP to INIT
to stop the mailbox handler. This functions informs the application
about the state transition, the application cannot refuse
the state transition.
*////////////////////////////////////////////////////////////////////////////////////////
UINT16 APPL_StopMailboxHandler(void)
{
return ALSTATUSCODE_NOERROR;
}
#if EXPLICIT_DEVICE_ID
/////////////////////////////////////////////////////////////////////////////////////////
/**
\return The Explicit Device ID of the EtherCAT slave
\brief Read the Explicit Device ID (from an external ID switch)
*////////////////////////////////////////////////////////////////////////////////////////
UINT16 APPL_GetDeviceID()
{
#if _WIN32
#pragma message ("Warning: Implement explicit Device ID latching")
#else
#warning "Implement explicit Device ID latching"
#endif
/* Explicit Device 5 is expected by Explicit Device ID conformance tests*/
return 0x5;
}
#endif
/////////////////////////////////////////////////////////////////////////////////////////
/**
\param index index of the requested object.
\param subindex subindex of the requested object.
\param objSize size of the requested object data, calculated with OBJ_GetObjectLength
\param pData Pointer to the buffer where the data can be copied to
\param bCompleteAccess Indicates if a complete read of all subindices of the
object shall be done or not
\return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in
sdosrv.h))
*////////////////////////////////////////////////////////////////////////////////////////
UINT8 mySdoRead(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) {
#if _WIN32
#pragma message ("Warning: Implement CoE read callback")
#else
#warning "Implement CoE read callback"
#endif
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\param index index of the requested object.
\param subindex subindex of the requested object.
\param objSize size of the requested object data, calculated with OBJ_GetObjectLength
\param pData Pointer to the buffer where the data can be copied to
\param bCompleteAccess Indicates if a complete read of all subindices of the
object shall be done or not
\return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in
sdosrv.h))
*////////////////////////////////////////////////////////////////////////////////////////
UINT8 mySdoWrite(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) {
#if _WIN32
#pragma message ("Warning: Implement CoE write callback")
#else
#warning "Implement CoE write callback"
#endif
return 0;
}
#if USE_DEFAULT_MAIN
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief This is the main function
*////////////////////////////////////////////////////////////////////////////////////////
#if _PIC24 && EL9800_HW
int main(void)
#elif _WIN32
int main(int argc, char* argv[])
#else
void main(void)
#endif
{
/* initialize the Hardware and the EtherCAT Slave Controller */
#if FC1100_HW
#if _WIN32
u16FcInstance = 0;
if (argc > 1)
{
u16FcInstance = atoi(argv[1]);
}
#endif
if(HW_Init())
{
HW_Release();
return;
}
#else
HW_Init();
#endif
MainInit();
bRunApplication = TRUE;
do
{
MainLoop();
} while (bRunApplication == TRUE);
HW_Release();
#if _PIC24
return 0;
#endif
}
#endif //#if USE_DEFAULT_MAIN
/** @} */