无人机控制系统的制作方法

文档序号:15743932发布日期:2018-10-23 22:45阅读:235来源:国知局

本发明涉及一种控制系统,特别涉及一种无人机控制系统,属于无人机通信领域。



背景技术:

随着经济、社会的迅速发展和空域管理改革的持续推进,低空空域的逐渐开放,无人机将会得到大力的发展和更加广泛的应用,可以将无人机应用到电力、通信、气象、农林、海洋、勘探、保险等领域,具体的如可以用于地球观测、森林防火和灭火、灾害检测、通信中继、海上监视、油气管道检查、农药喷洒、土地资源调查、野生动物监测、防汛抗旱监测、鱼群探测、影视航拍、缉毒缉私、边境巡逻、治安反恐等方面。另外,也可利用无人机与卫星的交互通信,再利用地面控制端与卫星之间的通信,达到控制无人机和接收无人机图像的需求。但是,利用卫星做中继转发,延时较大,实时性较差;需租用卫星频段,使用受限,普通用户无法使用。

在现代技术中,无人机的实时遥控都需要满足视距的前提条件,如果需要超视距遥控和图像传输,需要用到较低的频段,比如300MHz~400MHz频段或者更低的频段,利用低频段的绕射能做到一定程度的超视距传输。但是这种情况下,利用低频绕射的可靠性较低,受环境影响较大。

然而现有的无人机控制系统由于控制手段不合理,还存在以下缺陷,一方面,定位准确性不高,悬停可靠性差,存在较大的风险,再一方面,信号容易丢失,导致无法受控,还有一方面,容易进入到禁飞区域以及碰撞障碍物。因此,现有无人机控制系统存在数据传输的可靠性差的问题。



技术实现要素:

针对现有无人机控制系统数据传输的可靠性差的问题,本发明提供一种丢包率低、无延迟、无阻塞的无人机控制系统。

本发明的无人机控制系统,所述无人机控制系统设置在地面,包括数据通信模块、数据显示模块、任务控制模块和飞行数据存储模块;

数据通信模块,用于利用UDP协议下的socket网络实现与无人机交互,包括接收无人机的飞行状态数据及向无人机发送控制指令;

数据显示模块,用于根据接收的无人机的飞行状态显示无人机实时的飞行状态信息;

数据存储模块,用于将无人机的飞行状态数据存储至数据库;

任务控制模块,用于根据无人机的飞行状态数据,获得控制指令,控制无人机飞行路线。

优选的是,所述数据通信模块利用UDP协议下的socket网络的UDP服务器与无人机通信,通信过程包括:

首先,无人机发送请求指令到UDP服务器;

UDP服务器锁定无人机的IP地址,向无人机发送控制指令;

无人机得到控制指令后可直接转发到192.168.1.1的指定端来实现无线远程控制。

优选的是,所述UDP服务器与无人机通信的过程包括:

无人机利用函数socket()创建套接口,调用函数sendto()将请求指令发送给UDP服务器;

UDP服务器利用函数socket()创建套接口后,函数bind()给所述接口分配一个地址,用来给函数recvfrom()接收数据请求;

在UDP服务器中,由于无人机利用函数socket()的请求指令消息过多,UDP服务器会产生阻塞等现象;

UDP服务器在接到请求指令并处理后,调用函数sendto()回复无人机一个数据响应,即:控制指令;

UDP服务器完成消息处理后,并利用函数Close()关闭进程,同时无人机也利用函数Close()关闭进程。

优选的是,所述数据显示模块,将无人机的姿态角、加速度、速度、声纳、操作量、位置信息按照设定的格式解码后实时显示出来;俯仰角、横滚角、航向角在状态仪表栏显示,分别驱动各个仪表盘,所述仪表盘模拟无人机飞行状态的仪表显示;利用实时曲线画出俯仰角、横滚角和偏航角在设定时间段内的变化。

优选的是,所述任务控制模块控制无人机飞行路线有两种模式:手动控制模式和自主飞行控制模式;

所述手动控制模式包括:

所述任务控制模块,还用于手动输入目标姿态信息及油门量,将目标姿态信息与无人机的实际姿态信息进行比对,获得无人机电机的目标油门量,并发送至无人机;

所述自主飞行控制模式包括:

所述任务控制模块,还用于输入控制信息,并发送至无人机;

无人机,将控制信息解算出目标位置信息,根据目标位置信息依次解算成三个坐标轴方向上的速度、角速度,通过三个坐标轴角速度获得到达目标位置的无人电机的目标油门量,并发送至无人机。

优选的是,所述数据通信模块与数据显示模块和任务控制模块的通信过程包括:

步骤1:进行网络连接初始化;

步骤2:判断初始化是否成功,如果初始化成功,则进入步骤3,否则返回步骤1;

步骤3:等待设定时间后,判断从无人机接收到的数据信息是否进行了数据更新,并根据更新情况,将需要的数据信息发送给数据显示模块,再将更新的数据发送至任务控制模块,转入步骤4;如果没有进行数据更新,则对无人机进行数据连接,更新飞行数据;

步骤4:如果发送成功,则返回步骤3,如果发送失败,则重新发送,如果连续发送10次均失败则进入故障状态。

优选的是,所述步骤3中,数据通信模块与数据显示模块和任务控制模块之间进行数据传输时,通过网络建立点对点连接。

优选的是,所述数据库包括两个表:

第一个表用来记录飞行时间、姿态角、加速度、角速度、声纳、操作量、位置信息、飞行阶段、GPS工作模式;

第二个表用来记录规划坐标、规划坐标处的参考海拔高度、悬停时间。

优选的是,所述无人机控制系统通过虚拟机中的Linux系统实现。

上述技术特征可以各种适合的方式组合或由等效的技术特征来替代,只要能够达到本发明的目的。

本发明的有益效果在于,本发明在UDP协议的基础上实现控制系统与无人机的通信,实现传输快、丢包率低于5%、无延迟和无阻塞。具备良好的可控性与可靠性,可以实现对四旋翼无人机的控制。

附图说明

图1为本发明四旋翼无人机系统的地面控制台的结构原理示意图;

图2为本发明具体实施方式中Socket在网络模型中地位的原理示意图;

图3为TCP客户端/服务器程序的工作流程流程图;

图4为UDP服务器/客户端程序的工作流程流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。

结合图1至图4说明本实施方式,本实施方式为一种四旋翼无人机系统,包括地面控制站和无人机;本实施方式的地面控制站用于发送控制指令以控制无人机;地面控制平台使用定时器新开一个线程不断循环接收无人机传过来的飞行数据,并随时响应地面控制平台使用人员的操作;地面控制站向无人机发送PWM参数调整值和航迹坐标控制值,控制无人机飞行路线,从而调整无人机的飞行轨迹,使无人机对障碍物进行有效的规避。

本实施方式的地面控制站包括数据通信模块、数据显示模块、数据存储模块和任务控制模块;

数据通信模块,用于利用UDP协议下的socket网络实现与无人机交互,包括接收无人机的飞行状态数据及向无人机发送控制指令;

UDP协议(User Datagram Protocol,用户数据报协议)具有复用和分用的功能以及差错检测的功能。在Linux操作系统下,通过UDP/IP通信协议,实现了无人机和地面控制平台的交互且及时的通信;

数据显示模块,用于根据接收的无人机的飞行状态显示无人机实时的飞行状态信息;

本实施方式中的数据显示模块用于通过视图区进行实时显示,以及在软件后台保存到数据库里,在数据库中保存的数据可以用MD5加密形式保存,使数据不易被第三者破解解读,数据库的数据存储功能比其他的存储功能要方便的多,数据库的数据存储与表格为主,数据分类保存在各个表格中。对飞行状态的显示是地面控制平台的核心功能之一,要求其具有对无人机飞行全过程的状态监控能力。还要具有对无人机的数据分类视屏能力;

本实施方式中的数据显示模块将无人机的姿态角、加速度、速度、声纳、操作量、位置信息按照设定的格式解码后实时显示出来,方便对无人机的状态观察;俯仰角、横滚角、航向角在状态仪表栏显示,分别驱动各个仪表盘,所述仪表盘模拟无人机飞行状态的仪表显示;利用实时曲线画出俯仰角、横滚角和偏航角在设定时间段内的变化,以便开发人员通过变化曲线检测飞行故障,对无人机的整体飞行趋势做出判断,使开发人员对无人机的飞行轨迹进行即时调整,更好的控制无人机的飞行;

数据存储模块,用于存储无人机的飞行状态数据;

本实施方式中将飞行状态数据存储在数据库中,数据库主要分为两个表:

第一个表用来记录飞行时间、姿态角、加速度、角速度、声纳、操作量、位置信息、飞行阶段、GPS工作模式等数据;

第二个表用来记录规划坐标、规划坐标处的参考海拔高度、悬停时间等数据。

两个表的结合就可以得出无人机的飞行状态数据。

数据库数据文件以开始接收时间为文件名,存储接收到的有效数据包和上传的数据包。通过查询数据库,得到之前存储的数据,可以为以后的数据在地面站的回放及比较分析。

任务控制模块,用于根据无人机的飞行状态数据,获得控制指令,控制无人机飞行路线;

本实施方式的对无人机的控制,包括手动控制模式和自主飞行控制模式,控制方式灵活多样;

如果选择手动控制模式,例如接收遥控器发送的目标姿态信息及油门量,利用任务控制模块解算出的无人机实际姿态信息,将该实际姿态信息和目标姿态信息进比对,计算出四旋翼无人机的四个电机相应的目标油门量,来控制无人机的飞行轨迹。

如果选择自主飞行控制模式,无人机接收地面控制台的控制信息,根据地面发送的指令结算出目标位置信息,将位置信息依次解算成三个坐标轴方向上的速度、角速度,通过三个坐标轴角速度计算达到目标位置的四个电机的目标油门量来控制无人机的飞行轨迹。

任务控制模块提供两种模式间自由切换的功能,每次切换都会在数据库中以不同的数据表记录数据。使得两种模式的数据分别保存在不同的表中,以便开发人员对数据进行分析。本实施方式的分析包括PID自动参数设置和导航规划两个方面。PID参数调整提供了飞控参数在线调整的功能。将三个角度的PWM值、最大飞行速度、滤波系数等信息通过UDP协议上传给无人机,控制无人机的飞行。对于导航规划功能,将预先设置的飞行航迹和无人机实时飞行航迹显示在一起,可以直观地比较二者的差别,反映航迹控制的精度。

以无人机飞行仿真中的实时经纬度坐标为输入,以一定方式投影到航迹图控件上的坐标,来显示飞机的二维航迹。经纬度坐标需要按照一定的比例尺投影到航迹规划图当中。

本实施方式的数据存储模块用嵌入式数据库代替原有的文本文件进行存储和查询操作。

本实施方式的数据通信模块与数据显示模块和任务控制模块的通信过程包括:

步骤1:进行网络连接初始化;

步骤2:判断初始化是否成功,如果初始化成功,则进入步骤3,否则返回步骤1;

步骤3:等待设定时间后,判断从无人机接收到的数据信息是否进行了数据更新,并根据更新情况,将需要的数据信息发送给数据显示模块,再将更新的数据发送至任务控制模块,转入步骤4;如果没有进行数据更新,则对无人机进行数据连接,更新飞行数据;

步骤4:如果发送成功,则返回步骤3,如果发送失败,则重新发送,如果连续发送10次均失败则进入故障状态。

其中步骤3中,数据通信模块与数据显示模块和任务控制模块之间进行数据传输时,通过网络建立点对点连接。

将UDP双向通讯应用到无人机中,将无人机作为客户端,本实施方式的数据通信模块作为服务器端。但是在AR.Drone2.0中3G模块PPP拨号成功W后,ping通外网,无法确定本地的IP地址。因为每次重新启动IP地址是变化的,UDP双向通讯难实现。解决方法是首先无人机客户端发送请求指令到服务器端,服务器端锁定客户端的IP地址,再次返回控制指令。客户端得到控制指令后可直接转发到192.168.1.1的指定端来实现无线远程控制。

本实施方式中数据通信模块利用UDP协议下的socket网络的UDP服务器与无人机通信,客户端和服务器互相ping通后,发送端使用sendto()函数,接收端使用recvfrom()函数。具体为:

无人机利用函数socket()创建套接口,调用函数sendto()将请求指令发送给UDP服务器;

UDP服务器利用函数socket()创建套接口后,函数bind()给所述接口分配一个地址,用来给函数recvfrom()接收数据请求;

在UDP服务器中,由于无人机利用函数socket()的请求指令消息过多,UDP服务器会产生阻塞等现象;

UDP服务器在接到请求指令并处理后,调用函数sendto()回复无人机一个数据响应,即:控制指令;

UDP服务器完成消息处理后,并利用函数Close()关闭进程,同时无人机也利用函数Close()关闭进程。

通过UDP服务器与客服端的socket通信,就可以完成无人机状态基本数据传送,并通过客户端发送指令,来给变无人机的状态。

本实施方式的开发:

本实施方式在Linux操作系统上采用ubuntu开发平台,使用C语言开发而成,配合使用数据库完成各项功能,还支持多个终端显示。经过20多年的快速发展,已经成为一个功能强大而比较稳定的操作系统,它对很多硬件平台都提供支持。在Linux中,GUI由窗口系统、窗口管理器、工具包和风格等几个部分组成。窗口系统用于组织显示屏上的图形输出,窗口管理器用于对窗口的操作,如最小化等,工具包是用于编程界面的库,风格则是应用程序的用户界面。其他的控制系统还需要接入别的硬件设施进行显示,面试界面和控制界面不能完好的结合在一起。Linux是一种类Unix的操作系统。传统Unix下的开发语言是C语言。因为C语言是平台适应性最强的语言,C语言也更易移植,因而,在Linux下编程的最佳语言应该是C语言,Linux上的很多应用程序就是用C语言写的。

一般的Linux发布版本中都提供了C编译器gcc,而使用gcc可以编译C源代码,编译出的目标代码质量非常好,编译速度也很快。为了保证程序的可移植性,gcc没有使用通用的C函数库,而是使用一种称为glib的函数库。它包含一些标准函数的替代函数(如字符串处理函数)和基本数据结构的实现(单向链表、双向链表、树、哈希表等)。glib中所包含的函数消除了某些函数的安全漏洞,使其更加可靠,在不同平台上移植也更加方便。还有许多使用工具可以提高Linux下的编程效率,如gdb是优秀的C语言调试器,有非常丰富的调试指令;automake和autoconf用于由源代码结构配置编译选项,生成编译所需的Makefile文件。

Linux操作系统是一个多用户、多任务的操作系统。在操作系统是,从进程演化出线程,最主要的目的就是更好地支持多处理器,并且减少上下文切换的开销。进程是程序在计算机上的一次执行活动,每一个进程都有各自独立的内存空间,进程之间的通信需要专口的机制,这增加了某种形式的额外系统内核开销,从而降低性能,还能对内存进行操作,这是其他通信方式所达不到的。内存比较大,远远大于51单片机的。线程是提高代码响应和性能的有力手段。和进程相似,线程由系统内核按时间分片进行管理。同一个进程可W包括多个线程,这些线程可共享内存空间。线程的内核开销比较小,系统内核无需单独复制进程的内存空间或文件描述等,从而节省了大量的CPU时间,使得线程的使用比进程的使用快10~100倍。所以可以大量使用线程,而不用担心CPU或内存的不足。大大的加快了处理数据的时间。同一个进程中的线程可共享如下内容:全局变量、堆数据、打开的文件描述符、当前工作目录,用户组。但每个线程又是独立的:线程ID、堆巧、errao变量和优先级。

Linux操作系统与网络联系紧密,它支持IPv4、IPv6、X125、IPX、NETB IOS、DDP等多种网络协议,而且具有稳定、简易、高效、兼容性好等特点,所以在网络服务领域得以广泛应用。Linux操作平台,Socket网络编程的使用,在Linux系统中,Socket接口是应用程序访问下层网络协议的必经之路。Socket是介于应用层和传输层之间的编程接口,提供了大量系统调用和相应的数据结构功能,用来访问下层通信协议。Socket在网络模型中的地位如图2所示,Socket创建套接字,指定要使用的地址簇(IP)和套接字类型/传输层协议(TCP),返回一个套接字描述符,简称sockfd(),用于在函数调用中标识这个套接字。函数Bind()将一个本地IP赋值给一个套接字,限定该套接字只接收目的地为指定的本地IP,端口的客户连接,进程指定。函数Linsen()仅由TCP server调用。当函数socket()创建了套接字,会假设为主动套接字,也就是将调用函数connect()主动发起连接的套接字。linsen()将一个未连接的套接字转换成被动套接字,通知内核应该接受指向该套接字的连接请求(被动打开)。此时套接字的状态从CLOSED转到LISTEN。

内核为每个监听套接字维护两个队列:未完成连接队列,收到了客户的SYN,正在等待TCP三次握手完成。此时套接字的状态为SYN_RCVD。已完成连接队列,已经完成TCP三次握手的客户,这些套接字处于ESTABLISHED状态。当收到客户的SYN,TCP在未完成连接队列中创建一项新条目,同时继承监听套接字的参数,然后返回SYS、ACK,这一项一直保留在未完成连接队列中,直到收到ACK,或者该项超时。如果三次握手正常完成,该项从未完成连接队列移到已完成连接队列的队尾。指定backlog,即两个队列长度之和。Accept仅由TCP server调用,从已完成连接的队头获得一个已完成连接,如果已完成连接的队列为空,进程被挂起进入睡眠状态(假定套接字为默认的阻塞方式),直到队列中有条目。接收监听套接字描述符,返回由内核自动为获得的已完成连接生成的已连接套接字描述符,以及对应的已连接套接字。函数Connect()仅由TCP client调用,接收socket返回的套接字描述符,主动向TCP server发送建立连接的请求(主动打开),触发三次握手。调用connect之前不一定要调用函数bind()绑定本地ip和本地端口,这样,内核会通过数据出口确定源ip,并选定一个临时端口作为源端口。

在父进程中返回一次,返回的是新的子进程ID号(pid),用于记录并跟踪所有子进程,在子进程中返回一次,始终为0,因为每个子进程都只有一个父进程,而且可以通过函数getppid()获取父ID(ppid)。父进程调用函数fork()前打开的所有描述符,在执行完函数fork()返回后,与子进程共享(复制程序代码与描述符)。每个文件/套接字都有一个引用计数器,在文件表项中维护,表示当前打开的引用了该文件/套接字的描述符个数。函数close()只是将计数值减一,真正清理套接字、释放资源,需要计数值为0。

函数fork()的两种典型用法:

一个进程想要执行另一个函数fork(),新创一个进程,在内存中运行相同的程序代码

exec,换成另一个程序代码一个进程创建自身的副本,各自同时处理各自的操作。

从通信所述,Linux中的Socket意味着网络上的通信,因为Socket在用户级实现了两个应用程序之间的网络连接和数据交换。本实施方式的socket接口,在Linux操作平台下,所有的I/O操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,包括一个网络连接、一个命名管道、一个终端等,而socket就是系统进程和文件描述符通信的一种方法。socket是网络上运行的两个程序间双向通信的一端,它既可以发送命令请求,也可以接受命令请求,通过它可以方便地进行网络上的数据通信传输。每一个socket描述作为一个通信连接的其中一端,在一个网络通信连接中的两端通信程序应各自有一个socket来描述它们自己那一端,不同主机中的两个进程通过各自的socket发送和接收消息,从而实现了进程间跨网络的通信。每一个socket都用一个半相关的描述来表示:协议、本地地址、本地端口;一个完整的socket则用一个相关描述来表示:协议、本地地址、本地端口、远程地址、远程端口,每一个套接字都有一个本地的由操作系统分配的唯一的socket号。

058.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

Linux socket类型,包括SOCK_STREAM(数据流套接口),SOCK_DGRAM(数据报套接口)和SOCK_RAW(原始套接口)三种;SOCK_STREAM(数据流套接口),是最常见的socket类型,提供一个面向连接的双工顺序数据流传输和可靠的数据传输服务。不会出现数据丢失、破损或重复出现等差错,可以确保数据传输的可靠性,而且,流量控制能够避免发送的数据流超出限制的情况。文件传输协议(FTP)就使用流式套接字传输服务,网络传输中的TCP协议也支持流套接字。SOCK_DGRAM(数据报套接口),提供一个无连接和不可靠的双工数据传输服务。数据包以独立包的形式被发送和接收,数据在传输过程中可能丢失、破坏,也可能被重复接收,对数据的传输不能提供无错保证。.网络传输中的UDP协议支持这种套接字(socket)。SOCK_RAW(原始套接口),该类型的套接字允许对低层协议,如IP或ICMP直接访问;可以直接填充IP、TCP、UDP或者ICMP的包头,发送用户自己定义的IP包或者ICMP包。主要用于相关协议的开发。

本实施方式中的Socket网络模型,基于客户端/服务器(C/S)的网络通信模型是使用最广、最为基础的通信模型。在基于这种模式的相互通信的网络程序中,一方称为客户程序(client),另一方称为服务程序(server)。本实施方式的Socket网络模型,客户端/服务器(C/S)的不同在于:服务程序一启动,初始化完毕就进入等待连接状态,服务程序一直被动地等待连接;而客户程序启动后,向远程服务程序发出连接请求,服务程序收到请求后,按照一定的规则建立连接,连接完成后,两个程序之间就建立了一个虚拟的数据通信链路。这些程序可以直接从自己打开的套接口读入和写出数据,而不必关心实际的数据链路。

TCP/UDP连接服务流程:

Internet给分布式的应用程序提供了两类服务:一是面向连接的服务;二是无连接的服务。面向连接的服务由TCP协议提供,客户和服务器在彼此间发送数据之前要先执行3次握手机制,以确保发送端的数据最终完整无误地按顺序传送给接收端。无连接服务则由UDP协议提供,发送端和接收端在传送数据之前没有握手机制,相对TCP而言没有产生延迟。

TCP客户端/服务器程序的工作流程如图3所示。

在面向连接的服务模式下,TCP是一种基于连接的通讯协议,当两台计算机之间需要进行可靠的数据传输时,它们通过网络建立起稳定可靠的连接。并且是点对点的,通讯的双方则通过这条数据连接传输数据。

在无连接模式下,客户程序在每次发送数据报时指定远程目的地,没有把套接字固定连接到一个指定的远程端点上。因此,UDP通信具有较强的灵活性,客户程序可以在决定发送前才决定和哪个服务器通信。UDP在数据传输时并不保持发送端和接收端之间的连接状态,即不对发送和接收缓冲区、数据到达顺序、拥塞控制等参数进行跟踪,因而UDP传送的数据包可能出错甚至丢失,可靠性难以保障。但是,相对于TCP来说,UDP有自身的优势:

①相对TCP而言,面向无连接的数据传输没有时间上的延迟,传输速度快很多;

②从数据段结构中对比发现,UDP的数据包头部开销比TCP小得多;

③UDP不对发送端和接收端之间的诸多参数进行跟踪,使得它有能力支持更多的处于活动状态的客户,灵活性更强;

④由于没有拥塞控制机制,UDP发送数据的速度仅仅受限于应用程序产生数据的速度、源端的性能(CPU、时钟速度等)以及物理设备可以达到的带宽。

因此,UDP在DNS解析、实时视频会议、IP电话、可存储的音频视频流等领域中仍广泛应。

图4所示为UDP服务器/客户端程序的工作流程。

客户端要发起一次请求,仅仅需要两个步骤(socket和sendto),而服务器端也仅仅需要三个步骤即可接收到来自客户端的消息(socket,bind,recvfrom)。

本实施方式中涉及得到函数具体组成为:

sendto()适用于发送未建立连接的UDP数据包(参数为SOCK_DGRAM)。sendto(int sockfd,const void*buf,size_t len,int flags,const struct sockaddr*dest_addr,socklen_t addrlen);

其中,第一个参数sockfd:正在监听端口的套接口文件描述符,通过socket获得;

第二个参数buf:发送缓冲区,往往是使用者定义的数组,该数组装有要发送的数据;

第三个参数len:发送缓冲区的大小,单位是字节;

第四个参数flags:填0即可;

第五个参数dest_addr:指向接收数据的主机地址信息的结构体,也就是该参数指定数据要发送到哪个主机哪个进程;

第六个参数addrlen:表示第五个参数所指向内容的长度;

函数sendto()的返回值:成功:返回发送成功的数据长度;失败:-1;

函数recvfrom(int sockfd,void*buf,size_t len,int flags,struct sockaddr*src_addr,socklen_t*addrlen);

其中,第一个参数sockfd:正在监听端口的套接口文件描述符,通过socket获得;

第二个参数buf:接收缓冲区,往往是使用者定义的数组,该数组装有接收到的数据;

第三个参数len:接收缓冲区的大小,单位是字节;

第四个参数flags:填0即可;

第五个参数src_addr:指向发送数据的主机地址信息的结构体,也就是我们可以从该参数获取到数据是谁发出的;

第六个参数addrlen:表示第五个参数所指向内容的长度;

函数recvfrom()的返回值:成功:返回接收成功的数据长度;失败:-1;

函数bind(int sockfd,const struct sockaddr*my_addr,socklen_t addrlen);

其中,第一个参数sockfd:正在监听端口的套接口文件描述符,通过socket获得;

第二个参数my_addr:需要绑定的IP和端口;

第三个参数addrlen:my_addr的结构体的大小;

函数bind()的返回值:成功:0;失败:-1;

函数Close()(int fd),close函数为关闭函数,只要填入socket产生的fd即可。

本实施方式的地面控制台区别于其他控制系统,其他系统大部分都加载在Windows系统中,所以其操作不便,内存消耗大,和其他软件会造成一些冲突。而加载在虚拟机中的Linux系统的Ubuntu中,两个系统可以同时存在与同一台电脑中,Linux加载在虚拟机中,内存虚拟独立,占用计算机的内存较小,操作界面也不同于Windows。对计算机运行其他软件不会造成卡顿等现象。

本实施方式通过UDP通信,UDP协议以其简单、传输快的优势,网速的提升给UDP稳定性提供可靠网络保障。UDP传输数据的丢包率低于5%,无延迟,无阻塞。这个是其他的网络协议无法达到的。本实施方式数据单独保存在Linux内存中,开发人员不会造成操作上的失误是数据丢失或者缺失。缺点是在Linux中运行的数据库中保存的数据如果删除了则不能找回来,这是Linux至今还没有解决的缺陷。

虽然在本文中参照了特定的实施方式来描述本发明,但是应该理解的是,这些实施例仅仅是本发明的原理和应用的示例。因此应该理解的是,可以对示例性的实施例进行许多修改,并且可以设计出其他的布置,只要不偏离所附权利要求所限定的本发明的精神和范围。应该理解的是,可以通过不同于原始权利要求所描述的方式来结合不同的从属权利要求和本文中所述的特征。还可以理解的是,结合单独实施例所描述的特征可以使用在其他所述实施例中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1