基于LwIP的海洋数据采集与传输系统*
2012-03-15周巧娣章雪挺盛庆华
王 晖,周巧娣,章雪挺,盛庆华
(杭州电子科技大学 电子信息学院,浙江 杭州310018)
以海底观测节点为载体的海洋数据采集与传输系统,可以实现海平面以下水环境监测数据的实时、自动获取,它由各个传感器、CPU控制器、数据传输接口以及水上远程监测平台组成,可为海洋的探索和监测提供丰富的信息和资料。从我国开始研制海洋数据采集与监测系统至今,先后采用了多种数据传输方式[1],包括RS232、RS485、CAN总线等,各个传输方式各有利弊。RS232支持全双工通信,虽然是众多设备的直接连接渠道,但传输速率慢、抗干扰能力差、传输距离短;RS485只支持半双工通信,抗噪声干扰性好,传输距离较RS232远,但传输速率慢;CAN总线只支持半双工通信,通信距离远,抗干扰能力强,但传输速率仍有限制[2]。根据数据采集及传输系统对数据传输速率的要求,本文利用LwIP作为以太网协议栈,完成LwIP TCP/IP协议栈在STM32F207VGT6的移植;考虑到以太网支持全双工通信,同时利用以太网中的UDP传输方式实现各类传感器开启、采集间隔的控制以及对采集数据的实时监测,大幅度提高了系统远程的可控性及实时性。
1 系统工作原理
海洋数据采集与传输系统的整体结构如图1所示。其中数据采集板是本系统设计和实现的主要组成部分,本文主要阐述由传感器、数据采集板和用户远程检测终端组成的海洋数据采集与传输系统。它主要完成对传感器采集到的数据进行存储和传输以及对传感器进行实时监测,其目的是提高传感器水下工作时长、提供外部电源供电引脚、方便进行长期观测。
海洋数据采集与传输系统工作原理为:当水下传感器采集到数据时,即刻通过串口传递至数据采集板,采集板收到数据请求信号,立即执行SD卡数据存储操作,并通过以太网对数据进行接收,在UDP传输方式下通过网线将数据传递至用户远程计算机终端。数据接收完毕后,水下传感器继续执行数据的采集。与此同时,远程计算机终端通过网络发送控制命令,信号经网络传输至采集板CPU,CPU进行命令解析,针对不同的解析结果对传感器发送相应控制命令,实现对传感器开启、采集间隔设置的实时控制。
CTD传感器1~传感器5是一般的 RS232接口传感器,而耦合传感器1、2、3属于感应耦合自容式传感器,若要连入电路,需要加入调制解调模块。两种传感器除了都能以RS232形式输出数据外,也可进行自容式存储。
2 系统硬件
目前,实现传感器串行数据与以太网数据交换的方式主要有3种:(1)使用专用的网络处理芯片;(2)使用高档嵌入式系统处理;(3)使用单片机和网络控制芯片。通过比较可以发现:第(1)种成本较高,且用户需要重新设计接口;第(2)种成本也较高,且如果仅用于通信接口,芯片资源则不能充分利用;相比较而言,通过从成本和使用场合考虑,第(3)种方法成本低,实现比较容易,并且可以根据实际需要进行功能扩展,只是软件编程工作量比较大。因此本文采用第三种方法来实现。
本系统中主控板微处理器选用ST公司基于Cortex-M3内核的 32 bit微处理器 STM32F207,其主频达 120 MHz,专用于网络型嵌入式设备中。STM32F207具有丰富的串口资源、4路USART通道、2路UART通道。其中USART1和USART6最高波特率支持7.5 Mb/s,其他接口最高支持3.75 Mb/s,不仅支持调制解调模块、传感器的物理连接,而且对于数据的传输也提供了较高的传输速率,可以有效缩短传感器通过串口下载历史数据的时间。
以太网收发芯片选用美国National公司的10/100 M以太网物理层收发芯片DP83848C,该芯片遵循Ethernet II和 IEEE802.3u标准, 同时支持 MII、RMII、SNI三种数据连接方式,内部还集成了数据收发及滤波功能。在全双工模式下,可以同时实现发送和接收,理论上最高速度能达到100 Mb/s,本文对其配置为 100 Mb/s。采集板简要框图如图2所示。
如图2所示,微控制器与以太网收发芯片间采用了RMII模式[3]。这种方式在保持物理层器件现有特性的前提下减少了PHY的连接引脚,在保持IEEE802.3规范中所有特性的同时,降低了系统设计的成本。
3 系统软件设计
本系统软件设计包括两部分:水下采集板传感器数据采集、传输程序和远程用户界面实时监测程序。其中,采集板程序均在KEIL Uvision4下编译、测试,远程监测程序在Visual Studio 2008下编译、测试。
3.1 TCP/IP协议栈——LwIP移植
LwIP是瑞士计算机科学院的Adam Dunkles等人开发的用于嵌入式系统的开放源码TCP/IP协议栈,其在保持TCP主要功能的基础上减少对RAM的占用,一般只需要几十字节的RAM和40 KB左右的ROM就可运行,使LwIP适合在中低端的嵌入式系统中应用。
嵌入式TCP/IP协议栈有两种普遍的实现方式:一种是将协议簇中的每个协议作为一个单独的进程,并指定进程之间的通信点。其优点在于结构清晰,代码易懂,占用系统资源较少,且方便调试;另一种方式是将协议栈驻留在操作系统内核中,应用程序通过系统调用与协议栈通信。该方式对系统RAM、ROM资源占用较高,且不能很好地支持MDK[4]环境下的断点调试。故本文选择第一种方式。
3.2 STM32F207采集板程序设计
主程序设计可以分为以下4个步骤:
(1)系统初始化
上电后,对系统时钟、LwIP协议栈、RTC实时时钟、通用I/O口初始化配置。
(2)串口配置和通信
在STM32中,struct USART_InitTypeDef中包括了串口的波特率、字符位数和奇偶校验等重要属性,在设置好该结构体后,调用串口USART_Init使串口属性生效。配置好串口后,用USART_DMACmd函数配置串口以DMA直接内存访问,当有传感器数据到达串口的缓冲区时,直接存储至DMA指定缓冲区中,同时,当数据到达最大长度时,执行数据传出、SD卡存储并清空缓冲区。
(3)远程端命令侦听
在LwIP中,struct udp_pcb包括了以太网数据最小传输单元的类型、IP地址、子网掩码、网关、当前端口号、目的端口号等重要属性,在创建好udp_pcb之后,调用udp API操作函数udp_bind使指定的udp数据单元属性生效。对于以太网数据的读写,设置以太网读写超时是非常重要的,LwIP_Periodic_Handle函数提供了这样的功能。配置好udp后,用udp_recv函数打开数据接收回调函数,通过回调函数体中第二个参数创建监听线程。在监听中无线程阻塞,当接收到远程数据报时,用udp_send写数据。远程控制端对水下采集板的监测是在监听线程udp_echoserver_receive_callback中完成的,接着,将接收到的命令反馈至CPU,CPU根据不同的命令,决定是否开启传感器。
(4)数据帧整合
根据传感器的不同,将采集到的数据帧进行排序、整合,按照固定顺序整合成特定帧格式,最后通过以太网发送至远程监测端。采集板程序流程如图3所示。
3.3 远程用户监测程序设计
远程用户控制端主要实现对水下采集板采集到的数据和传感器工作状态的实时监测。控制端通过查找IP地址的形式对连接在用户局域网内的设备进行搜索,经过滤,找出设备,与水下采集板建立虚拟链接。然后以UDP面向无连接的通信方式[5]通过以太网接口向采集板发送传感器开启命令。待发送完毕后,每隔1 s时间,控制端间歇性地通过以太网向水下系统发送获取数据命令,用于得到最新的采集数据。若采集板中已收到传感器当前采集的数据,随即将水下系统中已整合的帧数据再次通过以太网传递至远程控制端。当接收到完整帧数据后,控制端通过分析之前的数据通信协议,对数据包进行解析,将各类传感器分别采集到的数据进行分离,显示在用户界面中。程序流程如图4所示。
4 系统调试
在实验室环境下,将采集板的4个串口分别与调制解调器、CTD传感器1、2、3相连,网口通过网线与电脑的网口相连。采集板程序中设置 UDP侦听端口号为5 000、子网掩码为 255.255.255.1,网关为 192.168.1.1,设置本地IP为192.168.1.103,采集板IP地址为192.168.1.220,这两个地址不能与局域网其他地址冲突。系统上电后,在局域网的 PC机中,通过ping命令,发送 ICMP请求,客户端可得到ICMP回应。接着打开PC机上用户远程监测软件,通过搜索指定目标IP,搜索到采集板设备,此时采集板与PC机控制端握手成功后进行数据通信,按照配置的采集时间间隔,采集板将数据保存在SD中。其中,传感器每秒采集数据长度约500 B。经10 min运行,通过将监测软件显示的以太网帧数据与SD卡中的数据进行比较可知,系统运行稳定;通过PC机对传感器配置不同采集间隔时,两种方式下数据仍保持一致。
接着同样以每秒500 B的数据量近似作为传感器采集数据长度,系统均运行10 min,分别对采用串口RS232、RS485、CAN总线传输方式下传输完成时间、误码数进行测试,得出的结果如表1所示。
表1 各类传输方式下参数对比图
由表1中测试结果可知,在相同传输条件下,以太网传输速度是RS232的14.03倍,是RS485的3.97倍,是CAN总线的6.02倍,说明以太网在传输数据量较大的情况下,不管在传输时间方面还是在误码数方面都占有优势。
在实验室模拟调试的基础上,在户外也进行了进一步的测试,选择水深、湖区面积适中的杭州千岛湖中心湖区作为野外主要实测地点。测试前主要将浮球、水下数据采集系统放入水中,接着进行为期一周的实地观测。结果表明,系统工作正常,达到了预期的测试效果。这里选择其中某个时间点对监测软件的显示界面进行截图,如图5所示。
本文利用基于LwIP协议栈的以太网设计和实现了一种海洋数据采集与传输系统。该采集系统丰富的串口资源使其至多可接入6种不同的传感器设备。设计时,在保证数据传输稳定的前提下,用以太网传输代替传统的数据传输模式,不仅提高了系统实时性,而且使采集板和用户监测端数据交互更为快捷。同时,在水下通过加入互联设备,易于水下设备的扩展或组网。系统很好地满足了海洋数据实时传输的需求,达到了传输速率在相同条件下优于RS232、RS485、CAN总线传输速度的设计目标。
[1]庄彦霞,孙运强,姚爱琴.基于CAN总线的实时数据传输系统[J].数据采集与处理,2006,12(21):222-225.
[2]陈敬谦,何志伟,刘文泽.RS2232与CAN总线协议转换单元设计[J].电子工程师,2004,30(4):63-66.
[3]宋鑫,郭勇,谢兴红.RMII模式以太网PHY芯片DP83848C的应用[J].单片机与嵌入式系统应用,2010(8):50-53.
[4]王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008:366-368.
[5]THOMAS G.用于控制TCP/UDP[J].国内外机电一体化技术,2001,6(4):9-11.