基于Web和硬件可重构技术的远程抄表设计
图2 数据集中器的硬件结构
由于在FPGA芯片上构造电平转换电路和以太网物理层、MAC层电路较困难,本文将这些功能放到了FPGA芯片的外面,并分别使用MAX485和LAN91C111芯片来实现电平转换和以太网硬件接口功能。FPGA芯片内的UART模块和MAX485芯片共同完成与电表的数据通信任务,前者负责接收和发送数据,后者完成信号电平的转换。SMSC公司的LAN91C111是为了方便嵌入式应用系统连接到快速以太网而专门设计的,它实现了CSMA/CD协议的物理层和媒体访问控制层(MAC)两个部分,并可以很方便地与许多嵌入式处理器进行数据交换。
软件设计
数据通讯协议
抄表系统中有两个地方存在通讯协议的问题,其中一个在数据集中器与各个电表之间。目前,国内各厂家生产的电表绝大部分具有国家颁布的"多功能电能表通信规约"所规定的抄表协议,因此只要数据集中器中的电表通信模另外一个必须考虑通讯协议的地方是数据集中器和电力抄表中心之间。目前,国家还没有制定正式的标准,各个厂家采用的协议也各不相同。这造成了系统之间基本上不存在互操作性和互连性,从而阻碍了行业的进一步发展。
本文提出了以标准公开的HTTP协议作为应用层通讯的基础,不但能解决系统之间的兼容性问题,而且还将因特网上广泛使用的Web技术引入到远程抄表系统中,为其带来了许多便利。例如,只要能连接到因特网,就可以完成抄表工作,摆脱了时间、地点的约束。另外,用户抄表使用的终端程序是所有计算机平台上都带有的Web浏览器,这意味着用户无需花费一分钱额外投资,就可以得到一个图形用户界面。在HTTP的底层使用了TCP/IP协议来保证数据在因特网上的可靠传输。用户对电表的操作命令以及相关参数将被作为HTML表单数据以HTTPPOST方法传送给数据集中器上的嵌入式Web服务器,而操作的结果和数据则是以HTML表格的形式返回。
数据集中器的软件设计
数据集中器在抄表系统中起着关键的作用,它一方面要通过因特网与抄表中心进行通信,另一方面要采集来自各个电表的用电数据。为了降低开发难度,提高可维护性,系统使用C语言作为开发语言,并利用了GNU的开发工具,包括gcc 、gdb等。另外,将系统功能分解为五个相互协作的任务,采用uc/os-II作为实时操作系统,实现任务调度和任务间通信。这五个任务分别是:
(1)网络通信接口:负责在因特网上收发数据。本文采用Altera公司提供的专门针对嵌入式系统应用的精简TCP/IP协议栈作为底层通信协议。数据发送功能是通过调用TCP/IP传输层服务函数nr_ pLugs_send ()实现的,而数据接收功能则是由一个在创建通信套接字时被注册的回调函数实现的。当传输层收到一个有效应用层数据时,该函数被调用,应用层数据的指针被当作实参传入,随后回调函数把数据指针以消息的形式发送给HTTP引擎。
(2)HTTP引擎:负责以HTTPPOST协议接收和发送数据,将所析取出的抄表命令和数据参数交给控制模块;根据控制模块传回的数据和从虚拟文件系统中读取的HTML文件模板,动态构造一个完整的HTML文件,发送给请求方。
(3)虚拟文件系统:负责在ROM或者外部Flash存储器上实现一个小型的只读文件系统,用以存放各种静态Web页面和动态构造Web页面所需要的页面模板。它靠维护一个文件索引表来实现文件的读取,其结构如图3所示。
图3 虚拟文件系统索引表
(4)控制模块:负责安全性检查、命令和数据参数格式转换。由于因特网是一个公共网络,在其上传输的控制命令和数据有可能被截获、篡改和重发,因此需要进行安全性检查。主要采用数据加密和随机数验证两种方法。
(5)电表通信:负责与指定电表进行通信,从而读取用电数据,以及完成各种控制操作,其功能相当于分层网络模型中的数据链路层。数据的接收和发送是通过nr_uart_rxchar()和nr_uart_Txchar()两个函数实现的。
抄表中心的客户端应用程序设计
在抄表中心有交互式和批处理两种不同的方式完成抄表任务。在交互式过程中,要求手工输入电表编号、要求执行的操作等信息,在查询结束后,再将数据手工地转录到数据库中。对于这种方式,操作系统自带的Web浏览器就是一个抄表终端程序。但是,交互式抄表效率较低,只适用于抄录指定用户的电量信息、对制定用户电表执行控制任务或者用户进行自助查询等场合。当需要抄收大量电量数据时,就要采用批处理方式。图4 给出了批处理方式下的程序流程图。在批处理抄表程序中,有两个关键技术问题:一是将抄表命令以HTTPPOST方式传送给数据集中器上的嵌入式Web服务器,另外一个是从接收到的HTML文件中抽取用电数据。对于第一个问题,我们首先通过分析网络抓包程序(Sniffer程序)所捕获的HTTP数据包,就可以掌握PC机环境下浏览器和Web服务器之间以POST方式传递信息所采用的数据格式和时序关系,然后在VB环境下编写程序模拟这个过程中浏览器的行为。对于第二个问题,解决方法是约定数据以表格形式返回,并保证格式固定。因此,通过在HTML文件中搜索
等HTML标记,就可以将电量数据抽取出来。
- 吉时利为3700系列系统开关/万用表固件增加图形绘制工具包(05-24)
- 基于VRML的虚拟机房的设计与实现(06-07)
- 云计算与虚拟化的融合 (10-04)
- Web网络传感器的远程数据采集系统设计(07-07)
- 一种WLAN自动化测试平台的设计及实现(03-27)
- 嵌入式智能设备的测试研究方法(05-28)