点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程
一、LabVIEW介绍
LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。 LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。
LabVIEW应用领域
LABVIEW有很多优点,尤其是在某些特殊领域其特点尤其突出。
测试测量:LABVIEW[5] 最初就是为测试测量而设计的,因而测试测量也就是现在LABVIEW最广泛的应用领域。经过多年的发展,LABVIEW在测试测量领域获得了广泛的承认。至今,大多数主流的测试仪器、数据采集设备都拥有专门的LabVIEW驱动程序,使用LabVIEW可以非常便捷的控制这些硬件设备。同时,用户也可以十分方便地找到各种适用于测试测量领域的LabVIEW工具包。这些工具包几乎覆盖了用户所需的所有功能,用户在这些工具包的基础上再开发程序就容易多了。有时甚至于只需简单地调用几个工具包中的函数,就可以组成一个完整的测试测量应用程序。
控制:控制与测试是两个相关度非常高的领域,从测试领域起家的LabVIEW自然而然地首先拓展至控制领域。LabVIEW拥有专门用于控制领域的模块----LabVIEWDSC。除此之外,工业控制领域常用的设备、数据线等通常也都带有相应的LabVIEW驱动程序。使用LabVIEW可以非常方便的编制各种控制程序。
仿真:LabVIEW包含了多种多样的数学运算函数,特别适合进行模拟、仿真、原型设计等工作。在设计机电设备之前,可以先在计算机上用LabVIEW搭建仿真原型,验证设计的合理性,找到潜在的问题。在高等教育领域,有时如果使用LabVIEW进行软件模拟,就可以达到同样的效果,使学生不致失去实践的机会。
儿童教育:由于图形外观漂亮且容易吸引儿童的注意力,同时图形比文本更容易被儿童接受和理解,所以LabVIEW非常受少年儿童的欢迎。对于没有任何计算机知识的儿童而言,可以把LabVIEW理解成是一种特殊的“积木”:把不同的原件搭在一起,就可以实现自己所需的功能。著名的可编程玩具“乐高积木”使用的就是LabVIEW编程语言。儿童经过短暂的指导就可以利用乐高积木提供的积木搭建成各种车辆模型、机器人等,再使用LabVIEW编写控制其运动和行为的程序。除了应用于玩具,LabVIEW还有专门用于中小学生教学使用的版本。
快速开发:根据笔者参与的一些项目统计,完成一个功能类似的大型应用软件,熟练的LabVIEW程序员所需的开发时间,大概只是熟练的C程序员所需时间的1/5左右。所以,如果项目开发时间紧张,应该优先考虑使用LabVIEW,以缩短开发时间。
跨平台:如果同一个程序需要运行于多个硬件设备之上,也可以优先考虑使用LabVIEW。LabVIEW具有良好的平台一致性。LabVIEW的代码不需任何修改就可以运行在常见的三大台式机操作系统上:Windows、Mac OS 及 Linux。除此之外,LabVIEW还支持各种实时操作系统和嵌入式设备,比如常见的PDA、FPGA以及运行VxWorks和PharLap系统的RT设备。
二、CAN总线简介
CAN总线是德国BOSCH公司在80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议。它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维,通信速率可达1MBPS。CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等各项工作。
由于其具有通信速度快、可靠性高和性能价格比好等突出优点,它正越来越广泛地应用于汽车、机械工业、纺织机械、农业用机械、机器人、数控机床、医疗器械、家用电器及传感器等领域[2],并越来越受到工业界的重视,被公认为是最有前途的现场总线之一。
CAN总线优势
CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之许多RS-485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性:
1、网络各节点之间的数据通信实时性强
CAN控制器工作于多种方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差。
2、开发周期短
CAN总线通过CAN收发器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现像在网络中,因个别节点出现问题,使得总线处于“死锁”状态。而且,CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是仅有电气协议的RS-485所无法比拟的。
3、已形成国际标准的现场总线
另外,与其它现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点的一种已形成国际标准的现场总线。这些也是CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。
4、最有前途的现场总线之一
CAN 即控制器局域网络,属于工业现场总线的范畴。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视。
三、CAN总线通信系统的原理和方案
1.系统原理
CAN总线和总线上的各个CAN节点在具备完整的通信协
议下,一起构成了CAN网络。本系统设计两个CAN节点进行互相通信,其中采用瑞典Kvaser公司的KvaserLeafProfessional———CAN总线分析仪作为总线的一个节点,负责与上位机通信,同时检测总线状况,包括总线负载、信号帧的收发数量以及错误帧情况;另一个是基于52单片机自主开发的CAN节点,可以实现对模拟信号的采集并转化为CAN信号。该CAN节点能够处理CAN总线上的数据,能够对CAN2.0(A/B)协议进行解析,并由硬件完成一些CAN基本功能,比如为接收到的CAN报
文提供一定大小的接收缓冲区、按照一定规则对接收到的数据完成ID滤波以及执行CRC校验等等。每个CAN节点包括以下三个部分[3]:①微控制器负责完成CAN控制器的初始化,进行与CAN控制器的数据传递,并按照预定的程序进行处理;②CAN控制器主要负责将数据以CAN报文的形式传递,并进行系统的诊断、测试以及处理CAN总线上的错误等;③CAN收发器是CAN控制器和CAN总线之间的接口,完成物理电平的转换。
2.总体方案
较常见的CAN节点组成框图如图1所示。
图1中方案1的一种经典配置就是“51系列微控制器+独立的CAN控制器SJA1000+高速CAN收发器TJA1050”[4]。此方案的优点在于灵活性,设计者可以选用性价比最高、最适合实际用途的51系列微控制器。缺点就是硬件电路相对复杂,同下面的方案2相比,需要设计微控制器和CAN控制器之间的连接电路。
方案2采用的是“内嵌CAN控制器的微控制器+高速CAN收发器TJA1050”[4]。其中,STM8A是ST公司一款性能出众的带片内CAN控制器的微控制器。此方案的优点在于电路设计简单,由于将CAN控制器集成在微控制器片内,这样就减少了部分连接电路。此方案的缺点就是目前可供选择的带片内CAN控制器的微控制器相对较少,用户选择余地不大。
由于STM8A芯片有128个引脚,其内部的构造比51系列单片机复杂,同时也需要专用的编译器和调试工具,而且价格昂贵,给编程者的开发增加了难度,因此本系统的一个节点采用第一种方案。
另外一个节点采用瑞典Kvaser公司的KvaserLeafProfession-al,它是超高性能的USB接口单通道CAN总线分析仪,支持CAN协议,其MagiSync技术是Kvaser的国际核心专利技术之一。它能够把多个CAN总线分析仪连接到同一台PC机上,并通过Kva-serMagiSync技术同步各个CAN总线分析仪的时间标签,其灵活性特别适合多通道的应用项目。每个CAN消息均标有1μs精度的时间标签(timestamp),每秒可以处理高达20000个帧。
系统软件选择了虚拟仪器软件LabVIEW。通过设计,软件实现的功能为:(1)能够全程实时监控每个节点在总线上的通信情况,并能完整记录、历史回放。可设置总线波特率和发送各种数据帧,包括远程帧、标准帧、扩展帧和错误帧。(2)具有判定、报警及统计功能,可根据检测错误计数器来界定“错误激活”、“错误认可”和“总线关闭”等三种故障。
四、硬件设计
本系统自主设计的CAN节点,采用89C52作为节点的微控制器。在CAN总线通信接口中,CAN通信的控制器采用SJA1000,CAN的收发器采用TJA1050。
图2 CAN节点电路原理图
图2为CAN节点的硬件电路原理图。从图中可以看出,电路主要由五个部分所构成:微控制器89C52、独立CAN通信控
制器SJA1000、CAN总线收发器TJA1050、显示电路和控制电路。微控制器89C52负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。SJA1000的AD0~AD7连接到89C52的P0口,CS连接到89C52的P2.0。P2.0为0时,CPU片外存储器地址可选中SJA1000,CPU通过这些地址可对SJA1000执行相应的读/写操作。SJA1000的RD、WR、分别与89C52的对应引脚相连接,INT接89C52的INT0,89C52也可通过中断方式访问SJA1000。
TJA1050与CAN总线的接口部分采用了一定的安全和抗干扰措施。TJA1050的CAN-H和CAN-L引脚各自通过一个5Ψ的电阻与CAN总线相连,电阻可起到一定的限流作用,保护TJA1050免受过流的冲击。CANH和CANL与地之间并联了两个30P的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的能力。
显示电路通过使用四个七段管,并使用74LS138和74LS373进行控制。控制电路主要由四个按钮组成,分别对输入信号、总线波特率、模式转换和数据发送进行控制。
硬件电路设计的时候,需注意的地方有:
(1)SJA1000与AT89C52的复位电路是不同的,单片机的RST是高电平有效的,而SJA1000的RST是低电平有效的,而且不是用一个非门把单片机的RST反相就可以的[5]。有两种解决方式:第一种是使用单片机的IO引脚来控制SJA的复位引脚,优点是单片机完全控制SJA的复位过程;第二种是使用微处理器电源监控芯片MAX708,它可以提供两种复位信号,可以满足需要。
(2)SJA1000的CLKOUT引脚可以提供时钟输出信号,但是如果该信号作为AT89C52的时钟信号,则容易出现问题,建议分别使用晶振。
(3)CAN-H与CAN-L之间需接120欧姆电阻。
(4)电路板中使用两个9针串口,为的是方便于构建一个CAN小网络,并方便于接不同串口的CAN检测仪。
五、 软件设计
1. CAN节点的软件部分设计
本节点的软件编程主要包括单片机初始化、CAN控制器的初始化、CAN总线数据的发送和接收等几个部分。初始化设置主要包括通信的波特率的设置、报文滤波器的设置和输出模式的设置。主程序的流程图如图3所示
图3 主程序流程图
(1)数据发送 将待发送的数据打包成符合CAN协议的帧格式后,便可写入SJA1000发送缓冲区,并自动发送。图4为发送子程序流程图。在写发送缓冲区前必须查询其状态,数据只能写入空闲的发送缓冲区。发送大量数据时,这一步显得尤其重要,否则发送可靠性将不能保证启动发送命令后,只能通过查询或配置发送成功中断判断数据是否发送成功。发送程序分发送远程帧和数据帧两种,远程帧无数据场。
图4 发送子程序流程图
(2)数据接收 接收数据可采用查询方式或中断方式。在某一段时间内,CAN总线并不是总是在活动,为了提高效率,可采用中断方式在初始化程序中必须打开接收中断。在中断服务子程序中,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序则通过查询该队列来获得总线数据。
2. 上位机程序设计
本系统的PC机端的软件采用美国NI公司的图形化编程语言LabVIEW平台,该平台是测控领域优秀软件,被誉为工程师的语言,可以加快产品开发速度。在该套测试系统中,采用顺序结构,并使用瑞典Kvaser公司提供的仅适用于Kvaser硬件的多个子VI,利用这些子VI建立控制模块,并通过一定的逻辑关系联系起来,完成对硬件的驱动、测量参数设定以及数据的采集和保存。
前面板一共有三部分:第一部分是CAN总线系统的相关参数配置,如图5所示,其中包括连接在PC机上的通道选择;总线通道的类型(单一、扩展和虚拟通道)还包括总线的波特率以及总线状态。第二部分为数据发送窗口,主要用于对所要发送的数据进行定义以及显示总线是否有错误,如图6所示,其中包括CAN数据帧的ID、数据长度控制字DLC、八个字节的数据以及帧类型的选择:远程帧、标准帧、扩展帧和错误帧。另外还可以显示总线错误和错误源。该窗口负责总线上数据的传输,是整个程序中的核心部分。最后一部分是数据接收窗口,主要负责接收整个总线上的数据,当点击“GoBuson”之后,就可以自动接收数据,同时可以检测接收错误。如图7所示,其中包括了对数据的接收时间(以系统初始化为0时开始计时)、数据帧的ID、数据长度控制字以及8个字节的数据,用户可以通过此窗口检测总线状况。
图5 总线参数配置窗口 图6数据发送窗口
图7 数据接收窗口
后面板的程序流程图主要是由瑞典Kvaser公司提供的大约四十二个针对本公司产品的CAN子VI程序,其中包括四类:
(1)CAN总线参数设置子VI:这些VI主要用于对CAN通道进行参数设置,其中包括CAN总线的初始化、CAN协议版本的选择、波特率以及总线的帧类型选择等等,还包括了Kvaser分析仪在LabVIEW下运行的驱动程序。
(2)CAN总线数据写入子VI:这些VI主要用于将CAN通道需要送出的数据打包成符合CAN协议的信息并发送到SJA1000的输入缓存器。
(3)CAN总线数据读出子VI:这些VI可以读出CAN口缓存中的数据。其中还包括错误计数器、同步读数据和定时器等。
(4)CAN总线关闭子VI:这些VI用于将打开的CAN口关闭。调用CAN子程序并按照CAN2.0的通信标准,利用G语言,完成通过LabVIEW软件平台进行收发数据,图8为程序流程图。
六、总结
本系统实现了将传感器输出的电压信号转化为CAN总线信号,并使用其中的一个字节表示其变化过程。将先进的现场总线技术(CANBUS)应用于智能的测量与通信系统,可以大大提高系统的可靠性。自主开发了符合国际标准的基于单片机的智能CAN节点,不仅大量节约了资金,而且可以根据不同的需要连接不同的传感器,实现基于CAN总线的智能测量节点。基于LabVIEW的上位机提供了良好的人机界面,使操作更加方便、直观。
评论
查看更多