Context:
In early 2019 I evaluated a number of CAN/CANopen tools/libraries for a client project and wrote up some observations. I subsequently got the OK from the client to share my notes publicly, so in case they're useful to you, here they are...
-
SavvyCAN -- "CAN bus reverse engineering and capture tool" (via SocketCAN). Includes visualisations & scripting.
-
CANdevStudio -- relatively early stage "development tool for CAN bus simulation" via the "Open Source InVehicle Infotainment Alliance".
-
Kayak -- "application for CAN bus diagnosis and monitoring." (Seems to have potential but requires socketcand rather than working with SocketCAN directly.)
-
Qt CAN 2.0 includes:
- Virtual test-bench tooling
- CANopen protocol
- See also: here & here
-
- Not entirely obvious how to select CANopen but use "Decode As..." then change "Current" value of "CAN next level dissector" to CANOPEN. (It seems like it used to be changed in a different place/way, see "Enable CANopen Protocol" & "Capturing and Analyzing CAN Frames with Wireshark".)
- See also:
packet-canopen.c
/ "Bug 6651 - Add dissector for CANopen protocol" - Unless more sophisticated analysis/filtering is required it doesn't seem using Wireshark provides immediate advantage over other CAN/CANopen-specific tools.
-
CANToolz -- "Black-box CAN network analysis framework"
-
openCanSuite -- "set of tools for analyzing, simulating and visualizing a CAN system" (seems outdated/unmaintained)
-
- Includes
candump
with e.g. different low level config options (via)
- Includes
-
openCANopen -- Not well documented.
-
See also:
libcanopen
&eerimoq/cantools
-
libcanopen
-- C library + tools (nmt control, pdo/sdo up/down, monitor, ds401) + Python bindings.- Functional but had to work around a couple of issues (now documented on the project's issue tracker). Has (apparent) advantage over CANopenSocket that it doesn't require a master daemon running.
- See also: "Moving motors from a Python script"
-
Qt 5 CAN Bus / Qt Serial Bus support
-
can4python
-- for Python 3 and reads configuration viakcd
format. -
eerimoq/cantools
-- "CAN BUS tools in Python 3" (Also generates C helpers.) -
comFramework -- "Framework for CAN communication interfaces including code generator"
-
ros_canopen
-- "CANopen driver framework for ROS" (See: http://wiki.ros.org/ros_canopen) -
CANopen for Python -- "supports the most common parts of the CiA 301 standard in a Pythonic interface."
-
kcd -- "open format to describe communication relationships in Controller Area Networks (CAN)." (Used by Kayak.)
-
canmatrix
-- "Convert CAN (Controller Area Network) Database Formats e.g. .arxml .dbc .dbf .kcd" -
Coder DBC -- "generate C-code for your CAN Matrix described by .DBC file"
-
dbcc
-- "CAN DBC to C (and XML) compiler" -
CANBabel -- "conversion tool for CAN database files"
// Power on
can0 RX - - 730 [1] 00 // NMT Heartbeat NodeID = 0x30 (State = Bootup)
can0 RX - - 1B0 [2] 00 00 // TxPDO1, DI, NodeID = 0x30 aka 48 -- current button state
can0 RX - - 730 [1] 05 // NMT Heartbeat NodeID = 0x30 (State = Operational)
can0 RX - - 730 [1] 05 // NMT Heartbeat NodeID = 0x30 (State = Operational)
See:
- CAN Identifier List -- default identifier allocation
- CANopen Basics - Guarding and Heartbeat
- Network management (NMT) — canopen documentation
- Default CAN-ID/COB-IDs summary - CANopenNode mailing list post