文献标识码:A
DOI:10.16157/j.issn.0258-7998.181311
中文引用格式:盛蔚,黄伟杰. 民用无人机多通道数传交换系统设计[J].电子技术应用,2018,44(12):77-80,84.
英文引用格式:Sheng Wei,Huang Weijie. Design of multi-channel data switch system for civil UAVs[J]. Application of Electronic Technique,2018,44(12):77-80,84.
0 引言
民用无人机系统集成时,除了飞控需要与地面站通信外,部分机载设备也需要与地面系统的设备进行通信。如采用相对差分GPS技术来提高无人机导航精度时,地面端差分基站需要上传差分导航电文给机载移动站接收机[1];任务载荷需要与其配套的地面控制终端传输状态与指令数据等。如何解决空地多路设备的数据传输成为系统集成的关键问题。
现有的解决方法主要包括:(1)采用多对数传电台或多通道电台分别传输各路设备的数据;(2)由飞控和地面站转发多路数据,数据经过一对电台实现无线传输[2-3]。方法1体积重量增加,电磁兼容性差,且成本高。因此,方法2成为主要实现方法。但由于飞控需要完成复杂的导航控制解算任务,处理器资源有限,造成数据传输效率低,数据量大时容易发生数据阻塞的问题,影响无人机飞行安全。
鉴于现有的无人机设备多采用串口通信方式,且空地间的通信呈现交换局域网特性,本文设计了一种应用于无人机设备网络的串口交换机,通过专用的链路层报文协议和基于RT-Thread实时操作系统的多线程通信程序,实现高效的多通道数据交换传输功能;利用操作系统基于线程优先级的内核调度方法实现输出端口的优先级队列调度功能,确保高优先级数据不因数据量大而发生通信阻塞,提高了交换传输系统的可靠性。
1 系统网络结构与工作原理
一对串口交换机分别安装在无人机系统的机载端和地面端,连接机载系统和地面系统的串口设备,如图1所示。交换机端口分为1个节点端口和多个设备端口,节点端口连接数传电台,分时传输各设备的数据。在计算机网络中,以太网交换机工作在OSI模型的数据链路层,各端口接收到链路层的以太网数据帧后根据其中的目的MAC地址与端口地址映射表完成数据帧的转发[4]。而在无人机设备网络中,串口交换机接收到的是设备的应用协议数据帧,不包含任何网络连接信息,因此系统软件为各设备端口分配唯一的端口地址,并根据链路层的报文协议和端口参数为设备数据帧添加地址等链路层封装,通过端口寻址转发数据,在端口输出时去除封装,实现各通道设备间虚连接的透传功能。当出现多路数据同时访问节点端口时,则根据通道优先级依次输出各路数据,最终实现多通道数据的无线传输功能。
2 系统需求分析与硬件方案
结合当前应用需求分析,无人机空地数据链包括飞控数据链、差分导航电文数据链、载荷数据链等。因此,将串口交换机的端口数定为5个,分为1个节点端口和4个设备端口,在实现常用的3通道数据传输的基础上预留1路给其他扩展设备。
串口交换机的硬件组成包括单片机、电平转换芯片、端口通信指示灯和开关电源。单片机采用ST公司的STM32F405RGT6,其内核为ARM公司推出的Cotex-M4内核,运行时钟达168 MHz,总共有6个串口外设,具有1 MB的Flash和192 KB的RAM,充足的运行内存为大容量通信提供足够的缓冲区,单个芯片即可满足系统设计需求。
电平转换芯片由MAX3232和MAX3490分别将COMS/TTL电平转为常用的RS-232和RS-422串口电平,以适应不同接口的设备,如图2所示。通信指示灯则用于显示各端口的数据收发状态。
3 系统软件设计
3.1 链路层报文协议设计
为实现多路数据交换传输功能,首先定义了链路层报文交换协议。借鉴IEEE802.3标准以太网帧格式定义[5],并结合无人机串口设备网络的特点和实际功能需求,设计了如表1所示的链路层报文协议。
相较于以太网帧格式,上述定义的链路层报文协议存在以下特点:
(1)以太网数据帧最长为1 500 B,串口交换机的报文帧长由1 B表示,最长数据帧为255 B,该长度能够满足绝大部分的串口设备帧长。对于超长的数据帧,对其拆分成多个数据报文,由报文序号表示报文之间的拼接顺序,避免超长数据帧占用链路时间过长而增加其他报文的等待延时;
(2)报文携带端口的优先级信息,在多个报文同时访问一个输出端口时能够实现区分服务功能,确保重要的设备数据优先输出;
(3)协议除了用于数据通信外,还可向交换机发送指令报文,配置各个端口的优先级和串口参数等,提高串口交换机应用的灵活性。
3.2 多线程通信程序设计
串口交换机的嵌入式通信程序要求能够实时处理5个串口外设的数据收发,同时还要完成各设备端口数据的链路层协议封装、转发、解封和端口输出调度等任务。采用传统单片机顺序执行的程序设计方法难以实现多个端口高效、实时的数据交换传输功能。
本文在串口交换机的STM32处理器上移植了嵌入式实时操作系统RT-Thread[6-7],利用操作系统的多线程编程模型与运行机制实现各端口通信程序模块化编程和独立运行。利用系统提供的信号量、消息队列等线程同步和通信对象实现各端口收发线程的同步与数据交换功能,极大地提高了程序设计的效率。
首先,为了应对多串口并发传输数据的通信压力,软件底层设计了DMA传输和接收空闲中断的串口驱动程序。端口接收设备的数据时,DMA控制器自动将数据存入底层接收缓冲区。当数据帧结束时,串口产生空闲中断,在中断服务函数中计算接收数据长度,并释放信号量通知上层的应用程序读取数据。在发送数据时,直接将发送缓冲区的首地址和数据长度赋值给DMA控制器后,便挂起释放CPU资源,底层由硬件自动执行串口发送。该方法与常用的单字节接收中断方法相比,极大地减少数据接收的中断频率,接收线程可在底层接收完一帧数据后才唤醒一次,统一对接收缓冲区的数据进行处理,提高了数据传输效率和系统可靠性。
上层应用程序分别为每个端口创建接收处理线程和发送线程,由系统内核根据线程状态和线程优先级调度执行,达到并发运行的效果。端口接收线程的执行流程如图3所示,首先读取底层接收FIFO的数据。对于4个设备端口,对读取的数据执行透传处理,即读取端口目的地址等参数后对数据帧添加链路层协议封装,形成链路层报文数据,最后通过操作系统提供的消息队列将报文数据转发到节点端口的发送线程。对于节点端口,其接收电台发送过来的链路层报文数据,需要对报文进行传输校验,校验通过后按照报文的目的端口信息将报文转发到目的端口的发送线程。
设备端口的发送线程在等待消息队列的报文数据时处于挂起状态。在获得节点接收线程转发过来的报文数据后,发送线程以高于接收线程的优先级抢占CPU,读取队列中报文数据并根据链路层的报文协议去除封装,提取数据内容,执行DMA发送,最后释放CPU。该过程流程简单,占用CPU时间少,使消息队列中的报文及时输出,避免队列溢出。
3.3 基于线程优先级的优先队列调度实现方法
交换机连接电台的节点端口任意时刻只能传输一个报文数据,当多路报文同时访问时,须在输出队列中排队等待。不同数传电台的传输速率不同,造成后续报文排队等待延时难以确定。设备增多,数据量变大时容易发生通信阻塞和缓冲区溢出的问题。
考虑到不同的设备数据对实时性要求和无人机安全飞行的重要程度不同。为了确保无人机飞行安全,本文采用的策略是对端口进行优先级定义,形成不同优先级的报文,并确保最高优先级的数据充分享有电台的传输带宽,不发生通信阻塞。一种易于实现的方法是严格优先级队列调度算法(Strict Priority,SP)[8],该算法的原理是在节点输出端口设计一个队列调度器和多级输出缓冲队列,如图4所示。队列调度器每次发送报文数据时,先发送最高优先级队列的报文数据,只有在最高优先级队列中无报文数据后,才从次优先级中选择报文发送,以此类推。
通过分析比较,SP调度算法对队列的调度策略与嵌入式实时操作系统内核基于线程优先级的调度策略[9]相似,因此采用线程优先级的调度方法可快速实现SP队列调度算法。具体实现方法是为图4中的每个队列创建一个发送线程,即将原来节点端口的1个发送线程扩展为4个,线程的优先级顺序按照端口优先级排序,且均高于其他端口线程的优先级。每个发送线程对应一个长度为20条消息的消息队列,用于缓存待调度输出的报文数据。在只有一个发送线程的消息队列收到报文时,内核直接调度执行串口发送。当多个发送线程同时处于就绪态时,内核根据线程优先级先执行高优先级的发送线程,发送完成后进行下一次调度,每次调度都从就绪态中最高优先级的发送线程开始。
线程调度与队列调度的一个区别在于内核对线程实行全抢占式的调度方法,即高优先级的线程能够抢占低优先级线程的执行。为了避免高优先级发送线程抢占发送数据,造成前一报文传输失败,需在节点端口4个发送线程之间添加发送互斥锁同步对象,使高优先级的发送线程在收到报文后仍须等待当前发送完成并释放互斥锁,才获得执行。
通过上述方法,原有的队列调度工作转换为内核对线程的调度工作,无需设计队列调度器程序,由稳定的系统内核实现相同的功能,提高了运行的可靠性,确保了高优先级设备数据不因数据量大而发生通信阻塞,进一步提高了无人机系统多路数据传输的可靠性。
4 系统测试结果与分析
为了测试验证系统软件,排除电台无线传输误码造成的报文丢失,测试时采用有线的方式连接一对串口交换机的两个节点端口,节点端口的波特率设置为115 200 b/s。通过串口助手模拟设备通信,测试内容分为2项:
(1)测试各通道在不同波特率、不同数据频率下数据传输的完整性和实时性。由两个串口助手分别在传输通道的两端,双向同时发送字符串消息。测试结果表明,各通道独立工作时均能完整、实时地传输数据。
(2)测试在不同数据频率下4个通道并发传输数据时各通道数据的传输完整率。首先按端口序号定义4个设备端口的优先级,数值越小优先级越高,波特率统一配置为115 200 b/s。串口助手软件同时向交换机的4个设备端口发送帧长为50 B的数据,发送频率为50~100 Hz,以10 Hz递增,各频率下通信10 min,统计每个频率下4个通道接收字节数占发送字节数的百分比,结果如图5所示。
在60 Hz频率下,总的数据输入速率为12 000 B/s,由于缓冲区的存在,即使略大于节点的输出速率11 520 B/s,短时间内仍然能够完整地传输4个通道的数据,只存在少量误码丢包。当数据频率达到70 Hz时,输入速率已经大大超过节点输出速率,此时最低优先级的COM4端口数据开始得不到传输,COM3端口只传输了67.8%,而高优先级的COM1、COM2仍然能够得到完整的传输。继续增加发送频率,COM3的传输率继续下降,但仍然不影响高优先级的两个端口。测试结果说明基于线程优先级的SP队列调度实现方法有效。
5 结论
本文针对当前民用无人机系统集成时出现的空地多路设备传输需求,将计算机局域网中以太网交换机的原理应用于无人机系统串口设备网络,设计了多串口交换机。通过专用的链路层协议和高效的多线程通信程序,实现了空地多通道数传交换功能,并实现了端口的区分服务,确保高优先级数据的可靠传输,保障无人机飞行安全。该设计简化了系统集成工作,降低了系统成本,对推动无人机在各领域的应用具有重要意义。
参考文献
[1] 张晓毅,韦高.基于Novatel DL-V3接收机的相对差分定位技术研究[J].弹箭与制导学报,2008(4):266-268,271.
[2] 陈青松,李平,韩波,等.多路串行通信在微型无人机飞控计算机中的设计与实现[J].机电工程,2006(4):57-61.
[3] 余国林,陈继平,余涛,等.无人机航空遥感平台机载作业控制系统设计[J].现代电子技术,2012,35(4):132-135.
[4] 吕斌.交换机原理及应用[J].电脑知识与技术,2009,5(10):2557-2558,2563.
[5] 郭晓宇.基于IEEE802.3标准的以太网数据帧格式的封装实现[D].北京:北京交通大学,2008.
[6] 朱传宏,张丽全.嵌入式实时操作系统RT-Thread在SEP-4020上的移植[J].计算机与数字工程,2010,38(11):93-96.
[7] 邱祎.嵌入式实时操作系统RT-Thread的设计与实现[D].成都:电子科技大学,2007.
[8] 魏艳艳,孟李林.高速分组交换网络中调度器的设计[J].计算机技术与发展,2012,22(1):25-28.
[9] 郭杨,王新社.嵌入式操作系统的硬实时微内核设计[J].计算机工程与设计,2008(1):115-118.
作者信息:
盛 蔚,黄伟杰
(北京航空航天大学 仪器科学与光电工程学院,北京100191)