Selecting a network layer over CAN bus
I write code to access the CAN bus on GM cars, which uses a mostly proprietary network layer. Have you looked into OpenCAN? I would choose an open standard such as CANOpen or even OpenCAN. It really depends on the level of control and flexibility you want in your automation environment.