以太网串口服务模块的光端机监控系统设计

2018-03-01 00:36,,,,,,
单片机与嵌入式系统应用 2018年2期
关键词:光端机端口号以太网

,,,,,,

(中国电子科技集团公司 第三十四研究所,桂林 541004)

引 言

图1 系统架构图

在雷达信号地面接收、车载综合指挥系统等应用场合,大多采用了点对点或星型结构的光传输系统。在这些应用场合下,局端光端机处于监控中心,远端光端机则位于较远或较恶劣的环境。要实现对整个光传输系统的统一管理,一是要实现远控,二是监控主机应接入方便,客户端管理便捷,并且具有分布式管理的能力。

本文设计了以太网串口服务模块(简称以太网模块),移植了TCP/IP协议,它具有多个套接字地址,每一台被管理的终端设备分配了一个套接字地址,客户端进程通过套接字地址来与终端设备建立通信连接,实现了进程对终端设备的一对一管理。该方案不仅适用于点对点的光传输系统,也适用于小型星形光传输网络,具有低成本、高效益的特点。

1 系统方案设计

系统架构图如图1所示,以点对点光传输系统为例,整个系统主要由局端光端机、远端光端机和监控主机组成。

在局端光端机中,以太网模块实现了网络数据包向2个异步串行接口(简称串口)的分发。串口0和局端ARM处理器的串口相连,用来对局端光端机进行状态采集和控制;串口1与局端FPGA相连,通过FPGA进行复接,再经光电变换、光纤传输,最终与远端光端机内的ARM处理器的串口相连,用作远端光端机的监控接口。FPGA在此过程中实现了业务流和控制流的复接和分接。

2 以太网模块的设计

2.1 硬件设计

以太网模块要选用的ARM处理器需要移植TCP/IP协议栈,必须具有较高的工作频率,同时内部集成10/100M MAC控制器,及容量可观的RAM和FLASH存储器。同时,为了方便端口数量的扩展,ARM处理器集成的串口(UART)数量尽可能多,为了降额设计,还需满足低功耗、高性能的特点。基于以上需求,处理器选用了NXP公司的Cortex-M3架构的LPC1768。

LPC1768采用了新一代Cortex-M3架构,比传统的ARM7架构减少了逻辑门数量,提高了工作频率,降低了功耗。最高工作频率为100 MHz,集成了512 KB FLASH和64 KB RAM存储器,以及RMII接口的MAC,且具有4个异步数据串行接口UART0~UART3。

图2 以太网模块硬件示意图

以太网PHY选用了MICREL公司的KSZ8041NL,它是单芯片10/100M以太网物理层收发器,支持线序自适应和10/100M自协商功能,和LPC1768之间通过RMII接口相连,连接图如图2所示。

根据OSI定义的7层TCP/IP参考模型,网际协议IP实现了主机到主机的通信,传输层协议(TCP/UDP)实现了进程到进程的通信。IP地址定义了主机,端口号(port number)定义了进程。进程是运行着的程序的最小单位,同一台主机上可同时运行多个相互独立的进程,它们具有相同的IP地址(本机的IP地址),拥有不同的端口号。因此,IP地址和端口号的组合称为套接字地址(Socket地址),通过Socket地址将不同的进程区别开来。本质上,进程才是数据的生产者和消费者,当主机收到数据报时,通过检查数据报的目的端口号寻找与之匹配的进程,并将数据交给它;当进程发送数据时,目的端口号和源端口号被插入数据报中,通过网络传输。设备收到数据报后,根据目的端口号进行数据路由选择。

进程对设备的一对一管理如图3所示,监控主机上运行着2个进程,进程1发出的数据通过UART0(对应端口0)转发出去,由局端光端机的ARM接收处理;进程2发出的数据通过UART1(对应端口1)转发出去,由远端光端机接收处理,反之亦然。这样就实现了进程和设备的点对点通信,不同的进程管理着不同的设备,并且独立运行。

图3 进程对设备的一对一管理

综上所述,每个端口号对应着一个物理的串口(UART),每个串口联系着一台设备,等同于每台设备都有一个Socket地址,通过设备的Socket地址实现了进程对设备的一对一管理。在客户端界面上可通过不同的显示颜色表示不同的告警事件,如进程界面为灰色表示设备掉线;红色表示设备告警;绿色表示设备工作正常。

另一方面,进程可以运行在不同的主机上,同时以太网模块支持多连接,这样可以实现分布式管理。

2.2 软件设计

2.2.1 以太网驱动

LPC1768的MAC和PHY芯片KSZ8041NL分别实现了数据链路层和物理层的功能。其中MAC含有一个分散/聚集以太网帧的DMA引擎,它实现了MAC和片上SRAM之间的数据传输。DMA引擎利用存储器中“发送描述符数组”和“接收描述符数组”来管理收发数据。描述符数组的每一个元素对应着一个数据缓冲区,多个数据缓冲区形成环形结构,而每一个数据缓冲区可以保存一个完整的以太网帧(Frame)或其中的一个帧片段(Fragment),即一个完整的以太网帧由一个或多个帧片段组成。

同时,使用生产索引(Produce Index)和消费索引(Consume Index)两个索引寄存器,来记录帧片段在环形缓冲结构中的位置,并随着数据的生产和消费相应地循环移动。

接收数据时,DMA引擎将MAC收到的帧片段“分散”存放到多个接收缓冲区,并设置状态标志位,供上层服务使用;发送数据时,DMA引擎将多个发送缓冲区的帧片段按顺序“集中”起来发送出去,并设置状态标志位,供上层服务使用。

完整的以太网驱动的初始化包含如下过程:

① LPC1768的以太网模块时钟和引脚使能;

② 初始化MAC地址、背对背、包间隙、最大帧长、冲突/重发窗口等控制寄存器;

③ 初始化PHY芯片;

④ 初始化发送描述符数组和接收描述符数组;

⑤ 使能接收完成(Rx Done)和发送完成(Tx Done)中断;

⑥ 启动发送和接收功能。

2.2.2 TCP/IP协议栈移植

TCP/IP协议栈的实现必须基于嵌入式实时操作系统。本方案采用了RL-RTX实时操作系统,它由ARM公司开发,是一款功能强大的嵌入式实时操作系统,适用于ARM7、ARM9、以及Cortex-M架构的微处理器,具有如下特点:

① 支持时间片、抢占式和合作式调度;

② 低中断延迟,对应Cortex-M3/M4内核可以实现零中断延迟;

③ 具有254级任务优先级;

④ 支持库移植方式,移植方便;

⑤ 基于对话框的配置向导,裁剪方便。

具体移植时,选择库移植方式,在“目标选项”标签页的操作系统下拉列表中选择“RTX Kernel”;然后,添加RTX系统的配置文件RTX_Conf_CM.c到工程中,通过配置向导对任务数量、默认堆栈大小、主频和tick值进行设置,完成操作系统的裁剪。

RL-RTX实时操作系统同时提供了众多的中间件,其中TCP/IP协议的中间件为RL-TCPnet,它具有RAM空间,花费少,同时目标代码紧凑,特别适合于资源有限的嵌入式操作系统,并针对ARM7、ARM9、以及Cortex-M架构的微处理器进行了优化。

移植RL-TCPnet时,需要对三个文件重点关注:TCP_CM3.lib是实现RL-TCPnet的库文件,需要将其添加到工程中;Net_Config.c是配置文件,可通过配置向导完成对IP地址、MAC地址等参数的设置;rtl.h包含了RL-TCPnet的库文件的函数原型,使用时必须引用它。

RL-TCPnet作为中间件,提供了与驱动层和应用层的数据传输接口。在系统初始化时,调用init_TcpNet()函数来初始化RL-TCPnet,该函数调用了以太网驱动层的相关函数,完成了对MAC和PHY的初始化;同时建立了RL-TCPnet的运行环境。

当OS启动之后,需要2个优先级固定的系统任务支撑RL-TCPnet的运行。任务tick_timer()用来为RL-TCPnet提供节拍,以周期性地唤醒RL-TCPnet主线程main_TcpNet();任务tcp_poll()调用RL-TCPnet主线程main_TcpNet(),它使用标准的Socket API向应用层提供数据收发服务。

本方案中使用UDP协议来进行应用开发,RL-TCPnet主线程main_TcpNet()监听网络上的UDP数据包,无论何时,只要收到UDP数据包,就会调用回调函数udp_callback(),通过消息邮箱的通信机制通知应用层任务接收数据包。

数据包中不仅含有净荷,还含有源端口号和目的端口号,供应用层进行路由处理;发送UDP数据包时,应用层将待发送的数据正文准备好,调用UDP Socket Send API函数的同时将目标IP地址、目的端口号、源端口号等参数传递给它,main_TcpNet()将自动组成UDP数据包并交由驱动层发送出去。

2.2.3 数据包路由选择

每一个串口的端口号存储在存储器中,当收到UDP数据包时,将数据包中的目的端口号与各个串口的端口号逐一比对,若有匹配的,则将净荷向相应的串口转发;若匹配不中,则将该UDP数据包丢弃。

同时,为每一个串口分配512字节的接收缓冲区,任务循环检查各个缓冲区是否为空,一旦某个串口收到字节,在将其放入对应的缓冲区的同时启动超时计时,超时时间一般为当前波特率下接收5个字符的时间,当下一个到来的字符没有超时时,超时计数器被清零;当发生超时时,则表示完整地收到了一帧数据,为该帧数据插上源端口号,目的端口号等帧头信息交由UDP Socket Send API函数进行转发,完成串口到网口的数据传输。

3 测试与验证

如图4所示,使用TCP&DUP测试工具在监控主机上建立了2个UDP客户端,目标IP均为10.35.217.168,客户端1通过端口号23访问局端光端机,客户端2通过端口号26访问远端光端机,数据通信正常,2个客户端独立工作,分别实现对局端光端机和远端光端机的监控。

图4 UDP多进程测试

结 语

[1] 王国法,刘薇,段明玮.基于嵌入式系统的以太网通信开发[J].光通信技术,2012,36(4):36-38.

[2] Behrouz A.Forouzan.TCP/IP协议族 [M].3版.北京:清华大学出版社,2009.

郭文龙(工程师),主要从事光通信研发工作。

猜你喜欢
光端机端口号以太网
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
在Docker容器中安装应用程序
浅谈野战光端机应用及改进意见
浅谈以java为基础的Socket通信简介及实现
谈实时以太网EtherCAT技术在变电站自动化中的应用
光端机的创新发展与应用
一种90W高功率以太网供电系统的设计
浅谈EPON与工业以太网在贵遵高速公路中的应用
Winsock编程在《计算机网络基础》教学中的应用
基于Android系统的互动展示APP的研究与设计