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

)
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;