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

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

  1. code.csharp#

узел новыйУзел = новый ()
{

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

};

  1. /код#

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

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

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

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

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

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

  1. code.csharp#

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

  1. application_informationApplicationInfo;
  1. try
  2. {
  3. //соединение с приложением RFEM6 или RSTAB9
  4. приложение = новое ApplicationClient (Привязка, Адрес);
  5. }
  6. Поймать (исключение)
  7. {
  8. if (приложение != ноль)
  9. {
  10. if (application.State != CommunicationState.Faulted)
  11. {
  12. приложение.Закрыть();
  13. logger.Ошибка (исключение, "Что-то произошло:" + исключение.Сообщение);
  14. }
  15. else
  16. {
  17. application.Abort();
  18. логгер.Ошибка(исключение, "Ошибка связи с программой RFEM:" + исключение.Сообщение);
  19. }
  20. }
  21. Консоль.ЗаписьЛинии(исключение.ToString());
  22. }
  23. finally
  24. {
  25. ApplicationInfo = применением.get_information ();
  26. logger.Info("Название: {0}, Версия:{1}, Тип: {2}, язык: {3} ",ApplicationInfo.name,ApplicationInfo.version,ApplicationInfo.type,ApplicationInfo.language_name);
  27. Консоль.WiteLine("Название: {0}, Версия:{1}, Тип: {2}, язык: {3} ",ApplicationInfo.name,ApplicationInfo.version,ApplicationInfo.type,ApplicationInfo.language_name);
  28. }

}

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

  1. /код#

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

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

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

  1. code.csharp#

материалmaterialConcrete = новый материал
{

  1. № = 1,
  2. title = "C20/25 | EN 1992-1-1:2004/A1:2014"

};

section sectionRectlang = новое сечение
{

  1. № = 1,
  2. material=materialConcrete.no,
  3. Заданныйматериал = верный,
  4. тип = section_type.TYPE_PARAMETRIC_MASSIVE_I,
  5. titleStecification = true,
  6. ь
  7. параметризация_typeStecification = true,
  8. title = "R_M1 0.5/1.0"

};

  1. /код#

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

  1. code.sharp#

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

для (int i = 0; i < spanNumber + 1; i ++)
{

  1. узел новыйУзел = новый ()
  2. {
  3. no = nodeId,
  4. координаты = новый вектор_3d () { x = xVjector, y = 0,0, z = 0,0 },
  5. координата_системы_типа = node_coordinate_system_type.COORDINATE_SYSEM_carTESIAN,
  6. Координата_system_typeStecification = верная,
  7. комментарий = "бетонная часть"
  8. };
  9. nodes.Add (nodeId, новыйУзел);
  10. lineDefinitionNodes[i] = nodeId;
  11. xВектор = xВектор + диапазон;
  12. NodeId++;

}

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

для (int i = 0; i < spanNumber; i ++)
{

  1. линия новаяЛиния = новая ()
  2. {
  3. no =lineId,
  4. definition_nodes =new int[] {lineDefinitionNodes[i],lineDefinitionNodes[i + 1]},
  5. комментарий = "линии для балок",
  6. тип =line_type.TYPE_POLYLINE,
  7. titleStecification = true,
  8. };
  9. lines.Add(lineId,newLine);
  10. lineId++;

}

  1. /код#

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

  1. code.csharp#

nodeal_support1 = новое ()
{

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

};

nodeal_support2 = новое ()
{

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

};

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

  1. /код#

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

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

  1. code.csharp#

try
{

  1. model.begin_modification("Геометрия");
  2. model.set_material (materialConcrete);
  3. model.set_section (sectionRectlang);
  1. forach (KeyvaluePairnodeItem в узлах)
  2. {
  3. model.set_node (nodeItem.value);
  4. }
  5. forEach (KeyvaluePairlineItem в линиях)
  6. {
  7. model.set_line (lineItem.value);
  8. }
  9. forach (KeyvaluePair
  10. {
  11. model.set_member (memberItem.value);
  12. }
  13. forEach (var nodalSupport в nodeSupports)
  14. {
  15. model.set_nodal_support (nodalSupport);
  16. }

}
Поймать (исключение)
{

  1. model.cancel_modification();
  2. logger. Ошибка (исключение, "Ошибка при создании геометрии" + исключение.Сообщение);
  3. кидать ;

}
finally
{

  1. try
  2. {
  3. model.finish_modification ()
  4. }
  5. Поймать (исключение)
  6. {
  7. logger.Ошибка (исключение, "Проблема при завершении модификации геометрии\n" + исключение.Сообщение + "\n");
  8. model.reset();
  9. }

}

  1. /код#

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

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

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

  1. code.csharp#

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

для (int i = 0; i < spanNumber; i ++)
{

  1. Member_loadnewMemberLoad = новый ()
  2. {
  3. № = i + 1,
  4. Members_string = (i + 1).ToString (),
  5. элементы = новый int [] { i + 1 },
  6. load_distribution = Member_load_load_distribution.LOAD_DISTRIBUTION_UNIFORM,
  7. load_distributionSspecificed = true,
  8. величина = нагрузка на стержень * 1000,
  9. Величинауказанной = верная,
  10. load_is_over_total_length = верная,
  11. load_is_over_total_lengthSspecificed = true,
  12. };
  13. Member_loads.Add(i + 1,newMemberLoad);
  14. Member_load_id++;

}

  1. /код#

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

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

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

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

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

  1. code.csharp#

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

  1. /код#

Заключение

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


Автор

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

Ссылки


;