《电子技术应用》
您所在的位置:首页 > 通信与网络 > 业界动态 > CANOpen协议如何保证通讯不丢帧

CANOpen协议如何保证通讯不丢帧

2016-02-17

  摘要:如何让现场总线通讯更加稳定可靠,不丢失,这向来都是工程师们难以解决的问题。本文将运用国际规范的通讯协议来展示怎样才能搭建好握手通讯。

  服务数据对象SDO(Service data object)

  SDO主要用于CANopen主站对从节点的参数配置。服务确认是SDO的最大的特点,为每个消息都生成一个应答,确保数据传输的准确性。如图 1所示,这就像快递,需要收方签收后,给寄方发送一个已经签收的确认才算完成一次投递。

  

proxy (2).png

图 1 SDO与快递签收

  在一个CANopen系统中,通常CANopen从节点作为SDO服务器,CANopen主节点作为客户端(称为CS通讯)。SDO客户端通过索引和子索引,能够访问SDO服务器上的对象字典。这样CANopen主节点可以访问从节点的任意对象字典项的参数,并且SDO也可以传输任何长度的数据(当数据长度超过4个字节时就拆分成多个报文来传输)。

  通讯原则(communication principle)

  SDO的通讯原则非常单一,发送方(客户端)发送CAN-ID为600h+Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度均为8字节;

  接收方(服务器)成功接收后,回应CAN-ID为580h+Node-ID的报文。这里的Node-ID依然是接收方(服务器)的节点地址,数据长度均为8字节。如图 2所示。

  

proxy (4).jpg

图 2  SDO通讯原则

  快速SDO协议(Expedited SDO protocol)

  最常用最常见的SDO协议是快速SDO,所谓快速,就是1次来回就搞定。前提是读取和写入的值不能大于32位。如图 3所示,为快速SDO协议的示意图。命令中直接包含了要读写的索引、子索引、数据。可谓直接命中。

  快速SDO的难点在于CS命令符的记忆,需要读者收藏这个示意图。

  

proxy (5).jpg

图 3  快速SDO示意图

  通过快速SDO,可以直接对CANopen节点的对象字典中的值进行读取和修改,所以在做参数配置之外,也经常作为关键性数据传输之用。比如CANopen控制机器人的电机转动角度时,就使用SDO来传输,保证可靠到达。

  普通SDO协议(Normal SDO protocol)

  当需要传输的值超过32位时,就不能使用快速SDO传输。必须使用普通SDO进行分帧传输。在应用中较少用到,一般用于CANopen节点的程序固件升级,或者做网关转换MVB总线之类数据最大可达256位的应用。

  普通SDO协议难点在于分包逻辑与CS命令符的变化。依然难以记忆,需要读者将以下示意图进行收藏。

  当然普通SDO的CAN帧ID与快速SDO相同,依然发送方(客户端)发送的报文CAN-ID为600h+Node-ID,接收方(服务器)成功接收后,回应CAN-ID为580h+Node-ID的报文。

  下载协议download protocol 如图 4所示。

  

proxy (6).jpg

图 4  普通SDO下载协议

  上传协议upload protocol 如图 5所示。

 

proxy (7).jpg

 图 5  普通SDO上传协议


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。