文 献 综 述
在基于 PC机的测控领域中,虚拟仪器技术的应用越来越广泛,由于大多数 PC机都有 1~2个 RS2232串行通信接口,因此,串行通信非常流行。串行通信是一种古老但目前仍常用的数据传输方法,它用于 PC机与其他仪器 (例如 MCS251单片机、变频器等可编程仪器)或者与另外一台计算机之间的通信。通信最终目的是将发送端发送的数据正确无误地传到接收端,由于种种因素的影响,接收端可能会收到错误的数据,甚至数据根本就没有收到。在进行异步通信时,为了避免这种差错,目前大多采用检错重发的方法加以改正。随着高性能处理器的出现,在实际应用中已越来越多地运用软件方式对传输的数据进行检错。其中较常用的方法有异或和、校验和、循环冗余码校验 (CRC)等方法。对于一般的测控系统采用较多是前两种方法,本文着重讨论基于 LabVIEW的串口通信数据校验和的实现方法。在弹体硬目标侵彻试验中,对高冲击信号的提取最常用的是压电加速度传感器,由于压电加速度传感器产生的电荷量很小,为了记录弹体高速侵彻硬目标过程中的加速度—时间曲线,很重要的一步就是实时采集数据并对其进行显示、存储和总结测试结果。在传统的测试系统中,通常只能对静态参数或极缓慢变化的参量进行测量,对动态参量,特别是快速过程或单次猝发过程只能借助于图形记录分析仪。与传统仪器相比,虚拟仪器提高了仪器资源的可再用性、系统可靠性、测量精度和测量可重复性。
LabVIEW是美国国家仪器公司(NationalInstrument)开发的一种虚拟仪器平台,它提供了丰富的数据采集、分析和存储库函数以及包括DAQ、GPIB、PXI、VXI、RS-232/485在的各种仪器通信总线标准的所有功能函数。本文正是利用基于 LabVIEW 的虚拟仪器技术对传感器的信号进行采集。过程较为复杂,编程工作量较大,周期长,效率低。如果将单片机为核心的小系统作为前端的数据。
LabVIEW程序由三部分构成,即前面板、程序框图和接口板。前面板实现的是程序的输入输出功能,它包括旋钮、按钮、图形和其他控制元件与显示元件以完成用鼠标、键盘向程序输入数据或从计算机显示器上观测数据,图 4是条码扫描器控制的主程序界面。程序框图是图形化编程,是 VI图形化的源代码,对前面板上的各种控件对象进行控制,是 VI测试功能软件的图形化表示。接口板为函数模板,它包括编程所涉及到的 VI程序和函数,VI程序使用接口板来替代文本编程的函数参数表,每个输入和输出的参数都有自己的连接端口。
LabVIEW串口子 VI是通过 RS-232串口总线与PC实现数据通信。LabVIEW串口子 VI
共有 6个串行通信节点,主要完成对串口的设置和读写操作等功能。
(1)串口参数设置节点(VISAConfigureSerialPort.vi):用于对串口进行参数设置,包括串口号、波特率、数据位、停止位、奇偶校验、数据流量控制等。 (2)串口写节点(VISAWrite):向发送缓冲器写入数据或命令。 (3)串口读节点(VISARead):从串口缓存中读出所传送的数据。
(4)读串口缓存节点(VISABytesatSerialPort):读串口所有排队等待的数据。 (5)串口中断节点(VISABreak.vi):向串口延时发送数据,延时时间可以设置。 (6)串口关闭(VISAClose):将打开的串口关闭。 在LabVIEW中,进行串口通讯的基本步骤分为3步:
第一:串口初始化,利用 VISAConfigureSerialPort.vi节点设定串口的端口号、波特率、停止位、校验位、数据位,需要注意的是在 LabVIEW中串口号是从0开始编号的。
第二:读写串口,利用 VISARead节点和 VISAWrite节点对串口进行读写。 第三:关闭串口,停止所有读写操作。
本系统以单片机和CCD摄像头传感器为主的前端采集系统来代替数据采集卡,单片机具有体积小、功耗低、性价比高等特点。但开发据采集系统,将采集到的数据利用串口传送到 PC主系统,在LabVIEW 环境下对数据进行显示、处理与分析,既充分利用了 LabVIEW的强大功能,又降低了系统的开发成本,提高了效率。
摄像头的主要工作原理具体而言,摄像头连续地扫描图像上的一行,则输出就是一段连续的电压视频信号,该电压信号的高低起伏正反映了该行图像的灰度变化情况。当扫描完一行,视频信号端就输出低于最低视频信号电压的电平(如0.3V),并保持一段时间。这样相当于,紧接着每行图像对应的电压信号之后会有一个电压“凹槽”,此“凹槽”叫做行同步脉冲,它是扫描换行的标志。然后,跳过一行后(因为摄像头是隔行扫描的方式),开始扫描新的一行,如此下去,直到扫描完该场的视频信号,接着就会出现一段场消隐区。此区中有若干个复合消隐脉冲,其中有个脉冲远宽于(即持续时间长于)其他的消隐脉冲,该消隐脉冲又称为场同步脉冲,它是扫描换场的标志。场同步脉冲标志着新的一场的到来,不过,场消隐区恰好跨在上一场的结尾部分和下一场的开始部分,得等场消隐区过去,下一场的视频信号才真正到来。摄像头每秒扫描25 幅图像,每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50 场图像。奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。
1 Labview部分设计
1.1 visa 简介
Labview提供了强大的VISA库。VISA——虚拟仪器软件规,是用于仪器编程的标准I/O函数库及其相关规的总称。VISA库驻留于计算机系统中,完成计算机与仪器之间的连接,用以实现对仪器的程序控制,其实质是用于虚拟仪器系统的标准的API。VISA本身不具备编程能力,他是一个高层API,通过调用底层驱动程序来实现对仪器的编程,如图1,VISA是采用VPP标准的I/O接口软件,其软件结构包含三部分,如图2。
VISA Serial VXI GPIP
图1 visa结构图
应用软件开发环境 应用软件 仪器驱动程序 I/O接口软件
图2 实际接口图
与其它现存的I/O接口软件相比,VISA的I/O控制功能具有如下几个特点:适用于各种仪器类型(如VXI仪器,GPIB仪器,RS-232串行仪器,消息基器件,寄存器器件,存储器器件等仪器);适用于各种硬件接口类型;适用于单、双处理器结构或分布式网络结
构;适用于多种网络机制。
VISA的I/O软件库的源程序是唯一的,其与操作系统及编程语言无关,只是提供了标准形式的API文件作为系统的输出。
1.2 发送端程序设计
1. 2. 1 设置顺序框架启动
LabVIEW,在其框图程序中加入顺序框架(sequence structure) ,在顺序框架的右键快捷菜单中选择 Add Frame After,再添加两个顺序框架。这样就形成了 0、1、2逐步执行的三个顺序框架,它们分别对应串口的参数设置、发送数据、接收数据。
1. 2. 2 设置串口参数
LabVIEW共有 5个串行通信节点,分别实现串口设置、写串口、读串口、检测串口缓存、中断等功能,这些节点位于功能模板→Instrument I/O子模板 → Serial子模板中。在 0号顺序框架中,按图 3所示设置串口,其中在此顺序框架中引入了本地结果变量,利用此变量将端口号传递给后面的顺序框架。
图3 设置串口参数图
1. 2. 3 校验和的计算并发送数据
在 1号顺序框架中,通过 For循环将 5组十六进制字符转换为二进制数并相加 (丢弃进位) ,然后取反加 1。将此结果再转换为十六进制字符,与原 5组十六进制字符利用
Build Array节点组成发送数据块数组,通过写串口节点分 6次发送至串口。
1. 2. 4 接收返回信息
接收端收到数据后经过检错,若无误就接收数据而不返回任何信息;若有错就发送“数据有误,请重新发送!”信息。发送端在接收到此信息后,必须再次发送。因此,在 2号顺序框架中,通过读串口节点,来接收返回信息,其框图程序略去。从发送端前面板图中可以看到该返回信息,如图 4所示。
图4 接收返回信息图
至此发送端程序设计完毕,保存此程序,取名为“发送数据. vi”。
1. 3 接收端程序设计
接收端的设置顺序框架和设置串口参数设计同发送端一样。
1. 3. 1 接收数据检错
如图 4所示在 1号顺序框架中,先通过读串口节点,将缓冲区中的数据全部一次性读出,并显示结果。通过 For循环将读出的整个字符串每两字节分别转换为数字后相加求和 (丢弃进位 )。求和结果通过前面板的“检错结果”显示,若显示为“0”,表明数据传送无误,否则即错。此外,在该顺序框架中再次引入了一个本地结果变量,利用此变量将求和结果传递给后面的顺序框架,以便判断正误并反馈信息
如图5所示在 0号顺序框架中,通过选择结构来判断收到数据的正误,求和结果通过本