前言:
主要介绍了CANopen的整体框架,开源协议栈CANFestival的对象字典和节点的一种建立方式。
1 CANopen协议是什么?
CANopen是一种架构在控制局域网路(Controller Area Network,CAN)上的高层通信协议,包括通信子协议及设备子协议。其中的通信子协议为DS-301,设备子协议有DS-401/402等。
在网络的七层协议中,CAN收发器位于物理层,实现逻辑电平(TTL或者CMOS)和差分电平信号的相互转换;CAN控制器位于数据链路层,实现CAN通信的链路层协议,完成数据的打包/解析,CRC校验,仲裁等功能,现在一般的MCU都集成了CAN控制器。有了物理层和数据链路层,数据通信其实已经建立成功了。所谓数据通信,就是按照协议规范对协议里规定的段进行填充数据、打包发送/接收解析的过程。但怎么能更方便的进行通信程序的开发呢?这就需要除了物理层和数据链路层之外的数据层(应用层)。
1.1 通信协议分类
通信协议分类描述不同通信协议的原则和消息传输触发的可用模式。不同的通讯方式适用于不同的环境,其实现过程需要不同的机制,一个优秀的协议栈,应该考虑全面的使用情况,尽可能满足所有的使用需求。
1.1.1主-从(master-slave)模型
任意时刻 CANopen 网络中都仅存在一个设备以主设备身份执行特定功能。CANopen 网络中所有其他的设备均为从设备。按协议规定,主设备会向从设备(们)发送请求,从设备(们)可以配置为响应,也可以不响应。比如一个主控板控制5个伺服电机,主控板的CAN可以作为主设备来对5个电机从设备的速度、位置进行控制并获取当前电机的位置、状态,属于一主多从的通信模型。