基于TCP/IP的多数据流传输测控系统的设计与实现
作者:刘作臣 马卫东 龚彬 彭磊
来源:《现代电子技术》2012年第03期
作者:刘作臣 马卫东 龚彬 彭磊
来源:《现代电子技术》2012年第03期
摘要:为保证子测控设备的独立测量、状态监控和实时数据的同步传输,设计基于TCP/IP的多数据流传输测控系统,对需求参数进行测量,采用基于多重事件的网络通信技术、数据采集技术及基于队列的多数据同步处理技术,利用现有的局域网资源,实现设备的控制,实现数据的实时获取、存储,数据流整合,实现信息、资源及任务的综合共享及管理。该系统经长期运行,稳定可靠,达到了设计的要求。
关键词:测控系统;TCP/IP;多数据流;多重事件;数据队列
中图分类号:TN06-34;TP393 文献标识码:A 文章编号:1004-373X(2012)03-0151—03
引言
随着工业的发展,工业现场的规模越来越大,几台甚至十几台计算机在不同的地理位置完
成不同的工业测量或控制任务,体现出网络化、集成化、分布化、节点智能化发展的趋势,伴随而来的是数据源的增多和设备监控复杂度的增加,为此设计一种多数据流网络传输测控系统。本系统以TCP/IP技术为基础而搭建的网络测控平台,实现了分布式的多台计算机的信息交互和设备控制,具有简单、高效、实时性高等优点。
1系统原理与组成
多数据流传输测控系统可以分为:数据源设备模块、数传与实时处理模块、远程控制台模块、控制台设备模块、前端单片机采集设备模块五个部分。系统组成如图1所示。在这个测控系统中各个测控部分相对独立,可
下面分别介绍多数据流传输测控系统五个主要部分的基本组成及功能。
1.1数据源设备模块和单片机模块
数据源设备模块和单片机采集模块以两个独立模块作为前端数据采集设备。数据源设备为数传与实时处理设备提供多路TCP数据流,单片机为控制台设备提供串口数据帧。
1.2教传与实时处理模块
数传与实时处理模块作为客户端,数据源设备计算机作为服务器端。二者通过交换机连接到网络上,基于TCP协议与数据源设备模块进行多数据流通信,数据以二进制文件格式写人到本地磁盘。接收完成一次完整数据(定长TCP流数据)后将用户感兴趣的部分数据进行整合为一个数据帧,通过UDP协议方式发送到远程控制台的监控界面。同时用户也可通过手动或自动选择多条码流的部分数据进行本地数据曲线图形显示或数据柱状图形显示。
1.3远程控制台模块
远程控制台负责对数传与实时处理模块、控制台模块的网络唤醒和网络监控,以及完成
对远程设备电源的相关操作。远程控制台接收相邻模块的网络数据帧(包括数传与实时处理模块对多数据流进行整合的数据帧和控制台模块转发的单片机采集数据帧),对控制台发送网络控制帧(完成参数设置、系统开启关闭、板卡操作、串口操作等任务),采用UDP协议进行通信。
1.4控制台设备模块
控制台设备模块由CPCI工控计算机和继电器板卡组成。供电电源继电器卡采用NI PXI-256416路5ASPST开关模块,它是大功率继电器卡,可进行电源输入和电源备份;断电及转电控制信号继电器卡采用ADLINK PXI-790116路通用SPDT开关模块,可进行电源的控制切换。系统结构及外部接口关系如图3所示。
系统采用Agilent N6700系列模块电源供电,控制台由RS422串行通信接口连接到单片机测控模块、网络连接到远程控制台。为通信的稳定可靠,控制台与远程控制台间的千兆以太网通过光电转换器转为光纤连接。控制台接受远程控制台的控制,对来自单片机采集模块的数据进行解码及显示并传向远程控制台,通信采用UDP协议。
2软件设计与实现
2.1多重事件方式实现网口及串口通信
控制台模块需要接收远程控制台的远程控制命令帧和来自RS422串行通信接口(与单片机采集模块相连)的串行数据,并把串行数据打包成既定格式UDP数据帧转发送到远程控制台,为此控制台软件需建立后台管理器(CTConManager)来开启网络监控线程、串口监控线程两个独立线程进行监控网口和串行口。二者流程图如图4所示。
软件需要把串口数据进行协议转换为UDP数据帧发送,所以网络监控线程采用等待多重
事件的方式来处理由WSACreateEvent函数创建的网络事件(m-evtNetWork)和串口事件(m-evtOverlappedSeri-a1),串口监控流程采用异步事件模式监控串行口的数据接收。网络事件由WSAEventSelect函数与当前的socket接口绑定,串口事件由串口接收一个完整数据帧后设置到网络监控线程。当控制台网络可以接收到远程控制台的网络帧(即有网络事件发生)时,线程调用ProcessNetworkEvent函数来处理这个事件(即开始解析远程命令帧),相应串口事件调用网络监控线程的ProcessSerialEvent函数来处理这个事件(即发送数据帧)。线程中的网络超时事件(wsA-wAIT-TIME-0uT)处理超时任务(ProcesstimeoutEvent)包括串口和板卡状态的循环检测以及状态数据包的发送。
软件采用这种机制能及时响应多重事件,实现了串口和网络接口的对接,节省了设备资源,使系统效率得到了提高。
2.2TcP多数据流整合同步处理
根据系统要求,数传与实时处理模块将多个TcP流的相同或不同字段的数据进行提取并整合为一个UDP数据报文并发送至远程控制台。
由于多个TCP数据流发送过程中很可能会出现某个数据流到达时间相对其他数据流有延迟,这就会造成在整合为uDP数据报文的过程中数据的不同步。为解决这个问题,软件采用基于数据队列的方式实现码流同步首先将多个既定长度的TCP流数据(TCP-DataValue)加入(push)多个相应队列(cDataQueue),当所有队列的长度大于等于1,即所有队列有元素时,将队列中的第一个(即最先压入队列)元素弹出(Get-FirstData),然后进行码流的数据提取。
下面以三个数据流为例说明这种机制的实现,主要代码如下:
//获取指定索引号的元素BOOL GetFirstData(DataValue*pDataValue);
//获取队列第一个元素BOOL push(const DataValue&vData);
//压人队列BOOL pop(DataValue*pDataValue)0
//弹出队列,清空元素protected:CRITICAL-SECTION m_csQueue;
//临界区控制CAutoLock m ExclusiveLoc
//读/写控制互斥锁,防止多线程访问数据不同步
/*声明变量*/
CDataQueue m DataQueuel,m-DataQueue2,m-DataQue-ue3;
//声明三个队列对象
BYTE*TCPDataValuel=new BYTE[1024*8];
BYTE*TCPDataValue2=new BYTE[1024*8];
BYTE*TCPDataValue3=new BYTE[1024*8];
//声明TCP流1,2,3数据缓存空间
int TCPDataLenl=0;int TCPDataLen2=0;int TCP-DataLen3=O;
//声明所接收到TCP流的实际长度
/*接收到TCP流数据后加入队列*/
//判断接收到是否为TCP数据l,2,3的既定长度
tcpip协议中基于tcp协议的应用程序 if(TCPDataLenl=TCP-DATA-LENl)m DataQue-uel.push(TCPDataValuel);
if(TCPDataLen2=TCP-DATA-LEN2)m-DataQueue2.push(TCPDataVaJue2);)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论