CANopen cat tools

1 minute read

The CANopen cat tools provide netcat-like functionality over the CAN bus. Their implementation is based on object 1026 (OS prompt), which provides SDO and (event-driven) PDO access to the stdin, stdout and stderr streams on a CANopen device.

cocat is the client program. It reads bytes from stdin and writes them as single-byte PDOs to the CAN bus, provided the second argument is a valid PDO COB-ID. If the third and fourth arguments are valid COB-IDs, bytes received from PDOs with those COB-IDs are written to stdout and stderr, respectively.

cocatd is the server program, and by default runs as a daemon. It executes the provided command in a child process, and connects the stdin, stdout and stderr streams of that process to sub-objects 1026:01, 1026:02 and 1026:03 in its object dictionary, respectively. The default configuration enables PDO access to each of these sub-objects. Regardless of the configuration, cocatd expects RPDO1 to map to 1026:01 (StdIn), and TPDO1 and TPDO2 to map to 1026:02 (StdOut) and 1026:03 (StdErr), respectively.



cocat -h
cocat --help
cocat [-i ms | --inhibit=ms] [interface] [StdIn_COBID] [StdOut_COBID]


cocatd -h
cocatd --help
cocatd [-D | --no-daemon] [-f filenname | --file=filename]
       [-n node-ID | --node=node-ID] [interface] [command]



-h, --help Display help.
-i <ms>, --inhibit=<ms> Wait at least <ms> milliseconds between PDOs (default: 1).


-D, --no-daemon Do not run as daemon.
-f <filename>, --file=<filename> Use <filename> as the EDS/DCF file instead of using the default configuration.
-h, --help Display help.
-n <node-ID>, --node=<node-ID> Use <node-ID> as the CANopen node-ID.


The CANopen cat tools can be used to provide shell access over the CAN bus. To setup such a configuration, run

cocatd can0 -n 1 /bin/sh

on the server, and

cocat can0 0x201 0x181 0x281

on the client. Any commands typed at the client side are executed on the server, and the response is printed by the client.