尹光荣,王衍鑫
海洋石油工程股份有限公司
摘要:软件之间的交互性应用和二次开发一直是高效工作的有力工具,在原软件上的定制开发不仅能大大提高工作效率,而且还能扩展原有功能。SACS和MOSES软件在经历多年的发展以后,出现了越来越多的二次开发成功应用。文章总结了目前SACS和MOSES常规的二次开发技术方案,介绍了两款软件的一些新功能特性,以及Bentley公司在SACS和MOSES软件互操作性上做的有益尝试,最后为开发者指出二次开发方案的未来发展方向。
关键词:SACS;MOSES;二次开发;交互性;脚本;接口
中图分类号:TE42文献标识码:A
软件背景说明
SACS和MOSES两款软件是船舶与海洋工程行业常用的工程软件,最初由两个独立公司开发维护,后来都被Bentley公司收购,由Bentley公司负责开发和维护。
SACS软件是较为封闭的运行环境,没有开放的语言环境或者实时的输入输出反馈,运行时只需文本格式数据输入,运行后是文本格式数据输出和未公开编码的十六进制图形数据输出。SACS软件有统一的Executive集成界面,所有前后台的模块调用通过此界面完成,调用参数也未公开。SACS软件可以进行可视化的建模操作和结果查看,3D直接建模(Precede)和结果查看(Postvue)的人机交互性较好,文本格式的输入文件也有专用的编辑器(Data Generator)。
MOSES软件恰恰相反,提供了高自由度的面向过程的脚本(Script)语言环境,能够实时的输入输出反馈。MOSES软件本身类似于脚本语言的解释器,负责语言的解释执行,输出文本格式数据和未公开编码的十六进制数据。MOSES软件没有统一的Executive集成界面(新版本才有),也没有完善的3D建模工具(Hull Modeler适用于船型建模),图形结果查看功能也比较弱。纯命令流的运行方式对初学者要求较高,需要有一定的编程基础,学习难度远高于SACS。
迥异的特性代表了两种不同的软件开发技术路线:限制较高的封闭式结构和自由度高的开放式结构。个人认为从发展方向来看,Bentley公司最终会将两款软件融合,形成一个统一的平台。毕竟两款软件有许多的相通之处,功能上既有互补也有重复。Bentley也做了两款软件之间交互操作的一些尝试,比如在SACS Executive界面可以调用MOSES完成导管架下水计算、MOSES可以生成SACS格式的运动和载荷文件、统一前后处理界面的开发等。
本文不讨论反编译、使用未公开接口等非常规技术,因此SACS和MOSES常规的二次开发技术路线如图1所示。目前两款软件都没有提供官方的供第三方应用程序使用的软件开发工具包(SDK)和应用程序编程接口(API),只提供了有限的脚本调用方法,因此目前主流的开发方案是基于文本格式的输入输出数据处理的二次开发方案,下面我们详细说明。
图1 SACS和MOSES二次开发技术路线
基于文本格式的二次开发
上文已经说明基于文本格式的二次开发主要是针对软件的输出输入数据,因此一般只涉及到外围数据,不接触软件内核,所以相对来说比较简单,唯一的难点是需要自己编写算法以实现特定功能。
以笔者开发的“导管架下水分析前后处理程序”为例,该程序能够实现导管架滑移下水强度模型的自动建立、载荷转化重分布等功能,核心流程如图2所示,模块A、B、C是实现特定功能的核心算法,需要自己编写封装,其余方框内是文本数据,其中最上层和最下层分别是SACS和MOSES软件的输出和输入文件。
图2 “导管架下水分析前后处理程序”核心流程
图3“导管架下水分析前后处理程序”界面
基于脚本的二次开发
脚本(Script)是指使用一种特定的描述性语言,依据一定的格式编写的可执行文件。脚本一般是可读的文本格式,由系统内的解释器将其内容按行翻译成机器可识别的指令,并按程序顺序执行。效率相对较低,但简单易用。一般常见的bat(cmd)和vbs等文件都是脚本语言编写的可执行文件。
SACS和MOSES软件都提供了基于脚本调用的二次开发方案,理论上能够被任何脚本语言调用运行。
3.1 SACS软件的脚本调用
SACS在13.1版本中提供了能够自动运行Run或Multi-run文件的并支持命令行调用的Analysis Engine,该功能使得脚本调用成为可能。
调用方法:
AnalysisEngine.exe RunfilePath SACSInstallationDirectory
AnalysisEngine.exe是在SACS安装路径下的可执行文件,RunfilePath是SACSRun或Multi-run文件路径,SACSInstallationDirectory是SACS的安装路径。
使用该方法可以后台批量运行SACS Run或Multi-run文件,也可以循环调用Run文件实现工作流功能。SACS示例库中Demo 14展示了一个利用Python或者C#调用执行AnalysisEngine.exe进行简单杆件重新设计(Redesign)的工作流功能的示例,如图4所示。
图4利用Analysis Engine实现的杆件重新设计工作流
3.2 MOSES软件的脚本调用
MOSES软件支持批处理模式(Batch Mode)运行,该模式能够直接调用运行CIF文件。调用方法与SACS Analysis Engine类似:
moses.exe CiffilePath
moses.exe是在MOSES安装路径下的可执行文件,也是MOSES的主程序,CiffilePath是MOSESCIF文件路径。需要注意的是,运行前需要先清空工作路径(CIF文件路径)下的结果文件。
基于内核的交互性开发
闭源软件的内核级的交互性开发一般由该软件的开发公司完成,Bentley公司在SACS和MOSES两款软件上做了一些有益的交互性开发尝试,在导管架的海上安装分析上提供了一些示例。这些尝试的最终目标应该是为了建立统一的可视化前后处理平台。
4.1 SACS与MOSES的交互性
从11.2版本开始,SACS增加了在Executive界面里调用MOSES自动完成Launch分析和生成Launch载荷的功能。需要注意的是,SACS中的MOSES Launch是完整的MOSES Launch功能的简化版本,仅通过生成与“SACS将做什么”最接近的MOSES分析来支持现有的SACS Launch功能。换句话说,这是一个功能受限的Demon程序,主要用来展示未来将软件内核开发成统一平台的可能性。
4.2 MOSES与SACS的交互性
MOSES与SACS的交互性上重点体现在两个方面:第一是对SACS格式数据的支持,第二是与SACS图形界面数据共用。
从10.01版本开始,&EMIT增加了一个开关,使得SACS模型在转化成MOSES模型后保留原SACS模型数据,方便后处理输出SACS格式文件。不论是Tow分析还是Launch分析,MOSES都可以输出SACS格式的运动或者载荷数据,方便直接导入到SACS模型中开展计算,避免开发者多做一次中间数据的格式转化。
新版本的MOSES结构后处理模块可以创建公共结果文件(CSF文件)和Postvue可视化结果文件,供SACS计算使用或者查看计算结果。
基于接口的二次开发
应用程序接口(API)是一些预先定义的接口(如函数、HTTP接口),用来实现访问应用程序或服务的内部数据或方法等功能的例程,比如通过代码操作SACS Modeler建模或者Postvue输出。遗憾的是Bentley之前一直没有公开SACS和MOSES的相关API接口定义,因此基本不太可能实现基于API的二次开发。
不过在15版的SACS中,Bentley终于提供了SACS模型互操作的API。SACS模型互操作API允许用户创建定制的工具(脚本、宏或应用程序)来操作SACS模型数据和结果。API以三种格式公开:C++库、Python扩展和COM服务器。尽管操作细节有特定格式要求,但是API在所有格式中都是一致的。所有功能在所有格式上都可用。API是基于对象的。一个主对象用于访问模型加载/创建函数并提供对全局数据的访问。尽管还是技术预览状态,但新的功能特性已经足以实现基于API的二次开发,基本的API功能应该如图5所示。可以说,基于API技术的二次开发是未来的技术发展方向。
图5 SACS API接口可以提供的基本功能
展望
随着计算机软、硬件的不断发展,开发技术的不断创新,应用场景的不断变化,SACS和MOSES软件也越来越走向开放,越来越重视用户体验。在SACS和MOSES逐渐走向融合的过程中,为我们提供了新的交互性应用和二次开发技术方案。如何更好的应用这些新特性,为我们的二次开发提供新的功能和体验,值得每个开发者重点关注。
参考文献:
[1]SACS Documentation 14.3.
[2]REFERENCE MANUAL FOR MOSES 12.0.
[3]侯涛,尹光荣,董志亮,徐峰,孟庆政.导管架滑移下水强度智能分析技术研究[J].船海工程,2014,43(03):153-156.
[4]https://communities.bentley.com/products/offshore/m/mediagallery/274795
[5]https://docs.bentley.com/LiveContent/web/SACS%20Readme-v10/en/GUID-0D036A5A-D045-4EED-B96D-1AAE5A95C7B9.html