温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
Vxworks
CAN
风机
控制器
中的
实现
顾开祥
wwwele169com|13电子电路设计与方案0 引言风力发电作为能源主力军之一,在 2020 年持续维持高景气度,根据国家能源局公布的数据,继 2010 年以来,我国风电新增装机连续保持世界第一。全行业的产品升级迭代和科技进步不断得到推进,总线技术在风电项目中得到大量的应用。从 OSI 网络模型的角度来看同,现场总线网络一般只实现了第 1 层(物理层)、第 2 层(数据链路层)、第7 层(应用层)。因为现场总线通常只包括一个网段,因此不需要第 3 层(传输层)和第 4 层(网层),也不需要第 5层(会话层)第 6 层(描述层)的作用。其中 CAN(Controller Area Network)现场总线仅仅定义了第 1 层、第 2 层(见 ISO11898 标准);实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件(Software)或固件(Firmware)。基于 CAN 的高层协议:CAL 协议和基于 CAL 协议扩展的 CANopen 协议。CANopen 协议是 CAN-in-Automation(CiA)定义的标准之一,并且在发布后不久就获得了广泛的承认。相较于其他总线,由于 CAN 总线技术在通讯速率、通讯距离、错误处理能力等方面的综合优点,提高了系统的实时性、可靠性与灵活性,因此在现场设备中得到广泛运用。1 总体设计这部分内容主要阐述系统的总体设计,根据实际采用的 PPC 硬 件、软 件 操 作 系 统 及Codesys 软件给出总体设计方案,明确设计过程中的技术要点。并结合 CANopen 开源协议栈,通过分析该协议框架后,给出使用方法。CANopen 从站系统主要是为上层应用程序提供PDO数据交互功能。该功能实现主要包括以下部分:(1)用户程序的 PDO 数据交互实现是基于 Vxworks 和 Codesys 组件接口程序,实际的CANopen 协议报文在 PPC 硬件上以驱动的形式实现。(2)CANopen 协议部分的 PDO、SDO、NMT 等协议应用实现是基于开源 CANopen 协议。通过将该协议栈移植到PPC 控制器上,来完成 CAN 应用层功能。(3)CANopen 协议报文由 CAN 链路层的发送或接收完成,通过 PPC 硬件控制 CAN 链路层控制芯片和 CAN 的PHY 芯片,最终实现与外部 CAN 主站的数据交互。CANopen 总线网络由一个主设备和多个从设备构成分布系统,每个节点设备通过不同的 COB-ID 为标识。在Codesys 应用程序开发过程中,可根据实际项目的开发将系统中任意满足协议要求的数据通过调用组件接口将其传到 CANopen 协议栈中对应的 TPDO 映射变量,同样也可通过调用组件接口获取协议栈中相应的 RPDO 映射变量的数据。以该形式即可完成 CAN 主站设备和 CAN 从站设备间的PDO 交互。总体设计如图 1 所示。关于如何保证主从站数据交互的可靠性与实时性要求。其中可靠性主要依赖 RPDO、TPDO 预定义规则,即每个PDO 对应地址中的数据定义是确定,其次 CANopen 开源协议的可靠性是经过很多平台测试验证的。实时性要求,开源栈协议实现是基于 Vxworks 任务调度的强实时性及相关定时或信号传递等资源的低延时的基础上完成的,故实时性是能达到要求的。基于 Vxworks 的 CANopen从站在风机控制器中的实现顾开祥,姜智锐,杜国斌,邵鹏程(上海中广核工程科技有限公司,上海,200241)摘要:运用CAN现场总线的应用层CANopen协议栈,在PowerPC架构处理器上实现一种高效可靠的PDO传输从站系统。该系统通过在硬件平台上搭建的Vxworks操作系统来构建多线程的CAN任务管理,其中包括在Vxworks操作系统下创建CAN通讯的状态机管理线程、定时器线程、报文收发线程,以此方式实现CANopen从站应用。利用Vxworks系统高实时性和并发处理能力等特点,提高设计从站系统的安全性与可靠性。同时基于Codesys设计了PDO数据收发的接口组件,方便应用户程序的开发。关键词:风机控制器;CANopen从站;PDO;Vxworks操作系统;Codesys风机控制器主控模块PPC硬件/VxworksCAN LINK链路层CAN PHY物理层Codesys用户程序CANopen协议实现组件接口程序外部CAN主站设备CAN 总线.图 1 总体设计框图DOI:10.16589/11-3571/tn.2023.03.00214|电子制作 2023 年 2 月电子电路设计与方案2 CANopen 从站的设计实现 2.1 从站功能概述CANopen 是 在 CAL 基础上开发的,使用了 CAL 通讯和服务协议子集,提供了分布式控制系统的一种实现方案。CANopen 在保证网络节点互用性的同时允许节点的功能随意扩展:或简单或复杂。CANopen 的核心概念是设备对象字典(OD:Object Dictionary),在其他现场总线(Profibus,Interbus-S)系统中也使用这种设备描述形式。注意:对象字典不是 CAL 的一部分,而是在 CANopen 中实现的。在 OSI 模型中,CAN 标准、CANopen 协议之间的关系如图 2 所示。OSI Layer7应用层设备协议CiA DSP-401设备协议CiA DSP-404设备协议CiA DSP-xxx通讯协议 CiA DSP-301OSI Layer2数据链路层CAN 数据链路层芯片CAN 2.0AOSI Layer1物理层CAN物理层芯片ISO 11898图 2 CAN 标准、CANopen 协议关系图CANopen从站功能实现如下3种协议报文(通讯对象):(1)网络管理报文:负责 CAN 网络的管理和 设备 ID 分配服务:如初始化,配置和网络管理(包括:节点保护)。(2)服务数据对象 SDO(Service Data Object):通过使用索引和子索引,SDO 使客户机能够访问设备(服务器)对象字典中的项(对象)。协议是确认服务类型:为每个消息生成一个应答。(3)过程数据对象 PDO(Process Data Object):用来传输实时数据,数据从一个生产者传到一个或多个消费者。数据传送限制在 1 到 8 个字节。2.2 CAN 从站硬件实现从站硬件的搭建主要分为三个部分,首先是控制器使用的是 PPC 架构的单核控制器主频 450M;其次是 CAN 的控制采用的是飞利浦的PCA82C200芯片,将欲收发的消息(报文),转换为符合 CAN 规范的 CAN 帧,通过 CAN 收发器,在 CAN-bus 上交换信息;最后是 CAN 收发器部分采用的是MAX305 1 芯片,主要实现 CAN 控制器的逻辑电平转换为CAN 总线的差分电平,在两条有差分电压的总线电缆上传输数据。CAN 从站硬件实现如图 3 所示。2.3 CAN 从站软件实现控 制 器 系 统 的 软 件 开 发 采 用 WindRiver 公 司 的Tornado2.2 集成开发环境,操作系统版本为 Vxworks 5.5.1。软件实现均基于模块化的设计,包括移植 CANopen 开源协议栈的应用程序。CANopen 从站的软件框图如图 4 所示。使用CODESYS编写的用户程序CANopen从站协议栈实现程序RUNTIME SYSTEM:PLC CORE基于VxWorks操作系统的硬件驱动VxWorks操作系统PLC核心区DRV LIB图 4 CAN 从站软件实现框图2.3.1 CAN 底层驱动程序实现这部分工作主要是完成 PCA82C200CAN 控制器的控制实现,通过对该 CAN 控制器内部 REG 的读写操作完成芯片的参数配置初始化、总线状态监测、报文收发等。该芯片初始化实现函数 PCA_Init()、REG 读操作函数 PCA_REG_Read()、REG 写操作函数 PCA_REG_Write()等。CAN 芯片初始化部分实现,流程图如 5 所示。关于控制器的 CAN 报文发送,底层报文的传输是由PCA82C200 独立完成的,主控制器(PPC)将需发送的数据写入 CAN 控制器寄存器中,CAN 控制器首先会把数据放到Host ControllerPowerPC控制器PCA82C200InterfaceManagementTxBufferRxFIFOValidation filteringCAN Core Block CAN 2.0AMAX3051TrannsceiverCAN 收发器CAN BUS图 3 CAN 从站硬件实现框图wwwele169com|15电子电路设计与方案缓冲区里,通过查询或中断的方式来判断数据的发送是否完成。完成时对应的寄存器状态字会被置为 1 或中断会被触发。本设计是基于查询的方式实现的。首先通过轮询确定当前发送缓冲区是否空闲,接着写发送缓冲区。具体如流程图6所示。开始硬件复位PCA芯片配置PCA控制寄存器进入复位模式配置时钟驱动寄存器:1.配置工作模式2.时钟输出关闭3.RX0通道激活,RX1关闭关闭正常模式下所有中断设置CAN芯片通讯波特率,默认为500K使能Bus Error、Error Passive、Data Overrun、Transmit四个中断使能Bus Error、Error Passive、Data Overrun、Transmit四个中断配置通讯接口输出寄存器:输出1浮空、输出0推挽配置通讯ID过滤寄存器:不过滤,所有ID均可通过配置命令寄存器:释放接收BUF,清楚数据溢出配置控制寄存器进入操作模式结束 图 5 CAN 芯片初始化流程图开始初始化PCA芯片CAN报文待发送判断发送缓冲区是否空闲将待发送数据写入置发送请求标志位为1结束处理其他工作NY 图 6 CAN 报文发送流程图关于 CAN 控制器报文接收,当控制器接收到报文时会将数据放到接收缓冲区中,实现方式与发送一样均有两种方式,本设计数据接收采用的是中断的方式,当控制器触发接收中断条件后,会触发相关中断,同时数据会存放到接收缓存中。当接收完数据后需要清除相关的中断状态,等待下次接收中断的触发。具体实现流程如流程图7所示。2.3.2 驱动接口实现关 于 驱 动 接 口 实现,本设计与采用的嵌入式操作系统有关,同时需要兼顾CANopen 协议栈接口。根据协议栈的设计,调用 CAN 底层驱动接口函数即可控制底层硬件。功能实现框图如图 8所示。该过程需加载 CAN 驱动,主要包含以下接口:CAN口的打开、关闭、数据收发及波特率的设置。2.3.2.1 系统定时器机制在开源协议栈实现中,很多的接口交互都与定时器有关,交互的实时性取决于定时器的精度,这直接决定了从站功能实现的可靠性。故在 PPC 架构中实现 CANopen 从站功能首先需要解决定时问题。基于 Vxworks 提供的精准软定时器和信号量,完成协议栈中时间调度程序。在创建的任务中调用延时接口完成对协议栈的时间调度任务。2.3.2.2 驱动接口函数该部分是实现的是协议栈与底层驱动的接口函数,基于底层操作的基本接口实现,可用于上层应用对底层的控制。驱动与协议栈主要实现内容包含CAN设备的打开、关闭、读、写操作。该驱动为字符设备驱动,利用 Vxworks I/O 系统为用户程序提供统一接口,使得上层应用程序与底层硬件相互独立。2.4 CANopen 从站协议栈移植实现2.4.1 CANopen 开源协议栈介绍现 市 场 上 主 流 的 CANopen 开 源 协 议 栈 主 要 有MicroCANOPEN、CANOPENNode 和 CANFestival 三种。使用开源协议栈可以减少开发难度和降低开发周期,且开源协议栈总线功能齐全。本实现选择 CANFestival 协议栈,该协议栈编写于 2001 年,已经过若干项目验证至今,代码成开始触发接收中断查看接收缓冲区状态是否为空读取数据清相关状态位报文处理结束NY图 7 CAN 报文接收流程图1