(上海海洋大学信息学院 农业部渔业信息重点实验室,上海 201306)
我国海域辽阔,海况复杂,船只运行实时监控、通信导航尚存在诸多亟待解决的问题。一方面,负责感知和广播船舶航行信息的船载仪器往往受工作频段与天线高度等因素的限制[2],通信距离受限,使得监控存在盲区,不能很好满足岸基调度中心对远洋船舶进行实时监控的需求;另一方面,船载传感器与智能设备种类增加迅速,但设备之间缺乏有效互联与融合;另外,诸如AIS等智能设备的信息采集率较高,给网关带来处理压力[1]。
北斗卫星导航系统[3](BeiDou Navigation Satellite System,BDS)作为我国自主研制的全球卫星定位与通信系统,通常是近海无公网覆盖海域实现作业时船-船、船-岸之间通信的唯一方式,但由于缺少便利的互联互通设备,船载传感器与智能设备难以有效使用北斗通信带宽。
在船联网中实现人、船、岸信息互通、互联成为物理信息融合及保障船舶安全的一种必然趋势,亟需能够对多类实时数据进行汇聚、融合与转发的高速智能设备,方便作业人员对各类数据进行监控。
传统技术多使用单片机完成船载设备的信息处理,如文献[4,5]中提出采用单片机实现北斗卫星转发船载AIS等信息,然而单个单片机的串行通信接口数量有限,且面对高频率大数量的信息传输时往往处理能力表现不佳,随着船载传感器逐渐增加、通信数据量不断增大,单片机难以实现高效的数据处理,不能很好保证系统运行的可靠性与稳定性。
鉴于此,本文充分利用FPGA的灵活性与可扩展性,提出基于MCU软核的船联网多通道北斗通信网关。论文通过即时中断可扩展技术扩展原MC8051的多串口机制,实时联接北斗、上位机、船载数据设备及传感器,完成通信数据采集;基于FPGA MCU软核完成数据融合转发处理,使用数据融合控制子模块对人、船、岸之间的传输数据进行解析和分发。
基于MCU软核的船联网多通道北斗网关系统结构如图1所示。
图1 系统架构
论文提出一种即时中断多串口机制扩展来扩展Oregano Systems公司的MC8051 MCU软核,并基于此建立人船岸之间的信息通道,主要包括:1)数据汇集层和2)数据融合与转发层两个层次:
1)数据汇集层在传统IO基础上,充分利用FPGA的硬件可扩展性,采用本文提出的即时中断多串口机制,通过支持即时中断的多串行通信接口完成繁杂智能数据设备的连接。数据汇集部分包含(1)船载设备接口;(2)人机接口;(3)远程通信接口三部分。
(1)船载设备接口除通过扩展后的MCU软核I/O口连接传统船载传感器外,还连接AIS收发模块、柴油机监控仪等船载仪器。
(2)人机接口负责与上位机通信,作业人员通过上位机对船载传感器、AIS及柴油机监控仪等船舶航行数据进行集中监控、并通过远程通信接口及北斗通信终端与岸基调度中心交互。
(3)远程通信接口通过北斗卫星通信终端完成必要的船舶航行数据、上位机作业信息的远程传输,同时下发岸基调度中心相关作业命令和船舶航行信息查询命令,完成船-船、船-岸远程信息交互。
2)数据处理与转发层基于MCU软核,通过在软核上运行用户逻辑完成数据的处理与分发控制,相较与传统网关,可充分利用软核的灵活性。
数据处理与转发层主要包括:(1)数据采集前端;(2)数据处理子模块;(3)数据融合控制子模块三个单元。
(1)数据采集前端通过船载设备接口对船载仪器和船载传感器进行数据的实时采集,并发送至数据处理子模块进行数据预处理,同时接收、转发来自上位机和北斗终端的信息查询命令。
(2)数据处理子模块对采集前端数据进行预处理,去除冗余数据。
(3)数据融合控制子模块主要对数据采集前端、人机接口和远程通信接口的通信数据进行解析、数据融合,完成数据融合与分发控制。
所提网关模型数据汇集部分主要完成与人船岸的直接交互,为保证交互的实时性,本文在MC8051 IP核基础上提出即时中断多串口机制。虽然MC8051 IP核支持同时扩展256个串口设备[6],但如图2所示,MC8051MCU软核设计添加地址为0x8E的SFR--定时器/计数器选择寄存器TSEL对TCON进行参数选择控制,同时添加了地址为0x9A的SFR--串口单元选择寄存器SSEL对扩展的串口单元进行控制。SSEL寄存器中每个值对应一个已扩展串口,中断信号RI和TI根据当前SSEL的值连接到相应串口的中断信号上,且每次只能与一个串口的中断信号相连,即只有当前SSEL选择的串口才能触发中断。
因此,MC8051同时只能有一个串口可以触发串口中断,当使用多个串口时,需要通过遍历SSEL特殊功能寄存器的值来选择不同的串口,才能检测到是否有串口发生中断,从而进入中断处理程序。使用这种轮询方式监测多个串口的数据传输,往往不能及时获取发生中断的串口信息,容易造成数据包丢失,通信效率低。
船联网中通信设备较多,当扩展多个串口进行通信时,需要不断变换SSEL寄存器中的值以选择不同串口,才能监测到该串口是否触发中断,这种轮询查找中断的方式不但增加了MCU软核的负担,还容易使船联网多个设备之间通信数据的产生丢包问题。
为解决上述问题,本文提出即时中断多串口机制,如图3所示。
图2 MC8051 MCU软核串口扩展与控制结构图
图3 即时中断多串口机制
如图3所示,为使所有已扩展串口都能即时触发中断,改变中断信号RI和TI与已扩展串口中断信号的连接方式,摆脱SSEL寄存器对多串口触发中断的限制,采用逻辑或的方式分别将已扩展串口的中断信号连接到中断信号RI和TI上,采用这种方法,当已扩展串口中有任意一个或多个串口接收到数据,都会即时触发串口中断。同时,为能获取发生串口中断的串口号,本文提出扩展设计用于保存串口单元接收中断标志位的SFR组—RI_flag(0…31),将每8个串口单元的接收中断标志位存放至一个RI_flag特殊功能寄存器中,如图3所示,当检测到有串口中断发生时,系统可在中断程序中通过带符号位的循环移位操作查询相应RI_flag特殊功能寄存器中的值,确定触发中断的相应串口。
以扩展8个串口为例,当某个串口中断触发时,在中断程序中若检测到特殊功能寄存器Ri_flag(0)的值为0x04则表示第三个串口(从第0个串口开始计数)发生了中断,然后系统就可以进入到相应子程序中对不同串口数据分别进行处理。RI_flag特殊功能寄存器可根据扩展串口单元的情况进行选择用户可用的SFR,如地址为0x9B、0xC0等。
即时中断多串口机制使MCU软核扩展多个串口时可以即时触发中断,解决了轮询方式监测中断产生数据丢失、效率低的问题,并可通过查询特殊功能寄存器Ri_flag值确定触发中断的串口号,保证了船联网中多设备的接入和数据的及时获取。
数据处理与转发部分由基于MC8051用户逻辑来实现,对用户而言有很大的灵活性。另外,MCU软核时钟频率可以根据应用需求灵活性改变,船联网中数据采集传输频繁,提高时钟频率有利于数据传输吞吐率的提高。
传统单片机在进行数据传输时,时钟频率多采用11.0592MHz,为了提高数据吞吐率,将MCU软核的时钟频率根据单片机晶振频率按比例提高,以精准填充TH1和TL1初始值,避免造成数据传输误差。以串口通信方式1(10位异步收发)、定时器1工作方式2产生波特率为例,其波特率计算公式为:
由波特率计算公式可以得出按比例提高时钟频率后TH1和TL1初始值填充公式:
其中,n为时钟频率提高的倍数。
按比例提高时钟频率,保证了数据的稳定传输,在扩展多个串口传输时,能够有效增强网关对信息的处理速率,提高数据传输的吞吐率。
数据处理与转发部分主要包括数据采集前端、数据处理子模块和数据融合控制子模块,其结构如图4所示。
图4 数据处理与转发结构图
数据采集前端完成对船载仪器和船载传感器的数据采集,包括定时周期采集,及根据上位机和岸基调度中心的信息查询命令采集。
数据处理子模块负责对数据采集前端数据进行预处理,对上位机和岸基调度中心的信息查询命令的解析处理,并发送至数据采集前端进行信息的查询。
数据融合控制子模块对数据采集前端、人机接口和远程通信接口的数据进行解析控制,使基于MCU软核的多通道北斗通信网关能够有序地传输数据。
由于北斗通信终端通常是船联网与外部的唯一通信接口[7],通过数据处理子模块融合传输数据,去除其中的冗余部分,可以提高北斗通信终端数据传输效率;同时由于数据采集前端采集到船舶感知数据是保障船舶安全航行的重要依据,数据融合控制子模块仅对该端口发出的数据依据相应报文格式进行封装,同时按需发送至人机接口和远程通信接口。数据融合控制子模块对人机接口和远程通信接口数据解析分发的状态转移过程如图5所示。
如图5所示,数据融合控制子模块起始状态为监听状态,收到人机接口或远程通信接口发送来的数据后,进入到数据解析状态,对接收到的数据进行解析,根据解析结果对数据进行汇总与分发。以收到人机接口数据为例,若解析得出是船舶作业人员的相关作业信息,则将数据发送至远程通信接口,利用北斗通信终端把数据传回岸基调度中心;若解析结果是感知信息查询命令,则将数据发送至数据采集前端完成相应数据的采集。同时数据融合控制子模块会对传输数据的各个位进行检测,待检测到传输数据的结束符,数据融合控制子模块将完成该条数据的发送,再次进入到数据的监听状态,等待下条数据的传输。
图5 数据融合控制状态转移图
为对所提设计方案进行验证及实现,以现场可编程门阵列(Field Programmable Gate Array,FPGA)作为设计载体[8],FPGA选用Altera公司的Cyclone ⅣEP4CE6E22C8N,板载时钟50MHz,为所提多通道北斗通信网关的实现提供了充足的可用资源,也为提高系统的集成度、保证系统可靠性、降低系统功耗提供了有效载体。
设计实验比对中断机制优化前后数据传输效率。MCU软核扩展4个串口,时钟频率设定为11.0592MHz,使用串口工作方式1,波特率采用9600bps,模拟船载AIS定时给一个串口发送本船AIS报文数据包,该包由56个字符组成,MCU软核收到数据包后将该包转发给上位机,数据发送时间间隔分别取100ms、500ms和1000ms,计1分钟数据包的传输结果如表1所示。
表1 不同中断机制数据传输结果
由实验结果可知,由于需要不断遍历SSEL寄存器的值来查询串口中断,原轮询方式传输数据易产生丢包现象,丢包率随着传输频率提高而增大,且随着串口数量的增多,数据丢包情况会更加明显,严重影响船舶航行数据的实时传输。本文提出的即时中断多串口机制有效解决了MC8051 IP核轮询方式监测多串口中断效率低、丢包率高的问题。基于即时中断机制的多串口网关设备在接入多个通信终端时,可以实时监测串口是否有数据传输,提高了数据传输的准确性。
由于所采用的FPGA 开发板最高时钟频率为50 MHz,按比例提高时钟频率最大可取到44.2368MHz。MCU软核扩展4个串口,根据式(2)分别取n=1~4,选择串口工作方式1,波特率为9600bps,模拟船载AIS每1000ms同时向4个串口发送本船AIS报文数据包,该数据包共56个字符,MCU软核收到数据包后转发给上位机,计1分钟数据包传输结果进行对比试验,实验结果如表2所示。
表2 网关转发吞吐率实验结果
由实验结果可知,扩展多个串口时,当有较多数据同时传输,时钟频率会影响数据的丢包情况,时钟频率越高,丢包率越低,网关吞吐率越高。
经现场测试表明所提多通道网关能有效采集船舶航行相关数据,实现人船岸数据的实时处理,完成多数据端通信数据的分发控制,多通道北斗通信网关在船联网中的实际应用如图6所示。
本文利用FPGA的灵活性和可扩展性,提出基于MCU软核的船联网多通道北斗通信网关,实现了人船岸之间的实时数据传输;通过扩展多个串行通信接口,实现人船岸中多个设备的接入;提出即时中断多串口机制,采用并发中断的方式解决多串口数据传输负载大时的丢包问题;按比例增大系统时钟频率,提高了数据传输的吞吐率;设计数据采集前端和数据处理子模块负责多个船载设备数据的采集、融合处理,去除冗余数据,降低了船联网通信负载;数据融合控制子模块实现了人船岸数据的融合、解析与分发;利用北斗通信终端转发数据解决船载仪器通信距离受限等问题。所提设计方案具有良好的扩展性、灵活性,为多种船载设备借助北斗通信融入船联网提供了解决方案。