2.4. Code example
The example program EcMasterDemoDc demonstrates, in contrast to EcMasterDemo, how to programmatically configure DCM parameters and how the application can generate the DCM log.
DCM Configuration (optional)
/* initialize the master */
dwRes = ecatInitMaster(&oInitParms);
/* configure the master */
dwRes = ecatConfigureNetwork(eCnfType_Filename, (EC_T_BYTE*)"ENI.xml", (EC_T_DWORD)OsStrlen("ENI.xml"));
/* register client */
EC_T_REGISTERRESULTS oRegisterClientResults;
OsMemset(&oRegisterClientResults, 0, sizeof(EC_T_REGISTERRESULTS));
dwRes = ecatRegisterClient(EcMasterNotifyCallback, pAppContext, &oRegisterClientResults);
/* configure DC */
EC_T_DC_CONFIGURE oDcConfigure;
OsMemset(&oDcConfigure, 0, sizeof(EC_T_DC_CONFIGURE));
oDcConfigure.dwTimeout = ETHERCAT_DC_TIMEOUT;
dwRes = ecatDcConfigure(&oDcConfigure);
/* configure DCM Bus Shift */
EC_T_DCM_CONFIG oDcmConfig;
OsMemset(&oDcmConfig, 0, sizeof(EC_T_DCM_CONFIG));
oDcmConfig.eMode = eDcmMode_BusShift;
oDcmConfig.u.BusShift.nCtlSetVal = DCM_CONTROLLER_SETVAL_NANOSEC;
oDcmConfig.u.BusShift.bLogEnabled = EC_TRUE;
dwRes = ecatDcmConfigure(&oDcmConfig, 0 /* dwInSyncTimeout */);
/* set EtherCAT devices to OPERATIONAL state */
dwRes = ecatSetMasterState(ETHERCAT_STATE_CHANGE_TIMEOUT, eEcatState_OP);
See also
See also
DCM Log (optional)
do
{
/* wait for next cycle (event from scheduler task) */
/* ... */
/* process all received frames (read new input values) */
dwRes = ecatExecJob(eUsrJob_ProcessAllRxFrames, &oJobParms);
/* ... */
EC_T_CHAR* szDcmLog = EC_NULL;
ecatDcmGetLog(&szDcmLog);
if (EC_NULL != szDcmLog)
{
((CAtEmLogging*)pEcLogContext)->LogDcm(szDcmLog);
}
/* ... */
} while (!pAppContext->bJobTaskShutdown);
See also