CANBus Layer 2 CFC Example in Codesys 3.5 SP19 wanted

Im really struggling to implement a simple Layer 2 Canbus connection in my project, to start with i only need to send and recieve one 11bit message.
I am running Codesys 3.5 SP19 and a 752-8303 Edge Controller with onboard CANbus port

I have tried following the very limited documentation online and other posts, but all appear to be missing details on how to trigger the functions.

I have most experience with CFC, but this is fairly limited.

As an alternative i have tried setting up the CANopen Manager and tried turning off as much of the higher layer funcionality as i can all i seem to get it errors

Does anyone have a sinple example of how to send and recieve a simple can message that i can then build on. The key thing is it works in a recent version of Codesys as all other examples i found online relate older versions or eCockpit

Hello, First you need to add the WAGO_CAN_Layer2_Device on the CANbus port of the 8303 (something like this:
image
)

Next you need to use the WagoAppCanLayer2.FbCanL2Open function block:

VAR
	_oCanLayer2_Open	: WagoAppCanLayer2.FbCanL2Open;
		_xEnable			: BOOL := TRUE;
		_udiBaudrate		: UDINT := 250000;
		_dwFlags			: DWORD := 0;
		_dwPara			: DWORD := 0;
		_xValid			: BOOL;
		_xBusy			: BOOL;
		_xError			: BOOL;
		_oStatus			: WagoAppCanLayer2.WagoSysErrorBase.FbResult;


	_oCanRx11BitFrame	: WagoAppCanLayer2.FbCanRx11BitFrame;
		_xEnable			: BOOL := TRUE; // enable function block
		_xBufferMode		: BOOL := FALSE; // False:get latest message, True: use internal buffer ->allows to receive even old messages
		_wCanId			: WORD; // CAN ID
		_xRxTrigger		: BOOL; // activate the receive functionality
		_xValid			: BOOL; // data received
		_xError			: BOOL; // error occured
		_xBusy			: BOOL; // waiting for Can message with wCanID or waiting for xRxTrigger
		_wCounter		: WORD; // total received messages by this function block
		_wFrames		: WORD; // messages in buffer
		_xRtrFrame		: BOOL; // RTR frame received
		_bRxNBytes		: BYTE; // amount of byte in message
		_aRxBuffer		: ARRAY [1..8] OF BYTE; // data of CAN message


	_oCanTx11BitFrame	: WagoAppCanLayer2.FbCanTx11BitFrame;
		_xEnable			: BOOL := TRUE; // enable function block
		_xBufferMode		: BOOL := FALSE; // False:get latest message, True: use internal buffer ->allows to receive even old messages
		_wCanId			: WORD; // CAN ID
		_xRtrFrame		: BOOL; // RTR frame received
		_aTxBuffer		: ARRAY [1..8] OF BYTE; // data of CAN message
		_bTxNBytes		: BYTE; // amount of byte in message
		_xTxTrigger		: BOOL; // activate the receive functionality
		_xValid			: BOOL; // data received
		_xError			: BOOL; // error occured
		_xBusy			: BOOL; // waiting for Can message with wCanID or waiting for xRxTrigger
		
END_VAR
_oCanLayer2_Open(
	xEnable		:= _xEnable, 
	I_Port		:= IoConfig_Globals.WAGO_CAN_Layer2_Device, 
	udiBaudrate	:= _udiBaudrate, 
	dwFlags		:= _dwFlags, 
	dwPara		:= _dwPara, 
	xValid		=> _xValid, 
	xBusy		=> _xBusy, 
	xError		=> _xError, 
	oStatus		=> _oStatus
);

IF (_xRxTrigger) THEN	(* If ReadFrame Trigger ... *)
	_oCanRx11BitFrame(
		xEnable		:= _xEnable, 
		I_Port		:= _oCanLayer2_Open.I_Port, 
		xBufferMode	:= _xBufferMode, 
		wCanId		:= _wCanId, 
		xRxTrigger	:= _xRxTrigger, 
		xValid		=> _xValid, 
		xError		=> _xError, 
		xBusy		=> _xBusy, 
		oStatus		=> oStatus, 
		wCounter		=> _wCounter, 
		wFrames		=> _wFrames, 
		xRtrFrame	=> _xRtrFrame, 
		bRxNBytes	=> _bRxNBytes, 
		aRxBuffer	=> _aRxBuffer
	);
	
	IF NOT(_xRxTrigger) THEN (* If ReadFrame Trigger reset by function block ... *)
		abData := _aRxBuffer;
	END_IF;
END_IF;

IF (_xTxTrigger) THEN	(* If WriteFrame Trigger ... *)
	_oCanTx11BitFrame(
		xEnable		:= _xEnable, 
		I_Port		:= _oCanLayer2_Open.I_Port, 
		wCanId		:= _wCanId, 
		xRtrFrame	:= _xRtrFrame, 
		aTxBuffer	:= abData, 
		bTxNBytes	:= bDataLength, 
		xTxTrigger	:= _xTxTrigger, 
		xValid		=> _xValid, 
		xError		=> _xError, 
		xBusy		=> _xBusy, 
		oStatus		=> 
	);
	
	IF NOT(_xTxTrigger) THEN (* If ReadFrame Trigger reset by function block ... *)
		_wCounter := _wCounter + 1;
	END_IF;
END_IF;