Siemens NX open c #, мои файлы результатов заблокированы - PullRequest
0 голосов
/ 16 января 2019

Это одна часть моего кода. Мои файлы результатов заблокированы / набор данных не найден.
Вот одно объяснение, что я делаю ..

Итак, мы знаем, что потенциальный способ работы может быть:

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

Примечание: поскольку мы находимся здесь в мире CAE, вы будете использовать специфичную для CAE форму класса ResultAccess, которая называется классом SolutionResult.

Исходя из этого, я быстро написал пример кода, который в основном делает следующее:

· Создание нового объекта SolutionResult на основе целевого curSolution. Объект SolutionResult будет содержать и делать доступными все результаты целевого решения

· Создание нового объекта ResultAccess для работы с данными результатов. Объект ResultAccess позволяет вам выбирать и работать с конкретным набором ваших данных результатов (например, с данными результатов Element-Nodal - Max Principal Stress). Для этого сначала необходимо определить некоторые параметры конфигурации, чтобы указать, какой набор данных результата должен содержаться в объекте ResultAccess:

o Указание целевого варианта загрузки, целевой итерации и целевого типа результата. Важно знать, что результаты структурированы следующим образом:
Результат
Кейс для груза
Итерация
Тип результата

Результаты делятся на варианты загрузки. Load Case - это общий термин, который может представлять различные вещи, основанные на текущем контексте решателя: шаги решения, режимы, частоты,… Каждый вариант загрузки делится на несколько итераций, хотя для многих результатов будет только 1 итерация. В зависимости от типа решения итерация может представлять собой: временные шаги, циклы, итерации решателя,…

Данные результатов, относящиеся к определенному случаю загрузки и итерации, могут содержать разные типы данных, такие как Von-Mises, Max Principal, Deformation, ... Если вы хотите работать с определенным набором данных, вы можете запросить желаемый результат данные основаны на типе результата. Тип результата определяется тремя параметрами:

§ NXOpen.CAE.Result.Quantity - указывает физическую величину результата, такую ​​как смещение, напряжение,…

§ NXOpen.CAE.Result.Location - указывает, где результат определяется как Nodal, Elemental,…

§ NXOpen.CAE.Result.Section - указывает, по какому сечению или точке Гаусса вычисляется результат

o Установить другие параметры конфигурации Также возможно установить другие параметры параметра результата (как вы увидите в моем примере кода), например, параметры усреднения, если это необходимо.

o Создать новый объект ResultAccess на основе объекта SolutionResult и указанных выше параметров результата

· Получить максимальное значение,… На основе функций 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);
...