CANopen作为一种非常实用的通信协议在工控领域非常实用,相对于RS485的MODBUS协议,该协议有速度快,稳定性好的优点。
1, CAN发送数据时,每次是发一个包,每个包还带一个ID,这点和RS485有差别。
2, CANopen是软件协议,是搭建在CAN硬件之上的协议。
3, CANopen和485的modbus类似,都是是一个主站多个从站的形式。主站一般由PLC或者连接CAN模块的PC实现,从站只要有CAN收发器芯片就可以了。
4, CANopen实现最主要的功能有三个,心跳,SDO和PDO。
1) 心跳:所有的从站都会按一定的节奏发送一个固定格式的心跳包给主站,主站可以设置一个定时检测,如果一定时间内没有接收到心跳就会判断该从站掉线。
2) SDO:类似MODBUS中的10命令,发送固定格式的CAN数据包,该数据包可以修改其他从站的对象字典(配置参数),从站设备接收到该命令后会有结果返回
3) PDO:类似主动上传模式,设置完成后,会按照一定延时自动发送,保证传输成功,该功能属于单向传输。
5, 一些名词的解释
1) 对象字典:其实就是一个配置列表,每个从站和每个主站都有一个对象字典,对象字典里可以配置该设备如何进行心跳、PDO、SDO等操作。也可以实现自定义参数,比如对象字典某个地址存放小数点的点位,主站通过SDO修改这个地址来修改小数点位。
2) 每个从站节点有以下状态:
初始化:上电后对CAN控制器进行初始化
应用层复位:应用程序复位,如开关量模拟量输出的复位
通讯复位:节点的CANopen通讯复位,复位后可以进行CANopen通讯
预操作状态:操作就绪,此时不能进行PDO通信,可以进行SDO参数配置,主站可以进行网络管理
操作状态:CANopen激活,PDO按照对象字典的设置进行传输,SDO也可以传输数据和修改参数
停止状态:主站发送停止状态,PDO通信停止
主站可以通过发送命令让网络中任意一个从站节点进行状态切换。
canopen和modbus的区别
canopen
CANopen主要基于CAN应用协议,它是属于OSI七层模型中的应用层以上的协议。相当于它对物理层CAN再进行了一次协议封装,作为一个标准并开放出来,这样每个厂家可以用这个协议彼此通讯,提高互操作性和兼容性。
CANopen源代码编写之前要先了解它的结构和重要概念。
modbus
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。