Hi,
We have an issue with transport errors in yakut. Are there any way to log the raw data which causes the transport errors?
Right now I cannot se any way of doing this except for dumping the can data with candump and analyze the frames manually. This is not a viable option due to the volume of messages in our system.
I presume you are referring to the transport error counter in Yakut Monitor.
You can launch the command with -v
or even -vv
and redirect stderr (but not stdout) into a file to inspect it later.
You can also make a custom Python script to the same purpose that would enable packet capture on the network interface and reassemble all transfers detected on it; if any transfers fail to reassemble, the script would tell you why. The starting point in the docs is here: Architecture — PyCyphal 1.12.0 documentation. You can also look at the way Yakut is built and borrow useful ideas from there.
Yakut is written in Python which is generally not the best choice for real-time software (although they say Python 3.11 is better in this respect), and it is possible that if your PC is slow and the traffic is dense, some network packets are not being processed in time, which could potentially cause the transport errors to appear. I’ve never encountered this in practice with CAN, though, but it could happen with UDP.
Another option that is free from these limitations is to make a network analyzer out of a low-level library like libcanard.