仲伟波,陈键,冯友兵,卢道华
1 江苏科技大学 电子信息学院,江苏 镇江 212003
2 江苏科技大学 海洋装备研究院,江苏 镇江 212003
随着信息技术和人工智能技术的快速发展,船上电子设备越来越多,船舶运行所需的数据也越来越多,这对船舶数据采集、处理与传输提出了更高的要求[1]。工业应用及其要求的多样性催生了种类繁多的现场工业总线,例如工业以太网国际标准IEC 61158,ISO 11898 规范的控制器域网(CAN)总线以及各大自动化公司开发的可编程逻辑控制器(PLC)、分散控制系统(DCS)专用通信协议等[2]。目前,工业以太网协议和CAN 网络在船舶及海工装备上得到了广泛应用[3]。
NMEA2000 是美国国家海洋电子协会制定的标准化数据通信协议,在CAN 的架构上采用ISO 11783-3 和11783-5 作为基础[4],定义了国际标准组织开放系统互连模型的相关层。NMEA2000作为一种广泛应用于连接船舶及其内部传感器和显示单元的即插即用通信标准[5],经过认证的设备连接到一个主干网上,不同设备之间可以相互通信。NMEA2000 是一种基于CAN 总线的应用层协议,以多主方式工作[6],网络上的任意节点在任意时刻都能向其他节点发送数据,网络上每个节点都有不同的优先级,在发送冲突时能够在总线上进行仲裁,且有可靠的检错机制[7]。
NMEA2000 是目前应用较为广泛的船载设备网络协议,但国内对其关注不多,研究得也较少,重要原因之一是仅有经过认证的设备才能使用NMEA2000 协议,因此极大地限制了其在船舶海工装备中的应用和推广。蔡礼松等[8]针对数据采集的可靠性和安全性要求高等特点,设计了一种基于CAN 的远程数据监控系统,但传感器设备接口不一致,不便于数据采集。孟瑶等[9]将CAN 总线应用到机器人通信系统中,针对传统方法运用UPPAAL 工具对CAN 总线进行建模分析,部署动态优先级对节点实时性进行改进;Davis等[10]对响应时间和CAN 消息的最优优先级分配策略进行了分析,采取了先入先出(FIFO)队列和优先队列混合的调度方式,CAN 总线的传输效率有所改善,但会对CAN 的实时性造成一定的影响。
为了进一步拓展NMEA2000 协议的应用范围,提升传输效率和实时性、可靠性,在自主可控平台上完善优化NMEA2000 协议,本文拟提出一个基于自主可控平台的方案,将非认证设备接入NMEA2000 网络,同时利用标识符域提升多帧数据传输效率,改静态优先级为动态优先级,使基于自主可控平台完善优化后的NMEA2000 网络的传输效率、实时性和可靠性能够满足船载设备间数据传输的需要。
NMEA2000 作为基于CAN 的应用层协议,继承了CAN 的扩展帧结构[11]。NMEA2000 协议中使用了29 bits 标识符,对其中的21 bits 进行了定义,以标识不同的船舶通信设备及船体信息和事件,同时对这些报文信息的优先级顺序也进行了定义。
NMEA2000 网络中所有需要传输的数据内容被定义为参数群的形式,并给出唯一标识符,称之为参数群编号(PGN)。PGN 共有18 bits,由NMEA2000 委员会根据传输数据的性质分配,遵照船舶设备属性和事件定义了156 个参数组号。在每个NMEA2000 协议定义的设备中,分别定义优先级、更新频率、数据长度等信息。在NMEA2000中保留位都为0,数据页位都为1 bit。数据页位为0 的PGN 由ISO 11783 定义,共有6 个,主要用于数据传输控制和说明[12]。
NMEA2000 通过使用PGN 来区分不同的数据内容,针对连接到网络中的各种设备,例如GPS 系统、惯性导航系统、雷达和其他传感器设备,以及无人艇航向、舵角、航速等实时信息,都有相对应的PGN 来表示。NMEA2000 继承了CAN协议扩展帧的仲裁域定义格式,在29 bits 的标识符字段中,包括了每个参数组号的优先级、保留位、数据页位和PGN。NMEA2000 标识符域和数据域与CAN 扩展帧格式存在如图1 所示的对应关系。图中包括以下参数:CAN 扩展帧格式包括帧起始位(SOF)、替代远程请求位(SRR)、识别符扩展位(IDE)、扩展标识符、远程请求发送位(RTR)、2 位保留位(R1 和R0)、数据长度(DLC)、数据域、循环冗余校验码(CRC)域、应答域(ACK field)和帧结束符(EOF)。
将非认证设备接入NMEA2000 网络,自主研发的数据采集转接板卡就是此设计中的桥梁。数据采集转接板卡主要负责平台控制系统数据的收集处理及平台所载数据格式的统一。考虑到外围设备的多样性,数据采集转接板卡有4 个RS232/RS485 串口,2 路CAN 接口和1 个网络接口,并设计了SD 卡用于保存关键数据,通信接口较为丰富。在国产嵌入式实时操作系统RT-Thread上进行软件开发,完成NMEA2000 协议应用扩展和优化。系统设计中可根据功能需求采用单块或多块板卡级联的方式协同处理数据。为保证数据采集转换板卡(图2)电路的稳定性和可靠性,多个对外接口均采用防浪涌电路设计,以避免系统遭到过压脉冲造成损坏。
图1 NMEA2000 标识符域与CAN 扩展帧的对应关系Fig. 1 Relationship between NMEA2000 identifier and CAN extension frame
图2 数据采集转接板卡Fig. 2 Adapter card for data acquisition
NMEA2000 设备分为认证和未认证2 大类。所谓认证设备是指其数据格式已在协议中定义,且设备已被官方认证,可以直接接入NMEA2000网络。未认证设备有2 种情况:一种是其数据类型在NMEA2000 中已定义,即有对应的PGN,但设备未经官方认证;另一种是其数据在协议中未被定义,设备也就不可能被官方认证。未认证设备不能直接接入NMEA2000 网络,需要根据实际情况进行转接处理方可接入网络。
NMEA2000 数据格式包含参数群、数据域、数据类型、优先级等重要参数。GPS 定位设备是最常用的装备之一,NEMA2000 协议定义了GPS数据格式,如表1 所示,表中hex 为十六进制。但是并不是所有的GPS 设备都已得到认证,已认证过的设备可以直接接入NMEA2000 网络,而大量未被认证的设备就无法直接接入。
从表1 可见,GPS 设备定义的PGN 为129 025(0x1F801)。NMEA2000 中帧类型有远程帧和数据帧2 类,其他帧则由CAN 硬件设置。远程帧用于信息请求,数据帧用于传输数据。如图1 所示,当远程发送请求位(RTR)为1 时,代表此帧为远程帧,当其为0 时,代表此帧为数据帧。帧格式分为标准帧和扩展帧,NMEA2000 协议的帧格式均为扩展帧。根据NMEA2000 协议定义的GPS 设备的优先级、保留位、数据页位和PGN 可得其ID为0x09F80100。
表1 NMEA2000 中GPS 数据格式Table 1 Data format of GPS in NMEA2000
针对已定义但未经认证的设备,例如GPS 设备,对其测量数据进行处理得到经、纬度等有效数据。根据NMEA2000 协议,CAN 数据域和PGN 有效数据呈倒序排列形式,所以将其倒序排列,最后得到符合NMEA2000 协议的数据。
若数据类型没有定义,则其采集设备也不可能被认证,此时需要根据NMEA2000 的数据帧格式自定义数据类型和结构。以激光测距传感器为例,由于激光测距传感器传输的数据较少,所以使用单帧传输方式即可。
首先,通过读取激光测距传感器的数据,识别传感数据类型。然后,根据自定义NMEA2000 协议接口配置进行排序,同时对名称、测量距离、测量频率等属性予以赋值,按照规定的顺序封装传感器数据。最后,按NMEA2000 协议字节交换表将所得的十六进制有效数据倒序排列,并完成转换。封装数据分为2 类:元数据和传感器数据。元数据即为PGN,代表传感器的类别,传感器数据即为采集的有效数据。标准化的数据封装共用统一的数据接口,数据采集板卡丰富的接口可以满足各类传感器的需求。表2 为自定义NMEA2000激光测距设备协议。
表2 自定义NMEA2000 激光测距设备协议Table 2 Custom laser ranging protocol of NMEA2000
如表2 所示,自定义激光测距设备的PGN 为129 030(0x1F806)。帧类型和帧格式分别为数据帧和扩展帧,29 bit 的ID 标识符为0x09F80600。定义激光测距设备每帧数据的第1 字节为序列ID,第2~3 字节为测量频率,第4~5 字节为与障碍物的距离,第6~8 字节未用到,默认为FF。
针对未定义且未认证的设备,如激光测距传感器,对其测量数据进行处理得到测量频率和与障碍物距离等有效数据。根据NMEA2000 协议,CAN 数据域和PGN 有效数据呈倒序排列形式,所以将其倒序排列,得到符合NMEA2000 协议的数据。
NMEA2000 在CAN 架构上采用短帧结构,每帧数据域不大于8 字节,因此,它有3 种数据传输方式:单帧传输、ISO 多包传输以及快速数据包传输。当数据帧不大于8 字节时,采用单帧传输方式。快速数据包传输方式能够最大传输223 字节的数据并且不需要ISO 11783 规范中指定的帧间空间,传输效率更高。如果设备需要接收任何超过223 字节的数据,则应采用ISO 多包传输方式,但数据传输上限不超过1 785 字节[4]。表3 为NMEA2000 的3 种传输方式的对比。
表3 NMEA2000 传输方式对比Table 3 Transmission mode comparison of NMEA2000
当NMEA2000 报文采用ISO 多包传输或快速数据包传输方式时,它将数据域的第1 字节作为报文的序号,后7 字节存放所传输的数据,由接收节点按照序号将原来的数据重新组合起来。尽管节点能够根据序列ID 正确解析报文,但传输效率大大降低,原本8 字节的数据域实际只传输了7 字节的有效数据。
本文在NMEA2000 协议的基础上,充分利用数据域进行改进。至于序列ID,则可利用NMEA2000未使用的标志符域进一步优化NMEA2000 网络。在NMEA2000 报文中,仲裁域是应用层根据自己的需求定义的。仲裁域的作用有2 个:一是在总线冲突时对报文的优先级进行仲裁,二是仲裁域本身也是传输数据的一种方式。在NMEA2000协议中,应用层定义的PGN 仅占用21 bit,而CAN的扩展帧有29 bit。在NMEA2000 所使用的PGN中,由于同一ID 发送的数据不大于1 785 字节,即最多传输255 帧数据。鉴于此,取NMEA2000数据帧的低8 bit 作为多报文数据帧序号,用来表示发送报文每帧数据的组合顺序,便于NMEA2000 网络按照序号将原来的数据组合成正确的报文。由此,在发送多帧的NMEA2000 报文时,总线在收到节点数据后能根据每帧数据的ID 和序号进行整合,形成一条新的NMEA2000报文,保证数据的完整性和正确性,提高了NMEA2000 网络的传输效率。
在不改变基本CAN 帧前提下,采用NMEA2000的扩展帧格式,充分利用NMEA2000 未定义的标识符域,重新定义扩展帧的ID 字段,保证了和传统CAN 系统的良好兼容性。新NMEA2000 标识符域如表4 所示。
对比图1 和表4,将NMEA2000 标识符低8 bit 用于多报文数据序号位,将原先传输序号的字节位置用来传输数据,原本传输7 个有效字节的数据域现在传输了8 个有效字节,提升了传输效率。当传输总字节数不同时,传输效率的提升程度也不同。当传输的字节数小于8 字节,采用单帧传输方式时,传输效率不会得到提升。当传输字节数不小于8 字节,且采用改进后的数据帧跨帧传输时,传输效率会得到提升。部分传输效率的提升情况如表5 所示,传输效率提升了0%~50%不等,传输效率提升程度受协议包总字节数的影响。由于NMEA2000 协议规定,最大传输字节数不超过1 785 字节,在传输字节数等概率情况下,经计算,最终传输速率综合提升约12.23%。而一般传输的数据域字节数不超过64 字节,等概率情况下传输速率提升约9.18%。
表4 新NMEA2000 标识符域Table 4 New identifier fields of NMEA2000
表5 部分传输效率提升程度对比Table 5 Partial comparison of transmission efficiency improvement
NMEA2000 协议优先级占了标识符域的前3 bit,紧接着第4 bit 则是保留位0。根据NMEA2000协议的规定,保留位都为0。由于保留位相同,在总线仲裁时,会对保留位后的数据页位进行仲裁,保留位失去了意义。所以根据NMEA2000 协议的特殊性,将保留位用于优先级位的延伸,优先级从原来的3 bit 扩展至4 bit。由于优先级位扩充使优先级范围增大了1 倍,所以可以在NMEA2000 协议的基础上多定义8 个优先级,减少了当优先级相同时对总线的仲裁次数。改进后的NMEA2000 标识符域如表6 所示。
表6 改进后的NMEA2000 标识符域Table 6 Improved identifier fields of NMEA2000
针对不同优先级的节点,当在同一时刻向总线上发送数据导致优先级低的节点仲裁失败时,则将落选节点提升1 个优先级;若其优先级提升后与原有优先级冲突,则优先发送落选节点数据。针对同一优先级的节点,由于前4 bit 的优先级位都相同,根据CAN 总线规定,将对优先级域后面的标识符域继续进行仲裁。节点每仲裁失败1 次便提升1 个优先级,直至其被发送到总线上。动态优先级调整流程如图3 所示。
图3 动态优先级调整流程图Fig. 3 Flowchart of dynamic priority adjustment
同时,针对多帧发送的NMEA2000 协议的报文,第1 帧数据发出后,后面同一参数的报文无论自身优先级多少,都应立即将优先级调度至最高优先级,保证此节点报文的实时性与完整性。因为NMEA2000 协议优先级是固定的,所以每帧报文的ID 也是固定的。同样,本文提出的动态优先级策略也将改变NMEA2000 协议报文的ID,所以在进行动态优先级调整后需要将优先级复原,以保证NMEA2000 协议报文ID 的一致性。多帧传输发送时优先级调整流程如图4 所示。
图4 多帧发送优先级调整流程图Fig. 4 Flowchart of multi-frame transmission priority adjustment
由于NMEA2000 网络中对数据传输的实时性和可靠性要求十分高,所以在NMEA2000 数据采集转换板卡上采用RT-Thread 嵌入式实时操作系统。根据实现各设备NMEA2000 协议接口的统一性和提高传输效率及实时性等方面建立4 个线程,总体架构如图5 所示。主线程主要初始化各优先级和各互斥量并创建所需线程,如图5(a)所示。线程1 负责接收并提取不同设备的信息,如图5(b)所示;线程2 根据接收到的有效信息在判断是否为NMEA2000 认证设备数据,并对数据进行分类,将其转换成相应的NMEA2000 数据格式并借助NMEA2000 未使用的标识符域增加数据域传输的有效数据,提高传输效率,如图5(c)所示;线程3 中节点向NMEA2000 网络发送数据,根据CAN 发送寄存器(CAN_TSTR)仲裁失败标志位是否置1,判断节点是否仲裁失败,如图5(d)所示;线程4 提高仲裁失败节点的优先级,进一步优化多帧发送的数据,使其能够快速将数据发送到总线上,提高实时性,如图5(e)所示。
基于自主可控平台研制的NMEA2000 数据采集处理传输板卡采用的主控芯片是基于Cortex-M3 内核的国产芯片GD32F207,有4 个通用同步/异步串行接收/发送器(USART)和2 个通用异步收发传输器(UART),2 路CAN 控制器,1 个网络接口,通信接口较为丰富。在国产嵌入式实时操作系统RT-Thread 上进行软件开发,完成了NMEA2000 应用扩展和优化。
中海达全球导航卫星系统(GNSS)接收机的数据已定义但设备未认证,其原始数据为:$GPRMC,091 036.40,A,3 211.917 247 9,N,11 927.634 625 7,E,0.035,189.7,250 319,0.0,E,A*3C。上述数据需进行处理后方能接入NMEA2000 网络。以GPS纬度为例,首先将纬度数据32 119 172 479 N 提取出来,得到纬度为32.198 620 7°。由于纬度数据是一个小数,不满足NMEA2000 协议要求,根据NMEA2000 协 议,将 纬 度×107,得 到 整 形 数 据321 986 207°,然后将其转换为4 Bytes 的十六进制数13311E9F。同理,按照协议规定的顺序对经度、时间、高度等数据进行封装,完成转换。
图6 和图7 分别为GNSS 接收机采集的原始数据及改进后的数据。由图可见,改进后的多帧报文将优先级位置于NMEA2000 ID 空闲位,每帧的传输数据量由7 字节扩大至8 字节。此外,本次传输的有效字节数为44 字节,数据改进前,由于NMEA2000协议的规定,每帧的第1 字节用于序号定义,所以共分为7 帧发送,传输的总字节数为56 字节,传输效率约为78.57%。数据改进后,传输的有效字节数不变,由于序号位的转移,原本需要7 帧发送的数据量仅用了6 帧便可以完成发送,传输的总字节数为48 字节,传输效率约为91.67%,提升约13.1%。而且将原有的GNSS 接收机的数据格式成功转换为NMEA2000 数据格式,使其兼容NMEA2000网络。
针对NMEA2000 未定义的数据类型,也可以通过基于自主可控平台研制的数据板卡接入NMEA2000 网络,图8 为自定义激光测距设备协议采集到的数据。由图可见,改进后的激光测距传感器数据完全符合自定义的NMEA2000 协议,同样兼容NMEA2000 网络。
GD32F207 自带CAN 控制器,可以通过读取CAN 发送状态寄存器(CAN_TSTR)中的仲裁失败标志位,来观察发送的 NMEA2000 数据帧是否仲裁失败;当发生仲裁失败时,该位会被置1。GD32F207 有2 路CAN,设置CAN 分别向总线发送优先级不同的2 帧NMEA2000 数据帧。
为验证本文优先级动态调整方法的有效性和可靠性,在1 条总线上挂载了10 个节点,共有10 帧优先级不同的NMEA2000 数据帧同时往总线发送。由于CAN 总线传输速率和传输距离相关性较大,本文将传输距离设为1 m 并不再改变传输距离。NMEA2000 网络是基于CAN 总线的架构,而CAN 总线是一种基于优先级的串行通信网络,因此采用载波监听多路访问机制。图9 和图10 分别为NMEA2000 网络实验模型和得到的网络数据。由图10 可见,基于NMEA2000 协议,在多节点情况下可同时向总线发送数据,且未产生丢包现象,总线数据稳定可靠。本方法可满足NMEA2000 多节点冲突的仲裁情况。
图5 RT-Thread 操作系统各线程流程图Fig. 5 Flowcharts of each thread of RT-Thread operation system
图6 GNSS 接收机的原始数据Fig. 6 Original data of GNSS receiver
图7 GNSS 接收机改进后的数据Fig. 7 Improved data of GNSS receiver
图8 改进后的激光测距传感器数据Fig. 8 Improved laser ranging sensor data
图9 NMEA2000 实验模型Fig. 9 The experimental model of NMEA2000
图10 NMEA2000 网络信息Fig. 10 The network information of NMEA2000
基于NMEA2000 协议,将船上各种设备的数据接口标准化,统一了所有设备的数据格式,并针对NMEA2000 协议,采用扩充NMEA2000 数据域的方法提升总线数据传输效率。同时,采用动态优先级策略并对其进行实验分析和验证,结果表明,采用动态优先级策略可以改善NMEA2000网络的实时性,具有一定的应用价值。