Hi,
my company is developing a complex planar motion system at the moment which is controlled by an embedded Linux. One part of this system is a servo motor. This motor is a CANopen device connected to the whole system using a compact-PCI CAN card with two SJA1000s.
The whole system is controlled with a realtime kernel module which is intended to send, at some point, 'move' commands to the motor.
So far, I wrote a driver to have access to the can controller from kernel space.
Unfortunately, we have little or no experience in CAN/CANopen. My 'plan' was to do the CANopen encoding myself because we only need a very limited set of functions for the motor. It's more or less a pretending of a CANopen stack.
I've read through tons of specifications 'til now but was not able to communicate with the CANopen device in any way.
The only thing I see from the device is a message with id 0x701 ( NMT message + node id) and a single, empty data byte right after bootup. I guess, it's indicating the presence of the device which is in the state 'pre-operational'. But switching to 'operational' using the appropriate message always failed.
So, the questions are:
- is it some kind of master/slave problem, maybe? One slave but no 'physical' master present?
- is it in general possible to communicate with CANopen devices without a real CANopen stack or network using a simple application (in this case a kernel module) as 'master'?
Best regards Mark Braczek