2455x
001806
2023-07-19

Учебное пособие по веб-сервисам и веб-сервисам API в C#

Наш веб-сервис предлагает пользователям возможность взаимодействовать с RFEM 6 и RSTAB 9, используя различные языки программирования. Функции высокого уровня (HLF) Dlubal позволяют расширить и упростить функциональность веб-сервиса. В дополнение к RFEM 6 и RSTAB 9, использование нашего веб-сервиса сделает работу инженера проще и быстрее. Проверьте это сейчас! В этом руководстве показано, как использовать библиотеку C #на простом примере.

Библиотека HLF для C #предоставляет множество полезных функций для создания конструкций в RFEM и RSTAB, некоторые из которых будут использованы в следующем примере.

Для реализации запрограммированного кода сначала требуется соединение с программой. Один из доступных портов должен быть указан как адрес. Адрес RFEM/RSTAB по умолчанию - http://localhost: 8081. При необходимости его можно изменить в настройках программы.

На следующем шаге можно создать различные объекты, такие как узлы, линии и стержни, с помощью функций, доступных в библиотеке C #. В библиотеке есть классы для всех доступных объектов. На основе параметров могут быть определены и указаны свойства объектов '. Количество параметров может варьироваться в зависимости от сценария использования.
Далее показано, как можно определять объекты на примере узла:


            

узел newNode = new ()
{
    no = nodeId,
    координаты = new vector_3d () {x = xVector, y = 0.0, z = 0.0},
    COORDINATE_SYSTEM_CARTESIAN,
    Coordinate_system_typeSpecified = true,
    comment = "узел для балки"
};


Таким же образом определяются линии, поверхности и другие объекты. Обратите внимание, что для некоторых атрибутов должен быть определен соответствующий атрибут «Указанный», и для него должно быть задано значение «истина».

Практический пример

В этом примере показано, как создать неразрезную балку с постоянной линейной нагрузкой. Количество пролетов, пролет балки и величина линейной нагрузки могут быть изменены пользователем.
Сначала в консоли задаются требуемые переменные. Программа проверяет, совместим ли ввод пользователя с типом данных соответствующей переменной. Если запись неправильная или пустая, в консоли появляется сообщение об ошибке. При программировании особое внимание было уделено тому, чтобы десятичные разряды можно было вводить как точками, так и запятыми, чтобы свести к минимуму вероятность ошибок.

Подключение к RFEM/RSTAB

Следующий код пытается установить соединение с RFEM/RSTAB в блоке try-catch:


            

var logger = LogManager.GetCurrentClassLogger ();
строка CurrentDirectory = Directory.GetCurrentDirectory ();
try
{
    application_information ApplicationInfo;

    try
    {
        //подключаемся к приложению RFEM6 или RSTAB9
        application = new ApplicationClient (привязка, адрес);
    }
    catch (исключение)
    {
        если (приложение! = ноль)
        {
            if (application.State! = CommunicationState.Faaled)
            {
                application.Close ();
                logger.Error (exception, «Что-то случилось:» + exception.Message);
            }
            else
            {
                application.Abort ();
                logger.Error (исключение, «Ошибка связи с RFEM:» + exception.Message);
            }
        }
        Console.WriteLine (exception.ToString ());
    }
    finally
    {
        ApplicationInfo = application.get_information ();
        logger.Info ("Название: {0}, версия: {1}, тип: {2}, язык: {3} ", ApplicationInfo.name, ApplicationInfo.version, ApplicationInfo.type, ApplicationInfo.language_name);
        Console.WriteLine ("Название: {0}, версия: {1}, тип: {2}, язык: {3} ", ApplicationInfo.name, ApplicationInfo.version, ApplicationInfo.type, ApplicationInfo.language_name);
    }
}

строка modelName = "MyTestModel";
строка modelUrl = "";
ModelClient модель = новый ModelClient (привязка, новый адрес конечной точки (modelUrl));



Чтобы установить соединение, программа должна быть открыта до запуска кода. После успешного подключения информация о программе отображается в консоли, и в RFEM/RSTAB создается новая модель с пользовательским именем.

Определение основных объектов

На следующем шаге вы можете задать материал и сечение неразрезной балки. Важно, чтобы описание соответствовало названию, хранящемуся в библиотеке материалов или сечений RFEM.


            

материал материалБетон = новый материал
{
    нет = 1,
    name = "C20/25 | EN 1992-1-1: 2004/A1: 2014 »
};

section sectionRectangle = новый раздел
{
    нет = 1,
    материал = materialConcrete.no,
    materialSpecified = true,
    type = section_type.TYPE_PARAMETRIC_MASSIVE_I,
    typeSpecified = true,
    параметризации_тип = сечение_тип_параметризации.PARAMETRIC_MASSIVE_I__MASSIVE_RECTANGLE__R_M1,
    параметризация_типSpecified = true,
    name = "R_M1 0.5/1.0"
};


С помощью циклов создаются и организуются в списки различные объекты (узлы, линии, стержни). Узлы определяются в зависимости от заданного пользователем количества пролетов и передаются в список «lineDefinitionNodes». Список позже будет использован для создания линий на основе их узлов определения. При создании модели RSTAB список используется для определения стержней на основе их узлов определения. При использовании RFEM стержни определяются с помощью линий.


            

SortedList  nodes = новый SortedList  ();
int [] lineDefinitionNodes = новый int [spanNumber + 1];
int nodeId = 1;
двойной xVector = 0,0;

для (int i = 0; i  lines = new SortedList  ();

для (int i = 0; i 

После создания всех базовых объектов определяются две различные узловые опоры. Узловая опора на первом узле должна быть закреплена, остальные опоры должны быть выполнены в виде роликов в направлении оси X. Каждый из узлов определения для различных типов опор сведен в отдельный список.


            

nodal_support support1 = new ()
{
    нет = 1,
    узлы = supportedNodes1.ToArray (),
    spring = new vector_3d () {x = double.PositiveInfinity, y = double.PositiveInfinity, z = double.PositiveInfinity},
    rotational_restraint = new vector_3d () {x = double.PositiveInfinity, y = 0.0, z = double.PositiveInfinity},
};

nodal_support support2 = new ()
{
    нет = 2,
    узлы = supportedNodes2.ToArray (),
    spring = new vector_3d () {x = 0.0, y = double.PositiveInfinity, z = double.PositiveInfinity},
    rotational_restraint = new vector_3d () {x = 0.0, y = 0.0, z = double.PositiveInfinity} (Ограничение вращения)
};

nodalSupports.Add (support1);
nodalSupports.Add (support2);


Передача объектов в RFEM

Чтобы созданные объекты стали доступными в RFEM/RSTAB, их необходимо сначала перенести в программу. Это делается между двумя функциями, то есть «model.begin_modification» и «model.end_modification», с помощью объектно-ориентированных функций библиотеки HLF. Циклы по каждому типу используются для передачи в программу всех объектов определенного типа.


            

try
{
    model.begin_modification («Геометрия»);
    model.set_material (материалБетон);
    model.set_section (sectionRectangle);

    foreach (KeyValuePair  nodeItem в узлах)
    {
        model.set_node (nodeItem.Value);
    }
    foreach (KeyValuePair  lineItem в строках)
    {
        model.set_line (lineItem.Value);
    }
    foreach (KeyValuePair  memberItem в элементах)
    {
       	model.set_member (memberItem.Value);
    }
    foreach (var nodalSupport в nodalSupports)
    {
        model.set_nodal_support (nodalSupport);
    }
}
catch (исключение)
{
    model.cancel_modification ();
    logger.Error (exception, «Что-то случилось при создании геометрии» + exception.Message);
    бросить;
}
finally
{
    try
    {
       	model.finish_modification ();
    }
    catch (исключение)
    {
        logger.Error (exception, «Что-то пошло не так при завершении модификации геометрии\n» + exception.Message + «\n»);
         model.reset ();
    }
}


Задание нагрузок

Загружения, сочетания нагрузок и расчетные ситуации создаются аналогично основным объектам и затем передаются в программу.
Затем можно создать нагрузку на стержень, которая была ранее указана пользователем:


            

SortedList  member_loads = новый SortedList  ();
int member_load_id = 1;

для (int i = 0; i 

Кроме равномерно распределенных нагрузок, возможны также трапециевидные и параболические нагрузки.

Расчет и выдача результатов

Все расчеты выполняются в программе RFEM с помощью функции model.calculate (all).
После успешного расчета результаты в этом примере отображаются в консоли. Библиотека HLF для C #также позволяет экспортировать результаты в файлы XML или CSV.
Наконец, можно использовать функцию model.save () для сохранения модели по пути к файлу, указанному в скобках:


            

//сохраняем модель перед закрытием
model.save (CurrentDirectory +@"\testmodels\");
application.close_model (0, истина);


Заключение

В показанном примере очевидны преимущества и простота использования библиотеки C #. Конструкцию можно быстро адаптировать с помощью пользовательских вводов, что позволяет сэкономить время при вводе конструктивных систем в RFEM 6 и RSTAB 9. Библиотека HLF для C #также предлагает множество других функций, позволяющих создавать сложные системы.


Автор

Г-жа Гёбель осуществляет техническую поддержку пользователей Dlubal Software.

Ссылки