CAN总线通信系统上位机通信软件的设计资料.docx
《CAN总线通信系统上位机通信软件的设计资料.docx》由会员分享,可在线阅读,更多相关《CAN总线通信系统上位机通信软件的设计资料.docx(36页珍藏版)》请在冰豆网上搜索。
CAN总线通信系统上位机通信软件的设计资料
毕业设计说明书(论文)中文摘要
CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是国际上应用最广泛的现场总线之一。
本文对CAN总线的研究背景、发展现状及研究意义进行了论述,简单介绍了CAN总线相关技术规范,并且基于VC++设计了CAN通信软件。
软件实现的功能包括:
正确识别CAN设备并打开CAN通道;可封装CAN报文进行发送;可接收CAN数据帧,并能对接收的数据帧进行解析;具有过滤功能,可不显示指定的协议帧。
最后,对软件功能进行测试并发布。
关键词CAN总线VC++通信软件
毕业设计说明书(论文)外文摘要
TitleDesignofPCCommunicationSoftware
BasedonCANbusCommunicationSystem
Abstract
CANisshortforControllerAreaNetwork,theworld'smostwidelyusedfieldbus.CAN-busismostlyusedinnetworkformationofindustrialcontrolsystemsandvechilecontrolsystem.Background,developmentstatusandtheresearchsignificanceofCANbusarediscussed,anoutlineoftheCAN-busrelevanttechnicalspecificationsisgiven,andtheCANcommunicationsoftwarebasedonVisualC++isdesigned.Functionsimplementedinclude:
CorrectlyidentifytheCANdeviceandopentheCANchannels;CANmessagescanbesentencapsulated;CANdataframescanbereceived,andisabletoparsethereceiveddataframes;Hasafilteringfunction,donotdisplaythespecifiedprotocolframe.Testandreleasethesoftware.
KeywordsCAN-busVC++Communicationsoftware
目次
1绪论
现场总线,就是应用于工业现场,采用总线方式连接多个设备,用于传输工业现场各种数据的一类通信系统[1]。
CAN(ControllerAreaNetwork)总线是现场总线的一个分支,因其具有很高的可靠性和性能价格比,已经成为国际标准,在工业过程监控设备的互连方面得到广泛应用,受到工业界的广泛重视,并已被公认为几种最有前途的现场总线之一。
1.1研究背景
随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。
由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:
控制多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。
分散式工业控制系统就是为适应这种需要而发展起来的。
这类系统是以微型机为核心,将5C技术——Computer(计算机技术)、Control(自动控制技术)、Communication(通信技术)、CRT(显示技术)和Change(转换技术)紧密结合的产物。
它在适应范围、可扩展性、可维护性以及抗故障能力等方面,较之分散型仪表控制系统和集中型计算机控制系统都具有明显的优越性。
典型的分散式控制系统有现场设备、接口与计算设备以及通信设备组成,现场总线(Fieldbus)就是在这种背景下产生的[2]。
1.2研究目的和意义
从19世纪发明汽车以来,人们就一直在乘坐的舒适性、安全性和操控性方面不停地对其进行改革和创新,车上的电子设备也越来越多。
这些电子设备大多是需要协同工作的,这就要求各部件之间能互相通信[1]。
为了解决汽车通信问题,CAN—bus应运而生,凭借可靠、实时、经济和灵活的特点,CAN总线很快在其他行业得到广泛应用,特别是在工业控制领域更是如鱼得水。
现在CAN—bus总线已经成为全球范围内最重要的现场总线之一,甚至引领着现场总线的发展。
工业控制系统涉及众多软、硬件模块,给程序的设计和调试带来一定难度。
尤其作为上、下位机间联系纽带的CAN总线通信部分,一旦在整个系统运行期间发生问题,若没有良好的人机界面和测试手段,将很难及时准确地找到并排除故障。
同样,在控制系统的研制过程中,为了尽可能地减少故障和缩小故障范围,也应设计相应的测试软件来具体负责CAN总线通信及接口部分的调试、运行任务。
故此,本课题就如何利用VC设计CAN总线测试软件进行介绍。
1.3国内外发展现状
自从Bosch与Intel公司于1986年正式发布CAN—bus通信方式,宝马(BMW)公司很快于1989年推出第一款使用CAN—bus通信的汽车,从此CAN—bus开始了其辉煌的历程:
(1)1990年,奔驰公司发布了第一辆使用CAN—bus的轿车,现在几乎每一辆新生产的汽车均装配有CAN—bus网络;
(2)1993年,CAN—bus总线被制定成为国际标准ISO11898(高速应用)和ISO11519(低速应用);(3)1994年,欧洲成立了CiA厂商协会,美洲成立了ODVA厂商协会,专门支持CAN—bus总线的两大应用层协议——CANopen协议与DeviceNet协议[3]。
在CiA的努力推广下,CAN技术在汽车电子控制系统、电梯控制系统、安全监控系统、医疗仪器、纺织机械、船舶运输等方面均得到了广泛的应用。
现已有400多家公司加入了CiA,CiA已成为全球应用CAN技术的权威。
国内在CAN总线方面的研究和应用于国外相比还存在明显的差距,体现在两个方面:
(1)国内在自主研究和开发汽车电子CAN网络方面尚处于试验和起步阶段,国内绝大部分的汽车还没有采用汽车总线设计;
(2)国内汽车合资企业不少已采用CAN总线技术,但核心技术掌握在外商手中。
为顺应世界汽车工业发展的趋势,我国也相应加强了对CAN总线的研究,并开发具有自主知识产权的CAN总线产品。
CAN技术已应用于家用电器和智能楼宇以及小区建设中。
随着无线技术的完善和将无线技术应用到CAN总线系统中研究的不断深入,可以乐观地预计,未来CAN总线技术的应用将无处不在,虚拟的CAN总线即将诞生[5]。
1.4论文结构安排
本文第一章介绍了CAN总线的研究背景和国内外发展现状,并介绍本课题研究的目的和意义。
第二章简单介绍了CAN总线通信规范和SJA1000控制器。
第三章简单介绍了开发环境和CAN接口卡。
第四章详细介绍了软件的设计过程,包括驱动安装、接口卡函数库说明、界面设计、功能分析与设计。
第五章介绍了软件的测试及程序的发布。
2CAN总线协议分析
2.1CAN-bus规范V2.0版本
CAN规范技术规范由两部分组成:
•A部分:
CAN的报文格式说明(按CAN1.2规范定义)。
•B部分:
标准格式和扩展格式的说明。
2.1.1CAN的分层结构
在CANV2.0A里,CAN被细分为三个层次:
对象层、传输层、物理层。
而在PartB中,CAN被细分为两个层次:
数据链路层(逻辑链路控制子层LLC、媒体访问控制子层MAC)、物理层。
2.1.2报文传输
(1)帧类型
报文传输由5种类型的帧所表示和控制,它们分别是数据帧、远程帧、错误帧、过载帧和帧间隔,其用途如表2.1所列。
表2.1帧的类型及用途
帧类型
帧用途
数据帧
用于发送节点向接受节点传送数据,是使用最多的帧类型
远程帧
用于接受节点向某个发送节点请求数据
错误帧
用于检测出通信错误(如校验错误)时向其他节点发送通知
过载帧
用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时
帧间隔
用于将数据帧和远程帧与前面的帧分离开来
1)数据帧
数据帧由7个不同的位场组成:
帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾。
数据帧各段的功能如表2.2所列。
表2.2数据帧各段的功能
段名
段长度/位
说明
帧起始
1
表示数据帧开始,由单个显性位构成,在总线空闲时才允许发送
仲裁场
标准帧
12
表示该帧的优先级,由11位ID码和1位远程帧标志位(RTR)组成
扩展帧
32
表示该帧的优先级,由29位ID码、1位替代远程帧请求位(SRR)、1位标志位扩展位(IDE)和1位远程帧标志位(RTR)组成
控制场
6
表示数据段数据长度的编码和保留位
数据场
0—8
数据内容,每字节为8位,具体字节数在控制段中体现
CRC场
16
检查帧的传输错误,范围包括从帧起始到数据段的所有内容(不包括填充位)
ACK场
2
其他接受节点确认该帧被正常接收
帧结束
7
表示数据帧结束
2)远程帧
远程帧由6个不同的位场组成:
帧起始、仲裁场、控制场、CRC场、应答场、帧结尾。
3)错误帧
错误帧由两个不同的场组成。
第一个场用作为不同站提供的错误标志的叠加。
第二个场是错误界定符。
错误标志有两种形式,主动错误标志和被动错误标志。
错误界定符包括8个“隐性”的位。
4)过载帧
过载帧包括两个位场:
过载标志和过载界定符。
5)帧间空间
数据帧(或远程帧)与其前面帧的隔离是通过帧间空间实现的,无论其前面的帧为何类型(数据帧、远程帧、错误帧、过载帧)。
所不同的是,过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。
(2)发送器/接收器的定义
发送器:
产生报文的单元被称之为报文的“发送器”。
此单元保持作为报文发送器直到总线出现空闲或此单元失去仲裁为止。
接收器:
如果有一单元不作为报文的发送器并且总线也不空闲,则这一单元就被称之为报文的“接收器”。
2.1.3报文检验
校验报文是否有效的时间点,对于发送器与接收器是各不相同的。
对于发送器:
如果直到帧的末尾位均没有错误,则此报文对于发送器有效。
如果报文破损,则报文会根据优先权自动重发。
为了能够和其他信息竞争总线,重新传输必须在总线空闲时启动。
对于接收器:
如果直到一最后的位(除了帧末尾位)均没有错误,则报文对于接收器有效。
2.1.4编码
位流编码:
帧的部分,诸如帧起始、仲裁场、控制场、数据场以及CRC序列,均通过位填充的方法编码。
数据帧或远程帧(CRC界定符、应答场和帧末尾)的剩余位场形式相同,不填充。
错误帧和过载帧的形式也相同,但并不通过位填充的方法进行编码。
报文里的位流采用不归零编码(NRZ),这就是说,在整个位时间里,位电平要么为“显性”,要么为“隐性”。
2.1.5错误处理
错误检测:
有5种不同的错误类型(这5种错误不会相互排斥):
位错误、填充错误、CRC错误、形式错误、应答错误
错误标志:
检测到错误条件的站通过发送错误标志指示错误。
2.1.6故障界定
至于故障界定,单元的状态可能为以下三种之一:
错误主动:
可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。
错误被动:
不允许发送主动错误标志。
总线关闭:
不允许在总线上有任何的影响(比如,关闭输出驱动器)。
2.1.7位定时要求
标称位速率:
标称位速率为一理想的发送器在没有重新同步的情况下每秒发送的位数量。
标称位时间:
标称位时间=1/标称位速率
可以把标称位时间划分成几个不重叠的时间片段,它们是:
同步段、传播时间段、相位缓冲段1、相位缓冲段2。
2.1.8报文滤波
在CAN2.0B中,还增加了有关报文滤波的定义。
报文滤波取决于整个识别符。
允许在报文滤波中将任何的识别符位设置为“不考虑”的可选屏蔽寄存器,可以选择多组的识别符,使之被映射到隶属的接收缓冲器里。
如果使用屏蔽寄存器,它的每一个位必须是可编程的,即,他们能够被允许或禁止报文滤波。
屏蔽寄存器的长度可以包含整个识别符,也可以包含部分的识别符。
2.1.9振荡器容差
由于给定的最大的振荡器,其容差为1.58%,因此凭经验可将陶瓷谐振器使用在传输率高达125kbit/s的应用罩。
为了满足CAN协议的整个总线速度范围,需要使用晶振。
具有最高振荡准确度要求的芯片,决定了其他节点的振荡准确度。
2.2CAN控制器SJA1000
下位机的CAN总线网络接口使用Philips公司的SJA1000芯片,SJA1000是一个独立的CAN控制器,具有一系列先进的功能,适合于多种应用,特别在系统优化、诊断和维护方面非常重要。
SJA1000具有完成CAN总线通信协议所要求的全部特性,它与独立CAN总线控制的PCA82C200完全兼容,并有支持CAN2.0B协议、扩展接收缓冲器、增强错误处理能力和增强验收滤波功能等新增功能。
SJA1000可以直接进行CAN总线互联,而PC机作为上位机,是通过USB电缆连接到CAN接口卡上的,这里我们使用的是普创电子的CANUSB—Ⅱ工业级双路智能接口卡。
该接口卡中的CAN总线数据收发也是由SJA1000CAN控制器和82C250CAN收发器完成的,主机通过USB电缆来访问CAN控制器,从而实现数据通信。
2.3本章小结
本章主要介绍了CAN总线通信系统上位机通信软件的设计所涉及的基本知识,包括CAN—bus规范和CAN控制器SJA1000,有了这些知识,才能保证软件设计得以顺利开展。
3开发环境介绍
3.1开发环境
CAN总线通信系统上位机通信软件的设计应具有直观的窗口外观,丰富、人性化的友好界面,便于操作和维护。
而VisualC++6.0编译器提供了强大的辅助工具集,利用这些工具可以很方便的设计出本课题所要求的应用程序。
利用VisualC++6.0开发应用程序时,主要有两种方法,一种是利用Windows本身提供的API函数编程,另一种是直接使用Miscrosoft提供的MFC类库编程。
本课题使用的是MFC类库编程。
MFC类库是由Microsoft公司提供的用来编写Windows应用程序的C++类集合,在该类集合封装了Windows大部分编程对象和与它们相关的操作。
MFC为用户提供了一个Windows环境下的应用程序框架和创建应用程序的组件,使用这个应用程序框架和组件,可以轻松地编写出各种不同的应用程序。
在VisualC++6.0中,可以利用MFCAppWizard应用程序向导快速地创建一个标准的Windows应用程序框架,只需在此基础上添加实现特定功能的程序代码就能编写出相应的Windows应用程序。
该应用程序框架类型中包含了三种最基本、最常用的应用程序类型:
单文档、多文档和基于对话框的应用程序。
基于对话框应用程序功能简单、结构紧凑,执行速度快,程序源代码少,开发调试容易,符合本课题需求,故本课题采用基于对话框应用程序。
3.2CANUSB—Ⅰ/Ⅱ智能CAN接口卡
3.2.1产品概述
CANUSB—Ⅰ/Ⅱ智能CAN接口卡兼容USB1.1和USB2.0总线,带有1路/2路CAN接口的工业级智能型CAN数据接口卡。
采用CANUSB—Ⅰ/Ⅱ智能CAN接口卡,PC可以通过USB总线连接至CAN网络,构成实验室、工业控制、智能小区等CAN网络领域中数据处理、数据采集。
CANUSB—Ⅰ/Ⅱ智能CAN接口卡是CAN产品开发、CAN数据分析的强大工具;同时,具有体积小、即插即用等特点,也是便携式系统用户的最佳选择。
3.2.2智能CAN接口卡硬件接口描述
CANUSB—Ⅰ/Ⅱ智能CAN接口卡集成2路CAN通道,每一路通道都是独立的,可以用于连接一个CAN—bus网络或者CAN—bus接口的设备。
CANUSB—Ⅰ/Ⅱ智能CAN接口卡布局如下:
图3.1CANUSB—Ⅰ/Ⅱ智能CAN接口卡外围端子
2路CAN—bus通道由1个10Pin接线端子引出,接线端子的引脚详细定义如下表所示:
表3.1CANUSB—Ⅰ/Ⅱ接口卡的CAN—bus信号分配
引脚
端口
名称
功能
1
CAN1
CANL1
CANL1信号线
2
R1-
终端电阻(内部连接到CANL1)
3
PG
屏蔽线
4
R1+
终端电阻(内部连接到CANH1)
5
CANH1
CANH1信号线
6
CAN0
CANL0
CANL0信号线
7
R0-
终端电阻(内部连接到CANL0)
8
PG
屏蔽线
9
R0+
终端电阻(内部连接到CANH0)
10
CANH0
CANH0信号线
3.3本章小结
本章介绍了CAN总线通信系统上位机通信软件的开发环境和CANUSB—Ⅰ/Ⅱ智能CAN接口卡。
为了获得直观的窗口外观,丰富、人性化的友好界面,本课题利用VisualC++6.0下的MFC类库开发程序。
4CAN通信软件设计
4.1驱动程序安装
CANUSB—Ⅰ/Ⅱ智能CAN接口卡使用USB直接供电并提供智能驱动安装包,安装步骤如下:
点击产品光盘的“\CANUSB\Drivers”目录下的安装包安装驱动;
将CANUSB—Ⅰ/Ⅱ智能CAN接口卡通过USB电缆连接到计算机,提示发现新硬件,选择自动安装软件即可。
4.2CAN接口卡函数库说明
4.2.1函数库数据结构定义
(1)初始化CAN数据类型
typedefstruct_INIT_CONFIG
{DWORDAccCode;//验收码
DWORDAccMask;//屏蔽码
DWORDReserved;//保留
UCHARFilter;//滤波方式
UCHARBaudrate;//波特率
UCHARMode;//模式
}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;
(2)CAN信息帧的数据类型
typedefstruct_VCI_CAN_OBJ
{BYTECANIndex;//接受的数据帧来自哪个通道=0时CAN0通道=1时CAN1通道
DWORDID;//报文ID
BYTESendType;//发送帧类型,=0时为正常发送,=1时为自发自收,只有在此帧为发送帧时有意义。
BYTEExternFlag;//是否是扩展帧
BYTERemoteFlag;//是否是远程帧
BYTEDataLen;//数据长度(<=8,即Data的长度
BYTEData[8];//报文的数据
}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
4.2.2接口函数说明
①BOOL__stdcallVCI_OpenDevice(DWORDDevIndex);//打开设备
②BOOL__stdcallVCI_CloseDevice(DWORDDevIndex);//关闭设备
③BOOL__stdcallVCI_InitCAN(DWORDDevIndex,DWORDCANIndex,PVCI_INIT_CONFIGInitConfig);//初始化CAN
④BOOL__stdcallVCI_StartCAN(DWORDDevIndex,DWORDCANIndex);//启动CAN设备
⑤BOOL__stdcallVCI_ResetCAN(DWORDDevIndex,DWORDCANIndex);//复位CAN设备
⑥BOOL__stdcallVCI_Transmit(DWORDDevIndex,DWORDCANIndex,VCI_CAN_OBJ*SendData);//发送一帧数据
⑦DWORD__stdcallVCI_Receive(DWORDDevIndex,PVCI_CAN_OBJpReceive,DWORDLen,DWORDWaitTime);//接收数据
⑧BOOL__stdcallVCI_ReadDevSn(DWORDDevIndex,PCHARDevSn);//读取序列号
其中:
DevIndex设备索引号,有一个设备时索引号为0,有两个可以为0或1;
CANIndex第几路CAN;
InitConfig初始化参数结构;
SendData指向信息帧结构体;
pReceive用来接收的数据帧结构体数组的首指针;
Len读取多少帧的数据;
WaitTime=0时为无限等待;>0时等待超时时间,以毫秒为单位;
DevSn序列号;
返回值为1表示操作成功,0表示操作失败;
4.2.3接口函数库使用方法
首先,把库函数文件都放在工作目录下。
总共有四个文件CAN_TO_USB.h,CAN_TO_USB.lib,SiUSBXp.dll,CAN_TO_USB.dll。
VC调用动态库的方法:
(1)在.cpp中包含CAN_TO_USB.h头文件;
(2)在工程文件中加入CAN_TO_USB.lib文件。
4.2.4接口函数库使用流程
图4.1接口函数库使用流程
4.3界面设计
CAN总线通信系统上位机通信软件的设计目标是对CAN总线的运行状态和通信能力进行有效的测试,要求能正确识别CAN设备并打开CAN通道,可封装CAN报文进行发送,可接收CAN数据帧,并能对数据帧进行解析,在数据列表中显示报文的相关参数信息(如:
帧ID、帧格式、帧类型、DLC值以及帧数据等参数),并具有过滤功能。
具体有以下几个功能模块:
设备连接、设备启动、设备复位、帧封装与发送、帧接收与解析以及清除显示。
4.3.1界面布局设计
打开MFCAppWizard(exe)创建一个基于对话框的应用程序,项目名为Test。
打开对话框,按照软件功能要求用控件编辑器添加相应控件,设置控件属性,打开类向导,为界面上各控件添加对应的成员变量。
设计完成后的界面如图3所示。
表4.1列出了CAN0通道各个控件属性及成员变量的设置。
图4.2CAN总线通信系统上位机通信软件界面设计
表4.1CAN0通道控件属性及成员变量的设置
控件名
控件ID
标题
变量类型
变量名
静态文本
IDC_STATIC
设备序号
组合框
IDC_COMBO_DEVINDEX
CComboBox
m_ComboDevindex
按钮
IDC_BUTTON_CONNECT0
连接
按钮
IDC_BUTTON_CONNECT1
启动通道
按钮
IDC_BUTTON_RESETCAN0
复位CAN
按钮
IDC_BUTTON_SEND0
发送
按钮
IDC_BUTTON_CLEAR0
清除显示
组框
IDC_STATIC
初始化CAN0参数
静态文本
IDC_STATIC
滤波方式:
组合框
IDC_COMBO_FILTERTYPE0
CComboBox
m_ComboFilterType0
静态文本
IDC_STATIC
波特率:
组合框
IDC_COMBO_BAUDRATE0
CComboBox
m_ComboBaudrate
静态文本
IDC_STATIC
模式: