We looked at CanOpen and found it far too slow for sending all the motion commands in a 3D printing application. However, it should be possible in principle to use CanOpen to send configuration commands to a servo drive, then use step and dir to perform the actual motion.

The optimised CanFD protocol we use to send motion commands is designed to support more than 1000 movements per second. This is normally sufficient, however we occasionally come across slicers that generate ridiculously small motion segments, e.g. 10um long. Printing a sequence of those segments at 50mm/sec would demand 5000 movements per second.