Библиотека 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#предлагает также множество других функций для создания сложных систем.