3464x
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#. База данных включает классы для всех доступных объектов. Свойства объектов' могут быть заданы и заданы на основе параметров. Количество параметров может изменяться в зависимости от случая использования.

Далее показано, каким образом можно задать объекты, на примере узла:

узел новыйУзел = новый ()
{
    no = nodeId,
    координаты = новый вектор_3d () { x = xVjector, y = 0,0, z = 0,0 },
    координата_системы_типа = node_coordinate_system_type.COORDINATE_SYSEM_carTESIAN,
    Координата_system_typeStecification = верная,
    комментарий = "узел для балки"
};

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

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

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

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

Соединение с RFEM/RSTAB

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

var Logger = LogМенеджер.GetCurrentКлассЛоггер();
строкаCurrentDirectory = каталог.GetCurrentDirectory();
try
{
    application_informationApplicationInfo;

    try
    {
        //соединение с приложением RFEM6 или RSTAB9
        приложение = новое ApplicationClient (Привязка, Адрес);
    }
    Поймать (исключение)
    {
        if (приложение != ноль)
        {
            if (application.State != CommunicationState.Faulted)
            {
                приложение.Закрыть();
                logger.Ошибка (исключение, "Что-то произошло:" + исключение.Сообщение);
            }
            else
            {
                application.Abort();
                логгер.Ошибка(исключение, "Ошибка связи с программой RFEM:" + исключение.Сообщение);
            }
        }
        Консоль.ЗаписьЛинии(исключение.ToString());
    }
    finally
    {
        ApplicationInfo = применением.get_information ();
        logger.Info("Название: {0}, Версия:{1}, Тип: {2}, язык: {3} ",ApplicationInfo.name,ApplicationInfo.version,ApplicationInfo.type,ApplicationInfo.language_name);
        Консоль.WiteLine("Название: {0}, Версия:{1}, Тип: {2}, язык: {3} ",ApplicationInfo.name,ApplicationInfo.version,ApplicationInfo.type,ApplicationInfo.language_name);
    }
}

строка modelName = "MyTestModel";
строка modelUrl ="";
ModelClient model =new ModelClient(Binding,new EndpointAddress(modelUrl));

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

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

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

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

section sectionRectlang = новое сечение
{
    № = 1,
    material=materialConcrete.no,
    Заданныйматериал = верный,
    тип = section_type.TYPE_PARAMETRIC_MASSIVE_I,
    titleStecification = true,
    ь
    параметризация_typeStecification = true,
    title = "R_M1 0.5/1.0"
};

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

SortedList nodes = новый SortedList();
int[]lineDefinitionNodes = новый int[spanNumber + 1];
Целый узелId = 1;
двойной хВектор = 0,0;

для (int i = 0; i < spanNumber + 1; i ++)
{
    узел новыйУзел = новый ()
    {
        no = nodeId,
        координаты = новый вектор_3d () { x = xVjector, y = 0,0, z = 0,0 },
        координата_системы_типа = node_coordinate_system_type.COORDINATE_SYSEM_carTESIAN,
        Координата_system_typeStecification = верная,
        комментарий = "бетонная часть"
    };
    nodes.Add (nodeId, новыйУзел);
    lineDefinitionNodes[i] = nodeId;
    xВектор = xВектор + диапазон;
    NodeId++;
}

//создать линии
IntlineId = 1;
SortedListlines = новый SortedList();

для (int i = 0; i < spanNumber; i ++)
{
    линия новаяЛиния = новая ()
    {
        no =lineId,
        definition_nodes =new int[] {lineDefinitionNodes[i],lineDefinitionNodes[i + 1]},
        комментарий = "линии для балок",
        тип =line_type.TYPE_POLYLINE,
        titleStecification = true,
    };
    lines.Add(lineId,newLine);
    lineId++;
}

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

nodeal_support1 = новое ()
{
    № = 1,
    nodes =supportNodes1.ToArray(),
    пружина = новый вектор_3d() { x = двойной.PositiveInfinity, y = двойной.PositiveInfinity, z = двойной.PositiveInfinity },
    rotation_restraint = новый вектор_3d() { x = двойной.PositiveInfinity, y = 0,0, z = двойной.PositiveInfinity }
};

nodeal_support2 = новое ()
{
    no = 2,
    nodes =supportNodes2.ToArray(),
    пружина = новый вектор_3d() { x = 0,0, y = двойной.PositiveInfinity, z = двойной.PositiveInfinity },
    вращательное_ограничение = новый вектор_3d () { x = 0,0, y = 0,0, z = двойной.PositiveInfinity }
};

nodealSupports.Add(support1);
nodealSupports.Add(support2);

Передача объектов в программу RFEM

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

try
{
    model.begin_modification("Геометрия");
    model.set_material (materialConcrete);
    model.set_section (sectionRectlang);

    forach (KeyvaluePairnodeItem в узлах)
    {
        model.set_node (nodeItem.value);
    }
    forEach (KeyvaluePairlineItem в линиях)
    {
        model.set_line (lineItem.value);
    }
    forach (KeyvaluePair

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

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

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

SortedList Member_loads = новый SortedList();
Int Member_load_id = 1;

для (int i = 0; i < spanNumber; i ++)
{
    Member_loadnewMemberLoad = новый ()
    {
        № = i + 1,
        Members_string = (i + 1).ToString (),
        элементы = новый int [] { i + 1 },
        load_distribution = Member_load_load_distribution.LOAD_DISTRIBUTION_UNIFORM,
        load_distributionSspecificed = true,
        величина = нагрузка на стержень * 1000,
        Величинауказанной = верная,
        load_is_over_total_length = верная,
        load_is_over_total_lengthSspecificed = true,
    };
    Member_loads.Add(i + 1,newMemberLoad);
    Member_load_id++;
}

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

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

Для выполнения всех расчетов в программе RFEM используется функция model.calculate(all).

После успешного вычисления результаты в данном примере отображаются в консоли. Библиотека Hlf для C#позволяет также экспортировать результаты в файлы XML или CSV.

Наконец, для сохранения модели можно использовать функцию model.sable(), путь к файлу указан в скобках:

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

Заключение

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


Автор

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

Ссылки


;