引言
复杂信息系统有一个共同的特点:组成成员众多。因此,其仿真涉及到的实体众多,实体间的接口协议也很复杂,而且,不同仿真系统定义的接口协议往往是相差甚远。以上因素使得复杂信息系统仿真中接口协议的编解码处理工作难于统一,往往是每个复杂信息系统仿真都要花大量的时间来编写接口协议的编码和解码程序。如何将接口协议的工作集成化,做到仿真平台与接口协议的编码和解码在一定程度上相互独立,即软件接口协议的改动不影响仿真平台其它程序代码的改动,做到程序和数据分离;另一方面,希望不同系统仿真可以共用接口协议的编码和解码的代码。本文将解决这两个方面的难题,提出一种复杂信息系统仿真中接口协议的智能编解码方法。
1 智能编解码方法的基本思路
要使得接口协议的编解码工作集成化、具有通用性,首先要对接口协议进行存储。考虑到通用性的要求,对接口协议的存储应该也具有通用性,因此,必须设计一种能够动态响应不同协议的存取方法。对于协议的存储可以采用数据库或者其它的手段。但是,数据库技术很难直接反映每个记录(接口协议的具体单元)所属的前后层次关系,这给后续的编解码工作带来一定的困难。为了克服数据库技术的这种不足,采用另外一种方式:XML 技术。XML 的树形结构能够很好的反映数据的层次关系;另外,其数据传输速度快,编程操作方便。将用户输入的协议存储在XML 文件中,然后根据XML 文件进行编码和解码。此时,关键的问题就是如何设计灵活、通用的数据结构来处理XML 文件中的协议信息。图1 描述了智能编解码方法的基本思路。
2 几个关键技术问题的处理
由上述基本思路可知,方法的实现有几个关键的技术问题需要解决:
XML 文档的结构如何设计才能存储不同结构形式的接口协议?
什么样的数据结构才能存放XML 文档中的接口协议数据?
针对数据结构如何确定编解码流程?
以上三个问题具有紧密的逻辑关系,由于问题1)的复杂性使得问题2)解决存在一定的难度,进而使得问题3)的解决更加困难。
2.1 XML文档结构的设计
利用XML 文档存储编解码规则时,关键是XML 文档结构的设计,因为XML 文档结构在一定程度上会影响编解码的效率甚至是整个仿真软件的效率。我们按照逐级分类原则对编解码规则进行分类存储。比如飞机A 的位置这样一条信息的接口协议存取为XML 文档后,其结构如下所示:
<?xml version="1.0" encoding="utf-8"?>
<飞机A>
<位置>
<经度><起始位置></起始位置><长度></长度><数据类型> </数据类型></经度>
<纬度> …</纬度>
<高程> …</高程>
</位置>
</飞机A>
省略号代表对应的编解码接口协议。当我们把所有的编解码规则都存储到XML 文档后,我们就可以利用已有的XML 文档进行报文编码与解码。当编解码信息长度或者是编解码信息单元内的信息位置需要改变时我们只需要修改XML 的相应内容。
2.2 编解码方法的数据结构
为了对接口协议进行有效的编解码,其编码的数据结构的设计至关重要。在设计接口协议编解码的数据结构时,既要考虑复杂信息系统接口协议的特点,又要方便程序的开发。
一方面,在报文编解码时我们应该首先对整条报文编解码加以控制,比如应答控制、重发控制、纠错控制、目的地控制、发送通道控制等。我们将这种控制信息叫做报头编解码(帧头编
解码),其数据结构可设计如下:
typedef struct FrameHead
{
char* frame_number; //报文编号
bool type; //报文类型(发送还是反馈)
char* start; //发送方
char* destination; //接收方
byte number; //编解码信息单元数量
short length; //编解码信息单元长度
bool responsion; //应答控制
char* resposion_number; //所应答报文的编号
byte chunnel; //发送通道
Unit* info; //第一个编解码信息单元
} FrameHead;
另一方面,每条完整的接口信息都是由若干编解码信息单元组成,编解码信息单元的数据结构的设计直接关系到编解码的效率和可扩展性,其数据结构可设计如下:
typedet struct Unit
{
char* unit_number; //信息单元编号
bool send_element[MAX_ELE]; //有效信息标识
Unit* next; // 下一信息单元
}Unit;
其中,MAX_ELE 为编解码信息单元内最大的信息元素数量(比如,经度即可视为一个信息元素)。当信息元素是本接口信息的最后一个时,next=NULL。
2.3编解码流程
程序设计时,我们主要关心两种流程:数据流和程序流程。前者是我们从整体上把握编解码设计的体系;后者是详细的功能实现。
整个数据流程是这样的:首先,将编解码规则整理、存储为XML 文档,然后,利用XML 文档对协议报文进行编码,最后,再利用XML 文档对协议密文进行解码。