《CAN总线通信系统上位机通信软件的设计解读.docx》由会员分享,可在线阅读,更多相关《CAN总线通信系统上位机通信软件的设计解读.docx(34页珍藏版)》请在三一办公上搜索。
1、CAN是控制器局域网络(Controller Area Network, CAN)的简称,是国际上 应用最广泛的现场总线之一。本文对CAN总线的研究背景、发展现状及研究意义 进行了论述,简单介绍了 CAN总线相关技术规范,并且基于VC+设计了 CAN通信 软件。软件实现的功能包括:正确识别CAN设备并打开CAN通道;可封装CAN报 文进行发送;可接收CAN数据帧,并能对接收的数据帧进行解析;具有过滤功能, 可不显示指定的协议帧。最后,对软件功能进行测试并发布。关键词CAN总线VC+通信软件Title Design of PC Communication SoftwareBased on CAN
2、 bus Communication SystemAbstractCAN is short for Controller Area Network, the worlds most widely used field bus.CAN-bus is mostly used in network formation of industrial control systems and vechile control system. Background,development status and the research significance of CAN bus are discussed
3、,an outlineof the CAN-bus relevant technical specifications is given , and the CAN communication software based on Visual C+ is designed.Functions implemented include:Correctly identify the CAN device and open the CAN channels;CAN messages can be sent encapsulated; CAN data frames can be received,an
4、d is able to parse the received data frames;Has a filtering function,do not display the specified protocol frame. Test and release the software.Keywords CAN-bus VC+ Communication software目次1 绪论11.1 研究背景11.2 研究目的和意义11.3国内外发展现状21.4论文结构安排22 CAN总线协议分析32.1 CAN-bus 规范 V2.0 版本32.2 CAN 控制器 SJA1000 62.3 本章小结
5、63开发环境介绍63.1开发环境63.2 CANUSB-1/n智能 CAN 接口卡73.3 本章小结84 CAN通信软件设计84.1驱动程序安装84.2 CAN接口卡函数库说明84.3界面设计114.4软件功能实现164.5 本章小结225测试及发布235.1软件功能测试235.2 程序发布 245.3 本章小结27结论28致谢29参考文献301绪论现场总线,就是应用于工业现场,采用总线方式连接多个设备,用于传输工业现 场各种数据的一类通信系统1。CAN(Controller Area Network)总线是现场总线的 一个分支,因其具有很高的可靠性和性能价格比,已经成为国际标准,在工业过程监
6、 控设备的互连方面得到广泛应用,受到工业界的广泛重视,并已被公认为几种最有前 途的现场总线之一。1.1研究背景随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计 算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和 灵活性的高要求,工业控制系统的发展主要表现为:控制多元化,系统面向分散化, 即负载分散、功能分散、危险分散和地域分散。分散式工业控制系统就是为适应这种 需要而发展起来的。这类系统是以微型机为核心,将5C技术Computer (计算机技术)、Control(自动控制技术)、Communication (通信技术)、CRT (显示技术) 和Ch
7、ange (转换技术)紧密结合的产物。它在适应范围、可扩展性、可维护性以及抗 故障能力等方面,较之分散型仪表控制系统和集中型计算机控制系统都具有明显的优 越性。典型的分散式控制系统有现场设备、接口与计算设备以及通信设备组成,现场 总线(Field bus)就是在这种背景下产生的。1.2研究目的和意义从19世纪发明汽车以来,人们就一直在乘坐的舒适性、安全性和操控性方面不 停地对其进行改革和创新,车上的电子设备也越来越多。这些电子设备大多是需要协 同工作的,这就要求各部件之间能互相通信1。为了解决汽车通信问题,CAN-bus应运而生,凭借可靠、实时、经济和灵活的特 点,CAN总线很快在其他行业得到
8、广泛应用,特别是在工业控制领域更是如鱼得水。 现在CAN-bus总线已经成为全球范围内最重要的现场总线之一,甚至引领着现场总 线的发展。工业控制系统涉及众多软、硬件模块,给程序的设计和调试带来一定难度。尤其 作为上、下位机间联系纽带的CAN总线通信部分,一旦在整个系统运行期间发生问题, 若没有良好的人机界面和测试手段,将很难及时准确地找到并排除故障。同样,在控 制系统的研制过程中,为了尽可能地减少故障和缩小故障范围,也应设计相应的测试 软件来具体负责CAN总线通信及接口部分的调试、运行任务。故此,本课题就如何利 用VC设计CAN总线测试软件进行介绍。1.3国内外发展现状自从Bosch与Inte
9、l公司于1986年正式发布CANbus通信方式,宝马(BMW) 公司很快于1989年推出第一款使用CANbus通信的汽车,从此CANbus开始了其 辉煌的历程:(1)1990年,奔驰公司发布了第一辆使用CANbus的轿车,现在几乎 每一辆新生产的汽车均装配有CANbus网络;(2)1993年,CANbus总线被制定 成为国际标准ISO11898 (高速应用)和ISO11519 (低速应用);(3)1994年,欧洲 成立了 CiA厂商协会,美洲成立了 ODVA厂商协会,专门支持CANbus总线的两大应 用层协议CANopen协议与DeviceNet协议】3。在CiA的努力推广下,CAN技术在汽车
10、电子控制系统、电梯控制系统、安全监控 系统、医疗仪器、纺织机械、船舶运输等方面均得到了广泛的应用。现已有400多家 公司加入了 CiA,CiA已成为全球应用CAN技术的权威。国内在CAN总线方面的研究和应用于国外相比还存在明显的差距,体现在两个方 面:(1)国内在自主研究和开发汽车电子CAN网络方面尚处于试验和起步阶段,国 内绝大部分的汽车还没有采用汽车总线设计;(2)国内汽车合资企业不少已采用CAN 总线技术,但核心技术掌握在外商手中。为顺应世界汽车工业发展的趋势,我国也相 应加强了对CAN总线的研究,并开发具有自主知识产权的CAN总线产品。CAN技术已应用于家用电器和智能楼宇以及小区建设中
11、。随着无线技术的完善和 将无线技术应用到CAN总线系统中研究的不断深入,可以乐观地预计,未来CAN总线 技术的应用将无处不在,虚拟的CAN总线即将诞生。1.4论文结构安排本文第一章介绍了 CAN总线的研究背景和国内外发展现状,并介绍本课题研究的 目的和意义。第二章简单介绍了 CAN总线通信规范和SJA1000控制器。第三章简单介 绍了开发环境和CAN接口卡。第四章详细介绍了软件的设计过程,包括驱动安装、接 口卡函数库说明、界面设计、功能分析与设计。第五章介绍了软件的测试及程序的发 布。2 CAN总线协议分析2.1 CAN-bus 规范 V2.0 版本CAN规范技术规范由两部分组成:-A部分:C
12、AN的报文格式说明(按CAN1.2规范定义)。-B部分:标准格式和扩展格式的说明。2.1.1 CAN的分层结构在CAN V2.0A里,CAN被细分为三个层次:对象层、传输层、物理层。而在PartB中,CAN被细分为两个层次:数据链路层(逻辑链路控制子层LLC、 媒体访问控制子层MAC)、物理层。2.1.2报文传输(1)帧类型报文传输由5种类型的帧所表示和控制,它们分别是数据帧、远程帧、错误帧、 过载帧和帧间隔,其用途如表2.1所列。表2.1帧的类型及用途帧类型帧用途数据帧用于发送节点向接受节点传送数据,是使用最多的帧类型远程帧用于接受节点向某个发送节点请求数据错误帧用于检测出通信错误(如校验错
13、误)时向其他节点发送通知过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时帧间隔用于将数据帧和远程帧与前面的帧分离开来1)数据帧数据帧由7个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC场、应 答场、帧结尾。数据帧各段的功能如表2.2所列。表2.2数据帧各段的功能段名段长度/位说明帧起始1表示数据帧开始,由单个显性位构成,在总线空闲时才允许发送仲标准12表示该帧的优先级,由11位ID码和1位远程帧标志位(RTR)裁帧组成场扩展32表示该帧的优先级,由29位ID码、1位替代远程帧请求位(SRR)、帧1位标志位扩展位(IDE)和1位远程帧标志位(RTR)组成控制场6表示数据段
14、数据长度的编码和保留位数据场08数据内容,每字节为8位,具体字节数在控制段中体现CRC场16检查帧的传输错误,范围包括从帧起始到数据段的所有内容(不包括填充位)ACK场2其他接受节点确认该帧被正常接收帧结束7表示数据帧结束2)远程帧远程帧由6个不同的位场组成:帧起始、仲裁场、控制场、CRC场、应答场、帧 结尾。3)错误帧错误帧由两个不同的场组成。第一个场用作为不同站提供的错误标志的叠加。第 二个场是错误界定符。错误标志有两种形式,主动错误标志和被动错误标志。错误界 定符包括8个“隐性”的位。4)过载帧过载帧包括两个位场:过载标志和过载界定符。5)帧间空间数据帧(或远程帧)与其前面帧的隔离是通过
15、帧间空间实现的,无论其前面的帧 为何类型(数据帧、远程帧、错误帧、过载帧)。所不同的是,过载帧与错误帧之前 没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。(2)发送器/接收器的定义发送器:产生报文的单元被称之为报文的“发送器”。此单元保持作为报文发送 器直到总线出现空闲或此单元失去仲裁为止。接收器:如果有一单元不作为报文的发送器并且总线也不空闲,则这一单元就被 称之为报文的“接收器”。2.1.3报文检验校验报文是否有效的时间点,对于发送器与接收器是各不相同的。对于发送器:如果直到帧的末尾位均没有错误,则此报文对于发送器有效。如果 报文破损,则报文会根据优先权自动重发。为了能够和其他信息竞
16、争总线,重新传输 必须在总线空闲时启动。对于接收器:如果直到一最后的位(除了帧末尾位)均没有错误,则报文对于接收 器有效。2.1.4编码位流编码:帧的部分,诸如帧起始、仲裁场、控制场、数据场以及CRC序列,均 通过位填充的方法编码。数据帧或远程帧(CRC界定符、应答场和帧末尾)的剩余位场形式相同,不填充。错误帧和过载帧的形式也相同,但并不通过位填充的方法进行编码。报文里的位流采用不归零编码(NRZ),这就是说,在整个位时间里,位电平要么 为“显性”,要么为“隐性”。2.1.5错误处理错误检测:有5种不同的错误类型(这5种错误不会相互排斥):位错误、填充错 误、CRC错误、形式错误、应答错误错误
17、标志:检测到错误条件的站通过发送错误标志指示错误。2.1.6故障界定至于故障界定,单元的状态可能为以下三种之一:错误主动:可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。错误被动:不允许发送主动错误标志。总线关闭:不允许在总线上有任何的影响(比如,关闭输出驱动器)。2.1.7位定时要求标称位速率:标称位速率为一理想的发送器在没有重新同步的情况下每秒发送的 位数量。标称位时间:标称位时间二1 /标称位速率可以把标称位时间划分成几个不重叠的时间片段,它们是:同步段、传播时间段、 相位缓冲段1、相位缓冲段2。2.1.8报文滤波在CAN2. 0B中,还增加了有关报文滤波的定义。报文滤波取决于
18、整个识别符。允许在报文滤波中将任何的识别符位设置为“不考 虑”的可选屏蔽寄存器,可以选择多组的识别符,使之被映射到隶属的接收缓冲器里。如果使用屏蔽寄存器,它的每一个位必须是可编程的,即,他们能够被允许或禁 止报文滤波。屏蔽寄存器的长度可以包含整个识别符,也可以包含部分的识别符。2.1.9振荡器容差由于给定的最大的振荡器,其容差为1. 58%,因此凭经验可将陶瓷谐振器使用 在传输率高达125kbit / s的应用罩。为了满足CAN协议的整个总线速度范围,需要使用晶振。具有最高振荡准确度要 求的芯片,决定了其他节点的振荡准确度。2.2 CAN 控制器 SJA1000下位机的CAN总线网络接口使用P
19、hilips公司的SJA1000芯片,SJA1000是一个 独立的CAN控制器,具有一系列先进的功能,适合于多种应用,特别在系统优化、诊 断和维护方面非常重要。SJA1000具有完成CAN总线通信协议所要求的全部特性,它与独立CAN总线控制 的PCA82C200完全兼容,并有支持CAN2.0B协议、扩展接收缓冲器、增强错误处理能 力和增强验收滤波功能等新增功能。SJA1000可以直接进行CAN总线互联,而PC机作为上位机,是通过USB电缆连接 到CAN接口卡上的,这里我们使用的是普创电子的CANUSBII工业级双路智能接口 卡。该接口卡中的CAN总线数据收发也是由SJA1000CAN控制器和8
20、2C250CAN收发器 完成的,主机通过USB电缆来访问CAN控制器,从而实现数据通信。2.3本章小结本章主要介绍了 CAN总线通信系统上位机通信软件的设计所涉及的基本知识,包 括CANbus规范和CAN控制器SJA1000,有了这些知识,才能保证软件设计得以顺利 开展。3开发环境介绍3.1开发环境CAN总线通信系统上位机通信软件的设计应具有直观的窗口外观,丰富、人性化 的友好界面,便于操作和维护。而Visual C+6.0编译器提供了强大的辅助工具集, 利用这些工具可以很方便的设计出本课题所要求的应用程序。利用Visual C+6.0开发应用程序时,主要有两种方法,一种是利用Windows本
21、 身提供的API函数编程,另一种是直接使用Miscrosoft提供的MFC类库编程。本课 题使用的是MFC类库编程。MFC类库是由Microsoft公司提供的用来编写Windows应用程序的C+类集合, 在该类集合封装了 Windows大部分编程对象和与它们相关的操作。MFC为用户提供了 一个Windows环境下的应用程序框架和创建应用程序的组件,使用这个应用程序框架 和组件,可以轻松地编写出各种不同的应用程序。在Visual C+6.0中,可以利用MFC AppWizard应用程序向导快速地创建一个标 准的Windows应用程序框架,只需在此基础上添加实现特定功能的程序代码就能编写 出相应的
22、Windows应用程序。该应用程序框架类型中包含了三种最基本、最常用的应 用程序类型:单文档、多文档和基于对话框的应用程序。基于对话框应用程序功能简 单、结构紧凑,执行速度快,程序源代码少,开发调试容易,符合本课题需求,故本 课题采用基于对话框应用程序。3.2 CANUSBI / II 智能 CAN 接口卡3.2.1产品概述CANUSBI /II智能CAN接口卡兼容USB1.1和USB2.0总线,带有1路/2路CAN 接口的工业级智能型CAN数据接口卡。采用CANUSBI /1智能CAN接口卡,PC可以 通过USB总线连接至CAN网络,构成实验室、工业控制、智能小区等CAN网络领域中 数据处理
23、、数据采集。CANUSBI /II智能CAN接口卡是CAN产品开发、CAN数据分析的强大工具;同时, 具有体积小、即插即用等特点,也是便携式系统用户的最佳选择。3.2.2智能CAN接口卡硬件接口描述CANUSBI /1智能CAN接口卡集成2路CAN通道,每一路通道都是独立的,可 以用于连接一个CANbus网络或者CANbus接口的设备。CANUSBI /II智能CAN 接口卡布局如下:2路CAN-bus通道由1个10Pin接线端子引出,接线端子的引脚详细定义如下表 所示:表3.1 CANUSBI /H接口卡的CANbus信号分配引脚端口名称功能1CAN1CANL1CANL1信号线2R1-终端电
24、阻(内部连接到CANL1)3PG屏蔽线4R1+终端电阻(内部连接到CANH1)5CANH1CANH1信号线6CAN0CANL0CANL0信号线7R0-终端电阻(内部连接到CANL0)8PG屏蔽线9R0+终端电阻(内部连接到CANH0)10CANH0CANH0信号线3.3本章小结本章介绍了 CAN总线通信系统上位机通信软件的开发环境和CANUSBI /II智能 CAN接口卡。为了获得直观的窗口外观,丰富、人性化的友好界面,本课题利用Visual C+6.0下的MFC类库开发程序。4 CAN通信软件设计4.1驱动程序安装CANUSBI /1智能CAN接口卡使用USB直接供电并提供智能驱动安装包,安
25、装 步骤如下:点击产品光盘的“ CANUSBDrivers ”目录下的安装包安装驱动;将CANUSBI /1智能CAN接口卡通过USB电缆连接到计算机,提示发现新硬件, 选择自动安装软件即可。4.2 CAN接口卡函数库说明4.2.1函数库数据结构定义(1)初始化CAN数据类型 typedef struct _INIT_CONFIG( DWORD AccCode;/验收码DWORD AccMask;/屏蔽码DWORD Reserved;/保留UCHAR Filter;/滤波方式UCHAR Baudrate;/波特率UCHAR Mode;/模式 VCI_INIT_CONFIG,*PVCI_INIT
26、_CONFIG;(2)CAN信息帧的数据类型typedef struct _VCI_CAN_OBJ( BYTE CANIndex;/接受的数据帧来自哪个通道=0时CAN0通道=1时CAN1通道DWORD ID;/报文 IDBYTE SendType;/发送帧类型,=0时为正常发送,二1时为自发自收,只有在此帧 为发送帧时有意义。BYTE ExternFlag;/是否是扩展帧BYTE RemoteFlag;/是否是远程帧BYTE DataLen; /数据长度(EnableWindow(FALSE);(5) 更新对话框内容,把变量中的数据输出到控件,故在OnInitDialog()函数中添加以下代
27、码:UpdateData(false);44软件功能实现4.4.1设备连接要求点击“连接”按钮,上位机通信软件与CANUSBI /II智能CAN接口卡连接, 并且显示连接成功与否。若连接失败,弹出警告框“打开设备失败!”,若连接成功, 分别在列表框IDC_LIST_INFO0和IDC_LIST_INFO1显示“CAN0连接成功”“CAN1连 接成功”。在TestDlg.h头文件里添加变量:public:int m_devnum;/设备序号int m_cannum;/can 通道编号void CAN0ShowInfo(CString str, int code);/CAN0 接收显示控制函数双击
28、连接按钮,系统自动添加消息响应函数OnButtonConnect0(),添加代码, 实现用户单击“连接”按钮,完成设备的连接功能。定义初始化CAN的数据类型的结构体:VCI_INIT_CONFIG init_config;如果CAN已经打开,调用 VCI_CloseDevice(m_devnum)函数关闭设备。调用 GetCurSel()函数获取设备序号:devnum=m_ComboDevindex.GetCurSel();如果(VCI_OpenDevice(devnum)=0,则设备打开失败,调用MessageBox函数弹 出消息框,警告打开设备失败!,否则CAN0和CAN1连接成功,分别在
29、列表框 IDC_LIST_INFO0 和 IDC_LIST_INFO1 显示。此时,按钮IDC_BUTTON_CONNECT0的标题“连接”变为“断开”,“启动通道” 按钮变为有效,故添加以下代码:GetDlgItem(IDC_BUTTON_CONNECT0)-SetWindowText(断开”);GetDlgItem(IDC_BUTTON_CONNECT1)-EnableWindow(TRUE);图4.3设备连接流程图4.4.2设备启动要求点击“启动通道”按钮,CAN0通道和CAN1通道同时启动,并显示启动成功 与否。若启动通道失败,弹出消息框,发出警告,若启动通道成功,分别在列表框 IDC
30、_LIST_INFO0 和 IDC_LIST_INFO1 显示“CAN0 启动成功” “CAN1 启动成功”。双击启动通道”按钮,系统自动添加消息响应函数OnButtonConnect1(),添加 代码,实现用户单击“启动通道”按钮,完成通道CAN0和CAN1的启动功能。如果 VCI_InitCAN(m_devnum,0,&init_config)!二true,则通道 CAN0 初始化失败, 如果 VCI_InitCAN(m_devnum,1,&init_config)!二true,则通道 CAN1 初始化失败,并 立即调用VCI_CloseDevice(m_devnum)函数,关闭设备如 果
31、 VCI_StartCAN(m_devnum,0)!=true,则通道 CAN0 启动 失败,如果 VCI_StartCAN(m_devnum,1)!=true,则通道CAN1启动 失败,并立 即调用 VCI_CloseDevice(m_devnum)函数,关闭设备。如果通道CAN0和CAN1启动成功,则 禁用启动通道按钮:GetDlgItem(IDC_BUTTON_CONNECT1)-EnableWindow(FALSE);图4.4设备启动流程图4.4.3设备复位要求点击“复位CAN0”按钮,复位通道CAN0,点击“复位CAN1 ”按钮,复位通 道CAN1,成功则分别在列表框IDC_LIST_INFO0和IDC_LIST_INFO1显示“复位成功”, 失败则列表框IDC_LIST_INFO0和IDC_LIST_INFO1显示“复位失败”。CAN0通道:双击复位CAN0”按钮,系统自动添加消息响应函数OnButtonResetcan0(),添 加代码,实现用户单击“复位CAN0”按钮,完成通道CAN0的复位功能。如果VCI_ResetCAN(m_devnum,0)=1,则复位成功,否则,复位失败,将结果显 示在列表框IDC_LIST_INFO0