西门子NX打开C#,我的结果文件被锁定

时间:2019-01-16 11:37:39

标签: c# siemens-nx

这是我代码的一部分。我的结果文件被锁定/找不到数据集。
这是我在做什么的一种解释。

因此,我们知道一种潜在的工作方式可能是:

curSolution à Result class objectà ResultAccess class object à Execute AskMaximum(), … functions

注意:正如我们在CAE世界中一样,您将使用ResultAccess类的CAE特定形式,称为SolutionResult类。

基于此,我迅速编写了一些示例代码,基本上可以完成以下操作:

·根据目标curSolution创建一个新的SolutionResult对象 SolutionResult对象将保存并提供目标解决方案的所有结果

·创建一个新的ResultAccess对象以处理结果数据 通过ResultAccess对象,您可以选择并使用一组特定的结果数据(例如,使用Element-Nodal –最大主应力结果数据)。 为此,首先需要定义一些配置设置,以指定需要在ResultAccess对象中包含哪组结果数据:

o指定目标工况,目标迭代和目标结果类型 重要的是要知道结果的结构如下:
结果
   行李箱
      迭代
         结果类型

结果分为工况。 工况是一个通用术语,可以根据当前求解器的上下文来表示不同的事物:求解步骤,模式,频率等 每个负载工况被分为多个迭代,尽管对于许多结果而言,将只有1次迭代。根据解决方案类型,迭代可以表示:时间步长,周期,求解器迭代,…

与特定工况和迭代有关的结果数据可以保存不同的数据类型,例如冯-米塞斯,最大本金,变形等……如果您要使用一组特定的数据,则可以查询所需的结果数据基于结果类型。结果类型由三个参数定义:

§NXOpen.CAE.Result.Quantity –指定结果的物理量,例如“位移”,“应力”等。

§NXOpen.CAE.Result.Location –指定结果定义的位置,例如Nodal,Elemental等。

§NXOpen.CAE.Result.Section –指定要在哪个部分或高斯点上计算结果

o设置其他配置设置 如果需要的话,还可以设置其他“结果参数”设置(如我的示例代码所示),例如平均选项。

o基于SolutionResult对象和上面定义的Result参数创建新的ResultAccess对象

·获取最大值,… 基于功能AskMaximum(),AskMinimum(),…

if (UserSolveYN == 1)
                    {          
                        curSolution.Solve(SimSolution.SolveOption.Solve, SimSolution.SetupCheckOption.CompleteCheckAndOutputErrors);
                       //K
                       // Create Solution Result container to hold the results of the target Sim Solution
                        NXOpen.CAE.SolutionResult mySolutionResult = theSession.ResultManager.CreateSolutionResult(curSolution);

                        // Get target Loadcase and Iteration for target Result
                        int myLoadCaseIndex = 0;    // Assuming there is only one result in each solution and there is only one iteration (not multiple timesteps, ...)
                        int myIterationIndex = 0;


                        // Set which result type you want to get the maximum for
                        NXOpen.CAE.Result.Type myResultType;
                        myResultType.Location = Result.Location.ElementNodal;
                        myResultType.Quantity = Result.Quantity.PrincipalStress;
                        myResultType.Section = Result.Section.Maximum;


                        // Set the averaging configuration
                        NXOpen.CAE.Result.Averaging myAveraging;
                        myAveraging.DoAveraging = false;
                        myAveraging.AverageAcrossAnglevalue = 45.0;
                        myAveraging.AverageAcrossElementTypes = false;
                        myAveraging.AverageAcrossFeatangle = false;
                        myAveraging.AverageAcrossMaterialIds = false;
                        myAveraging.AverageAcrossPropertyIds = false;
                        myAveraging.IncludeInternalElementContributions = true;

                        // Create container that specifies the result parameters (in order to specify which result you will use to get the maximum)
                        NXOpen.CAE.ResultParameters myResultParameters = theSession.ResultManager.CreateResultParameters();
                        myResultParameters.SetLoadcaseIteration(myLoadCaseIndex, myIterationIndex);
                        myResultParameters.SetResultType(myResultType);



                        myResultParameters.SetResultComponent(NXOpen.CAE.Result.Component.MaximumPrincipal);
                        //myResultParameters.SetResultDataSection(Result.Section.All);
                        //myResultParameters.SetResultDataQuantity(Result.Quantity.PrincipalStress);
                        //myResultParameters.SetResultDataSection(Result.Section.Maximum);
                        myResultParameters.SetSectionPlyLayer(0, 0, 0);
                        myResultParameters.SetAveragingCriteria(myAveraging);
                        myResultParameters.SetCoordinateSystem(NXOpen.CAE.Result.CoordinateSystem.AbsoluteRectangular);
                        myResultParameters.SetElementValueCriterion(NXOpen.CAE.Result.ElementValueCriterion.Average);
                        myResultParameters.SetComplexCriterion(NXOpen.CAE.Result.Complex.Amplitude);
                        myResultParameters.SetPhaseAngle(0.0);
                        //myResultParameters.SetScale(1.0);
                        //myResultParameters.SetUnit();


                        // Create ResultAccess object based on result parameters, which will allow to get the maximum value for the desired result type
                        NXOpen.CAE.ResultAccess myResultAccess = theSession.ResultManager.CreateResultAccess(mySolutionResult, myResultParameters);
                        myResultAccess.SetParameters(myResultParameters);


                        // Get maximum, minimum and locations
                        double myMAXIMUM = myResultAccess.AskMaximum();
                        double myMINIMUM = myResultAccess.AskMinimum();

                        NXOpen.CAE.Result.Location myLocation;
                        double mymin;
                        double mymax;
                        int myminID;
                        int mymaxID;
                        int myminSubID;
                        int mymaxSubID;
                         myResultAccess.AskMinMaxLocation(out myLocation, out mymin, out mymax, out myminID, out mymaxID, out myminSubID, out mymaxSubID);


                        // Then do what you need to do with the maximum/minimum value...
                        // ...

                    }

我认为这是错误

// Create ResultAccess object based on result parameters, which will allow to get the maximum value for the desired result type
                            NXOpen.CAE.ResultAccess myResultAccess = theSession.ResultManager.CreateResultAccess(mySolutionResult, myResultParameters);
                            myResultAccess.SetParameters(myResultParameters);

0 个答案:

没有答案