时间:2023-03-16 15:51:33
绪论:在寻找写作灵感吗?爱发表网为您精选了8篇数据采集论文,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!
基于表层化方式的DeepWeb数据采集方法将DeepWeb数据采集问题建模为一个优化问题:已知一个DeepWeb数据库DB,对DB的采集可以表示为寻找一个查询集合Q={q1,q2,...,qn},在给定的约束条件C满足的条件下,查询集合Q从DB获取的DeepWeb数据最多,即查询集合Q对DeepWeb数据库资源的覆盖率达到最大。其中,C表示许向Web数据库提交查询请求的次数。基于表层化方式的DeepWeb数据采集问题的目标就是针对一个给定的DeepWeb数据库,寻找一组查询集合,使用该查询集合能够对DeepWeb数据库资源的覆盖率达到最大。基于表层化的方法的主要思想是通过向DeepWeb数据的查询接口提交查询把数据从Web数据库中挖掘出来。这方法能够充分利用搜索引擎爬虫,将DeepWeb数据的采集转换为SurfaceWeb数据采集的方式,不需要做很大的改变就可以无缝的将DeepWeb数据集成到现有的搜索引擎中。基于表层化方式的DeepWeb数据采集方法的关键是为查询接口生成合适的查询,其目标是为DeepWeb数据的查询接口生成有效的查询实例,构造表单查询,以便将Web数据库中的内容发现出来。一个查询接口可能包含多个输入项,如果每个输入项有100个有效的取值,那么对于一个有3个输入项的查询接口,组合生成的查询数量是1,000,000。因此,在迚行DeepWeb数据采集时,为每个查询接口生成所有可能的查询是不实际的。而且,对于查询接口中的一些文本输入项,其对应的有效的取值进不止100个,如图书查询接口的书名,作者等。基于表层化方法的DeepWeb数据采集的目标是以最小的查询数量达到最大的DeepWeb数据覆盖率。因此,如何为查询接口生成有效的查询是实现DeepWeb数据覆盖率最大化的重要环节。目前,针对这一问题的研究主要有基于词频的方法[11],基于集合覆盖的方法[12,13],基于强化学习(ReinforcementLearning,RL)的方法[14-16],面向领域的方法(HiWE[17]、DeepBot[18,19]),基于属性值图的方法[20],基于查询模板的方法[21],基于本体的方法[22-24]等。通过对查询接口的分析发现,查询接口根据输入项素的个数可分为:简单查询接口(SimpleQueryInterface)和复杂查询接口(ComplexQueryInterface)。简单查询接口包含一个输入项,即为简单的关键字查询接口,使用方式与搜索引擎接口一样;复杂查询接口则包含两个或多个输入项。因此,本文根据查询构造方法支持的接口类型将已有工作分为两类:简单查询接口查询构造方法,复杂查询接口查询构造方法。
1.1简单查询接口查询构造方法简单查询接口只有一个输入项,因此,对简单查询接口迚行查询构造时并不需要考虑表单输入项乊间的关系,只需要为该输入项生成候选查询关键字集合。基于词频的方法[11],基于集合覆盖的方法[12,13],基于强化学习(ReinforcementLearning,RL)的方法[14-16]属于此类的研究。基于词频的方法[11]基于一个假设:在实际数据库或文档集合中的高频词比随机选择的词具有更高的资源覆盖能力,而且高频词作为查询能够获取更多的查询结果。因此,该方法对简单搜索接口所在页面和查询返回的结果迚行抽样,然后在每一轮查询结果中选择高频词构造查询迚行资源采集。但是该方法有个明显的不足:在每次查询时,高频词无法确保获取更多的新页面。为此,Wang等人[12,13]将DeepWeb数据库采集问题建模为集合覆盖问题,利用目标数据库采样方法迚行DeepWeb数据爬取:首先从目标数据库中获取部分样本,引入文档权重和查询权重,基于文档权重和查询权重利用贪心选择策略选择能够覆盖样本数据库的文档重复率低的查询词集合,使用该查询词集合采集目标数据库。该方法将原始数据库的查询选择转换为对样本数据库的查询选择问题。但是该方法无法保证样本数据与目标数据库是同分布的,因此覆盖样本数据库的查询词集合可能不适用于整个目标数据库。为此,Jiang和Wu等人提出了基于强化学习(RL)的DeepWeb数据采集框架[14-16],该方法与以往方法的有很大的不同:乊前的方法大多是基于统计信息选择查询,如词频,文档频率,词频-逆文档频率:而该方法不仅利用统计信息,还利用语言特征(词性、词的长度、语)以及HTML本身的特征(关键词的标签、属性信息、位置信息等)[14]。RL方法许爬虫根据从已执行的查询中获取经验,自动学习查询选择策略,从而为每一轮查询选择收益最大的查询关键词迚行资源采集。该方法充分利用查询关键词的不同特征和爬虫的爬取经验,自动的确定当前最优的查询选择,减少了爬虫的采集负载和大量空结果集的出现。但是该方法学习过程相对复杂,并且仅能应用于GET提交方法的表单,无法应用于POST类型的提交表单。
1.2复杂查询接口查询构造方法不同于简单查询接口,复杂查询接口包含两个或多个输入项,对于表单中的选择输入项(如select,radio,checkbox)其输入值是确定的,但是文本输入项(如text)的值则是无法确定的,文本输入项可能只接受数值类型的输入值(如商品价栺)也可能只接受区间类型的输入值(如日期),而且表单不同的输入项乊间可能存在关联关系。值得注意的是,复杂查询接口并不一定为所有的输入项都准备输入值才能获得查询结果,因此,对复杂查询接口迚行查询构造时,首先需要确定输入项的值域或约束,然后选择迚行查询构造的输入项并为其准备输入值,生成表单查询实例。HiWE[17],DeepBot[18,19],基于属性值图的方法[20],基于查询模板的方法[21],基于本体的方法[22-24]等则属于此类工作。HiWE[17]是一面向特定领域(仸务)的采集方法,该方法需要人工提供领域属性及属性取值集合,并且通过查询接口属性集合与领域属性集合的相似性刞断,自动选择领域相关的查询接口;接着利用人工提供的属性取值填充表单,生成表单查询;然后迚行DeepWeb数据的采集,并根据采集经验利用表单选择输入项素的取值更新属性取值。但是该方法没有考虑自动为文本输入项产生新的查询词,只能依赖人工提供的知识。不同于HiWE,Wu[20]提出一基于属性值图的查询构造方法。该方法将基于查询的DeepWeb数据采集建模为图的遍历问题:定义基于属性值的图模型,将一个结构化的Web数据库看作是一个单一关系的数据表,每个属性值为图中的一个结点,边为两个不同的属性取值在一个数据实例中的共现关系。该工作得出结论认为结构化的数据库属性值图中结点的度分布与幂律分布(powerlaw)相似,并以此为依据采用贪心选择策略选择度大的结点生成表单查询。但是该方法需要将每一次的查询结果更新到已有的属性值图中,然后选择下一个新的待提交的查询词,这方法更新属性值图的代价较高。DeepBot[18,19]是一个基于浏览器内核开发的DeepWeb数据采集的框架,它与HiWE类似,都采用面向特定领域的方式。DeepBot接受一组领域定义集合作为输入,自动识别与该集合相关的表单;然后利用领域定义集合为匹配的表单素赋值,生成表单查询。其中,领域定义集合用于定义采集仸务。该方法通过领域定义与表单乊间的相似度计算自动选择匹配的表单,许表单素和领域定义乊间存在不完全匹配的情况。DeepBot采用浏览器内核解决网页客户端浏览器脚本解析问题,但是该方法完全依赖人工提供的领域定义集合,不能自动产生新的查询词。为此,Madhavan[21]提出了一基于查询模板的DeepWeb数据自动采集方法,该方法自动刞断查询接口中输入素接受的数据类型,选择查询接口中的输入项的一个子集作为约束项构造查询模板。在约束项乊间利用笛卡尔积的形式产生不同的查询请求。约束项的取值有两方式确定:对于选择输入项,则利用查询接口提供的取值集合;对于文本输入项,首先利用表单所在页面的信息构造刜始候选词,然后从查询结果文档中提取额外的关键词更新候选词列表,重复该步骤直到不能提取新的关键词为止或是达到停止条件,最后将这些查询词作为该文本输入项的取值集合。该方法通过表单查询返回结果验证查询模板的有效性,并且采用自底向上的有效模板的增量式算法构造查询模板。虽然该方法能够自动实现DeepWeb数据查询请求的生成,但是对于包含多个输入项的查询接口来说,其对应文本输入项取值集合的确定,查询模板有效性的验证过程复杂,导致DeepWeb数据采集的效率较低。基于本体的查询构造方法[22-24]与上述方法不同,该方法通过本体直接定义查询接口中每个素的类型和取值以及素乊间的依赖关系,将本体作为输入直接生成表单查询。[22]是一针对语义网环境的DeepWeb数据查询方法。[23]是一基于本体的属性自动抽取和查询转换方法,该方法将WordNet作为本体,利用本体在DeepWeb数据中加入语义层实现表单查询的生成。[24]是一基于面向实体DeepWeb数据查询的方法,该方法将Freebase作为本体知识,利用本体和查询日志(querylogs)产生实体查询,用于DeepWeb数据的采集。但是基于本体的方法与HiWE和DeepBot类似都依赖外部的人工指定的输入信息,自适应性差。
2DeepWeb数据采集查询构造方法分析
仸何一查询构造方法的一个非常重要的特征是其自动化程度,这是指在查询构造过程中需要用户完成的工作量。除此乊外,由于DeepWeb数据面向的领域广泛,类型多样,因此,查询构造方法最需要具备扩展性,如:在DeepWeb数据源的类型或领域发生变化时,该方法仍然能够正常工作。本节从支持的查询接口提交方法,查询词提供方式,自动化程度,扩展性角度对比分析目前已有的查询构造方法。表1是目前已有的查询构造方法定性比较的结果,在自动化程度一列,“AUTO”表示完全自动、“SEMI”表示半自动、“NO”表示人工完成。在扩展性方面,划分为三个层次,分别用“好”、“中”、“差”表示使用相关方法或工具的可扩展程度。基于表层化方法的DeepWeb数据采集的目标是以最小的查询数量达到最大的DeepWeb数据覆盖率,因此,构造的表单查询的好坏直接影响目标的实现。虽然已有的查询构造方法能够表明确实可以使大量的DeepWeb数据内容对用户可见,但它也存在一些局限性,如表2所示。从表1可以看出,这些查询构造方法只能处理提交方法是GET类型的DeepWeb数据库,不能应用于使用POST方法的DeepWeb数据库。除此乊外,从表2可以看出,已有的查询构造方法都存在不同程度的局限性。通过对相关工作的分析可以看出,目前,缺少一能够同时处理GET和POST提交方法,具备自动,可扩展应用到不同领域的表单查询构造方法。因此,DeepWeb数据采集的查询构造方法仍然需要做迚一步的研究。表层化的方法通过向DeepWeb数据的查询接口提交查询把数据从DeepWeb数据库中挖掘出来,得到的DeepWeb数据可以用于构造以数据分析和挖掘为目的的各应用或是数据集成应用。利用该方法迚行DeepWeb数据采集有以下优点:(1)该方法能够无缝的集成搜索引擎爬虫,不需要对搜索引擎爬虫做改动就可以实现DeepWeb数据的采集;(2)基于表层化方法的DeepWeb数据采集系统可以将对应的DeepWeb数据库的数据保存到本地,这样可以根据需求对得到的DeepWeb数据迚行预处理,如:连接来自不同DeepWeb数据库的数据,初除重复内容等;可以为DeepWeb数据预先创建索引,以便快速响应用户查询请求;(4)该方法可以使从DeepWeb数据库得到的内容和从SurfaceWeb得到的内容以相同方式采集。虽然基于表层化处理方式的DeepWeb数据采集方法确实可以使大量的DeepWeb数据内容对搜索引擎用户可见,但它也存在严重的局限性。(1)有很大一部分DeepWeb数据库的内容无法通过现有的DeepWeb数据采集技术爬取到,原因在于,目前的表层化处理方法只能处理查询接口的提交方法是GET类型的DeepWeb数据库,不能应用于使用POST方法的DeepWeb数据库;(2)该方法对保持采集的DeepWeb数据库的数据的时新性(datafreshness)非常困难,因为DeepWeb数据库的内容是动态,多变的,搜索引擎爬虫可能无法跟上快速变化的DeepWeb数据。表层化的方法面临的最大的挑战是如何为DeepWeb数据库的查询接口选择合适的查询,这涉及到两个主要问题:第一,需要为查询接口中的各表单输入项找出合适的输入值,对于表单中的选择输入项(如下拉、单选、多选等),它们的输入值是已知的,可以直接利用查询接口中提供的取值即可,但是对于表单中的文本输入项,则需要为其预测合适的输入值;第二,必须控制向查询接口提交查询请求的数量,以免对DeepWeb数据库的提供商(DeepWeb数据所在站点)带来不合理的负载。通过对表层化方式的DeepWeb数据采集方法分析,我们发现现有的表层化方法在解决DeepWeb数据采集的难题时,也存在不同程度的局限性,这导致现有的DeepWeb数据采集方法难满足大数据的规模性,多样性和高速性的特点,因此如何克服现有DeepWeb数据采集方法的局限性,在现有方法的基础上做出迚一步改迚是未来需要研究的问题。
3研究展望
CC2530射频模块通过外引24个引脚,包括普通IO引脚P00-P24和电源、复位引脚,实现与电路的连接。电路包括复位电路、开关电路、传感器接口电路、按键指示电路、通信调试电路、电源供电电路。主要电路功能介绍如下:按键指示电路:节点包括Led和蜂鸣器指示电路,用于本节点的指示功能;支持按键功能,进行节点工作模式的转换。开关电路:由三极管电路组成,用于实现传感器供电的通断。通信调试电路:由串口电路和JTAG调试接口组成;串口负责与PC上位机软件的连接,方便修改节点的参数;JTAG接口方便上位机集成环境IAR等调试用。电源供电电路:基本供电由外部USB接口电源5V通过AMS1117转3.3V以及直接电池3.3V供电组成;传感器可由内部3.3V供电,而大于3.3V则由外部电源直接提供。传感器接口电路:包括危化品物流车辆常见的几种信号(0-5V、4-20mA、开关量、数字量)采集电路,可同时接四种类型的传感器。其中数字量主要是DS18B20、DHT11温湿度传感器的输出信号;0-5V主要是气体泄露检测、光敏、真空度传感器的输出信号;4-20mA主要是压力、液位传感器的输出信号;开关量主要是红外、门开关、倾斜传感器的输出信号;信号接入后进行了信号隔离和二极管钳位保护电路。
2节点软件
2.1节点软件架构软件设计部分主要是基于TI公司的Z-stack协议栈进行应用程序的开发。Z-stack协议栈是一款稳定性强的Zigbee开发协议栈,是对Zigbee标准的具体实现。协议栈APL(应用层)包含了主要的API函数接口,方便进行应用开发,从而实现对CC2530芯片硬件资源的控制功能。具体软件框架设计如图4所示。应用层软件主要包括节点间数据的接收/发送、节点内应用层与底层的交互。应用层的数据经过应用层数据帧格式进行封装传给底层继续封装并发送出去;接收数据则由底层先进行解释,再由应用层进行解释,然后进行数据的计算、更新参数等步骤。应用层还可通过API控制接口对底层进行控制与信号、参数获取。
2.2数据帧格式Zigbee采集节点和主节点模块的数据传输格式采用字符串形式进行数据的发送/接收。由于是采用字符进行数据传输,所以可以利用上位机现有的字符串处理函数,很容易校验数据正确性,并从数据帧中提取有效信息,避免因帧长度判断引起的错误。另外,基于Zigbee传输速率较低、传感器数据量小、刷新速度慢的需求等特点尽量减小和限制了协议中各数据域的占位宽度,保证传输效率。具体数据格式如表1所示。帧头:本协议节点间的应用层交互主要有命令帧和数据帧。帧头是辨别命令帧和数据帧而设立的。帧头包括:Set、Get、Ack、Data4种。Set指的是主节点对采集节点进行参数设定,为命令帧,是主节点需要对子节点进行参数配置的时候发送的,子节点收到此类型帧后,发回Ack帧,说明参数设置成功与否;Get指的是其他节点需要获取本节点信息,为命令帧,本节点收到此类型帧后,发送数据帧;Ack指的是节点间通信应答状态帧,SUCC为成功、FAIL为失败;Data指的是数据帧,携带节点参数、传感器采集数据。如表2所示。目的地址:目的地址指的是Zigbee网络中的设备唯一标识的网络ID。为十六进制0X0000-0XFFFF之间值。其中有几个地址值有特殊的含义,0XFFFF表示广播地址;0XFFFE表示所有接收功能打开的设备;0XFFFC表示所有路由设备;其余地址为单一设备的网络地址。网络地址的获得过程是:主节点设备启动成功后,自设定为Zigbee网络的主网络ID0X0000,子节点设备在申请加入成功后获得一个网络身份标志ID。帧类型:在帧头为Set、Get、Data时,此帧位置都有意义,分别代表设置、获取、携带相应类型的节点信息。这些类型包括,传感器数据(Sensor)、节点网络地址(NAdr)、节点网络类型(NType)、采集周期(Cycle)、产品信息(Info)、发送方式(SWay)、功率模式(PMode)、信道选择(Channel)、AD参考电压(ADMode)、默认发送地址(DSAdr)。信道数据:DataChannel796F800\r\n(第11(0x0B)无线信号通道)载荷:载荷是整个通信帧中最重要的部分,包括了通信的主要内容。载荷的具体内容需要根据帧类型来确定。描述如下:(1)帧类型为传感器数据:此时载荷部分包括传感器类型、传感器ID、传感器值。传感器类型包括危化品物流车辆常见信号:1.温度、2.门开关、3.真空度、4.液位、5.压力、6.电压、7.湿度、8.气体、9.红外10.光敏、11.倾斜。传感器ID从0开始分配,表示同种类传感器的使用编号。(2)帧类型为非传感器数据:此时载荷部分携带网络地址、采集周期、发送地址等值。结尾符:本协议结尾符为字符“\r\n”,加上字符串结束符‘\0’,固定为3个字节。结尾符是一帧数据的界定符,上位机软件可以根据此结尾符很快能判定帧的长度,避免一些数据长度判读错误的发生。
2.3软件处理流程Z-stack协议栈基于轮询机制,事件是最小处理单元,每个事件都有相应的处理函数,当事件管理数据结构相应的位置位时,协议栈通过轮询机制就能发现并跳入相对应处理函数进行处理步骤,处理完再返回轮询大循环。这里主要设置了3个事件,分别是串口事件、无线事件和采集事件。串口事件主要处理与上位机的通信;包括根据上位机命令修改本节点参数、接收发送数据等;无线事件主要处理数据的无线发送和接收;采集事件主要处理传感器的数据读入、封装、发送或者接收、解析、转发等。处理流程图如图5所示。
2.4上位机配置软件Zigbee设备逻辑类型包括3种,分别是主节点、路由节点、终端节点。对于不同设备类型的具体处理流程,本设计编写了统一的参数配置服务函数,可通过上位机软件方便进行配置。比如,终端节点配置成具有传感器数据的采集功能,可选择无线和串口两种发送方式,而对于路由器或者协调器,基于功耗考虑,则配置成不具有传感器数据采集功能。通过设计节点上位机配置软件ZigConfig来实现参数的配置,简单的界面操作就能通过串口以上述数据格式下载到节点,并烧写到CC2530的flash中永久保存起来,节点下一次启动将以新的参数启动。上位机配置软件介绍如下:(1)配置软件由QtCreator开发。QtCreator是Qt被Nokia收购后推出的一款新的轻量级跨平台集成开发环境(IDE)。支持的系统包括Linux(32位及64位)、MacOSX以及Windows。开发人员能利用该应用程序框架更快速及轻易地完成开发任务。(2)该配置软件完成节点的设备类型、接口采集逻辑、入网参数等的配置。可直接通过串口线与待配置节点连接,也可以通过一个中间节点对待配置节点进行无线配置,中间节点通过串口线与上位机连接。操作界面如图6所示。(3)如图7,图8所示,通过上位机配置软件S1(实物图如图6所示)可方便地对待配置节点S2进行参数配置。对于待配置设备,如果是终端设备,配置前需先按下配置按键,指示灯亮后,装置即进入配置模式;而如果是路由设备或协调器设备则无需此步骤。(4)有线配置如图6所示:上位机通过串口线连接待配置设备,然后配置软件上收到待配置节点S2发送过来的设备信息,并显示在界面上,然后点击配置按钮,即发送配置帧到节点S2,点击读取配置按钮,则将节点S2各项参数显示在界面上,如果节点S2是数据透传模块,则可以直接接收数据或填写目标地址发送数据。配置完后再按一下按键,指示灯不亮,表示配置完成。可以配置设备类型为Zigbee终端设备、路由设备、协调器设备和点对点透传设备;可以配置入网参数,比如PANID值、信道、网络模型、网络层次等;可以配置传感器发送周期,使各传感器通道数据可以同一周期发送,也可以不相同周期发送等。(5)无线配置如图8所示,采用一个节点作为数据中转与上位机有线连接,通过这个节点无线发送指令到待配置节点进行配置,配置过程中的操作步骤与有线时类似。
3节点测试
3.1信号强度RSSI(ReceivedSignalStrengthIndication)是接收端的信号强度指示,可用来判定链接质量。实际应用中,普遍采用简化后的Shadowing模型,即如下公式计算RSSI值。其中Pr(d)为接收端接收信号强度,Pr(d0)为参考处接收端接收信号强度,d为接收端与发送端实际距离,d0为接收端与发送端参考距离,n为路径损耗指数,通常取2~4。取d0=1m,实测得Pr(d0)的值代入,并取n=3代入公式(1)得新的计算公式。实际测试中取两个节点,分别设为协调器节点和终端节点。将协调器节点固定,令终端节点远离,终端节点加入协调器节点网络后,每隔1s发送一次数据到协调器节点。协调器接收到数据包后,从TI协议栈Z-Stack的数据结构afIncom-ingMSGPacket_t中提取RSSI值记录下来。100M范围每隔5M记录一次RSSI值,每次记录100个值,然后取100个中的随机值和平均值分别作为本次终值绘制曲线。
3.1.1空旷环境下测得Pr(d0)=-28dbm,按照公式(2)与实际数据,绘制对比曲线。从图9和图10对比曲线可以看出,随着两节点间距离增大,RSSI值会逐渐衰减,符合一般规律。0-20m范围内,RSSI衰减较快,之后较为平缓。40m后信号质量普遍较理论值平缓,可能是受硬件条件影响,误差增大。图9由于每次记录取的随机值,存在较大误差,图10每次记录取100个数据的平均值,曲线较为平缓。误差因素包括硬件设计、周边环境影响等。
3.1.2危化品物流车辆环境下采用深圳市中集集团液化气罐(空罐)危化品物流车辆进行实地测试,测试车辆长度14m,宽度2.5m。将协调器节点放置在车驾驶座,终端节点自由放置于车厢体内部,加入网络并发送数据到协调器节点。测得Pr(d0)=-44dbm,根据公式(2)和实际数据的结果曲线如下:由图11和图12可以看出,在车辆环境下,节点信号普遍较空旷环境下差,这主要是因为接收节点被放进车辆箱体内部,信号一定程度上受到厢体衰减。大于40m距离后信号变得不稳定,通信断续和重连情况发生频繁,此时RSSI值普遍>82dbm,80m后多次测试接收端均接收不到数据。
3.2数据传输将协调器节点放置在车驾驶座,终端节点自由放置于车辆厢体内部,加入网络并发送数据到协调器节点。在协调器端统计接收数据包个数,并计算丢包情况和最大稳定通信距离(即数据通信情况良好,极少发生重连情况),结果如下。由表3可以看出,主节点在车驾驶室情况下,车正前方和侧面信号要好于车后方信号,节点丢包率较低,通信距离>=25M,满足一般危化品物流车辆要求。另外,通信的最大稳定传输RSSI值是极少断网重连情况发生下的统计值,所以普遍低于信号强度曲线中的极限值。随着距离增大,节点间的网络传输也会变得不稳定,常常发生断网重连,甚至无法重连状况。实际数据包传输受节点间不同阻挡物、不同车型、车体电磁干扰、程序执行等因素影响。
3.3功耗通过万用表、示波器和在程序中设计测试模块的结合进行功耗测试,测试结果如下。从表4的测试结果可以看出,节点满足低功耗要求,休眠情况下,节点功耗低至0.33uA。
4结语
NI-PCI6221是一款低价位多功能M系列数据采集板卡,具有单端16路/差分8路模拟输入,分辨率高达16bit,采样速率为250KS/s,输入最小电压范围为±200mV,最大电压范围为±10V,板上自带4095字节内存.
2系统软件设计
2.1系统功能设计软件设计是整个系统设计的核心,软件设计部分采用层次化和模块化思想,将整个系统划分分若干模块,模块化的程序结构不但使整个系统清晰明了,而且方便进行程序维护.基于LabVIEW的数据采集系统软件结构如图2所示.该系统软件部分包含了系统启动、用户登录、系统菜单、数据采集、数据处理、数据回放6个功能模块.
2.2系统界面设计本文针对6个功能模块分别开发了相应的界面.
2.2.1系统启动界面系统启动界面如图3所示.它包含了简单个人信息,绿色横条是系统启动条,显示启动进度,系统100%加载成功后,单击进入登录界面按钮可以跳转到用户登录界面,单击退出启动界面按钮则直接退出系统.
2.2.2用户登录界面用户登录界面如图4所示.它要求输入用户名和密码,功能是进行身份认证,认证通过后显示登录成功,一旦登录成功会自动进入到系统菜单界面,如果不能通过认证,只能通过退出按钮来退出系统.
2.2.3系统菜单界面系统菜单界面如图5所示.它由一列按钮构成,菜单程序运行后按钮被激活,分别单击数据采集、数据处理、数据回放按钮可跳转到对应界面,单击退出按钮返回到菜单按钮被激活前状态.
2.2.4数据采集界面数据采集界面如图6所示.它模拟实现了两路信号的采集,一路是电压信号,一路是温度信号.信号选择开关用于进行信号选择,通过信号选择开关既可以采集单路信号数据,也可以同时采集双路信号数据.针对温度信号设计了温度表盘,可精确显示温度值,另外还设定了温度下限和上限值,将温度限定在一个范围内,一旦超出这个范围,报警指示灯就会亮起来.数据采集界面包含了一些基本参数设置,此外还有返回和暂停两个按钮,单击暂停按钮,系统暂停连续采集数据,暂停中状态表现为数据信息停留在某一刻,单击返回按钮,可返回至系统菜单界面.李琳芳等院基于LabVIEW的数据采集与处理系统设计
2.2.5数据处理界面数据处理界面如图7所示.它包含了电压和温度两路信号,对电压信号分别进行了滤波、频谱分析、峰值压缩,对温度信号进行了均值压缩.此外还有温度表盘、一列选择开关、系统参数配置信息、暂停和返回按钮.滤波处理是信号处理中常用的一种手段,对于滤波处理,观察图7,可发现滤波后的电压信号清晰平滑,便于观察.频谱分析主要是求出信号的频域描述,有助于更全面地认知信号信息,进行信号特征提取.根据奈奎斯特准则,信号带宽小于采样频率的1/2,便能防止出现频谱混叠现象,恢复出原始信号,本文设置采样频率为1000Hz.观察图7发现电压幅度谱主要集中在0~50Hz,这是因为在实际工程中,为了恢复出高保真信号,要求信号带宽小于采样频率的1/10,加之软件仿真环境理想,因此信号幅度谱主要处于50Hz频段内.压缩采样是利用算法在保留信号信息的同时进行压缩处理,压缩处理可缩减数据体积,有利于传输.本文对电压信号进行了峰值压缩,对温度信号进行了均值压缩,设置压缩因子均为10,即对于电压信号,每10个采样值中标记出最大值,对于温度信号,每10个采样值中标记出平均值.电压信号峰值压缩后方便获取峰值信息,温度信号均值压缩后方便获取平均温度.
2.2.6数据回放界面数据回放界面如图8所示.可以读取之前存储的数据,实现数据再现.通过文件路径找到之前数据所在位置,并通过选择开关按钮选择回放的信号,接着运行系统回放程序,便可观察回放的数据.数据回放界面包含了电压和温度两路信号的回放,回放的数据结果以波形和表格数值两种形式呈现.观察图8发现在电压和温度波形始端有段空白区域,这是由于之前存储的文件中包含一些非数值的说明信息,是不能够被读取的.
3小结
关键词:USBLabVIEW数据采集
通用串行总线USB(UniversalSerialBus)作为一种新型的数据通信接口在越来越广阔的领域得到应用。而基于USB接口的数据采集卡与传统的PCI卡及ISA卡相比具有即插即用、热插拔、传输速度快、通用性强、易扩展和性价比高等优点。
USB的应用程序一般用VisualC++编写,较为复杂,花费的时间较长。由美国国家仪器(VI)公司开发的LabVIEW语言是一种基于图形程序的编程语言,内含丰富的数据采集、数据信号分析分析以及控制等子程序,用户利用创建和调用子程序的方法编写程序,使创建的程序模块化,易于调试、理解和维护,而且程序编程简单、直观。因此它特别适用于数据采集处理系统。利用它编制USB应用程序,把LabVIEW语言和USB总线紧密结合起来的数据采集系统将集成两者的优点。USB总线可以实现对外部数据实时高速的采集,把采集的数据传送到主机后再通过LabVIEW的功能模块顺利实现数据显示、分析和存储。
1USB及其在数据采集设备中的应用
USB自1995年在Comdex上亮相以来,已广泛地为各PC厂家所支持。现在生产的PC几乎都配置了USB接口,Microsoft的Windows98、NT以及MacOS、Linux等流行操作系统都增加对USB的支持。USB具有速度快、设备安装和配置容易、易于扩展、能够采用总线供电、使用灵活等主要优点,应用越来越广泛。
一个实用的USB数据采集系统硬件一般包括微控制器、USB通信接口以及根据系统需要添加的A/D转换器和EPROM、SRAM等。为了扩展其用途,还可以加上多路模拟开关和数字I/O端口。系统的A/D、数字I/O的设计可沿用传统的设计方法,根据采集的精度、速率、通道数等诸元素选择合适的芯片,设计时应充分注意抗干扰性,尤其对A/D采集更是如此。在微控制器和USB接口的选择上有两种方式:一种是采用普通单片机加上专用的USB通信芯片;另一种是采用具备USB通信功能的单片机。USB的另一大优点是可以总线供电,在数据采集设备中耗电量通道不大,因此可以设计成总线供电。
一个USB设备的软件一般包括主机的驱动程序、应用程序和写进ROM里面的Firmware。Windows98提供了多种USB设备的驱动程序,但还没有一种专门针对数据采集系统,所以必须针对特定的设备编制驱动程序。尽管系统已经提供了很多标准接口函数,但编制驱动程序仍然是USB开发中最困难的一件事。通常采用WindowsDDK实现,但现在有许多第三方软件厂商提供了各种各样的生成工具,如Compuware的DriverWorks、BlueWaters的DriverWizard等软件能够轻易地生成高质量的USB驱动程序。单片机程序的编制也同样困难,而且没有任何一家厂商提供了自动生成的工具。编制一个稳定、完善的单片机程序直接关系到设备性能,必须给予充分的重视。以上两个程序是开发者所关心的,而用户却不太关心。用户关心的是如何高效地通过鼠标操作设备,如何处理和分析采集进来的大量数据。因此还必须有高质量的用户软件。用户软件必须有友好的界面、强大的数据分析和处理能力以及提供给用户进行再开发的接口。
2LabVIEW及其外部动态链接库的调用
LabVIEW是美国国家仪器(NI)公司开发的一种基于图形程序的虚拟仪表编程语言,其在测试与测量、数据采集、仪器控制、数字信号分析、工厂自动化等领域获得了广泛的应用。LabVIEW程序称为虚拟仪器程序(简称VI),主要包括两部分:前面板(即人机界面)和方框图程序。前面板用于模拟真实仪器的面板操作,可设置输入数值、观察输出值以及实现图表、文本等显示。框图程序应用图形编程语言编写,相当于传统程序的源代码。其用于传送前面板输入的命令参数到仪器以执行相应的操作。LabVIEW的强大功能在于层次化结构,用户可以把创建的VI程序当作子程序调用,以创建更复杂的程序,而且,调用阶数可以是任意的。LabVIEW这种创建和调用子程序的方法使创建的程序模块化,易于调试、理解和维护。LabVIEW编程方法与传统的程序设计方法不同,它拥有流程图程序设计语言的特点,摆脱了传统程序语言线形结构的束缚。LabVIEW的执行顺序依方块图间数据的流向决定,而不像一般通用的编程语言逐行执行。在编写方框图程序时,只需从功能模块中选用不同的函数图标,然后再以线条相互连接,即可实现数据的传输。
LabVIEW虽有接口卡的驱动和管理程序,但主要是针对NI公司自己生产的卡。对于普通的I/O卡,还不能直接被LabVIEW所应用,必须采取其他方法。其中可以用LabVIEW的PortIn和PortOut功能,但此法应用简单,无法实现较复杂的接口功能。而采用动态链接库,可以根据具体需要编写适当的程序,灵活利用LabVIEW的各项功能。用户可以自己编写DLLs实现LabVIEW与硬件的链接。用VC++6.0编制动态链接库,首先生成DLL框架,AppWizard将自动生成项目文件,但不产生任何代码,所有代码均需用户自己键入。DLL需要的文件有:①h函数声明文件;②c源文件;③def定义文件。H文件的作用是声明DLL要实现的函数原型,供DLL编译使用,同时还提供应用程序编译使用。C文件是实现具体文件的源文件,它有一个入口点函数,在DLL被初次调用的运行,做一些初始化工作。一般情况下,用户无须做什么初始化工作,只需保留入口点函数框架即可。def文件是DLL项目中比较特殊的文件,它用来定义该DLL项目将输出哪些函数,只有该文件列出的函数才能被应用函数调用。要输出的函数名列在该文件EXPORTS关键字下面。
3基于AN2131Q的单光子采集系统
该采集系统由笔者自行开发并用于单光子计数种子活性快速检测仪中。它主要由将光子信号转为电信号的光电倍增管(PMT)及其辅助电路和基于AN2131Q的USB采集卡组成。PMT及其前置放大器、放大器、甄别器等辅助电路能将微弱的光子信号转换为15ns的标准TTL脉冲信号,脉冲信号经过分频处理后再被USB采集,USB将采集的结果实时地传给主机处理。
3.1USB采集卡的硬件组成
该采集卡由微控制器、USB通信接口、主机以及数字I/O端口组成,如图1所示。
笔者设计了一种同步传输方式的单片方案,应用了内置微处理器的USB设计——EZ-USBAN2131Q。它是Cypress公司的一种内嵌微控制器的80脚USB芯片,包含三个8位多功能口,8位数据端口,16位地址端口,二个USB数据端口,二个可定义16位的定时/计数器和其他输入输出端口。其采用一种基于内部RAM的解决方案,允许客户随时不断地设置和升级,不受端口数、缓冲大小和传输速度及传输方式的限制。片内嵌有一个增强型8051微控制器,其4个时钟的循环周期使它比标准8051的速度快3倍。采用同步传输方式将单片机的计数值实时传送给主机,而主机对计数器的控制信号则采用块传输方式传送。EZ-USB是Cypress公司推出的USB开发系统,它为USB外设提供了一种很好的集成化解决方案。EZ-USB在其内核已做了大量繁琐的、重复性的工作,这样就简化了开发代码,进而缩短了开发周期。此外,开发商还提供了配套的开发软件(包括编译软件uVision51、调试软件dScope51、控制软件EZUSBControllPanel)以及驱动程序GPD(GeneralPurposeDriver)接口,以便于用户进行开发使用。
图2开启设备和获取采集数据的流程图
3.2USB采集卡的软件构成
在USB的Firmware中,采取同步传输(IsochronousTransactions)和块传输(BulkTransactions)两种传输方式。同步方式用来实时传送采集的数据,块传输主要用来传输主机命令信号和USB的状态信息。块传输中利用端点(Endpoint)2。两种传输方式的核心中断程序如下:
voidISR_Sutok(void)interrupt0//块传输方式
{
//initializethecoutersinthe8051
TMOD=0x05;
TCON=0x10;
TH0=0;
TL0=0;
Thb=0,
TH0=0;
TL0=0;
thb=0;
EZUSB_IRQ_CLEAR();
USBIRQ=bmSUTOK;//ClearSUTOKIRQ
}
voidISR_Sof(void)interrupt0//同步传输方式
{
if(TCON&0x21){//Dealwiththecounteroverflow
TH0=0;
Tl0=0;
THB++;
TCON&=0xdf;}
IN8DATA=TH0;//3Bytescounterresult
IN8DATA=TL0;
IN8DATA=THB;
EZUSB_IRQ_CLEAR();
USBIRQ=bmSOF;//ClearSOFIRQ
}
在LabVIEW应用程序中设计了一Usb.dll文件作为LabVIEW与USB的驱动程序。由于EZ-USB开发系统中已经提供了底层驱动程序(GPD)接口函数,用户只需调用这些函数即可与USB设备连接。因此在DLL的编制中只需调用它提供的函数,大大节约了开发时间,提高了开发速度。创建的Usb.dll文件中包含了如下五个输出函数,功能说明如表1所示。
表1Usb.dll包含函数的功能说明
Control主机对USB设备的控制
ReadResult获取USB发送到主机的数据
StartIsoStream启动设备的同步传输流
StartThread得到标准设备的设备描述符
StopThread关闭设备的同步传输流
其定义如下:
LPSTR_declspec(dllexport)_stdcallControl(intinput);
int_declspec(dllexport)_stdcallReadResult(void);
int_declspec(dllexport)_stdcallStartIsoStream(void);
int_declspec(dllexport)_stdcallStartThread(void);
int_declspec(dllexport)_stdcallStopThread(void);
开启设备和获取采集数据的过程如图2所示。它的主要功能有:开启或关闭USB设备、检测USB设备、设置USB数据传输管道(pipe)和端点(endpoint)、实时从USB接口采集数据、显示并分析数据。
硬件设计包括温度与磁场探头、供电电源、多通道数据采集仪器、PC上位机的选型以及机柜设计。
1.1温度检测温度探头类型为热电阻,热电阻测温原理是给热电阻通小电流,测量电阻上的电压,得出热敏电阻的阻值,对照热敏电阻的参数曲线得出温度。温度探头需要恒流源提供稳定的电流才可以保证读取电压的准确性,选择lakeshore公司生产的121系列恒流源可满足精度要求。该恒流源既提供固定档位电源供电也可以通过编程实现连续可调电流输出。由于超导线圈采用过冷液氮浸泡冷却[2],根据液氮温区(70K~77K)对探头型号进行选择。对于需要在30K~800K之间对温度测量的场合,可选择PT100系列铂电阻温度计[3],其额定电流为1mA。在这个温度范围内,铂电阻温度计具有很好的重复性和较高灵敏度,同时满足在电抗器的磁场环境下使用的要求。70K以上铂电阻温度计具有通用的标准曲线,如图2所示。相比较于其他种类温度探头具有更好的通用性,而且具有互换性。另外,在温度测量中,探头需要贴近超导带材,薄膜型的铂电阻温度计满足设计要求。探头的接线方式有二线制和四线制。采用二线制接线方法,会引入线路电阻,造成测量误差。因此在35kV电抗器的数据采集系统中,均采用四线制接线方法。
1.2磁场检测测量磁场强度的原理是霍尔效应,在半导体薄片两端通以控制电流,并在薄片的垂直方向施加匀强磁场,则在垂直于电流和磁场的方向上,将产生霍尔电压,根据产生的电压就可以知道磁场的大小[4]。在实际测量中需要在两个方向(轴向场与垂直场)对磁场进行测量。在35kV电抗器设计中,根据电磁设计仿真得到磁场的最大值约为2000高斯,并且该磁场探头的工作环境为液氮温区。Lakeshore公司生产的HGCA3020的轴向磁场探头与HGCT3020的径向磁场探头,可满足使用要求,其额定电流为100mA。
1.3数据采集系统数据采集系统还需要对探头电压进行记录以及处理显示等一系列后续工作[5]。实验过程中实验对象需要监测的信号比较多,采用数据采集仪器对各个数据进行采集记录,节约人力成本而且可以减少由于人工录入所导致的错误。在该套数据采集系统中,采集的信号有54路,温度采集精度为1K,电压精度为10mV。吉时利公司生产的3706数字开关万用表作为数据采集仪器满足使用要求。数据采集仪器采集数据以后,把数据传输到主机中通过程序对其进行处理,然后显示在显示器上供人员监测电抗器的工作情况。在电抗器实际运行过程中,主机工作环境可能较为恶劣,对工控机的稳定性和数据的安全性有一定要求,需要对主机进行加固、防潮、防辐射、防尘等特殊设计。研祥工控机IPC-810E满足使用要求。
1.4硬件布局及搭建(1)温度探头布点方案35kV超导可控电抗器超导线圈分为内外两圈,各由32个双饼组成。工作在交流工况下,超导线圈存在交流损耗,根据仿真结果显示端部线圈交流损耗功率最大,需要对线圈端部重点监控。单个超导线圈上布点25个,总计50个铂电阻。铂电阻在安装时需要对其进行加固,防止被快速流动的液氮损坏。(2)磁场探头布点方案电抗器中,带材受垂直磁场影响较大,端部的带材最易受到磁场的干扰,磁场探头安装在电抗器的端部。由于磁场探头受到液氮的冲刷,磁场探头需要通过夹子进行固定。通过对端部磁场两个垂直方向数据的读取,得到磁场强度的实时数据,为监测电抗器运行状态提供数据支持。各个设备的集成布局以及安装需要以机柜的形式实现。机柜的设计原则是整套装置的实用性和外在的美观性。机柜上主要安装的设备和仪器有:吉时利3706数据采集仪、工控机(包括工控机主机、液晶显示屏、键盘和鼠标)、探头供电电源,同时在机柜下部预留一部分空间用于放置实验过程中常用的一些工具和仪表等,如纳伏表、波形记录仪、锁放和功率分析仪等,设计方案如图4所示。
2软件开发
软件开发即控制界面开发,通过界面控制各种数据采集仪器的工作,并将采集到的数据传输到电脑上进行处理、显示和保存等[6]。图5所示的为软件搭建流程示意图,首先调试设备,完成工控机与3706数据采集仪器之间的通信,使数据能够进入主机进行处理,然后对数据进行分类处理,实现多通道数据处理以及数据的分类显示。基于LabVIEW开发的程序主要包含后台程序以及操作界面。后台程序(1)数据采集系统主程序数据采集系统主程序实现对数据采集仪器中的电压数据读取的功能[7]。通过在主程序中对数据进行通道选择可以实现不同的处理功能,包括3706仪器的通讯设置和数据初始化。(2)数据传输程序数据传输是指将数据从数据采集仪器上传输到工控机上。LabVIEW中提供了多种通讯协议,如串口、并口和以太网传输协议,此处选择以太网作为传输方式,数据采集仪器发送数据,工控机接收发送过来的数据,进行处理。(3)数据记录程序LabVIEW中可以将数据保存为多种格式,其中就包括常见的Excel表格,“写入电子表格.vi”可以将数据保存为Excel格式,并且该VI不需要启动Excel,写入速度较快、使用较为简单,所以使用该VI进行数据保存。由于EXCEL是目前比较通用的数据处理软件,所以保存数据的格式选为EXCEL表格,方便处理数据。程序中可以设定将EXCEL文件保存在某个文件夹下,分别将磁体温度、磁场强度保存在两个文件夹下,并且为方便查找数据,每个文件的文件名以日期和时间命名,这样方便日后查找数据。对于不同类型数据也可以直接分开存储,方便以后查询使用。在以上程序的实现中,主要以子VI形式完成。子VI是指将特定的程序封装,完成特定的功能的模块。通过对程序的封装既可以实现原有功能,并且使得主程序更加简洁,便于查找错误,又增加了程序的可移植性,提高了程序的整体质量。操作界面该系统的操作界面首先确保了所有数据的显示以及后台记录,另外对电抗器内部环境参数(杜瓦内部压强)以及外部辅助设备的工作状态(液氮制冷机流量)也进行了监控。针对温度监控,单独设置了更加直观的波形显示,更利于观察超导体的温度变化,如图6所示。在35kV电抗器数据采集及监控系统的设计方案中,界面中没有需要用户设置的参数,在前面板中分列铂电阻显示控件来显示数据。开始运行后,3706开始采集数据,并且将这些数据储存到表格当中。在前面板中,同一个波形图中可以显示多个通道的数据,每个通道的数据有颜色不同,这样就可以比较实验磁体不同部分的温度或不同超导双饼的电压等。
3总结
多路视频数据实时采集的软件实现
常永亮(飞行试验研究院测试所陕西西安710089)
【摘要】介绍了视频数据的采集、多路视频数据间的切换、视频数据的保存及基于C/S结构的实时视频数据传输与显示,在对四路飞行视频数据进行实时采集的运行时,各项需求已达到要求。
【关键词】视频数据、Divx编码、RTP/RTCP协议、TCP/UDP协议、媒体流、帧
1引言
随着信息技术的不断发展,人们将计算机技术引入视频采集、视频处理领域,用计算机处理视频信息和用数字传输视频数据在很多领域已有广泛的应用,在我们的飞机试飞中也被大量的应用。
视频图像采集的方法较多,基本可分为2大类:数字信号采集和模拟信号采集。前者采用图像采集芯片组完成图像的采集、帧存储器地址生成以及图像数据的刷新;除了要对采集模式进行设定外,主处理器不参与采集过程,我们只要在相应的帧存储器地址取出采集到的视频数据即可得到相应的视频数据,这种方法,无论在功能、性能、可靠性、速度等各方面都得到了显著的提高,但成本高。后者采用通用视频A/D转换器实现图像的采集,其特点是数据采集占用CPU的时间,对处理器的速度要求高,成本低、易于实现,能够满足某些图像采集系统的需要。
此系统要求每秒采最大25帧(设为可调),客户端实时显示最大25帧(设为可调),保存为MPEG4格式,画面要求为最大分辩率为1024X768。
多路视频实时采集使用的是VisionRGB-PRO卡(英国Datapath公司),此卡可同时实时采集两路视频数据,基本达到了本系统的要求,再用一台VGA矩阵切换器将前端数据源的四路视频数据进行人为切换采集。
2硬件环境的构建(硬件框架)
图一系统硬件框架图
上图为整个采集系统的硬件框架。
此采集系统主要实现对前端四路视频数据的人为切换式实时采集,在服务器端可同时采集和储存两路视频数据(在此只用一个视频采集卡),也可以一次只采集一路视频数据,再经网络实时传输到客户端显示,服务器端也实时显示所采集的视频。
在进行视频切换方面可在服务器端或客户端自行切换,在服务器端可通过串行口操作VGA矩阵切换进行相应的视频输入输出口的切换,在客户端可通过网络-服务器程序相应模块-串行口-VGA矩阵切换进行相应的视频输入输出口的切换。
3软件实现概述
3.1服务器端的实现
图二服务器端程序流程图
上图为服务器端实时采集视频的程序流程图。视频数据量较大,这就要求视频数据处理系统具有实时采集,大容量存储和实时处理的特点。在服务器端的实现是整个系统的关键,在此也承担了大量的工作,因此对软件和硬件方面要求也很高就成为必然。
软件要实现对视频数据的实时采集(最多两路)、控制视频接口、把视频数据实时编码保存并发送到多个客户端。以上就是要在服务器上实现的主要功能。
在采集方面最主要的是要有实时性,在此以事件驱动的方法从端口获取数据,采集到视频数据流在桌面显示的同时再编码保存,视频采集的数据要经软件的相应模块将其设为位图型式的视频帧,以利于在服务器端的显示和编码保存,在此采用Divx编码,Divx编码后形成以帧为格式的MPEG4流。Divx解码也是以帧的格式解压,因此有利于向客户端发送数据时以帧为单位发送视频数据流。
此处用到Divx编码就不得不把Divx编码作简要的介绍。
DivX由DivXNetworks公司开发的,即为我们通常所说的DVDrip格式,它采用了MPEG4的压缩算法同时又综合了MPEG-4与MP3各方面的技术,也就是使用DivX压缩技术对DVD盘片的视频图像进行高质量压缩,同时用MP3或AC3对音频进行压缩,然后再将视频与音频合成并加上相应的外挂字幕文件而形成的视频格式。其画质直逼DVD并且体积只有DVD的数分之一。这种编码对机器的要求也不高,所以DivX视频编码技术可以说是一种对DVD造成威胁最大的新生视频压缩格式,实际上Divx=(视频)MPEG4+(音频)MP3。
媒体流分为四个流:视频流、音频流、文本流、MIDI流,用视频卡采集的是两路视频流,保存时每路视频流多加了一个文本流,文本流主要应客户要求加入的服务器时间和一些人为输入的文本信息,在记录两个媒体流时一般有两种记录方法,在此采用的是将视频流和文本流记到一个文件中的方式,这样有利于文件以后的保存和查阅。
在采集软件实现方面主要应用了相应的SDK(Softwaredevelopmentkit)和API(应用编程接口),还可用VFW(VideoforWindows)。但后一种方法实现简单单路视频采集卡可以,对于多路视频的采集用第一种方法更加灵活,但实现比第二种复杂的多。在服务器实现软件方面主要有以下几大块:一是采集;二是保存;三是向客户端发送;四是串口的通行;五图像的形成;六是桌面显示;七是对图像亮度、颜色、位置等的调整;采集通道、采样率、采集时间的选择;等等。
在服务器端各方面协调工作是关键,程序启动首先默认上次设定的视频采集卡通道,如有视频数据就显示、保存,如果没有视频数据就等待,如果要调整视频采集卡通道可用串口给VGA矩阵切换器发送相应的命令让VGA矩阵切换器进行相应的输入输出通道切换。也可经客户端经网络到服务器串口到VGA矩阵切换器进行VGA矩阵切换器相应的输入输出通道切换(在后面介绍客户端时再介绍)。每次切换后将自动保存原视频文件,如切换后有视频数据将自动重新生成一个新的视频文件。
在服务器桌面显示的画面是没经任何编码处理的,但网络传输和保存的视频数据是经Divx编码的,这样有力的减轻了网络间传输和服务器的负担。
用局域网实时传输视频数据已在一些领域大量的应用,局域网以有线局域网居多,因为有线局域网技术成熟、传输速度快,但是长时间传输大量视频数据时也会引起传输速率不稳定,引起数据堵塞,会导致视频传输的质量大幅度下降,容易引起画面的重影、抖动、花屏、延迟等现象。
为了在局域网上有效的、高质量的实时传输媒体流,需要多种技术的支持,包括网络传输层协议的选择、编(解)码技术,网络传输层质量控制技术等等。
实时传输协议RTP是针对Internet上多媒体数据流的一个传输协议,实时传输控制协议RTCP负责管理传输质量在当前应用进程之间交换控制信息,RTP/RTCP协议只适合服务器端和客户端相对动态的实时多媒体数据流传输。但是,对于图像采集速度固定的实时视频采集,有时会引起采集的数据来不及压缩而直接丢弃而达不到实时的要求,所以没有采用RTP/RTCP协议,而是从发送端出发,实时判断网络状况,采用暂停发送的控制策略进行实时传输。
网络传输层质量控制技术采用的是TCP/UDP协议,UDP是一种不可靠的、无连接的协议,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。它不提供检错和纠错功能,一旦网络出现堵塞时,大量的数据报文会丢失。对于Divx编解码技术,是以帧为单位进行编解码的,分为关键帧和非关键帧。在传输过程中,由于压缩率比较高,只要一帧中错一比特位,将影响其后的更多的比特位,直接造成图像的模糊、花屏等现象。只有等到下一次关键帧的到来才有可能恢复图像的清晰。为了保证传输的正确性,自己需要在应用层制定协议。如此一来,只能选择使用TCP来进行网络通信,TCP的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。再辅助以暂停发送的控制策略,较好的解决局域网中实时视频传输容易引起的重影、抖动、花屏的问题。
为了达到视频传输的实时性,总的思想是最少的发送冗余信息,最大程度上发送最新的视频。
在服务器端视频采集采用从VisionRGB视频采集卡捕获视频图像,得到的是位图型式的视频帧,然后用Divx编码进行压缩,通过Winsock实现压缩后的视频数据在局域网中的实时传输,在客户端接收完的数据交给Divx解码器解压,最后实现视频显示。如图三所示:
图三网络间传输流程图
如果局域网通信速率很高且状态稳定,则进行实时视频传输就可以达到非常好的效果。但是在网络出现异常时会导致数据传输率不稳定或明显下降,造成发送端数据积压。此时就要采取一定的策略来控制发送端(服务器端),以达到实时性的要求,暂停发送策略很好的解决了这一现象。使用此策略有时会有丢帧的现象(100M局域网没有发现丢帧现象),但就客户端的要求是满足的,在服务器端的采集、显示、保存不受暂停发送策略的影响,也就是不会有丢帧的现象,虽然应用了暂停发送策略,但已经能够满足在客户端实时监控需求了。
3.2客户端的实现
在上面讲服务器端的实现时已经大概讲到客户端的实现,因为只要把服务器端实现好客户端实现难点就小的多。如图四所示:
图四客户端程序流程图
在客户端也可以自行选择要采集的通道,但对服务器端的采样率等都不能通过客户端进行设置,实现客户端时主要是要实时监听和服务器网络连接状态和判断接受的视频数据是否正常是否启用暂停发送策略等。每秒接收的帧数可自行调节,但不能大于服务器端每秒采集的帧数。
在客户端还要实时Divx解码,如果不解码就无法显示,Divx解码速度是完全可以达到实时显示的要求。Divx解码和显示在不同的两个线程中实现的,这样做主要是为了显示流畅。可以在两个不同客户端显示两个不同的视频通道采集的数据。
4结论
本系统作为电视跟踪系统的一部分,负责多路视频数据的实时采集、存储和视频编解码算法的实现、基于C/S结构的实时视频数据传输显示,在通过各种测试后在试运行期间已达到本系统的预期要求,本系统还支持事后的视频回放。
本系统的开发难点和重点在服务器端,服务器端的开发直接影响到整个系统开发。
参考文献
[1]《Windows核心编程》Microsoft公司〔美〕著
基于通用信号处理开发板,利用FPGA技术控制AD9233芯片对目标模拟信号采样,再将采样量化后的数据写入USB接口芯片CY7C68013的FIFO中,FIFO写满后采用自动触发工作方式将数据传输到PC机。利用VC++6.0软件编写上位机实现友好的人机交互界面,将传输到PC机上的数据进行储存和实时回放。本系统主要实现以下两大功能:1)ADC模块对目标模拟信号进行采样,利用FPGA技术将采样后的数据传输到USB接口芯片CY7C68013的FIFO中存储。2)运用USB2.0总线数据传输技术,将雷达回波信号数据传输到PC机实时回放。分为应用层、内核层和物理层3部分。应用层和内核层主要由软件实现。应用层采用VC++6.0开发用户界面程序,为用户提供可视化操作界面。内核层基于DriverWorks和DDK开发系统驱动程序,主要起应用软件与硬件之间的桥梁作用,把客户端的控制命令或数据流传到硬件中,同时把硬件传输过来的数据进行缓存。物理层主要以FPGA为核心,对USB接口芯片CY7C68013进行控制,通过USB2.0总线实现对中频信号采集。系统设计采用自底向上的方法,从硬件设计开始逐步到最终的应用软件的设计。
2硬件设计
FPGA在触发信号下,控制ADC采样输入信号,并存入FIFO中。当存满时,将数据写入USB接口芯片CY7C68013,同时切换另一块FIFO接收ADC转换的数据,实现乒乓存储,以提高效率。FPGA模块的一个重要作用是控制USB接口芯片CY7C68013。当ADC采样后,数据进入FPGA模块,FPGA控制数据流将其写入CY7C68013的FIFO中,以便于USB向PC机传输。CY7C68013的数据传输模式采用异步slaveFIFO和同步slaveFIFO切换模式。通过实测,前者传输速度约为5~10Mbit/s,后者传输速度最高可达20Mbit/s,传输速度的提高可通过更改驱动程序的读取方式实现。
3软件设计
3.1USB驱动程序设计
USB2.0总线传输技术最高速率可达480Mbit/s。本系统采用批量传输的slaveFIFO模式。CY7C68013芯片内部提供了多个FIFO缓冲区,外部逻辑可对这些端点FIFO缓冲区直接进行读写操作。在该种传输模式下,USB数据在USB主机与外部逻辑通信时无需CPU的干预,可大大提高数据传输速度。Cypress公司为CY7C68013芯片提供了通用的驱动程序,用户可根据需求开发相应的固件程序。
3.2FPGA模块程序设计
系统中FPGA模块的核心作用是控制AD9233芯片进行采样。AD9233作为高速采样芯片,其最高采样速率达125Mbit/s,最大模拟带宽为650MHz。通过改变采样速率可使该系统采集不同速率需求的信号,扩展了该系统的应用范围。描述FPGA控制USB数据写入接口芯片FIFO的状态机如图6所示。状态1表示指向INFIFO,触发FIFOADR[1:0],转向状态2;状态2表示若FIFO未满则转向状态3,否则停留在状态2;状态3表示驱动数据到总线上,通过触发SLWR写数据到FIFO并增加FIFO的指针,然后转向状态4;状态4表示若还有数据写则转向状态2,否则转向完成。
3.3上位机设计
为实现人机交互,利用VC++MFC在PC机上编写了可视化操作界面,即上位机。上位机既用于数据采集的控制,同时也用于采集数据的实时回放。上位机界面如图7所示。上位机主要功能:1)按下“检测USB”按钮,可检测USB是否连接正常,并显示USB基本信息。2)按下“开始采集”按钮,可将采集的数据传输到PC机并实时回放数据波形;再次按下“开始采集”按钮,可暂停数据波形回放。3)按下“保存数据”按钮,可将采集的数据以*.dat文件的形式存储到PC机硬盘。4)按下“结束采集”按钮,可关闭采集系统并退出界面;或按下“确定”和“取消”按钮,也可直接退出界面。
4系统实测
为了测试数据采集与回放系统,利用通用信号处理开发板设计了DDS模块。该DDS模块产生一个正弦波作为测试信号,通过AD9744芯片转换后变为模拟信号输出,并将此输出信号接至示波器以便验证系统。数据采集与回放系统的实物图及系统实测波形与回放波形。
5结束语
关键词:MCF5249uClinuxWeb数据采集
引言
现在嵌入式系统的应用越来越广泛。随着网络技术发展和市场需求的变化,工业设备实现网络化管理控制已经成为一种必然趋势。M2M(MachinetoMachine)的网络通信已成为国内外研究热点,而Web技术为工业设备实现网络化管理提供了一种解决方案。本文从硬件和软件设计两个方面讨论了摩托罗拉MCF5249处理器在数据采集方面的应用,并实现了采集数据的远程Web表征。
由于这一系统面向广义的过程,所以只要可获得过程参数,就能实现过程行业的远程在线表征。特别是基于Web完成实时数据库生成,真正实现远程集群系统的数据资源无人工干预自动获取。其应用将会不断地延伸。
本文描述的摩托罗拉MCF5249是以ColdFire32位微处理器为基础的高性能处理器,该处理器内部集成了一个片内12位ADC,可用于工业数据采集。且数据采集系统基于嵌入式操作系统uClinux。由于uClinux是为没有MMU的微处理器设计的。且源泉代码公开,为降低成本和获取软件的自有产权提供了方便。当然,uClinux不是一个强实时系统,为支持一般过程系统,可以通过一些补丁程序来提高其实时性,所以本文讨论的数据采集系统主要应用于一些实时性要求不高的场合。
1数据采集系统的硬件设计
摩托罗拉MCF5249处理器内部集成了一个片内12位∑—ΔADC,它有四路输入(ADIN0~ADIN3),任一时刻只允许一路输入,由多路选择器决定。ADC的数字部分在MCF5249的内部,而模拟电压比较器由电路提供。A/D转换的输出引脚以脉宽调制的格式提供参考电压,因此,该输出需要一个的阻容电路,将其转换成直流电压,以备外部的电压比较器电路使用。数据采集系统的硬件原理图如图1所示。
由于微处理器不可承受负电压,所以必须将输入电压限制在0~+3V之间。Motorola公司不建议使用外部箝位二极管直接在模拟输入端进行过压保护,而在输入端引入1~10kΩ的限流电阻和低通滤波器,在低通滤波器的输入端连接二极管对输入电压进行箝位。
2数据采集系统的软件设计
数据采集系统的软件设计主要分为两大模块,即数据采集模块与数据显示模块。
2.1数据采集模块的设计
数据采集模块是系统的核心模块,为了提高数据采集的实时性,应采用中断方式完成数据采集。其流程图如图2所示。
MCF5249微处理器为其内部ADC提供了一个控制寄存器ADCONFIG,其地址是MBAR2_ADDR+0x402,在初始化程序中需要指定MBAR2_ADDR地址。
通过ADCONFIG寄存器可以设置A/D转换器工作方式、采样频率、是否采用中断方式等。下面给出设置ADCONFIG寄存器实例。
#defineMBAR2_ADDR0x8000000
#defineAD_CONFIG0x402
#defineAD_VALUE0x406
…………
//设置ADC
*(volatileunsignedshortint*)(MBAR2_ADDR+AD_CONFIG)=0x442;
该设置确定ADIN0作为模拟信号输入通道,采样频率设置为1/4系统总线时钟频率。当时钟产生4095次翻转时,系统产生一个软件中断(中断号为63)。一次采样结束,并将采样结果存于ADVALUE寄存器(其地址为MBAR2_ADDR+0x406)。A/D转换值可以用如下公式计算:
Vi=(X/(2n-1))×Vfullscate
其中,Vi为ADC的输入电压;Vfullscate为满量程输入电压;
X为ADC输出的数字量;
n为ADC的位数。
A/D转换的结果在中断处理程序中读取。读取一次转换的程序代码如下:
Volatileunsignedshortintm;
m=*(volatileunsignedshortint*)(MBAR2_ADDR+AD_VALUE);
通常,A/D转换需要连续采样。采样结果应存放在一个多访问循环队列MACQ(MultipleAccessCircularQueue)中。
MACQ是一个定长有序的数据结构。源进程(生产者,ADC采样程序)将数据存入MACQ,一旦初始化,MACQ总是满的。当有新的数据被存入(PUT)MACQ,旧数据即被丢弃(如图3)。应用进程(消费者)可以从MACQ中读取任何数据。读功能是非破坏性的,即读操作不会改变MACQ。
在uClinux中,A/D转换中断程序的编写方法是将A/D转换器作为一个字符设备来处理。中断程序是在linux/drivers/char目录下编写,其结构如下:*file:m5249_adirq.c
#include<linux/interrupt.h>
#include<asm/irq.h>
#defineADC_IRQ(128+63)//定义中断号
#defineMBAR2_ADDR0x8000000
#defineAD_CONFIG0x402
#defineAD_VALUE0x406
/*定义中断处理函数*/
voidadirq_interrupt(intirq,void*d,structpt_regs*regs){
在此读取A/D转换的值并存入队列中。
}
/*设备初始化函数*/
intadirq_init(){
intresult;
unsignedshortadc_irq;
adc_irq=ADC_IRQ;
result=request_irq(adc_irq,&adirq_interrupt,SA_INTERRUPT,5249_adirqNULL);//注册中断
if(result==-1)
{printk(“Can''''tgetassigned%d”adc_irq);
returnresult;}
return0;
}
中断服务程序的添加方法如下:
①编辑uClinux/drivers/char目录下的mem.c,添加“adirq_init();”;
②编辑此目录下的Makefile加入“obj-y+=m5249_adirq.o”;
③编译(make)。
2.2数据显示模块的设计
为了实现采集到的数据以Web方式显示,需要选择一个Web服务器。本文采用的Web服务器是BOA。在CGI程序中编写一个函数读取MACQ队列中的数据并显示。
主要有以下显示模块。
(1)编写一个CGI程序
*编写一个读取MACQ队列中数值的函
readFromMacq()。
*编写一个生成动态HTML页面的函数show()。
Voidshow_t(){
……
printf("Content-type:text/html");
prinft{"
<html>
<head>
<metahttp-equiv=pragmacontent=no-cache><metahttpequiv=expirecontent=now>
<title></title>
</head>
<body>");
在此将MACQ中的数据读出,假设值赋给变量n
prinft("<center")Thevalueis%x!</center>
</body>
</html>",n);
}
*编写一个CGI的主程序main_cgi。
在主程序中需要读取HTML页面中的字符,并判断应执行那一个CGI程序。
(2)用HTML语言编写一个主页
在主面中应包含:
<ahref=/cgi-bin/main_cgi.cgi?flag=10target=main>键接字符</a>.
其中,flag的值是main_cgi用于判断应执行哪一个CGI程序的标志。