马赛飞,马尚昌,刘 钧
(1.河南省气象探测数据中心,河南郑州 450003;2.成都信息工程大学电子工程学院,四川成都 610225;3.中国华云气象科技集团公司,北京 100000)
结合当前传感器技术与微电子技术的研究成果,以传感器网络技术和智能信息处理技术为支撑[1],对传统气象要素传感器进行改进,研制一种智能传感器。设计的智能传感器分为两个模块,智能变送器模块和网络适配器模块。为实现智能传感器系统的整体设计,文中设计是在智能变送器模块完成的基础上,主要针对网络适配器模块进行设计,网络适配器模块可以降低智能传感器的设计难度,同时在很大程度上能提高传感器的性能。该设计的网络适配器采用S3C2440 处理器,确保了硬件系统的稳定性[2],将设备连接到网络上的通信接口装置,用于实现对智能变送器的控制,使其具有连网的功能。模块具有低成本与高性能,互换性好,可良好地应用于将来的智能气象站中,能够满足数字化、智能化的要求。
网络适配器模块主要实现对智能变送器的控制、与智能变送器的通信、有线和无线网络的通信以及其余不易在智能变送器模块实现的功能。网络适配器与智能变送器之间通过一个I/O 线的TII接口相连,实现了传感器的即插即用[3]。计算机可通过向网络适配器发送控制指令来控制其执行相应的功能,如读取某传感器数据等操作。网络适配器模块基于S3C2440芯片以及嵌入式Linux 操作系统实现了串口和以太网数据的透明传输[4],文中编写了基于Linux 的程序,以确保系统的稳定运行,使系统具有了一定的自恢复能力,最终实现常规气象要素传感器数据的高精度测量。图1 所示为网络适配器整体框图。
图1 网络适配器整体框图
网络适配器模块主要实现与多个智能变送器模块通信和网络传输等功能,系统的核心采用S3C2440处理器[5]。系统采用核心板加底板的结构,S3C2440最小系统(包括NAND Flash、NOR Flash、晶振、核心电源模块等)在核心板中已经实现[6],底板电路主要包括系统电源、通信电路、温度传感器、按键以及指示灯等。在底板上预留核心板接口,核心板使用OK2440III 工业级核心板,确保硬件系统的稳定性[7]。模块的硬件框图如图2 所示。
图2 模块硬件框图
考虑到气象上传感器与仪器的供电以12 V为主,网络适配器模块电路采用的电源也为12 V 输入,通过二级降压,给整个系统各个模块进行供电,满足各个模块对不同电压的需要。第一级降压将输入的直流电压降到+5 V;第二级降压将+5 V 降为+3.3 V。模块电源电路如图3 所示。该系统在软件中使用了Linux 的时钟[8],因此,在电源的设计上采用了外接电源加电池的方式,当系统断电时,纽扣电池能够继续为系统内部的RTC 供电[9],保证时钟的正常运行。电路在12 V 主电源接口处对系统的电源进行了分压,然后通过AN0 接入ARM9 内部的AD 通道,用于主板电压的采集与监控。
图3 模块电源电路
模块从功能需求上把复位分为两种模式,即正常复位和恢复出厂设置。正常复位即一般的按键复位模式,其电路设计采用了MAX811芯片,MAX811是一种MCU 电压监视器[10],能监视3 V、3.3 V 以及5 V的电压,低电平有效复位,具有低功耗以及精密电源监控的特点。恢复出厂设置是根据实际需要增加的功能,如果用户对系统进行了错误的配置而无法恢复,此时可以通过长按恢复出厂设置按钮使系统恢复到出厂配置。恢复出厂设置功能在硬件上采用按键接入外部中断的方式,在Linux 系统中编写后台软件实现其功能。复位模块的电路如图4 所示。
图4 复位模块的电路
为了便于使用者监控系统当前状态,添加了一些简单的监控模块,包括电源电压、主板温度以及状态灯等。由于输入电压高于内部ADC 的参考电压,因此需对输入的电源电压进行分压之后接入ARM9内部的ADC 通道,通过编写应用软件获取当前电源电压值。主板温度通过DS18B20 测得,DS18B20 采用单总线接口方式,在电路设计上比较简单[11-12]。系统有7 个状态灯,通过I/O 口接入核心板,其中系统软件使用了两灯,用于指示系统工作状态以及复位模式,其余几个状态灯留作扩展。状态监控电路如图5 所示。
图5 系统状态监控电路
通信电路主要分为两部分,即串口通信和以太网通信。串口通信模块采用双串口设计,其中COM0 主要用于嵌入式Linux 操作系统终端界面的交互,COM1 主要用于挂接Zigbee 模块实现与多个STIM 的通信[13],串口芯片使用MAX202,MAX202 使用0.1 μF的电容。网络通信电路设计上采用DM9000加RJ45 接口的方式[14],DM9000 支持10/100 M 自适应PHY,其物理协议层接口支持5 类非屏蔽双绞线,并且DM9000 的Linux 驱动程序资源较为丰富,节省了底层驱动的开发周期。RJ45 接口是最常见的网络接口,用于网络数据的传输。通信电路如图6 和图7 所示。
图6 以太网通信电路
图7 串口通信电路
网络适配器的软件设计主要基于Linux 下的嵌入式C 语言程序编程,采用socket 网络编程以及多进程和多线程的技术[15],结合系统需求对模块的软件系统进行了设计。包括网络参数的配置、数据双向通信系统的设计、进程的管理以及守护进程等程序的设计。
系统开机会确认是否为首次启动系统,若是则应运行原始配置脚本文件,若不是则应运行修改后的配置脚本文件,再根据具体需要运行的模式启动程序及相应守护进程。图8为网络信息的配置流程。
图8 网络信息的配置流程
系统首先初始化系统参数以及创建进程间通信需要的共享内存、信号量及管道,并对SIGCHLD 信号处理进行了初始化。在主函数中添加对SIGCHLD信号的处理代码signal(SIGCHLD,SIG_IGN),可防止产生僵尸进程。服务器对于每个客户端的连接都会创建一个子进程,子进程结束后,若不进行处理则会变成僵尸进程,若系统存在大量僵尸进程,会在很大程度上造成资源的浪费,因此通过对SIGCHLD 信号进行处理,将僵尸进程交由内核的init 进程处理,即可有效清除僵尸进程,节省系统资源。如图9 所示为主进程流程图。主进程通过不同的端口号来区分不同的客户端请求,实现不同的服务,如果是上行数据和下行数据端口,且相应端口已经建立了正常的数据通信连接,那么通常不希望有重复连接而影响正常的数据收发,所以除非上一条连接已经关闭,否则服务器会拒绝数据上行和下行端口的二次重复连接,文中采用信号量来实现这一功能;指令交互端口是用来查询与更改串口信息等功能的端口,一般要求只要有权限对设备进行操作的终端都可以连接,所以允许多个连接同时操作,但必须输入正确的口令才能对系统参数进行查询和配置。
图9 主进程流程图
主进程中的定时器主要实现与守护进程的通信[16],守护进程通过通信是否正常来判断当前服务器程序运行是否正常,若异常则重启服务器程序,服务器与守护进程之间使用Unix 域套接字进行通信。定时程序的流程图如图10 所示。
图10 定时通信程序的流程图
守护进程的目的通常是为了完成一些特殊的任务或者等待处理某些事件,是独立于控制终端的,因此通常在终端中不能对其进行操作[17]。文中系统设计了专用的守护进程,如图11 所示为守护进程的流程图。正常情况下服务器主进程每隔一段时间便向守护进程发送一次消息,守护进程在接收到主进程连接后重置定时器,若定时时间到,则说明在定时时间内主进程都未向守护进程发送消息,出现异常,这时守护进程会清除之前的服务器进程并重启服务器,而服务器重启后可自动接收主机发来的连接,保证系统在异常情况下能够自行处理、自行恢复。
图11 守护进程流程图
网络适配器模块主要用于实现指令交互和数据的收发。给智能变送器接上温湿度传感器,网络适配器通过串口线连接电脑,通过串口助手进行测试,可以查询到传感器数据,测试结果如图12 所示。
图12 测试结果
在串口测试软件中,将虚拟串口发送波特率设定为9 600 bit/s,软件对数据进行了封包操作,实际传送的数据会大于100 字节,界面中可显示发送与接收的数据包个数,以及出错的数据包个数;在串口数据回送器界面中可显示实际接收到数据的字节数。图13 为软件实际发送与接收数据的情况,测试时间为24 h。由图13 中可以看出,在串口测试软件中,实际发送的数据包为59 328 个,成功接收的数据包为59 328 个,错误数据包为0 个,串口数据回送器软件中可以看到实际成功接收的字节数为6 408 180 个。
图13 发送与接收数据结果
以传感器网络技术和智能信息处理技术为支撑,对传统气象要素传感器进行改进,实现气象要素传感器的网络化与智能化,重点介绍了网络适配器模块的硬件设计电路和软件设计思路,通过测试验证了模块的可行性。该网络适配器模块设计的难点主要在于设计接入智能气象站中的智能变送器,实现模块对于传感器的即插即用和自识别。目前模块已在观测场的运用中取得良好效果,相信以后将会获得广泛的应用。