德国Bosch公司于1983年研发CAN协议,用于汽车传动系统的网络通讯,之后称为国际标准ISO11898。CANopen 是基于CAN-bus分布式工业控制技术的标准,它是由生产厂商和用户联合CiA(CAN in Automaion)共同开发的,并于2002年成为CENELEC EN 50325-4标准。
如今,CANopen协议已广泛用于电机控制(步进/伺服电机)中,也应用于:如机器人技术(自动化机器人、传送带和其他工业机械)、医疗类(X射线发生器,注射器,病床和透析设备)、汽车行业(农业,铁路,拖车,重型,海洋等)。
CANopen对于运动控制来说是一款优秀的通讯协议,采用了面向对象的一些设计思路,比如对象字典,过程数据对象(PDO),服务数据对象(SDO)等等。
CANopen在欧洲已成为最普通的协议,任何一家自动化公司都有CANopen的通讯接口,也成了低配。低配并不代表不好,只是说明其性价比更高。CANopen定义了完整的同步控制机制,使其成为主流的运动控制协议。
1. DCF
设备配置文件(Device configuration file),是加强版的 EDS,可以设置节点 ID 及通信速度。
2. EDS
电子数据表格,是描述一台从站设备的属性,参数的文件,是对从站设备对象字典的描述。EDS不是必须的,例如Bechkoff的主站就不需要从站提供EDS文件,但大多数的主站配置软件都需要。
3. 复位节点
当设备遇到异常(如从站断线后重连),主控会发送“复位节点”,驱动器恢复出厂值,而且连CAN通讯参数也恢复成默认值。FD,JD伺服是除了CAN通讯参数外,其他配置参数恢复出厂值。
4. EMCY
紧急服务用于设备发生致命错误(例如传感器故障)的情况,从而使其可以向网络的其余部分指示此错误,一般伺服断电后,其电容电量能保证其发送该条报文。
5. 心跳,节点保护
配置心跳参数,设置心跳周期,心跳消费时间,这个消费者时间实际上是作为一个超时参数。主站收到一个心跳后,开始计时,如果在超时时间内没有收到下一个心跳,则认为从站离线,并报告错误,按照用户配置的错误处理方法处理。
网络中的每个节点都可以配置心跳,主站可以监听从站,从站可以监听主站,从站还可以监听从站。这里有一个生产者、消费者的概念,总线上的设备定义自己是心跳的生产者,还是消费者。生产者产生心跳,消费者监听心跳,然后在捕捉到异常后做出对应的处理。
节点保护,其作用类似心跳,但可以读取从站设备的CANopen通讯状态(初始化,预操作,操作中,停止),属于DS301的范畴。
6. DS301和DS402的区别
DS301就是一个通讯协议栈,DS402是建立在DS301的上层协议,属于伺服类的控制协议,协议中规定好每个对象字典的作用。谱思的产品PMC007CxSxPx采用工业标准CANOPEN DS301控制协议,适合各种高精度、宽范围的工业应用。
7. 对象字典
CANopen对象字典是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其有效范围在0x1000到0x9FFF之间。为了允许访问数据结构中的单个元素,同时也定义了一个8位的索引值,这个索引值通常被称为子索引。每个CANopen设备都有一个对象字典,对象字典包含了描述这个设备和它的网络行为的所有参数。可以这么理解,从字面去解读,对象字典就是一本字典,CANopen设备知道的和可以做的行为都在这本字典里的某个位置,不管它想做什么,只要它要实施动作都要以字典为参考对象,以此确认可行性。
例如你的上位机收到了一报文,由于可以访问对象字典的对象是SDO,首先要判断它是SDO对象,那么你的程序就需要按照SDO中指定的索引和子索引去查找对象字典(一个排好序的数据结构集),找到相应的对象后按照SDO中的指令去操作这个对象,例如把一个值赋给字典中的变量。
8. SDO
这个很简单,就是类似串口的一发一回模式,主站发送请求帧,从站回复应答帧。
大家看几个例子就明白了。
主站发送:605 2F 03 20 00 07 00 00 00
从站响应:585 60 03 20 00 00 00 00 00
主站向节点ID为5的设备发起写请求,请求的索引地址为0x2003,子地址为0x00,写入的数据为7,对应PMC007对象字典中的波特率设置参数,写入数据7表示设置波特率为800Kbit/s。从站响应60表示写入成功。
主站发送:605 23 04 60 00 80 0C 00 00
从站响应:585 80 04 60 00 22 00 00 08
主站向节点ID为5的设备发起写请求,请求的索引地址为0x6004,子地址为0x00,写入的数据为0xC80(3200),对应PMC007对象字典中的步进命令,写入数据3200表示让电机执行3200步步进。从站响应80表示写入失败,错误码为0x08000022
9. PDO
PDO通信是基于生产者/消费者(Producer/Consumer)模型,主要用于传输实时数据。产生数据的节点将带有自己节点号的数据放到总线上,需要该数据的节点可以配置为接收该节点发送的数据。PDO的传输是由事件触发的,这样的事件可以是代表一个PDO变量的变化;可以是时间的过期或者是接收到一个特定的消息。过程数据直接在一个CAN消息中传输而不需要协议头文件。一个PDO的长度是在0到8个字节之间。
0:PDO在收到SYNC后发送,但不是周期的;
1-240:PDO在收到SYNC后发送,周期发送,该值为两次发送PDO之间的间隔的SYNC个数;
255:事件触发;
PMC007CxSxPx支持通过SDO配置PDO映射,以配置GPIO值为TPDO1为示例,发送的SDO为:
设置通信的COB-ID为187,即节点ID为7的设备接收该PDO
主站发送:605 23 00 18 01 87 01 00 00
设置为事件触发
主站发送:605 2F 00 18 02 FF 00 00 00
设置Inhibit time为5ms
主站发送:605 2B 00 18 03 32 00 00 00
设置Event time为1000ms
主站发送:605 2B 00 18 05 E8 03 00 00
设置映射条目数1
主站发送:605 2F 00 1A 00 01 00 00 00
设置映射参数,将0x6012映射到TPDO1
主站发送:605 23 00 1A 01 10 00 12 60
配置完成后PMC007会每隔1s发出PDO报文,当GPIO端口有变化时也会发出该报文
PDO映射内容:187 03 00
该报文表示GPIO1和GPIO2为高电平。
关于CANopen的简介就到这了,欢迎补充和询问
更多内容请访问 重庆谱思机器人控制系统 https://www.pusirobot.com/