FORUM CTRLX AUTOMATION
ctrlX World Partner Apps for ctrlX AUTOMATION
Dear Community User! We are updating our platform to a new
system.
Read more: Important
information on the platform change.
07-16-2024 05:54 AM
Codesys can set up automatic restart of slave function in the main site, how core should be implemented?
Solved! Go to Solution.
07-22-2024 08:25 PM
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
07-25-2024 03:43 PM
Thank you for your reply.
The customer has resolved their issue in your way.
Will we provide a convenient way like codesys?