Codesys can set up automatic restart of slave function in the main site, how core should be implemented?
โ
Codesys can set up automatic restart of slave function in the main site, how core should be implemented?
โ
One common method is to use the PLC app and the library CXA_EtherCATMaster. This gives you access to a number of function blocks for getting or setting the state of master or slave devices.
Below, I'll post some basic sample code to get you started. There are more examples posted in the library example folders in PLC Engineering.
PROGRAM ECAT_State
VAR
strMasterName : STRING := 'ethercatmaster'; // Instance name of the fieldbus master
fbIL_ECATRemoteSlaveState : IL_ECATRemoteSlaveState;
uiSlaveAdr : UINT := 1001;
fbECATMasterSetBusState: IL_ECATMasterSetBusState;
END_VAR
fbIL_ECATRemoteSlaveState.Execute := NOT fbIL_ECATRemoteSlaveState.Done ;
fbIL_ECATRemoteSlaveState.MasterName := ADR(strMasterName);
fbIL_ECATRemoteSlaveState.SlaveAddress := uiSlaveAdr;
fbIL_ECATRemoteSlaveState();
IF TRUE = fbIL_ECATRemoteSlaveState.Error THEN
; // Error handling
END_IF
fbECATMasterSetBusState.MasterName := ADR(strMasterName);
fbECATMasterSetBusState.NewBusState := IL_ECAT_STATE.ECAT_STATE_OP;
fbECATMasterSetBusState();
IF TRUE = fbECATMasterSetBusState.Done THEN
; // master reached operational state.
END_IF
IF TRUE = fbECATMasterSetBusState.Error THEN
; // error handling
END_IF
IF fbIL_ECATRemoteSlaveState.State = 18 THEN // 18 = 'init'
fbECATMasterSetBusState.Execute := TRUE;
ELSE
fbECATMasterSetBusState.Execute := FALSE;
END_IF
//check that the drive is in OP
IF fbIL_ECATRemoteSlaveState.State = 0 THEN
bDriveinOp := TRUE;
ELSE
bDriveinOp := FALSE;
END_IF