CANopen 从站协议在 stm32f103zet6 单片机上的实现
摘要
:
本文对 CANopen 从站协议在 stm32f103zet6 单片机上的实现做了分析和说明。介绍了 CANopen 协议
的 SDO(服务数据对象),PDO(过程数据对象)等报文处理的工作和实现原理,实现了向主站发送数据及
处理主站报文等功能。本文中,做了一个从站与一个主站进行数据交互的实现,实验表明 CANopen 从站协
议可以正常使用在 stm32f103zet6 单片机上,并且可以与 CANopen 主站进行数据传输等交互操作。
关键词
:
CANopen;从站协议;服务数据对象;过程数据对象;单片机
1 引言
CANopen
主站设备
CANopen网络
CANopen从站设备
CANopen从站设备
CANopen从站设备
CANopen从站设备
(STM32F103ZET6)
(STM32F103ZET6)
(STM32F103ZET6)
(STM32F103ZET6)
图 1 CANOPEN 连接示意图
CANopen 是一种架构在控制局域网路
(Control Area Network, CAN)上的高层
通讯协定,其协议在嵌入式系统及单片机上
广泛使用,是工业控制常用到的一种现场总
线。依靠 CANopen 协议集的支持,可以对
不同的从站设备通过总线进行配置和系统
重构。相信在不久的将来随着国内对CANo
pen 协议的研究深入,CANopen 协议会在各
个领域有广泛的应用。
CANopen 是 OSI 模型中的网络层以上
(包括网络层)的协定。CANopen 支持网
络管理、设备监控及节点间的通讯,其中包
括一个简易的传输层,可处理资料的传送。
数据的传输和接收都基于 CAN 总线。如图
1,通常多个从站设备靠 CANopen 网络传输
数据给一个 CANopen 主站设备。
CANopen 需要有对象字典,SDO(服
务数据对象)处理功能,PDO(过程数据对
象)处理功能,定时器,NMT(网络管理)
处理功能等。本文着重介绍了 CANopen 协
议的各个功能以及 CANopen 协议在单片机
上 stm32f103zet6 的设计与实现。
2 CANopen 对象字典介绍及设计
对象字典(od:object dictionary)是 CAN
open 协议的核心。对象字典(od:object dict
ionary)是一个有序的对象组;每个对象采用
一个 16 位的索引值来寻址,为了允许访问
数据结构中的单个元素,同时定义了一个 8
位的子索引。通过接收主站发送的 SDO(服
务数据对象)报文,可以设置从站的对象字
典,主要对象字典请参见表 1。从站在做事
件处理时通常会读取对象字典,根据对象字
典里的数据进行事件处理。
譬如从站的 1017 索引是记录从站发送
心跳包的时间间隔。当从站程序运行时并且
从站是准备、停止、运行状态时,程序会查
找 1017 索引的 0 号子索引里的数据进行处
理。如果里面有数据的话(假设数据为
2000),程序则会根据数据所设置的时间通
过定时器判断来每 2000 毫秒发送心跳包。
表 1 从站主要对象字典介绍
索引 作用
1017
设置从站发送心跳包的时
间间隔。
1200
设置对主站节点 ID 的识
别。
1800-1802
设置发送数据的 ID 及发
送数据类型和发送哪个索
引内的数据。
2000
存储要同步传输,异步传
输的数据
6000,6001 存储要传输的错误代码
对象字典的元素定义如下:
索引:对象 16 位元的位址。数据的类
型:一个代表对象的类型,可以是阵列、纪
录或只是一个变量。类型:变量的类型。属
性:提供此是否可读 /可写的资料,有下列
四种:可读/写、只读、唯写、只读常数。
以下是建立 6003 索引的代码案例,并
且里面的数据是(2.78593)*100000 的代码片