CANopen是基于CAN总线的应用层协议,在开放的现场总线标准中CANopen是最著名和成功的一种,已经在欧洲和美国获得广泛的认可和大量应用。由于CAN只定义了物理层和数据链路层,没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29位标识符、8字节数据的使用。CANopen是建立在CAN(ControllerArea Network)串行总线之上的应用层协议。它支持多种传输模式,具有良好的开放特性,并能极大程度地降低CAN总线网络数据的负荷,从而使CAN总线成为一个更加完善的网络系统。本文通过CANopen协议的SDO报文命令实现了说话者运用语音指令控制AS—MRobotE智能机械臂完成相对复杂的动作,和以往的基于CAN总线的数据传输相比,大大提高了系统的效率,节约了有限的硬件资源,为功能的扩展和用途的延伸提供了方便。
1 CANopen协议剖析
1.1 CANopen协议通信模型
CANopen协议中包含了标准的应用层规范和通信规范,其通信模型如图1所示。
在CANopen的应用层,设备间通过相互交换通信对象进行通信。良好的分层和面向对象的设计理念使得CANopen协议中的通讯模型条理清晰。
图1 CANopen协议通信模型
1.2 CANopen设备模型
一个CANopen设备模块可以分为3部分,如图2所示。
图2 CANopen设备模型
通信接口和协议软件提供在总线上收发对象的服务。这一部分直接面向CAN控制器进行操作。
对象字典描述了设备使用的所有的数据类型,通信对象和应用对象,是一个CANopen设备的核心部分。应用程序对对象字典进行操作就可以实现CANopen通信。
而应用程序由用户编写,包括功能部分和通信部分。通信部分通过对对象字典进行操作实现CANopen通信,而功能部分由用户根据应用要求实现。
1.3 CANopen的网络模型
图3所示为CANopen典型的网络模型,该网络中有一个主节点,三个从节点以及一个CANopen网关挂连接的其他设备。由于CANopen是基于CAN总线的应用层协议,属于总线型网络,在布线和维护等方面非常方便,可最大限度地节约组网成本。
图3 CANopen网络结构
其中,构建一个CANopen设备至少应该具有(最小能力设备)以下几个部分: 一个节点ID,一个对象字典(内容由设备功能决定),一个SDO,能够访问对象字典中必需的对象(只读),支持下列NMT服从设备从设备:复位节点;停止远程节点;启动远程节点;复位通讯,进入预操作状态;缺省的标识符分配。
2 开发方法的选择
开发有很多种方法,但归纳起来共三种:
2.1使用CANopen处理器及模块
CANopen处理器提供一个具有完善软件及硬件接口的基于SOC的CANopen协议栈固件嵌入式模块,比如HMS工业网络有限公司新近开发的用于CANopen的Anybus—IC。使用这样的CANopen处理器模块来与自己的设备相连接,可以快速接入CANopen设备,但这样的模块一般购买单价都比较高。优势是开发周期短,不容易出问题,对于小批量和开发能力弱的用户比较合适。
2.2使用CANopen协议栈的源代码
开发CANopen节点的一个最常用的途径是购买CANopen协议栈的源代码。这种商品化的解决方案可适用于大多数的微控制器、微处理器甚至DSP芯片。利用这些商品化的CANopen协议栈的源代码可以快速构建系统。但是会增加额外的软件接口,例如硬件抽象化以及队列。
2.3完全自己开发硬件和程序
在CANopen协议基础上,大致确定自己的产品所需要的功能,然后选择最适合自己的硬件系统。这种方法比较适合大批量的公司,且要求开发者的开发能力很强,对协议很熟悉,开发周期相对较长,后期验证也需要较长的时间,以及对协议的不同理解造成的开发的兼容性差。但这种方法能让公司真正积累设计能力、后期客户问题处理能力及产品功能升级能力,应用非常灵活。
由于智能机械臂控制系统AS-MRobotE是一种模块化的智能机器人,每个模块都是由独立的DSP运动控制芯片与通迅模块组成,模块之间均采用基于CAN总线的通讯模式。AS—MRobotE的各种运动由各个关节轴系完成,我们可以把AS—MRobotE各个模块看成CANopen设备的每一个从站,在机械臂控制系统中建立简单主站协议栈来完成与各个模块之间的通讯以及与控制。而开发主站协议栈过程中所采取的简化与设计心得如下:
1)在开发过程中根据具体的需要来完成有关CANopen协议的编写即可;
2)组建对象字典时,根据具体的需要来完成必要的功能,预留一定的空间为功能的扩展添加新的功能项;
3)通过简单引导来实现CANopen标识符的分配。
3 CANopen协议在机械臂控制系统中的应用与开发
3.1 CANopen协议的控制网络
基于CANopen协议的嵌入式语音指令控制机械臂的控制网络是单主站(Master)系统,在工控主板EPCS.8980的CAN接口构造简单的CANopen协议栈主站,作为从站设备的智能机械臂系统各模块的运行由主站来控制。CANopen协议栈主站还具有启动中止总线节点,节点监测等特定功能。
图4 CANopen协议的控制网络
3.2 CANopen的初始化和组态
结合CANopen协议在机械臂控制系统中的应用实现过程,CANopen的初始化和组态过程如下:
1)主站和从站分别上电,从站自动进入准备预操作状态:
2)主站初始化CAN芯片;
3)主站根据EDS文件向从站发送SDO,对每个从站设备进行组态;
4)主站向从站发送NMT命令,指示从站进入运行运行操作状态;
5)主站和从站通过PDO和SYNC数据交换控制变量和通讯信息。
4 基于CANopen协议的嵌入式语音指令控制过程的实现
本文把几个有限的语音指令(左转、右转、上升、下降、加紧、放松)在嵌入式机器人控制系统平台上通过识别和理解过程把语音指令转化成对应的文本活命令,实现嵌入式语音指令控制机械臂控制系统,使之按说话者完成相应的运动。语音指令与对应的文本活命令之间的关系如下:左转(0x01)、右转(0x02)、上升(0x03)、下降(0x04)、加紧(OX05)、放松(0x06)。
下面通过一个例子来说明如何通过CANopen协议实现嵌入式语音指令对机械臂控制系统的控制过程。
使用下面的SDO消息如表1,表2,表3,表4所示。嵌入式机器人控制系统平台把值0x01(左转)通过CANopen协议传输到机械臂控制模块控制器中的对应的对象字典中。比如:写到节点ID为2的对象字典中索引为0x1801,子索引为2的对象中去,使用启动域下载协议,加速传输(1字节数据)。
表1 左转节点2的报文
表2 左转节点2的报文
通过SDO协议报文即可以实现语音指令的控制。在机械臂内部,通过读取码盘传感器的数据来与设定值之间进行比较,来完成中止这次语音命令控制过程。实现过程正好和上面的过程相反。
使用下面的SDO消息,同样的对象字典中索引0x1401,子索引为2的对象将被读出,使用启动域上传协议,服务器使用加速传输方式应答(1字节数据):
表3 左转节点2的报文
表4 左转节点2的报文
其他的语音指令命令如右转(0x02)、上升(0x03)、下降(0x04)、加紧(Ox05)、放松(0x06)等也可以通过这个过程来实现。
通过在机械臂控制网络中采用CANopen协议来传递控制参数比如语音指令等和码盘等控制信息,可以达到很好的实时通讯和控制目的。
5 结论
CAN总线在各个领域有着很好的应用前景,而基于CAN总线的高层协议CANopen和CAN构成了一个完整的网络协议,提高了CAN总线的利用率,增强了设备的可扩展性,提高了数据传输的可靠性。在机械臂控制系统中使用CANopen协议的方案能够很好的为机械臂控制系统提供实时可靠的数据传输并具有良好的设备扩充能力和模块独立性。该方案为提高CANopen的应用提供了一种新的思路,为集成的和可传输的工业应用具有一定的借鉴意义。
上一篇:RS Components新增600多款Amphenol FCI连接器和线缆组件
下一篇:基于ComPactLogix和现场总线的过程控制系统
推荐阅读最新更新时间:2024-05-03 00:49