测量船设备走线关系查询软件设计与实现
2011-06-14钱小云江俊斌
钱小云,黄 昆,江俊斌
(中国卫星海上测控部,江苏江阴214431)
0 引言
航天测量船是执行航天器海上测控任务的主要力量,其搭载的各种测控通信设备工作原理及信号流程都十分复杂,信号电缆走线更是错综复杂。目前主要通过手工查阅设备图纸资料和接线表的方式来确定实际线缆走线关系,这种方法往往要耗费较多人力和时间,特别是在应急抢修设备的情况下,更是浪费了宝贵时间。而且手工查询方式要求查询人员对图表资料极其熟悉,能够快速准确地定位需要的信号线缆,出现错误将直接影响设备抢修和任务的完成,这与航天测控任务要求参试设备具有高可靠性、强应急能力形成了突出矛盾。下面在对现有资料及手工查询方式深入分析研究的基础上,通过设计科学合理的查询算法,将信号走线查询工作交由计算机软件处理实现,极大地提高查询效率及设备应急处理能力。同时该软件也可作为岗位人员学习设备的辅助工具。
1 可行性分析
1.1 现有资料分析
设备现有所附资料为信号电缆走线图(以下简称走线图)和电缆连线表(以下简称连线表)。其中走线图由系统、子系统及具体功能模块3层结构组成。
其中具体的功能模块图直观提供每个单元模块内部各信号节点与其他信号节点的连接关系及对应的编号;子系统图直观提供同一子系统下各功能模块之间各信号节点与其他信号节点连接关系及对应的编号;系统图则直观提供了各子系统之间每个信号节点与其他信号节点的连接关系及对应的编号。
3种图中都不提供信号节点相关功能描述,需要查找对应连线表。现有的系统电缆走线图的组成如图1所示。
图1 电缆走线图各部分关系
连线表也分为3个层次:系统、子系统及具体功能模块。每张连线表都对应一张走线图,通过连线表表内部编号与走线图中的编号一一映射关联起来。电缆连线表记录形式如表1所示。
表1 电缆连线示例表
连线表中“项目代号”为设备各种形式的接口,“端子号”对应该接口芯子编号。从连线表中可以看出:通过查阅连线表中的编号才能明确对应走线图中与该编号关联节点的功能及其连接的下一节点号,所以在手工查询时必须结合走线图和连线表。
1.2 手工查询方式分析
现有手工查询方式为图表结合方式,该方式首先在走线图中确定感兴趣的起始节点或在连线表中确定感兴趣的功能,在走线图中的线路上得到与该节点(或功能)连接的下一节点及编号,再根据编号到对应连线表中查出其对应功能。而后再将查得的下一节点作为起始点继续查询直至结束。手工查询方式流程如图2所示。
图2 手工查询流程
上述2种查询方式都有一个缺点:手工在图表之间反复查找特别耗时。尤其是在故障定位时,需要操作人员对设备信号流程和表图结构十分熟悉,才能较为迅速地在表中或图中找到故障部位,进而进一步确定故障原因。
2 算法设计
算法是根据起始节点设计记录表中相关节点的动态链表生成。该动态链表以起始节点为链表首节点,根据该节点查询获得新的若干节点后做一次判别,如果新节点未在链表中出现过则添加链表结尾做待查询处理,反之对新节点不做处理。在本次查询所得所有新节点处理完毕后即完成本节点的查询。完成一个节点查询后移到链表中下一个节点再做查询操作,重复上述步骤,直至链表尾节点查询且无新节点出现时,即完成一次完整线缆走线关系的查询。因为某路信号所涉及节点的个数是有限的,所以查询总能正常结束。结合数据库中表数据结构和简化查询操作,将查询操作分为向上查询和向下查询。其中向上查询就是把链表中节点比对数据表中连接点二作为查询条件执行查询,再根据判断条件将查询所得节点添加链表中。而向下查询则是把链表中节点比对数据表中连接点一作为查询条件执行查询,再根据判断条件将查询所得节点添加链表中。算法基本流程如图3所示。
图3 查询算法的基本流程
3 软件设计实现
程序实现是以航天测量船船载卫星通信站伺服设备为例,具体阐述设备走线关系查询软件实现整体设计和关键技术。船载卫星通信站伺服设备走线关系查询软件的主要功能是通过动态链表生成和对动态链表中每个节点的查询操作获取某路信号实际的线缆走线关系,并将最终所得结果送人机界面显示,其整体结构如图4所示。
图4 船载卫通站伺服设备走线关系查询软件整体结构
3.1 数据表设计及数据库操作
考虑设备连线表连线的数目都在万条以下,存储到数据库中的数据量有限,同时软件需要在未联网的计算机中使用的特点,采用Microsoft Office Acess 2003数据库存储设备各组成部分的连线表中数据。为方便对数据库中数据查询操作,调整设计后的数据表如表2所示。
表2 Acess数据库中数据表示例部分
该程序采用(ActiveX Date Object,ADO)编程模型对数据库中数据进行访问操作:
①初始化COM库,引入ADO定义库文件;
②用Connection对象连接、打开数据库;
③利用建立好的 Connection对象,通过Recordset对象取得结果记录集进行查询、处理;
④使用完毕后关闭数据库并释放对象。
在该程序中,初始化程序时就将Connection对象创建连接数据库,直到整个程序退出时再关闭释放该对象。每次数据库的查询操作交由 Recordset对象来进行处理,在数据获取处理以后再及时释放对应的Recordset对象。
3.2 软件实现
软件采用Visual Stduio 2005作为开发环境,创建了基于Microsoft基础类(MFC)的Windows可执行应用程序。同时利用面向对象(OOP)技术,将设备的各种属性和操作抽象出来封装成类,而后根据该类声明相应对象,与实际设备一一对应。软件不仅实现按信号节点号查询的功能,还根据实际工作需要增加按信号功能查询和结果输出至文本文档等功能。
按节点号查询的算法C++源代码实现是利用一个循坏语句来遍历链表中已有所有节点,判别当前查询所得节点是否在链表中已出现过,并根据判别结果设置标志位。根据标志位来该节点决定是否需要添加到链表中。其关键部分源代码如下:
IsIn=false;
curRecord=head;
while(curRecord)
{
if(curRecord->Node!=str[1]||curRecord->Port!=str[2])
{
curRecord=curRecord->Next;
}
else
{
IsIn=true;
break;
}
}
if(!IsIn)
{
newRecord=new Record;
if(newRecord==NULL)
MessageBox(″内存分配不成功!″,″伺服走线查询″);
else
{
newRecord->Node=str[1];
newRecord->Port=str[2];
newRecord->Next=NULL;
tail->Next=newRecord;
tail=newRecord;
}
}
RowNum++;
theApp.m_pRecordset->MoveNext();
代码中“IsIn”为标志位,第 1个 “while”语句实现判别,若当前被判别节点在链表中已出现过,直接跳出本次链表遍历,移至 Recordset对象中下一节点进行判别。这样能缩短遍历时间,提高查询效率。
按信号功能查询则是在输入所需查询的功能以后,软件从数据库中的所有设备连线表中查询出与所需查询功能相关联的记录。考虑到人员在使用按信号功能查询时,输入查询功能的描述与数据表中该功能的描述完全一致的可能性极小,所以采用模糊查询功能查找所有相关节点记录。
4 结束语
在信号走线查询软件编程实现后,将软件查询结果与手工查询结果进行比对,软件查询结果较手工查询结果更为全面、准确,进一步验证查询算法的科学性。在实际工作中,信号走线查询软件在使用人员排除设备故障和学习设备原理中都发挥了十分积极的作用。
[1]求是科技.Visual C++6.0数据库开发技术与工程实践[M].北京:人民邮电出版社,2004.
[2]牛 力,傅 韵.Visual C++.NET编程宝典[M].北京:电子工业出版社,2006.