组态环境下对CAN232接口卡驱动程序的设计.doc_第1页
组态环境下对CAN232接口卡驱动程序的设计.doc_第2页
组态环境下对CAN232接口卡驱动程序的设计.doc_第3页
组态环境下对CAN232接口卡驱动程序的设计.doc_第4页
组态环境下对CAN232接口卡驱动程序的设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关键字:CAN总线、CAN232智能接口卡、引言 随着工业测控技术和生产自动化技术的不断进步,传统的RS-232、RS-485和CCITTV.24通信技术已不能适应现代化的工业控制需要,而现场总线(Fieldbus)以其低廉的价格、可靠的性能而逐步成为新型的工业测控领域的通信技术。现场总线是应用在生产现场,在微机化测量控制设备之间实现双向串行多节点数字通信的系统,是一种开放式、数字化、多点通信的底层控制网络。汇集了计算机技术、网络通信技术和自动控制技术(3C)的现场总线技术,从20世纪80年代开始发展起来,并逐步在制造业、流程工业、交通、楼宇等方面的自动化系统中得到了广泛的重视和应用。现场总线主要有以下几种类型:基金会现场总线(FF)、LonWorks、ProfiBus、CAN、HART,而其中CAN因为具有高性能、高可靠性以及独特的设计而越来越受到关注,现已形成国际标准,被公认为几种最有前途的现场总线之一。由于CAN总线所具有的突出优点,应用范围越来越广泛,总线与计算机网络的通讯也成为一个大家很感兴趣的课题。计算机通过CAN232智能接口卡与CAN总线进行通讯便是其中的一种方式。本章1:CAN的基本知识1.1:什么是CAN CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。CAN是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10km时,CAN仍可提供高达50Kbit/s的数据传输速率。它是一种有效支持分布式控制或实时控制的串行通讯网络。 1.2:CAN-BUS的发展史在 1980 年的早些时候,Bosch 公司的工程师就开始论证当时的串行总线用于客车系统的可行性。因为没有一种现成的网络方案能够完全满足汽车工程师们的要求,于是,在1983年初,Uwe Kiencke开始研究一种新的串行总线。新总线的主要方向是增加新功能、减少电气连接线,使其能够用于产品,而非用于驱动技术。来自 Mercedes-Benz 的工程师较早制定了总线的状态说明,而 Intel 也准备作为半导体生产的主要厂商。当时聘请的顾问之一是来自于德国 Applied Scienc大学教授 WolfhardLawrenz 博士给出了新网络方案的名字“Controller Area Network”,简称 CAN。来自Karlsruhe大学的教授Horst Wettstein博士也提供了理论支持。1986年2月,在底特律的汽车工程协会大会上,由Bosch公司研究的新总线系统被称为“汽车串行控制器局域网”。Uwe Kiencke、 Siegfried Dais 和 Martin Litschel 分别介绍了这种多主网络方案。此方案基于非破坏性的仲裁机制,能够确保高优先级报文的无延迟传输。并且,不需要在总线上设置主控制器。此外,CAN 之父上述几位教授和 Bosch 公司的 Wolfgang Borst、Wolfgang Botzenhard、Otto Karl、Helmut Schelling、Jan Unruh 已经实现了数种在 CAN 中的错误检测机制。该错误检测也包括自动断开故障节点功能,以确保能继续进行剩余节点之间的通讯。传输的报文并非根据报文发送器/接收器的节点地址识别(几乎其它的总线都是如此),而是根据报文的内容识别。同时,用于识别报文的标识符也规定了该报文在系统中的优先级。随着CAN-BUS的发展和应用范围的不断扩大,各种方案层出不穷,各厂家亟需将其标准化。于是,在1990年,Bosch CAN规范(CAN 2.0 版)被提交给国际标准化组织。在数次行政讨论之后,应一些主要的法国汽车厂商要求,增加了“VehicleArea Network(VAN)”内容,并于1993年11月出版了CAN 的国际标准 ISO11898。除了 CAN 协议外,它也规定了最高至 1Mbps 波特率时的物理层。同时,在国际标准 ISO11519-2 中也规定了CAN数据传输中的容错方法。1995 年,国际标准 ISO11898 进行了扩展,以附录的形式说明了29位 CAN 标识符。但所有出版的 CAN 规范均包含错误或者不完整。因此,为避免出现不兼容的 CAN 应用,Bosch 公司一直在进行验证 CAN 芯片是否基于Bosch 的CAN参考模型的工件。当前,修订的CAN 规范正在标准化中。ISO11898-1 称为“CAN 数据链路层”,ISO11898-2 称为“非容错 CAN 物理层”,ISO11898-3 称为“容错 CAN 物理层”。目前,CAN 协议仍处在改进之中。从2000年开始,一个由数家公司组成的 ISO任务组织定义了一种时间触发CAN报文传输的协议。专家将此协议定义为“时间触发通讯的CAN(TTCAN)”,计划在将来标准化为 ISO11898-4。这个CAN 的扩展已在硅片上实现,不仅可实现闭环控制下支持报文的时间触发传输,而且可以实现CAN的x-by-wire应用。因为CAN协议并未改变,所以,在同一个的物理层上,既可以实现传输时间触发的报文,也可以实现传输事件触发的报文。1.3:CAN的特点CAN 具有十分优越的特点,使人们乐于选择。这些特性包括:l CAN时到目前为止唯一有国际标准的现场总线;l CAN为多主方式工作,网络上任一节点均可在任意时刻主动向其它节点发送信息,而不分主从;l 在报文笔标识符上,CAN上的节点分成不同的优先级,可满足不同的实时要求;l CAN采用非破坏总线仲裁技术,即使在网络负担很重的情况下也不会出现网络瘫痪情况;l CAN节点只需通过对报文的标识符滤波即可实现点对点、一点对多点及全局广播等几种方式传送接受数据;l CAN的直接通信距离最远可达10km(速率5kbps以下),通信速率最高可达1Mbps(此时通信距离最长为40m);l CAN上的节点数主要取决于总线驱动电路,目前可达110个;l 报文采用段帧结构,传输时间短,受干扰概率低,保证了数据出错率极低;l CAN的每帧信息都CRC校验及其它检错措施,具有极好的检错效果;l CAN的通信介质可为双绞线、同轴电缆或光线,选择灵活;l CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其它节点的操作不受影响;l CAN总线具有较高的性能价格比。1.4:CAN总线的应用CAN卓越的特性、极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此越来越受到重视,并被公认为最有前途的现场总线。CAN技术在汽车电控制系统系统、电梯控制系统、安全监控系统、医疗仪器、纺织机械、船舶运输等方面均得到了广泛的应用。2:CAN232智能CAN接口卡2.1:外观2.2:功能特点 CAN232 属于接口产品中一种低价、易用的 CAN开发工具。PC 只需经 RS232接口简单连接,即可实现CAN数据通讯,进行CAN信息帧的接收、发送。 CAN232接口卡也可以直接应用到嵌入式系统中,可在不改变已有硬件结构的情况下使嵌入式产品具有 CAN 通讯接口。这在已经量产的产品中应用,将更具有成本优势。 CAN232 接口卡上自带光电隔离模块,使CAN232接口卡避免由于地环流的损坏,增强系统在恶劣环境中使用的可靠性。CAN232智能 CAN 接口卡配有可在 Win9X/Me、Win2000/XP 下工作的驱动程序,并包含详细的应用例程。2.3:工作原理图2.2.1 CAN232 原理框图CAN232智能CAN接口卡的工作原理如上图所示。CAN 总线数据收发由CAN控制器、CAN收发器完成;RS232接口上的数据经过电平转换后由微处理器处理。系统的核心微处理器负责实现协议控制与数据转换。为了提高系统的抗干扰能力,在CAN控制器CAN收发器之间增加了光电隔离电路。隔离电路部分自带 DC/DC 转换模块,无需外接电源。2.4:功能参数l PC接口:标准RS232接口;l CAN控制器:PHILIPS P87C591;l CAN收发器:PHILIPS PCA82C250l 数据传送速率:CAN总线速率可编程,范围在 10Kbit/s1Mbit/s 内l CAN通讯接口DB9针型插座,符合DeviceNET 和 CANopen 标准;l CAN协议:支持CAN2.0A和CAN2.0B协议,接口规范符合ISO/IS 11898;l 数据缓冲区:256字节CAN接收FIFO队列;l RS232通讯速率:用户可设置RS232通讯速率,最高可达57600 bps;l 最高帧流量:300 帧/秒();l 光电隔离耐压:1000VDC;l 工作环境温度:070;l 运行环境:Win9X/Me、Win2000/XP 操作系统;2.5: 软件支持CAN232 智能 CAN 接口卡随机提供功能强大的接口函数库文件(ControlCAN.h、ControlCAN.lib、ControlCAN.dll),支持在 VC、VB、C+、Delphi 等开发环境下开发用户自己的应用程序,工作在Win9X/Me、Win2000/XP 等操作系统下,实现 CAN 协议 CAN2.0A 和 CAN2.0B 规范(PeliCAN)的数据通讯。3设备安装3.1.硬件安装使用随机配套的RS232通讯电缆连接PC的COM口与CAN232接口卡的COM口,然后,连接专用稳压电源(9V/400mA)。此时,红色的电源指示灯POWER点亮,表示CAN232已处于工作状态,等待执行指令。运行配套的CAN232测试工具TEXT232CAN,初始化COM工作参数,然后点击“连接”按钮。此后,即可设置CAN网络工作参数,进行CAN数据通讯。CAN232接口卡工作时,当绿色指示灯COM闪烁,表示CAN232接口卡正与PC进行数据通讯;当绿色指示灯CAN闪烁,表示CAN232接口卡正与CAN网络进行数据通讯。 3.2DB9针型插座引脚定义 CAN232智能CAN接口卡具有1个CAN通道,通过1个DB9针型插座CZ1与实际的CAN网络进行连接。CZ1的管脚信号定义如表3.1所示。此管脚定义符合DeviceNET和CANopen标准。表3.1 CAN连接器DB9针型插座引脚号信号功能2CAN_LCAN_L信号线7CAN_HCAN_H信号线3、6GND参考地5CAN_SHIELD屏蔽线1、4、8、9空未用 用户可以通过选配的DB9_OPEN5转换,将CZ1的信号连接至引脚的DeviceNET或CANopen网络。下面以连接至DeviceNET网络为例,介绍OPEN5插座的输出信号,如图3.1所示。图 3.1 DB9_OPEN5 连接器 3.3.信号指示灯 CAN232智能CAN接口卡具有3个LED来指示接口卡的运行状态,具体功能如下:表4.2 LED状态说明指示灯状态指示状态POWER红色系统电源指示COM绿色RS232通讯状态CAN绿色CAN通讯状态 3.4.CAN总线连接 图3.2 CAN网络结构 为了增强CAN通讯的可靠性,CAN总线网络的两个端点通常要加入终端匹配电阻,如图4.1所示。终端电阻的大小有传输电缆的特性所决定。例如双绞线的特性阻抗为120,则总线上的两个端点也应集成120的终端电阻。 CAN232智能CAN接口卡集成有120的终端电阻,用户可以通过设置内部跳线JP1来选择是否使用该终端电阻。出长时JP1默认状态为ON,即使用120终端电阻。 注:建议使用120终端匹配电阻,用于吸收端点反射,提供稳定的物理链路。当进行单节点的自发自收测试时必须连接该120的终端电阻构成回路,否则,无法进行自发自收测试。4:通用测试软件接口函数4.1:接口卡设备类型定义各个接口卡的类型定义如下:表4.1 设备类型号定义设备名称设备类型号PCI51211PCI98102USBCAN13USBCAN24PCI98205CAN2326PCI510074.2:CAN信息帧的数据结构定义定义:typedef struct _VCI_CAN_OBJ UINT ID; UINT TimeStamp; BYTE TimeFlag; BYTE SendType; BYTE RemoteFlag; BYTE ExternFlag; BYTE DataLen; BYTE Data8; BYTE Reserved3; VCI_CAN_OBJ,*PVCI_CAN_OBJ;参数:TimeFlag: 是否使用时间标识,为1时TimeStamp有效,TimeFlag和TimeStamp只在此时有意义;TimeStamp: 接收到信息帧时的时间标识,从CAN计时器初始化开始计时;SendType: 发送帧类型,=0时为正常发送,=1时为单次发送,=2时为自然发送,=3时为单次自发自收,只在此帧为发送帧时有意义;RemoteFlag: 是否为远程帧;ExternFlag: 是否为扩展帧;ID: 报文ID;DataLen: 数据长度( 0 And i 8 data(i) = Val(&H + strdata) i = i + 1 str = Right(str, Len(str) 3) 数据格式为2个字符为1组,组间有空格,占1个字符,前1组数据发送后,欲正确取到下1组,须从第Len(str)3个字符开始。 strdata = Left(str, 2) Wend frameinfo.DataLen = i frameinfo.ExternFlag = frametype frameinfo.RemoteFlag = frameformat frameinfo.SendType = SendType frameinfo.ID = ID For j = 0 To i - 1 frameinfo.data(j) = data(j) Next If VCI_Transmit(m_devtype, m_devind, 0, frameinfo, 1) 1 Then MsgBox (发送数据失败) m_devtype:设备类型号;m_devind:设备索引号;0:第0路CAN;frameiinfo:发送数据帧信息;1:要发送的数据帧数组长度。 Else List1.AddItem 发送数据成功, List1.ListCount End IfEnd SubPrivate Sub Command2_Click() If m_connect = 0 Then MsgBox (请先打开端口) Exit Sub End If If VCI_StartCAN(m_devtype, m_devind, 0) 1 Then MsgBox (启动CAN错误) Else List1.AddItem 启动CAN成功, List1.ListCount End IfEnd SubPrivate Sub Command3_Click() If m_connect = 0 Then MsgBox (请先打开端口) Exit Sub End If If VCI_ResetCAN(m_devtype, m_devind, 0) 1 Then MsgBox (复位CAN错误) Else List1.AddItem 复位CAN成功, List1.ListCount End IfEnd SubPrivate Sub Command4_Click() If m_connect = 0 Then MsgBox (请先打开端口) Exit SubEnd IfDim i As Long i = Combo1.ListIndex 从下拉列表中选取波特率,共有8组:10Kbps、220Kbps、50Kbps、125Kbps、250Kbps、500Kbps、800Kbps、1000Kbps If i -1 Then i从0开始 If VCI_SetReference(m_devtype, m_devind, 0, 1, i) 1 Then MsgBox (更改CAN波特率错误) 1:参数类型为1,可以更改CAN波特率为i,i的值为07,分别对应上面8个不同的波特率 Else List1.AddItem 更改CAN波特率成功, List1.ListCount End If End IfEnd SubPrivate Sub Command5_Click(Index As Integer) If m_connect = 0 Then MsgBox (请先打开端口) Exit Sub End If Dim i As Long i = Combo2.ListIndex 从下拉列表中选取波特率,共有7组:2.4Kbps、4.8Kbps、9.6Kbps、14.4Kbps、19.2Kbps、28.8Kbps、57.6KbpsIf i -1 Then i从1开始 i = i + 1 If VCI_SetReference(m_devtype, m_devind, 0, 3, i) 1 Then MsgBox (更改232波特率错误) 3:参数类型为3,可以更改CAN232波特率为i,i的值为17,分别对应上面7个波特率 Else List1.AddItem 更改232波特率成功, List1.ListCount End If End IfEnd SubPrivate Sub Command6_Click() If m_connect = 0 Then MsgBox (请先打开端口) Exit Sub End If Dim addr As Byte 滤波器序号addr可为1、2、3、4,当取1时,则读取第1个滤波器参数。 Dim info(13) As Byte Dim str As String addr = Val(Text2.Text) If addr 0 And addr 5 Then info(0) = addr If VCI_GetReference(m_devtype, m_devind, 0, 1, info(0) 1 Then MsgBox (读取滤波器参数错误) 1:设备参数为1,用于取得指定的滤波器参数 Else str = 滤波器参数信息: For j = 0 To 13 tmpstr = Hex(info(j) + str = str + tmpstr Next List1.AddItem str, List1.ListCount End If End IfEnd SubPrivate Sub Command7_Click() If m_connect = 0 Then MsgBox (请先打开端口) Exit Sub End If Dim data(11) As Byte Dim str As String str = Text3.Text i = 0 strdata = aa While Len(strdata) 0 And i 12 strdata = Left(str, 2) str = Right(str, Len(str) - 3) data(i) = Val(&H + strdata) i = i + 1 Wend If i 11 Then MsgBox (数据长度不够) Exit Sub End If If VCI_SetReference(m_devtype, m_devind, 0, 2, data(0) 1 Then MsgBox (设置滤波器参数错误) 2:设备类型为2,用于设置滤波器参数。data(0)设置哪一组验收滤波器,具体见接口库 Else List1.AddItem 设置滤波器参数成功, List1.ListCount End IfEnd SubPrivate Sub Command8_Click() TR0(0) = &H6 TR0(1) = Val(&H + Text5.Text) TR1(0) = &H7 TR1(1) = Val(&H + Text6.Text) If VCI_SetReference(m_devtype, m_devind, 0, 4, TR0(0) 1 Then MsgBox (预设BTR0参数错误) Else MsgBox (预设BTR0参数成功) End If If VCI_SetReference(m_devtype, m_devind, 0, 4, TR1(0) 1 Then MsgBox (预设BTR1参数错误) Else MsgBox (预设BTR1参数成功) End IfEnd SubPrivate Sub Connect_Click() Dim port As Long Dim baud As Long Dim a As Boolean If m_connect = 1 Then m_connect = 0 Connect.Caption = 连接 VCI_CloseDevice (m_devtype, m_devind) Exit Sub End If If Combo_port.ListIndex -1 And Combo_baud.ListIndex -1 Then port = COM1 Combo_port.ListIndex baud = 4800 Combo_baud.ItemData(Combo_baud.ListIndex) If VCI_OpenDevice(m_devtype, port, baud) 1 Then MsgBox (打开端口错误) Else m_connect = 1 m_devind = port Connect.Caption = 断开 End If Else MsgBox (请选择端口及对应波特率 ) End

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论