目前,一些发达国家的工业设备运行监测和管理已日趋信息化和专业化,但国内这方面尚存在许多问题。有些企业出于投资规模和经济效益的考虑,尚未引进现代化的检测设备和管理手段,依旧使用传统的人工巡检和记录模式。即使一些大型企业已配备了较先进的监测系统和监测仪器,但是由于具体操作人员的素质和责任心等方面的问题,并未使其发挥应有的作用,且导致近年来国内设备运行故障频繁发生。因此研制和开发过程装备智能诊断系统是十分必要的。整个系统的设计思想是:系统主机对设备运行状况进行分析并发出任务指令;巡检人员按任务指令要求利用巡检仪采集并存储数据,然后将采集好的数据发送到主机;主机再根据巡检仪输入的数据分析设备的运行状态并发出下一次的任务指令。如此循环以达到保证设备安全运行的目的。本文介绍针对巡检仪提出的一种基于Windows CE的数据采集与处理系统,并给出了硬件设计和软件设计。
选择Window CE(以下简称CE)作为软件运行平台,这主要是基于它的特点[1]考虑的。CE是多线程、多任务、完全抢占式的32位嵌入式操作系统。新的内核服务,例如嵌套式的中断、更好的线程响应、新增的任务特性、信号量等,使得它能对事件和中断立即响应,能够满足数据采集中苛刻的实时性要求。它支持的多线程使得数据采集和显示处理等能够同时进行。它具有强大的存储和文件处理能力,能够满足数据存储的需要。它对通信及网络的支持,使得它与系统主机的通信变得更加容易。
1 系统的硬件结构
系统硬件的主要组成如图1所示。
TPC-650是为CE或其他高级操作系统设计的硬件平台。它适合于各种工业应用,包括工业自动化、自动化生产线、精密加工、生产过程控制、环境控制、终端信息系统、娱乐管理系统等。它具有高质量的6.4“VGA TFT/5.7”QVGA STN液晶显示器、Intel Pentium 266 MMX微处理器、10/100 Base-T网口、二个串口(RS-232,RS-232/422/485)、一个快闪卡插槽、一个外部16位PC/104模块扩展槽和触摸屏。它的核心是微型X86 CPU,但它在图形显示和网络通信方面的性能更优。
PCM-3718H是一个高效的多通道数据采集模块,插在TPC-650的PC-104插槽。它支持12位的A/D转换和数字输入/输出,能够实现DMA方式的单/多通道的A/D转换。其DMA转换的采样频率可达100kHz。它具有灵活的触发选择,包括软件触发、实时同步触发和外部脉冲触发。
PCLD-880是通用螺丝端子板,能提供方便的信号接线,并能与数据采集卡的20芯扁平电缆相连。它还带有一个DB-37接口,可以支持带有DB-37的数据采集控制卡。它是能在恶劣的环境下实现可靠连接的工业端子块。
本系统的主要工作过程是用位移/速度/加速度传感器提取模拟电压信号,经过PCLD-880,输入到PCM-3718H。通过软件编程控制PCM-3718H数据采集模块,对模拟电压信号进行采样,完成A/D转换和数据的存储及处理。
2 软件设计
2.1 应用程序执行数据采集的工作过程
首先,从上位机下载任务文件,打开任务文件,在用户界面上显示为任务列表。操作人员将信息钮只读器与设备上的信息钮贴合,程序自动从任务表中找到匹配项,进行数据采集。每采集完一个设备,该设备号从任务列表中自动删除。
采集开始的同时会显示三种曲线:实时曲线、平均值曲线和FFT曲线。操作人员根据平均值曲线的平稳程度决定是否将采集到的数据存储起来。实时曲线可以反应所测物理量的真实变化情况。FFT曲线体现所测物理量的频域特征。采集完成后,向上位机发送数据。
2.2 多线程的数据采集
因为需要在较短的时间内完成数据采集、分析、图形显示和数据存储等任务,所以采用多线程模型利用多个线程分别完成各项任务。
本系统充分利用CE 操作系统的多线程特点将不同的任务分布到各个线程中,使各个任务同步而协调地进行。主线程负责创建用户界面、接收消息等工作。为了保证数据采集不被其他线程中断,专门开辟一个优先级较高的线程来采集数据。各个线程(数据采集线程、数据动态显示线程和数据存储线程)中所要完成的工作并行进行。线程间的通信通过消息响应函数PostMessage 和CEvent对象来实现。
数据采集线程和显示线程之间的同步通过使用线程同步对象Critical Section来实现。它能够保证在同一时间只有一个线程访问数据缓冲区。当采集线程向缓冲区中写数据时,采集线程拥有Critical Section,显示线程就不能够访问缓冲区;只有当采集线程将Critical Section对象释放之后,显示线程获得了Critical Section对象,进而才能读取缓冲区中的数据。这就保证了显示线程读到正确的数据。数据存储线程、采集线程及显示线程三者之间的同步也是如此。
2.3 软件模块关系和各个模块的功能
系统各软件模块关系如图2所示。
2.3.1 通信模块
通信模块负责本系统与上位机之间的通信,包括从上位机下载文件和向上位机传送采集的数据。使用CSocket类建立TPC-650上的客户端和桌面PC上的服务器程序。用CSocket类与CSocketFile和CArchive类一起使用来完成数据的发送和接收。在程序运行时,为了“听”由客户端程序发出的连接请求,服务器程序首先运行。下面是建立服务器和客户端通信程序的步骤。
(1)构造一个CSocket类对象。使用BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,LPCTSTR lpszSocketAddress=NULL)函数。在服务器程序中使用该函数时,要指定nSocketPort值。
(2)客户端CSocket调用CAsynCSocket∷Connect函数连接服务器Csocket。服务器端用CAsynCSocket∷Listen函数“听”客户端发送的连接消息。调用CAsynCSocket∷Accept函数接收客户端发送的消息。注意,virtual BOOL Accept(CAsynCSocket& rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL)函数需要一个新的rConnectedSocket作为参数。因此在接收之前,要先构造一个新的CSocket类。
(3)构造一个CSocketFile类对象,它与CSocket类对象相关联。
(4)构造一个CArchive类对象,它与CSocketFile对象相关联。
(5)使用CArchive类对象在服务器和客户端之间传递数据。
系统程序中有二部分要用到客户端和服务器之间的通信。一是从上位机即桌面PC上下载任务文件;二是向上位机发送采集的数据。
在TPC-650上运行的客户端程序主要完成:(1)连接服务器;(2)向服务器发送采集到的数据;(3)向服务器发送请求,要求服务器发送任务文件,并将任务文件存储起来。
在桌面PC上运行的服务器程序主要完成:(1)接收由客户端程序发来的文件并存储在新的文件中;(2)应客户端请求向客户端发送文件。
2.3.2 任务表模块
任务表模块负责任务表的生成。有三种生成方式,(1)从上位机下载任务文件并直接在用户界面上生成任务表。(2)打开任务文件库中的任务文件。(3)手动编辑任务表。任务表由二列构成:第一列是设备号,每个设备都有四个点要采集,每个点有水平和垂直二个方向的值,所以一台设备要采集八组数据。当一个设备的八组数据都采集完之后,该设备从列表中消失。为了让巡检人员能够清晰区分正在采集的项、采集完成的项和未被采集的项,可用不同的颜色来区分。用红色表示正在采集的设备和正在采集的位号,用蓝色表示已经采集过的位号。
2.3.3 数据采集模块
数据采集模块要完成一系列任务,包括设置采集参数、采集数据、对数据进行处理并输送给图形显示模块和数据的存储等。利用PCM-3718H的驱动进行数据采集部分的编程。
数据采集:在进行数据采集时首先对数据采集板进行初始化配置;然后打开设备,获得设备的特征参数;为ADDMA转换分配数据缓冲区;开始ADDMA转换,即数据采集。采集模块用到的主要函数如下:
DRV_DeviceOpen(dwDeviceNum,(LONG far*)&DriverHandle) //打开设备
DRV_DeviceGetFeatures(DriverHandle,(LPT_DeviceGetFea-tures)&ptDevFeatures)) //获得设备特征参数
DRV_AllocateDMABuffer(DriverHandle,(LPT_AllocateDMA-Buffer)&ptAllocateDMABuffer)) //为ADDMA转换分配缓冲区
DRV_FAIDmaStart(DriverHandle,(LPT_FAIDmaStart)&ptFA-IDmaStart)) //开始采集
数据存储[2]:用VC++ MFC在Windows上开发程序时,数据库可用ODBC(开放数据互连)或DAO(数据访问对象)等数据库引擎来访问。CE既不支持ODBC,也不支持DAO。CE中的数据库不是功能完全的数据库系统,而只是一些结构化存储数据的集合。表与表之间不存在关系数据库中那样的关联。对数据库进行封装的操作封装于CCeDBDatabase、CCeDBRecord、CCeDBProp、CCeDBEnum四个类中,它们是CE所特有的。在CE中实现数据库很简单,它只有一个层次并且最多可以有四种排序和索引,但它却可以作为一个强有力的工具来组织不太复杂的数据。因此用CE中的数据库来存储采集的数据十分方便。
2.3.4 图形显示模块
图形显示模块包括三个部分:时实曲线、平均值曲线和FFT曲线。绘制曲线中遇到的主要问题就是显示线程与采集和存储线程之间的同步问题(前面已经说明,此处不再赘述)。
2.3.5 巡检地图
在TPC-650中存储全厂所有设备的位置、名称信息,形成一张设备地图。根据每天的任务表和这张设备地图,自动生成每次要巡检的设备地图。该地图上表明设备的名称、方位,并给出最优的巡检顺序。这样既节省巡检人员的时间又可以做到不漏检。
巡检地图示意图如图3所示。
用星形表示正在巡检的设备,粗线箭头指向下一个要巡检的设备,未巡检的设备用方形表示,路径用细线表示,巡检完成的设备用圆形表示。当地图上所有点都变为圆形时说明采集任务已完成。
3 软件开发环境的设置
系统软件在另一台普通PC上开发,其配置如图4所示。除了要安装CE软件开发包,还要安装SDK for TPCx86 VC/VB及Advantech Device Driver2.0。执行数据采集的硬件PCM-3718H需要用软件驱动,即具有“量身定做”的函数。因此程序要下载到硬件平台上进行调试,而不能在开发用的PC上的仿真环境下调试。
4 结束语
使用embedded Visual C++开发基于CE的数据采集和处理系统是该领域里的新尝试。利用CE支持多线程、数据库、通信及实时性等特点开发出的数据采集和处理系统具有界面友好、性能可靠、采集速度快、软件可扩展等优点。目前该系统已投入使用并取得良好的效果。
上一篇:基于NiosII的嵌入式网络通信系统
下一篇:基于ARM和μC/OS-II的无线数据采集系统设计
推荐阅读最新更新时间:2024-05-02 21:01