论文部分内容阅读
作为地球观测系统的第三个平台,海底观测网络由岸基站部分、海底接驳盒、海底光电缆以及科学仪器组成。为了接收海底观测网科学仪器采集的数据,控制科学仪器的运行,需要为每类科学仪器研制远程控制软件。本文研究的远程控制软件作为同济大学海洋与地球科学学院主持研究的“海底示踪气体原位自动检测系统”的上位机,位于岸基/船基端,主要功能是远程操作海底示踪气体原位自动检测系统水下装置和接收各种监测数据。本文完成的主要工作有:(1)通过海底示踪气体原位自动检测系统的远程控制软件、水下中央控制单元、水下气体分析装置等三个组成部分之间数据通信的研究,设计了这三个部分之间的通信协议。提出了一种将所有数据包抽象成一个抽象类,让继承类去重写该类发送函数和处理函数的方法,极大的提高了通信协议的可扩展性以及稳定性。(2)实现了与水下中央控制单元的数据交互。通过Winsock网络通信技术,采用WSAAsySelect(异步选择)模型将远程控制软件以客户端的方式与水下中央控制单元连接,接收状态监测数据、电源检测数据、GC采样信息,同时发送仪器控制指令。(3)由于远程控制软件完成的功能负载包括接收网络数据、存储数据、心跳图动态监测数据等操作,为了让主线程更从容地接收数据,采用多线程设计。主线程一旦接收到数据,立即将数据存入接收链表中,然后将数据处理等耗时操作交给后台线程处理。(4)实现了海底上传信息的存储,这些采集的信息包括状态监测数据、电源检测数据、GC采样信息。为了保持数据格式的通用性,使资料更方便地用于科学研究,直接将数据存入Excel文件中。操作Excel文件的方法有多种,程序中使用ADO操作Excel,提高数据存储与读取的速度。(5)内存池设计。在将接受的数据存入链表中时,程序每1~2秒就需要向操作系统申请一块20~70kb的内存,这样的内存申请频率过快,会导致内存块产生过多的碎片,逐渐蚕食内存。为避免这一问题,设计了一个内存池用于管理内存的分配。内存池首先向操作系统申请一块较大的内存,然后用SMemoryChunks类型的链表管理这些申请的内存。当程序需要内存时,只需从较大的内存中分配一块可用的即可。这样减少了内存碎片的产生,同时提高了内存分配释放的效率。