Alex
9661838676
Работает. Есть CiA402, OD из SSC Tool. Автономный со своим main(). Проверялся тестами на SOEM.
216 lines
6.9 KiB
C
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
|
|
/** @} */
|
|
|