定义连接参数rdParams,并根据需要初始化该连接参数。
DWORD dwError=RasDial(NULL,NULL,&rdParams,0L,(RASDIALFUNC)RasDialFunc,&m_hRasConn);
调用API函数RasDial进行拨号连接,入口参数主要有连接参数rdParams和回调函数RasDialFunc。
回调函数RasDialFunc定义如下:
回调函数的主要作用为根据连接状态执行相应的任务,比如连接成功时则调用API函数RasGetProjec-tionInfo获取网关给本用户分配的IP,获得IP后才可以应用TCP/IP或UDP协议进行信息传输。
另一个比较重要的API函数是RasGetConnect-Status,利用该函数可实时获取网关连接状态。
4.2.3 网络通信
拨号连接网关成功后,获得分配IP,则进行网络通信,通信时即可采用TCP/IP协议也可采用UDP协议,开发时根据需要确定。以UDP协议为例,网络通信程序如下:
如果创建成功,则绑定该SOCKET,绑定端口号为port。绑定后,则可创建网络数据处理线程,实时接收和发送数据。接收和发送数据的程序分别为:
resulut和sent分别代表接收的字节数和发送的字节数。
4.2.4 串口通信
串口可以被当作文件资源来管理,因此利用Cre-ateFile,OpenFile和WriteFile三个文件操作API函数即可实现打开串口、读写数据的功能。以Windows操作系统为例,程序如下:
该函数实现了打开串口号为port的串口,打开成功返回真,失败返回假。
该函数实现了从打开的串口中读取缓冲区中的数据。
该函数实现了将数据写入打开的串口。
4.2.5 数据分包
由于网口和串口每次传输的数据量有限,为了满足信息批量传输的需求,必须将需要传输的数据(例如:一个2 MB的图像文件)首先分解成一个个独立的数据包,发送时每次发送一个数据包,等接收端接收到所有的数据包时,将数据包进行合包,解析出原始数据。在发送时可能出现个别数据包丢失的情况,在接收端根据数据包内的标识判断丢失的数据包,然后向发送端请求重发丢失的数据包。数据包数据结构设计如表1所示。数据包序号为每个数据包的惟一的标识序号;子包个数代表该数据包所属的需要传输数据分包后形成的子包的个数;子包序号代表该数据包所属的需要传输数据分包后形成的子包群中的排序号;信息头代表传输的信息类型编码。利用该数据结构即可编制任意长度数据的传输程序,而且能够保证数据传输的速度和正确性。
5 结 语
应用全球星的通信功能为无人机设计了一套远程通信系统,并解决了在开发中遇到的连接网关、网络通信、数据分包等关键技术问题。该系统通信不受时间、距离、地域限制,通信能力强,可传输语音、数据、图像等信息。系统造价低及开发风险低,因此具有广泛的应用前景。