Siemens NX open C#, мои файлы результатов заблокированы
Это одна часть моего кода. Мои файлы результатов заблокированы / набор данных не найден.
Вот одно объяснение, что я делаю..
Из этого мы знаем, что потенциальный способ работы может быть:
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 Load, target Iteration и target Result Type. Важно знать, что результаты структурированы следующим образом:
Результат
Загрузить случай
итерация
Тип результата
Результаты делятся на случаи нагрузки. Load Case - это общий термин, который может представлять собой разные вещи, основанные на текущем контексте решателя: шаги решения, режимы, частоты,... Каждый 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);