can is a one way open loop broadcast
modbus is a 2 way communication that uses a handshake to confirm that the information was sent adn received and both sides are aware of the result.
Can is faster, but you dont know if the message was received, unless you trigger some sort of return message, which would slow it down.
Can does have a heartbeat function that confirms the connection is live, if you use it.
It is possible to configure a canopen network with only one node and transmit data and receive no error or indication that no other node received the data.
This is not possible with modbus.
The heartbeat function is the "old style" can, and will slow down the can network.
You choice is fast or robust.
And you also might want to consider that Unitronics is a bit tricky with canopen communications.
The last time I used it (it could be better now) I found that the canopen function is asynchronous to the PLC ladder. The canopen function also contains pointers to data , the actual data is NOT loaded into a com buffer when the function is called.
So if the data changes during the scan that you call the canopen function, the data will be corrupted.
This led me to stop updating the data during the scan that a canopen function is activated.
This is also a time cost.
I needed fast and using two can nodes to talk back and forth was remarkably slow after all the limitations were dealt with.
The canopen hardware runs independent of the ladder, the data may be sent at any time during the scan.