CANOPEN通俗易懂非正规解析
什么是canopen
一句话全说了,就是通过can传输信息的一个软件层的开源协议,其中,canopen又有很多子标准,满足不同行业不同产品的需求,举一个例子:下图中,DS401是通用IO模块、DS402是运动控制设备、DS404是闭环测控仪器、DS405是可编程逻辑控制器、DS406是编码器等,这些就是canopen的小的细分的标准

基础介绍
这里不多介绍can协议,大家都知道,can协议传输时帧ID+个数据位的,因为can是没有节点ID这个概念的,但是canopen把帧ID分成了两部,即:帧ID = 功能码 + 节点ID,这里的功能码类使用MODBUS的功能码的概念,在canopen里面就把帧ID叫做COB-ID。然后每一帧数据都包含COB-ID和帧数据,COB-ID包含了节点ID和功能码,帧数据包含了要传输的内容,不同的COB-ID的帧数据里面的数据含义不一样。
canopen的报文类型
这个就是控制节点状态的,控制节点启动,停止,复位的。
例如,要启动某个节点,那么:COB-ID=0x000+节点ID,帧数据就只需一个:如0x01启动、0x82复位。
配置与参数管理报文(SDO)
读写对象字典参数,例如修改从站的目标速度,或者心跳报文周期等,能修改任何RW权限的数据。
COB-ID分两个:
一个是发起请求的COB-ID:0x600+节点ID
一个是响应请求的COB-ID:0x580+节点ID
帧数据:(这里看不懂正常,后面有机会再介绍)
命令字(1字节)+索引(2字节)+子索引(1字节)+数据(4字节)
系统同步与时间报文
主要是同步报文同步报文有什么作用呢,顾名思义就是让从站和主站进行数据同步的,举个例子:主站需要知道从站电机当前的转速,并且是一直需要知道,那就可以通过这个同步报文进行同步数据了。
那么如何进行同步,两个步骤:
主站,他很轻松,他只需要发送:COB-ID=0x080(广播)帧数据为0即可。那么这里的广播是什么意思呢,也就是无需带节点ID,因为当节点接收到COB-ID=0x080的帧ID后,就会看自己有没有需要同步数据(这个是从站提前设置好的)如果需要同步,那就依次把数据发送出去即可,当然这里面还有比较多的其它帧同步的设置参数,这里就不描述了。
从站,这个就需要提前设定好需要同步哪些数据,当收到COB-ID=0x080的同步帧后,就把设定好的数据发送出去即可,这里发送的格式就是PDO报文格式了,主站收到后,会按照对应的格式解析数据的。
实时数据传输报文(PDO)
上面讲了同步帧,传输数据的帧是PDO,现在接收一下PDO,上面介绍同步帧的时候,举了一个例子,就是主站需要同步从站的数据,但是有没有一种可能,从站也需要同步主站的数据呢,当然有啊,例如主站需要控制从站的速度(一直控制,例如100HZ的控制频率),那么也可以通过PDO同步。这里就产生了两种不同传输方向的PDO,如下:
TPDO(发送PDO):从设备→主设备(如电机位置反馈)
RPDO(接收PDO):主设备→从设备(如速度设定值)
那么现在描述一下同步的流程:
TPDO就是从设备→主设备,第一步是主站发送同步帧COB-ID=0x080进行同步请求,然后从站回复TPDO1(COB-ID: 0x180+节点ID) + 帧数据。帧数据就是需要同步的数据
RPDO就是主设备→从设备,这个就不需要发送同步帧了,主站直接发送 RPDO1 (COB-ID: 0x202+节点ID)+帧数据,帧数据就是需要同步的数据
异常与状态报文
心跳报文,这个比较重要,主站可以检测从站的心跳报文,确定从站是否正常。
COB-ID=0x700+节点ID。
紧急报文
COB-ID=0x080+节点ID。
9448

被折叠的 条评论
为什么被折叠?



