有线嵌入式以太网在遥测终端机中的应用研究

2021-11-01 03:51熊启龙
水利信息化 2021年5期
关键词:中心站遥测有线

熊启龙

(水利部淮河水利委员会水文局(信息中心),安徽 蚌埠 233001)

0 引言

随着信息、物联网、大数据等技术的高速发展,水文业务的需求越来越丰富,越来越多的应用场景要求遥测终端机具备有线嵌入式以太网通信能力,终端机通过有线网络接口接入网络,既可以控制设备执行预定动作,又可以采集具备网络接口的传感器数据,同时,还可以遵循物联网通用协议接入物联网,使得终端机的功能具有很强的扩展能力。

遥测终端机要具备有线以太网络通信能力,设备除了必须集成以太网络通信必需的硬件基础,还必须完整实现 TCP/IP 协议栈,两者共同配合完成终端机的网络通信功能[1]。早期的遥测终端机由于微控制器 MCU 性能和硬件资源的限制,无法拥有有线以太网通信能力,在有些要求终端机必须接入以太网的应用场景下,通常采用串口与网口的外部适配器接入网络[2],但这种方式速度慢且操作复杂,无法建立起丰富的网络应用。随着电子技术的快速发展,有些高性能的 MCU 片内集成了具有部分网络功能的外设,通过在外部集成网络接口芯片和搭建外围电路可使得终端机具备接入网络的硬件基础。有些网络接口芯片在内部实现了 TCP/IP 协议栈,有些网络接口芯片没有实现,开发者必须在系统软件中移植开源的 TCP/IP 协议栈[3],如 LwIP,uC/TCP-IP,uIP 等,才能具备网络通信能力,这是目前在嵌入式设备中集成有线以太网通信能力的主要技术手段。

有线以太网络通信接口速度比较快,相较于遥测终端机常用的串行通信接口,特别适合终端机与外部的高速通信,在接入设备端,使得遥测终端机可以接入具有网络接口的终端设备,建立起快速高效的有线网络通信,如接入网络摄像机(IPC),实现高清图像的秒拍秒传功能。遥测终端机具备有线以太网通信能力,使得其不再仅仅是一个具有单一功能的数据采集传输控制单元,还能满足联网需求,既承担着数据的采集传输任务,又可以作为网络的一个节点,实现功能丰富的网络应用。

1 终端机常用嵌入式网络芯片对比分析

OSI 国际标准化组织将计算机网络体系结构分为 7 层参考模型[4],在具体实现中为了降低复杂性又将其分为 5 层,即物理层(PHY)、数据链路层(MAC)、网络层(IP)、运输层和应用层,而传统的以太网控制器将 PHY和 MAC 层整合到 1 个层,称为网络接口层,这样事实上又分为 4 层协议。遥测终端机要实现嵌入式以太网通信,必须完整地实现 4 层通信,通过集成 MAC 和 PHY 层控制器实现网络接口层功能,通过内嵌 TCP/IP 协议栈完成网络层、运输层和应用层功能。

目前市场上有很多性能强大的 MCU 集成有 MAC 控制器,只需要在外部电路中再集成 1 个 PHY 芯片就可以具备有线网络通信的硬件基础,如果没有集成有 MAC 控制器,需要在外部电路中集成 PHY 和 MAC 控制器的网络接口芯片。目前在嵌入式系统中常用的具有代表性的网络接口芯片有以下 3 种:

1)LAN8720A 芯片。LAN8720A 芯片是一款以太网 PHY 层芯片[5],类似的芯片还有 DP83848,实际应用中必须保证与之相连接的 MCU 集成有 MAC 控制器,二者共同完成网络接口层功能,但是上层的网络层和运输层并没有实现,因此需要在设备中采用软件实现 TCP/IP 协议栈以完成网络层和运输层功能。

2)ENC28J60 芯片。ENC28J60 芯片是一款具有 SPI 通信接口的独立以太网控制芯片[6],兼容 IEEE 802.3,集成 MAC 和 PHY 层,能独立完成网络体系结构中网络接口层功能。但是 ENC28J60 芯片仍然没有实现网络层和运输层的功能,要实现有线嵌入式以太网通信,需要在设备中使用软件实现 TCP/IP 协议栈。

3)W5500 芯片。W5500 芯片是一款具有 SPI 通信接口的以太网控制芯片[7],可实现网络接口层、网络层、运输层功能,并在内部利用硬件实现 TCP/IP 协议栈,是一款全硬件 TCP/IP 协议栈,完全独立于主控芯片,与之相连的 MCU 内部不需要用软件实现 TCP/IP 协议栈,只需要操作寄存器即可实现复杂的网络应用。

从这 3 款芯片的特点可以看出:LAN8720A 和 ENC28J60 芯片都需要 MCU 内部用软件实现 TCP/IP 协议栈,用户必须具备一定的以太网技术及 TCP/IP 相关知识才能掌握,对于 MCU 来说,用软件实现 TCP/IP 协议栈需要占用 MCU 内部很多资源,一些低端的 MCU 甚至无法完成网络通信功能;W5500 芯片内部提供 TCP/IP 协议栈和缓存,可以降低 MCU 的负载,减少 MCU 内部资源的占用,避免移植繁琐的 TCP/IP 协议栈,用户不需要熟悉 TCP/IP 技术细节,就可以建立有线网络应用,非常易于使用。

为此,本研究以 W5500 芯片为硬件基础,介绍其在遥测终端机的有线嵌入式以太网开发应用,实现终端机的有线网络通信功能。

2 W5500 芯片在遥测终端机中应用设计与技术思路

遥测终端机的硬件结构以 MCU 为核心,根据实际需要利用 MCU 提供的输入/输出端口(如通用 GPIO,USART,SPI,A/D 输入接口和定时/计数器等)搭载合适的外围电路构成一个独立的嵌入式系统。W5500 芯片集成了嵌入式以太网网络通信的所有协议组件,通过最高支持 80 MHz 频率的高效 SPI 串行总线与 MCU 连接,实现高速嵌入式以太网通信,W5500 芯片与 MCU 连接与功能框图如图1 所示。在 SPI 总线系统中,MCU 作为主机,W5500 芯片作为从机,由 MCU 控制 SPI 总线通信的速度、开始和结束,进行双向同步的数据交换。

图1 W5500 芯片连接与功能框图

遥测终端机外部通过 RJ45 网络接口提供有线以太网接入功能,在 W5500 芯片与 RJ45 接口之间接入 1 个网口变压器用以增强信号,使信号传输距离更远,另外还可将 W5500 芯片与外部隔离,使其抗干扰能力大大增强,且增加对芯片的保护作用(如雷击)。

为减少系统功耗,设计 W5500 芯片(3.3 V 供电)运行在掉电模式,当需要传输数据时加电,日常工作在掉电状态。

通常,遥测终端机应用程序工作在嵌入式实时操作系统(RTOS)平台上,被划分成多个独立且并发执行的不同优先级的任务[8],设计将 W5500 芯片的服务程序作为 1 个独立的任务,阻塞运行,当接收到其他任务发送的信号后,就启动该任务,将 W5500 芯片上电,待其稳定,与中心站建立 TCP/IP 连接后执行预定网络通信应用,完毕后掉电,任务将再次阻塞运行。

3 W5500 芯片控制与驱动库

W5500 芯片可同时支持 8 个独立的 Socket(套接字)通信信道[9],各个 Socket 提供不同的网络服务。W5500 芯片拥有片上 32 kB 缓存,可以同时供 8 个独立 Socket 的发送和接收缓存使用,每个 Socket 的接收和发送缓存默认是 2 kB,可以通过配置修改每个 Socket 的缓存大小。W5500 芯片拥有1 个通用和 8 个 Socket 的寄存器区,通用寄存器区用于配置 W5500 芯片的基本信息,包括 IP 和 MAC 地址,中断持续时间、标志位、屏蔽位等参数;每个 Socket 的数据通信是通过 Socketn 寄存器区单独控制(0 ≤ n ≤ 7)的,可通过其设置每个 Socket 的服务类型和生存时间等参数动作,配置中断标志位,设置接收和发送缓存大小,以及指示缓存当前空闲空间大小等。

除了硬件芯片,厂家还提供一套开源的 C 语言开发的通用驱动库 Wiznet/ioLibrary_Driver,以帮助用户快速开发,通过该驱动库提供的开发接口,用户可以很方便地建立有线嵌入式以太网络应用。驱动库主要由 Ethernet 和 Internet 两部分目录文件组成,其中 Ethernet 目录主要由以下 3 组文件构成:文件 w5500.c/h,提供操作 W5500 芯片内部寄存器的通用功能函数,用以读取或设置内部寄存器;文件 wizchip_conf.c/h,提供 SPI 接口的移植回调函数接口,此文件提供的接口是对 W5500 芯片内部寄存器操作的抽象;文件 socket.c/h,是 Sokcet 的 API 实现文件,提供一系列符合伯克利套接字(BSD Socket)的应用编程接口。Ethernet 目录文件提供应用层与 TCP/IP 协议之间的软件抽象层,把复杂的 TCP/IP 协议族抽象成 Socket 接口,屏蔽了 W5500 芯片复杂的寄存器操作。基于 Ethernet 目录文件提供的 Socket 接口,Internet 目录提供 1 组应用层通用协议,包括 DHCP,DNS,FTP,MQTT,SNTP 等通信协议,可以在应用程序中直接使用。

W5500 芯片驱动库 ioLibrary_Driver 主要功能结构如图2 所示。

图2 驱动库 ioLibrary_Driver 功能结构图

socket.c/h 文件中 1 组符合 BSD Socket 的 C 语言应用编程接口示例如下:

1)int8_t socket(uint8_t sn,uint8_t protocol, uint16_t port,uint8_t flag),初始化并打开“sn”序号的 Socket;

2)int8_t close(uint8_t sn),关闭“sn”序号的Socket;

3)int8_t connect(uint8_t sn,uint8_t * addr,uint16_t port),采用“sn”序号的 Socket 与远程地址建立连接;

4)int8_t disconnect(uint8_t sn),关闭“sn”序号的 Socket 的连接。

移植好驱动库,用户不需要关心寄存器操作的细节,只需要按照要求调用以上符合 BSD Socket 的应用编程接口就可以实现网络应用,由于采用了 BSD Socket 接口,应用程序可以在不同的系统平台移植。如终端机要与中心站以阻塞模式建立 Socket 连接,完成任务后再关闭 Socket 连接,可采用如下步骤:

1)通过函数 ctlsocket(nSocket,CS_SET_IOMODE,SOCK_IO_BLOCK)设置 Socket 的连接模式为阻塞模式。其中:参数 nSocket 为 Socket 序号;CS_SET_IOMODE 为宏定义,表示该函数功能为设置连接模式;SOCK_IO_BLOCK 为宏定义,表示阻塞模式。

2)通过 connect(nSocket,servIP,port)函数与中心站以阻塞模式建立 Socket 连接。其中:参数 nSocket 为 Socket 序号;servIP 和 port 分别为中心站的 IP 地址和端口号。该函数封装了对芯片内部 Socket 寄存器区 Sn_DIPR(IP 地址寄存器)、Sn_PORT(端口寄存器)、Sn_CR(控制寄存器)等寄存器的操作。

如果与中心站建立 Socket 连接成功,函数会返回 SOCK_OK;如果建立连接失败,程序会持续阻塞在该函数一段时间后, 才返回 SOCK_ERROR。

3)网络通信任务完成后,采用 disconnect(nSocket)关闭 Socket 连接,该函数封装了内部Sn_CR 的操作。

4 W5500 芯片初始化与使用

MCU 主控芯片通过 SPI 接口与 W5500 芯片相连,初始化过程主要如下:

1)SPI 接口初始化,按照要求封装成操作函数w5500_read_byte ( ) 和 w5500_write_byte ( ),并将其通过回调函数注册到 ioLibrary_Driver 驱动库中。

2)设置 W5500 芯片的 IP 地址、子网掩码、网关地址等网络信息参数,也可以采用 DHCP(动态主机配置协议)自动获取。

3)配置内部 8 个 Socket 的接收和发送缓存区的大小。

4)根据实际应用需要配置 W5500 芯片数据发送失败的溢出时间及最大重新传输次数等参数。

初始化完成后,就可以在应用层通过调用 BSD Socket 接口函数,与远程主机进行 Socket 连接、数据传输、连接关闭等操作。

当需要进行有线网络通信时,遥测终端机首先控制打开 W5500 芯片的电源,等待一段时间(1~3s)待其稳定后,开始设置 MCU 内部的SPI 总线通信外设,包括 SPI 接口的工作模式、时钟频率和中断标志位等参数。接着通过库函数 wizphy_getphylink( ) 检查 RJ45 网络接口的网线是否插入,如果网线正常插入,就根据接入的局域网络环境开始设置 W5500 芯片的 IP 地址、子网掩码、网关地址等网络信息参数和通信过程中使用的 Socket 的参数。以下为设置 Socket0 的发送和接收缓冲区 C 语言程序示例代码,其中,WIZCHIP_SOCK_NUM_是驱动库中 wizchip_conf.h 头文件中的一个宏定义,为 8,表示 W5500 芯片最多能同时支持 8 个 Socket 连接:

1)uint8_t txsize [_WIZCHIP_SOCK_NUM_] = {16,0,0,0,0,0,0,0},定义发送缓冲区大小数组,数组中 8 个元素表示芯片内部 8 个 Socket 所用的发送缓冲区大小;

2)uint8_t rxsize [_WIZCHIP_SOCK_NUM_] = {16,0,0,0,0,0,0,0},定义接收缓冲区大小数组,数组中 8 个元素表示芯片内部 8 个 Socket 所用的接收缓冲区大小;

3)wizchip_init(txsize,rxsize),该函数设置Socket0 的发送和接收缓冲区大小各为 16 kB,其余 7 个 Socket 的发送和接收缓冲区大小设置为 0,发送和接收缓冲区大小合计为 32 kB,只为 Socket0 所使用。

5 W5500 芯片在遥测终端机中常用网络应用

遥测终端机集成 W5500 网络接口,使得遥测终端机通过有线方式可以接至以太网络,既可以作为客户端也可以作为服务端建立起丰富的网络应用,终端机主要有 3 种常用的有线以太网网络应用。

5.1 作为 TCP Client 采集传输数据

通常情况下,遥测站都是采用无线移动通信网络传输采集数据的,W5500 芯片提供了一种有线的以太网接入方式作为 TCP Client 与中心站建立连接并传输数据,无线移动通信网络和有线嵌入式网络发送数据的接收方式都是一样的,中心站的数据接收方式和方法不需要做任何改动。

以采用 Socket0 为例,遥测终端机主要通信过程如下:

1)通过函数 socket(0,Sn_MR_TCP,any_port ++,0x00) 创建 Socket0,初始化后打开Socket0。其中:参数 0 表示 Socket0;Sn_MR_TCP 表示采用 TCP 传输控制层协议;any_port 为本地 TCP 绑定端口,为保证每个 Socket 绑定的本地地址不冲突,每次调用该函数,any_port 都需要加 1。

2)通过 Connect(0,remote_IP,port)函数与中心站服务器建立 TCP 连接。其中:参数 remort_IP 为中心站的 IP 地址,为 4 字节数组;port 为中心站服务端口号。

3)通过函数 Send(0,buffer,len)向中心站发送数据。其中:参数 buffer 为发送缓冲区首地址;len 为发送数据长度,以字节为单位。

4)通过函数 recv(0,bufer,size)接收中心站返回的数据。其中:参数 buffer 为接收缓冲区首地址;size 为缓冲区数据长度,以字节为单位。

5)通过函数 disconnect(0)与中心站断开 TCP连接,并关闭 Socket0。

采用 TCP Client 传输数据只需要以上 5 个步骤就可以实现 1 次完整的 TCP 数据传输通信。

5.2 提供 HTTP 网页控制

遥测终端机作为 HTTP 网页服务器[10],用户可以使用与终端机通过网络连接的计算机上的浏览器查看或者设置终端机内部参数和数据。

要实现查看或设置功能,终端机内部必须基于 W5500 芯片实现 HTTP 应用层协议,它允许将 HTML 文档从终端机传送到浏览器,在这种情况下,终端机作为 TCP Server 服务端提供侦听服务。以 Socket0 为例,主要通信过程如下:

1)通过 socket(0,Sn_MR_TCP,80,0)函数创建 Socket0,初始化后打开 Socket0,其中参数 80 是本地侦听端口。

2)通过函数 listen(0)启动 Socket0 侦听服务。

3)计算机的网页浏览器作为 Client 客户端与终端机建立 TCP 连接。

4)浏览器发送 HTTP 请求,遥测终端机Socket0 接收到 HTTP 请求后返回 HTTP 响应,报文正文包含 HTML 超文本信息。

5)浏览器接收到 HTTP 响应后,提取 HTML 超文本信息并解析,显示 Web 页面。

6)浏览器根据用户的 Web 页面操作,再次向遥测终端机提交 HTTP 请求。其中报文正文包含有配置信息,终端机在接收到 HTTP 请求后,提取报文正文中相关的配置信息做出相应动作,实现远程控制。

7)任务完成后,终端机关闭与客户端浏览器的TCP 连接。

需要说明的是:客户端浏览器如果要连续获取终端机的实时数据而不必每次都刷新整个 HTML 页面,可以采用 HTML5 的 Socket API 实现浏览器向终端机实时获取数据。

5.3 通过 MQTT 协议连接互联网

近年来,物联网技术的快速发展为水文自动测报系统提供了新的业务应用模式。遥测终端机和中心站通过 MQTT(Message Queuing Telemetry Transport)协议连接到阿里云、腾讯云或者其他私有云物联网平台,通过配置,两者互相不知道对方的 IP 地址和端口号,甚至不需要同时在线就可以实现信息的互传,解除遥测站与中心站之间时间和空间的紧耦合。

MQTT 协议是一种工作在 TCP 协议层之上的基于发布/订阅的异步通信模式的应用层协议,终端机和中心站采用 MQTT 协议连接物联网云平台,此时,遥测站和中心站是客户端,云平台是服务端,两者都作为 TCP Client 与云平台建立连接。通过接入云平台,不仅可以实现遥测站采集数据的实时上传,还可以实现中心站控制指令向遥测站的实时下发,实现去中心化的应用模式。

6 结语

在遥测终端机中集成 W5500 芯片和移植驱动库,可以很方便地开发建立网络应用,使得终端机具备网络通信能力,具有占用 MCU 资源少、开发方便等优点。但是 W5500 芯片最多只支持同时建立 8 个Socket 应用,如果要实现更为复杂的网络应用,可以采用 LAN8720A 或 ENC28J60 等芯片,用软件实现 TCP/IP 协议栈,充分挖掘 MCU 的性能,建立起更为灵活、高效、功能丰富的网络服务。针对开源 TCP/IP 协议栈的移植和使用,可以进行进一步的研究工作。具有嵌入式以太网通信功能的遥测终端机,可以让水文自动测报系统实现越来越丰富的业务应用新模式。

猜你喜欢
中心站遥测有线
更正
前馈复合控制在提高遥测跟踪性能中的应用
远程控制式遥测地面站关键技术研究
基于WPF的遥测CAS信息实时监控系统设计开发
自适应模糊PID控制的遥测方舱温度调节方法
计算机有线无线网络的安全威胁及措施分析
一带一路
东方有线点播排行榜
铁路集装箱中心站经营产品分析
时代华纳有线将为Xbox 360提供300套频道节目