基于船舶设计软件SPD 4.0的二次开发
2018-11-01周彬,吴优
周 彬, 吴 优
(中船澄西船舶修造有限公司, 江苏 江阴 214433)
0 引 言
船舶产品设计(Ship Product Design, SPD)软件是能满足船体结构、机装、电装、居装和甲装等专业设计的三维全数字化产品模型软件平台。随着SPD应用的不断深入,用户对SPD的开放性提出了更高的要求,因此SPD V4.0新增数据查询二次开发接口,使用户可在获取数据后根据实际需要对数据进行筛选、排序、统计并输出数据报表等,大大提升用户与SPD间的交互能力。由于SPD已在船厂长期使用,船厂的物量及管理数据结构已趋于稳定,与之配套的软件也已形成,如果更换船舶设计软件,会对原有的管理造成冲击,船厂基本不会愿意更换。而且,几乎没有SPD二次开发的交流平台,开发人员无法方便地获取资料,这也会对SPD获取更多用户造成影响。
中船澄西船舶修造有限公司现行船舶设计软件为SPD V4.0,在载重量82 000 t船的生产设计中,利用C#语言对SPD进行软件的二次开发,主要为突破生产设计瓶颈,提高设计人员效率,同时获取实际需要的数据。
1 SPD软件二次开发接口
SPD V4.0提供SpdCustomization.dll和SpdArxCustomization.dll等2个DLL文件作为数据查询二次开发接口,提供基于模型和基于产品数据库的2种数据提取方式。2种提取方式的特点有:模型数据完整,提取效率较低;产品数据库的数据不完整,提取效率较高。用户可根据不同需求选择提取方式。SPD软件的管子模型数据提取流程如图1所示(产品数据结构树和其他模型数据均类似)。
图1 管子模型数据提取流程
源代码如下:
Project m_proj = new Project();
m_proj.Open(string projectname);
ModelFile mdf = m_proj.OpenModelFile
(string modelname,SpecialityIdx.Pipe) ;
For (mdf.RewindRec(); mdf.GetRecState (out rectype, out recnum) == 0; mdf.NextRec());
MddRec rec = mdf.GetMddRec(recnum) ;
其他主要数据接口如下:
(1) SpdtRecord类:数据表基类,主要存储SQL数据库数据;
(2) Component类:实体部件记录基类,主要存储管子部件、实体部件和参数化部件;
(3) PpdRec类:原理记录基类,主要存储管子原理和电气原理数据。
2 部件管理
部件库是SPD设计系统中管子、电气、舾装专业设计的基础,没有部件库,设计师无法在SPD设计系统实现快速建模。SPD部件分为参数化部件、实体部件和管子部件。SPD部件提供的接口有基类和拓展类,其中基类为空体部件记录基类(Component),扩展类分别为参数化部件(ParaComponent)、实体部件(PartComponent)和管子部件(PipeComponent)。
2.1 参数化部件
SPD参数化建模系统支持用户自定义计算、报表生成和模型浏览,为用户提供良好的设计模式、数据浏览和管理方式。参数化部件按专业分为管子、电气、舾装和通用,按用途分为基础型材和组合部件,按标准又分为标准件和非标件。对复杂部件物量的抽取,原SPD接口需要在每个部件中单独计算并定义物量,才能实现物量输出。通过二次开发参数化部件数据查询工具,实现对参数化部件建模准确性的检查,完成参数化部件建模数据的提取程序。完善后的接口可以根据底层基础型材定义的物量信息实现复杂部件物量信息的完整提取,复杂部件无需再单独计算和定义物量,提高了参数化部件的设计效率。SPD参数化部件可以用其他部件组合为复杂的部件,参数化部件物量提取流程如图2所示。
图2 参数化部件物量提取流程图
主要源代码如下:
List
MddSstru recsstru = (MddSstru)rec;
ParaComponent paracomponent = new ParaComponent(recsstru.ParaCompNum, recsstru.ParaValues);
listpara.Add(paracomponent);
组合件判断源代码如下:
if (listpara[i].RefParaComps[j].ParaNum < 9000)
{
listpara.Add(listpara[i].RefParaComps[j]);
}
通过ParaComponent属性输出物量信息如下:
(1) SubSpecs:组件规格描述($MSPEC),如:型材规格;
(2) SubSpecLengths:组件规格长度($LENS),如:型材长度、电气基座的螺栓个数;
(3) SubSpecNums:组件数量($NUMS),如:型材数量、电气导架的螺栓个数;
(4) SubWeights:组件基准质量($WETS)。
本文通过SubSpecs判断部件是否为组合件,参数化部件组合件无需定义和计算物量信息,原参数化部件的物量数据抽取不受影响,提高了参数化部件基础库的建模效率,降低了参数化部件基础库的维护难度。
2.2 实体部件
对管子专业的实体部件进行优化。管子专业物资种类多,标准件多,管子专业的实体部件如果处理不好,后期会对物资采购需求产生较大影响。物资编码是物资管理的基础,每个企业均有自己的物资编码体系,由于各个企业的物资编码体系差异性较大,SPD软件无法为每个企业建立完善的物资编码系统。通过对SPD数据的深入了解,开发了物资编码系统。该系统采用的是基础数据配置,实现全自动复杂结构编码。以管子为例,介绍物资编码系统的结构和原理,管子编码结构如图3所示。系统设计原理为提取每个结构信息单独的编码,通过数据库中的组合规则将单独的编码组合成完整的物资编码,如图4所示。
图3 管子编码结构
图4 自动编码设计原理
3 原理定义
SPD的原理定义是其短板,定义效率不高。SPD原理提供的接口为原理记基类(PpdRec)和扩展类,扩展类包括阀附件原理(PpdValve)、管路原理(PpdPipeline)和设备原理(PpdDevice)等。主要对管路原理定义进行优化,实现管路原理以详细设计的DWG原理图直接输入到SPD系统。其主要原理为:定义各系统基础信息,如法兰、处理、压力等信息,然后抓取详细设计的DWG原理图的管路信息(管路号、管子规格、管子材质、管子等级),在定义每条原理数据的过程中自动选取法兰、处理和压力等信息,最终实现管路原理自动定义功能。自动定义设计原理如图5所示。
图5 自动定义设计原理
主要源代码如下:
PrincipleFile principlefile = m_proj.GetPipePpdFile();
PpdPipeline ppdpipeline = new PpdPipeline();
// ppdpipeline属性赋值
ppdpipeline.SysCode= "管路名";
ppdpipeline.PipeCompCode="管子部件代号";
……
principlefile.WriteRec(ppdpipeline);
4 物量提取与物量需求
4.1 物量提取和重组
物量提取是建立在中船澄西船舶修造有限公司自主研发的综合数据管理平台和SPD二次开发基础上的,可以实现将SPD模型数据无缝导入综合数据管理平台,然后通过该平台对外发布数据。
SPD虽然提供了大量报表,但是报表中部分数据并不完整,无法满足实际需求,因此对SPD模型数据进行准确的提取和重组是有必要的。管子制作托盘提取界面如图6所示。通过该模块提取的管子材料明细有材料来源信息、物资编码信息和需要的备注信息。
图6 管子制作托盘提取
主要源代码如下:
if ((mdf = m_proj.OpenModelFile(modelname, SpecialityIdx.Pipe)) != null)//判断模型是否为管子专业
{
for (mdf.RewindRec(); mdf.GetRecState(out rectype, out recnum) == 0; mdf.NextRec())//遍历模型
{
if ((rec = mdf.GetMddRec(recnum)) != null)
{
recspool = (MddSpool)mdf.GetMddRec((uint)Math.Abs(SPD_Pipe.spoolrecno(rec)));//获取零件
if (recspool != null && recspool.Pallet == Listview.SelectedItems[0].SubItems[0].Text && recspool.PalletOrderNumber < 3000)//判断零件托盘
{
spoolname = recspool.SpoolName;
ArrayList pipedetail = new ArrayList();//管子材料
pipedetail = SPD_Pipe.PipeDetail(rec, mdf, m_proj);//读取管子部件详细信息(自己写的接口)
}
}
}
}
4.2 物量需求
物量需求是指在设计端建立出库和入库数据库,将设计下发的采购需求作为入库数据,模型提取的数据作为出库数据,通过对出入库数据的对比分析,动态显示物量需求,指导设计人员进行材料采购。目前完成了管子专业模块的开发,主要功能有基础物资库、材料请购、材料比对、材料查询和材料请购单。物量需求模块程序设计原理如图7所示。
图7 物量需求设计原理
基础物资库主要作用为将模型数据与采购数据对照,形成标准的采购数据,同时也作为材料比对的标准数据。程序输入端为托盘、基础物资库和采购单。托盘由模型直接输出,基础物资库需要系统管理人员进行维护,采购单则由缺料数据直接输出,设计师只允许进行数量调整,修改备注等操作。该系统保证了采购需求物量信息的标准化。
通过该系统,设计师能在提交模型数据后快速生成物料需求,过程中可以直观地看到订货数据和模型数据,通过对比分析,指导后续项目订货,其他专业物量需求可用类似的方法实现。
5 全套料技术
全套料技术指实现船体以外其他专业板材类零件图形数据的提取。该技术是建立在参数化建模基础上的,对参数化建模和手工建模过程作如下约定:
(1) 在建模过程中除了板材类零件可以使用软件自带的拉伸体功能,其余均通过参数化部件建模。
(2) 在参数化部件的组合部件中型材类均从基本型材中引用,只有板材可以引用基础实体部件。
通过约定,可以实现自动过滤,将舾装件中需要套料的板材过滤出来,最终实现舾装件板材零件的全套料。
实现过程源代码如下:
MddSstru recsstru = (MddSstru)rec; //获取铁舾件零件
HdEntStretchPrism hdentstretchprism = (Hd
EntStretchPrism)recsstru.Ents[0];//获取实体信息
hdentstretchprism.BottomSpline //获取实体图形信息,拉伸体底面边界样条
底面边界样条数据解析如下:
xyz
x1y1z1
……
xnynzn
其中:yn、zn为样条节点的坐标;xn为连接节点(yn-1,zn-1)和(yn,zn)组成的样条片段的有向半径, 当xn= 0时为直线段。程序通过获取的边界样条自动输出图形文件,该图形文件能在中船澄西船舶修造有限公司套料软件中直接套料。
6 结 语
设计软件二次开发是打通企业信息化建设孤岛的关键所在,能够使设计软件更加贴合企业实际需求。船舶设计模型数据是船厂信息化的基石,理论物量、理论工时等均以模型数据为源头,二次开发是从模型数据中获得基础数据的必由之路。通过对SPD软件的二次开发,可以将设计模型数据转化为其他软件需要的信息,建立企业统一的数据源,打通设计、生产和管理之间的信息孤岛。随着SPD软件二次开发接口的不断完善,船厂信息化建设要求将更能满足。