首页 > 编程语言 >AVEVA MARINE C# 程序执行MarJobLauncher工作

AVEVA MARINE C# 程序执行MarJobLauncher工作

时间:2024-05-01 15:11:20浏览次数:23  
标签:MarJobLauncher C# Aveva mj MDB File var new 程序执行

手工执行的话一般如此操作,例如分离零件等操作

今天利用c# 介绍下AM如何用代码执行提取零件gen文件的过程

引用如下的库文件

封装的类库

其中appname/shortname/appExecutable这些去下面的文件去查找

C:\AVEVA\Marine\OH12.1.SP4\MarJobs.xml

 

public static class MarJobEx
 {
     public static string appName = "Hull Plate Interface";

     public static string appShort_name = "tbrplateint";

     /// <summary>
     /// 按照零件名称提取gen文件
     /// </summary>
     /// <param name="Plates"></param>
     /// <param name="passWord"></param>
     /// <returns></returns>
     public static List<FileInfo> HullPlatePartsInterFace(this IEnumerable<string> Plates, string passWord)
     {
         //
         MDB.CurrentMDB.GetWork();
         //var job = ExportOutHullMarJobs().First(j => j.executable == HullPlateInterface);
         var pro = Aveva.Pdms.Database.Project.CurrentProject;
         var mdb = Aveva.Pdms.Database.MDB.CurrentMDB;
         MarJob mj = new MarJob()
         {
             Project = pro.Name,
             MDB = mdb.Name,
             User = pro.UserName,
             Password = passWord
         };
         mj.Create(appName);
         Aveva.Marine.Utility.MarUtil util = new Aveva.Marine.Utility.MarUtil();
         var datDir = util.TBEnvironmentGet("SB_SHIPDATA");
         util.Dispose();
         StringBuilder sb = new StringBuilder();
         Plates.ToList().ForEach(c => sb.AppendLine($"PLATE,'{c}';"));
         string cmdstr = sb.ToString();
         var fn = Path.Combine(datDir, $"{appShort_name}_{mj.JobId}.dat");
         File.WriteAllText(fn, cmdstr);
         mj.AddInput(fn);
         mj.Run(false);
         var dats = mj.Outputs.Cast<string>().FirstOrDefault(c => c.EndsWith(".dat"));
         var fls = File.ReadAllLines(dats).Where(c => File.Exists(c));
         return fls.Select(c => new FileInfo(c)).ToList();
     }

     /// <summary>
     /// 按照装配提取
     /// </summary>
     /// <param name="curAss"></param>
     /// <param name="passWord"></param>
     /// <returns></returns>
     public static List<FileInfo> HullPlatePartsInterFace(this List<DbElement> curAssOrBlockEle, string passWord)
     {
         var strs = curAssOrBlockEle.Select(c=>c.GetAsString(DbAttributeInstance.NAMN));
         MDB.CurrentMDB.GetWork();
         //var job = ExportOutHullMarJobs().First(j => j.executable == HullPlateInterface);
         var pro = Aveva.Pdms.Database.Project.CurrentProject;
         var mdb = Aveva.Pdms.Database.MDB.CurrentMDB;
         MarJob mj = new MarJob()
         {
             Project = pro.Name,
             MDB = mdb.Name,
             User = pro.UserName,
             Password = passWord
         };
         mj.Create(appName);
         Aveva.Marine.Utility.MarUtil util = new Aveva.Marine.Utility.MarUtil();
         var datDir = util.TBEnvironmentGet("SB_SHIPDATA");
         util.Dispose();
         var cmdstrs = curAssOrBlockEle.Select(c=>$"{(c.GetActualType().Name == "ASMBLY" ? "ASSEMBLY" : "BLOCK")},'{c.GetAsString(DbAttributeInstance.NAMN)}';").ToArray();
         var fn = Path.Combine(datDir, $"{appShort_name}_{mj.JobId}.dat");
         File.WriteAllLines(fn, cmdstrs);
         mj.AddInput(fn);
         mj.Run(false);
         var dats=mj.Outputs.Cast<string>().FirstOrDefault(c => c.EndsWith(".dat"));
         var fls = File.ReadAllLines(dats).Where(c => File.Exists(c));
         return fls.Select(c => new FileInfo(c)).ToList();
     }
 }

 

标签:MarJobLauncher,C#,Aveva,mj,MDB,File,var,new,程序执行
From: https://www.cnblogs.com/NanShengBlogs/p/18169353

相关文章

  • .Net 8.0 下的新RPC,IceRPC之试试的新玩法"打洞"
    作者引言很高兴啊,我们来到了IceRPC之试试的新玩法"打洞",让防火墙哭去吧试试RPCs的新玩法"打洞"比较典型的玩法:RPC数据流从客户端流向服务端,现在来尝试用IceRPC来玩一个新的花样"打洞"。概述对于IceRPC,客户端是发起连接的实体,而服务器是接受连接的实体。建立连接后,......
  • Oracle日志记录模式 - LOGGING、FORCE LOGGING、NOLOGGING模式介绍
    一、日志记录模式(LOGGING、FORCELOGGING、NOLOGGING)内容转载自:https://www.cnblogs.com/tk-bolg/p/12867772.html1.三者的含义LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括......
  • 快捷键ctrl+`打不开vscode终端
    分析毫无疑问,是热键冲突了。目前没有很好的热键检测手段,包括OpenArk也检测不到这个热键冲突,说实话只能借助百度,自己找那真是大海捞针。像这种冲突,一般是全局快捷键,也就是后台的应用也能使用的快捷键,比如截图啊之类的。因为一般的快捷键是前台时才可用的。解决简单来说就是,国......
  • 简单解决version 'GLIBC_2.34' not found,version 'GLIBC_2.25' not found
    简单解决version'GLIBC_2.34'notfound,version'GLIBC_2.25'notfound无需手动下载安装包编译前言很多博客都是要手动下载安装包进行编译升级,但这样很容易导致系统崩溃,本博文提供一个简单的方法,参考自博客1,博客2.检查版本strings/usr/lib64/libc.so.6|grepGLIBC_或者......
  • Archi - 系统设计题目,怎么准备面试
    系统设计面试,回答流程1.comeupwithabasicsolutionfirst-先给出一个基本的解决方案,不要一上来就很复杂。给出讨论空间2.askclarifyingquestionsandstateyourassumptions-细节不要想当然,要和面试官沟通澄清需求,这也是在考察需求分解能力3.focusonconceptsandle......
  • Excel忘记了密码,怎么解开?
      在我们日常工作或者是学习时候,Excel会被经常使用到。我们会通过网络将Excel发送给其他人,但是有时候,为了公司的数据安全或者是保护隐私,防止别人随意修改数据或者是复制数据,通常的办法是给Excel表格加上密码。时间久了,有时候会忘记了密码,怎么解决呢?一起来看看怎么解决。昨天......
  • 【Qt 专栏】Qt Creator 的 git 配置 & 上传到gitee
    1.进入到Qt项目文件夹内,打开“GitBashHere”2.初始化,在“GitBashHere”中输入  gitinit3.加入所有文件,在“GitBashHere”中输入 gitadd. (需要注意,gitadd后面还有一个点)4.添加备注,gitcommit-m"备份"5.推送本地仓库到gitee(需要事先在gitee上创建好本......
  • 使用 Visual C++ 的 Office 自动化
    摘要本文解答了有关从VisualC++自动化到MicrosoftOffice的常见问题。更多信息目录什么是自动化?我不熟悉自动化,在哪里可以找到要了解详细信息的好资源?是否有其他方法可以使用自动化?什么是COM? 如何实现附加到正在运行的Office应用程序实例?如何实现传......
  • 报错“Please indicate a valid Swagger or OpenAPI version field”
    报错“PleaseindicateavalidSwaggerorOpenAPIversionfield”报错信息PleaseindicateavalidSwaggerorOpenAPIversionfield.Supportedversionfieldsareswagger:"2.0"andthosethatmatchopenapi:3.0.n(forexample,openapi:3.0.0). 原因分析根......
  • zotero添加markdown插件(Mac版)
    zotero安装官网下载地址:https://www.zotero.orgmarkdown插件下载下载地址:https://gitcode.com/fei0810/markdownhere4zotero/tree/master选择相应的.xpi文件插件安装步骤打开zotero,选择工具->附加组件选择installadd-onfromfile选中刚才下载的.xpi文件点......