摘 要:传统的远程监控系统一般采用C/S 模型的方式,针对大型设备,成本高。文章采用SOC 芯片C8051F020 和10M 自适应网络芯片RTL8019AS 接口的方案,在单片机中嵌入了精简的TCP/IP 协议栈,构建了基于Web 的单片机远程监控系统软、硬件平台,在此基础上实现了基于单片机的数据采集和远程监控,所实现的系统具有成本低廉、操作方便、可靠等优点。
1. 引言
单片机系统以其简单、高效的特点,在工业控制和日常生活中应用越来越广泛。目前大多数单片机系统是以51 单片机为核心,与检测、伺服、显示设备配合起来实现监控功能。
然而,这些监控系统的数据传输多采用RS-232、RS-485 以及各种现场总线,这些方式有些通信速度不够快,有些距离不够远,且各种总线之间难于实现互连和互操作。以太网作为目前应用最为广泛的局域网,在工业自动化和过程控制领域得到了越来越多的应用。同时,随着Internet 的普及,现代通信技术的进步,基于TCP/IP 和Client/Server 架构的分布式监控技术也日趋成熟。把嵌入式系统连接到Internet 上,就可以方便、低廉地把信息传送到世界的任何一个地方。
传统的远程监控系统一般采用C/S 模型的方式,主要针对大型的设备进行监控。对于如摄像头图象监控﹑家用仪表﹑门禁控制系统等小型的设备的监控就需要采用低成本的方案。
鉴于此,在低成本的单片机系统上移植精简的TCP/IP 协议簇,实现对于小型设备远程监控是最佳选择。该系统以Web 方式实现,用户可以在任何一台装有浏览器的PC 机上进行远程监视与控制,具有价格低廉、操作方便、界面友好等优点。传统的远程监控系统模型与本系统采用的模型如图1 和图2 所示。
图1 传统远程监控系统模型
图2 单片机监控系统模型
2. 系统硬件设计
本系统以 Cygnal 公司的完全集成的混合信号系统级芯片(SOC)C8051F020 单片机为核心,采用Realtek 公司的10M 自适应以太网控制器RTL8019AS 实现系统的网络接口部分。
SRAM 部分用于存放大量的数据信息。数据采集部分用于采集系统需要监控的设备的运行情况,由于C8051F020 内部带有真正12 位100 ksps 的8 通道ADC 带PGA 和模拟多路开关,还有两个12 位DAC 可编程更新时序,可以方便的进行模拟信号采集和对外设进行控制。
C8051F020 单片机内置64K FLASH 程序存储器、4K 内部SRAM,可以嵌入TCP /IP 协议, 从而实现嵌入式Web Sever 的功能。RTL8019AS 集成了介质访问控制子层(MAC)和物理层的性能,与单片机的接口简单,可以方便地用来设计基于ISA 总线的系统。另外,它还具有与NE2000 兼容、软件移植性好以及价格低廉等优点,所以特别适合用于嵌入式系统。
图3 系统框图
3.系统软件设计
3.1 软件流图设计
软件的实现主要是根据数据在网络中传输的方向和数据的流向来实现的。在本设计中数据的流向为:请求信息从局域网中来,通过RJ 45 送到RTL80l9AS,处理后的数据包送入单片机系统的协议栈,由协议栈对数据包进行解析,得到原始请求信息。请求信息再经过单片机系统的处理,产生回复信息。回复信息到局域网的过程与上面正好相反。整个系统的软件流程如上图4 所示。
图4 软件框图
3.2 RTL8019 接收与发送数据
1.RTL8019 芯片初始化主要是将网卡设置成正常的模式,跟外部网络连接。清除所有中断标志位,让芯片开始工作。
2.对RTL8019 接收数据操作,有查询和中断两种方式。因为单片机的速度和PC 机相差太远,而且还有一些采集任务,本系统不采用中断方式,用查询方式。在查询方式下,通过查询CURR 和BNRY 两个寄存器的值来判断是否收到一帧数据。当BNRY+1 与CURR不相等,说明接收缓冲区接收到了新的数据帧。图5 为RTL8019 报头格式,接收部分子程序如下:
UCHAR xdata * rcve_frame(void) //如收到有效数据包,返回收到的数据,否则返回NULL
图5 RTL8019 报头格式
3.数据的发送包含三个步骤:封装数据包;通过远程DMA 将数据包送入RTL8019AS的数据发送缓冲区;通过RTL8019 的本地DMA 将数据送入FIFO 进行发送。具体过程如下:
(1)包在发送前应该按规定的格式封装好,格式如下图6 所示:
图6 MAC 帧首部
(2)把上面的数据包通过远程DMA 写入RTL8019AS 的数据发送缓冲区;
(3)启动本地DMA,把数据发送出去,数据包长度最小为60 字节,最大1514 字节。
发送子程序为:void send_frame(UCHAR xdata * outbuf,UINT len)//发送一个数据包3.3 TCP/IP 协议栈的实现。
3.3.1 ARP 协议的实现
ARP 地址解析协议的本质是完成网络地址到物理地址的映射。物理地址有以太网和令牌环网两种基本类型,网络地址特指IP 地址。具体到以太网,使用的是动态绑定转换的方法,但是会遇到许多细节问题,例如减少广播,ARP 包丢失,物理地址变更(更换网卡)、移动(移动设备到另一子网)、消失(关机)等。一般是设置ARP 高速缓存,通过学习、老化、更新、溢出算法处理ARP 映射表来解决这些问题。整个ARP 处理过程,主要用5 个函数实现。
在实现网卡驱动程序后,所有ARP 处理操作就是填写ARP 包。主要程序代码编制如下:
(1)void init_arp(void)//完成ARP 表初始化,概括说就是ARP 表state 字段清0
(2)void arp_send(UCHAR * hwaddr,ULONG ipaddr,UCHAR msg_type)//完成ARP 请求
(3)void arp_rcve(UCHAR xdata * inbuf)// 完成响应操作
(4)UCHAR xdata * arp_resolve(ULONG dest_ipaddr) //完成从cache 里面查找对应//IP 地址的物理地址,如果没有,就发送ARP 请求
3.3.2 IP 协议的实现
网际协议 IP 是TCP/IP 协议族中最为核心的协议,它的主要功能是负责把数据交付给主机,当目标主机与原主机处于不同的物理网络中时,IP 负责把数据包路由到相应的目标网络上。Internet 上所有的数据都以IP 数据包格式传输。IP 协议最大的特点是提供不可靠的和无连接的数据包传送服务。IP 协议主要实现以下两个子程序:
(1) void ip_send(UCHAR xdata*outbuf,ULONG ipaddr, UCHAR proto_ id,DINT len)//发送IP 数据;该子程序用来创建一个发送数据报。
(2) void ip_rcve(UCHAR xdata *inbuf) //接收IP 数据;该子程序检测一个外来数据包,并对数据包作相应的处理。
3.3.3 TCP 协议的实现
1.使用TCP 状态机:TCP 协议是整个TCP/IP 协议的核心,也是传输层中最复杂的协议。TCP 协议在两个端点之间建立了等效于物理连接的逻辑连接。数据沿着这个连接双向传输。连接的双方必须对发送和接收的数据保持跟踪,以便能够检测出数据流中的遗漏和重复。
2.使用简单的确认机制:序列号和确认号这两个字段用于协同完成TCP 协议中的确认工作。对于每个接收到的数据包进行确认号的计算,需要从接收到的数据包中提取TCP 报文的数据部分长度,并进行计算,这增加了处理器的运算量。但如果每次只对单个TCP 报文进行确认的话,并没有太大的难度。TCP 协议主要包含的程序如下:
(1) init_tcp(void) //初始化TCP 协议
(1) Tcp_send(UINT flags, DINT hdr_len, UCHAR nr) //发送TCP
(2) Tcp_retransmit(void) //重发TCP 数据
(3) Tcp_inactivity(void) //停止TCP
(4) Tcp_rcve(UCHAR xdata * inbuf, UINT len) //接收TCP 数据
3.3.4 HTTP 协议简介
HTTP 协议是TCP 协议的高层协议,HTTP 的请求和应答都是一行或多行文本,它的结束标志是一个换行符[5].如果请求成功,数据就沿着该连接发送,直到发送完为止。HTTP的端口号为80.HTTP 中的命令称呼为方法(method),其中GET 语句用来获取文档,POST语句用来粘贴文档。通过判断GET 和POST 语句后面的文件名来判断所需要传递的文件的位置。
请求:
GET / HTTP/1.1
响应:
HTTP/1.1 200 OK
Content-type: text/html
……
<html>
<body>
……
</body>
</html>
4.应用部分
本 WEB 服务器系统几乎可以应用于所有对实时性要求不是很高的场合,只要对本系统的相关部分做些修改或改进,例如:客户端的访问权限、IP 地址的过滤等,就可应用于诸如远程抄表、信息家电的远程控制等场合。下面图7 为ping 命令测试网络不通到通的连接状态,图8 实现了局域网内任意主机通过ip 地址形式访问单片机内部存诸的网页,从而实现对单片机系统的远程监控。
图7 网络连接测试
图8 远程监控温度
5.结束语
实现了基于单片机的 TCP/IP 协议栈,使单片机控制的系统具有了WebServer 的功能,这样可以使用PC 机通过因特网远程访问单片机系统,也可以使用单片机系统将有用的信息通过因特网发送到远端的PC 或其它终端上。为嵌入式设备实现远程数据采集、远程监控、远程诊断、远程帮助、远程升级、远程重构等功能提供了可能,这是嵌入式系统发展的趋势。