A biblioteca HLF para C#oferece inúmeras funções úteis para criar estruturas no RFEM e no RSTAB, algumas das quais serão utilizadas no exemplo a seguir.
Para implementar o código programado, é necessária primeiro uma ligação ao programa. Uma das portas disponíveis tem de ser especificada como endereço. O endereço predefinido do RFEM é http://localhost:8081 . Se necessário, pode ser alterado nas opções do programa.
No próximo passo, vários objetos podem ser criados, tais como nós, linhas e barras, utilizando as funções disponíveis na biblioteca C#. A biblioteca inclui classes para todos os objetos disponíveis. Com base nos parâmetros, as propriedades' dos objetos podem ser definidas e especificadas. O número de parâmetros pode variar dependendo do caso de utilização.
A seguir é demonstrado como os objetos podem ser definidos utilizando o exemplo de um nó:
- code.csharp#
nó novoNó = novo()
{
- no = noId,
- coordenadas = novo vector_3d () { x = xVector, y = 0,0, z = 0,0 },
- Coordenada_system_type = node_coordinate_system_type.COUNDINATE_SYSTEM_Cartesian,
- Coordenada_system_typeSpecified = verdadeiro,
- comentário = "nó para viga"
};
- /código#
Linhas, superfícies e outros objetos são definidos da mesma forma. Tenha em atenção que um atributo "especificado" correspondente tem de ser definido e definido como "verdadeiro" para determinados atributos.
Exemplo prático
Este exemplo mostra como criar uma viga contínua com uma carga de linha constante. O número de vãos, o vão da viga e a magnitude da carga de linha podem ser definidos de forma variável através da entrada do utilizador.
Primeiro, as variáveis necessárias são definidas pelo utilizador na consola. O programa verifica se a entrada do utilizador é compatível com o tipo de dados da respetiva variável. Se a entrada estiver incorreta ou vazia, aparece uma mensagem de erro na consola. Durante a programação, foi necessário assegurar que as casas decimais possam ser introduzidas utilizando a notação de ponto e vírgula para minimizar a suscetibilidade a erros durante a introdução de dados.
Ligação ao RFEM/RSTAB
O seguinte código tenta estabelecer uma ligação com o RFEM/RSTAB dentro de um blocotry-catch:
- code.csharp#
var logger = Log Manager.GetCurrentClassLogger ()
cadeia de caracteres CurrentDirectory = Diretório.GetCurrentDirectory ()
try
{
- aplicação_informacaoInformação da aplicação;
- try
- {
- ://ligar à aplicação RFEM6 ou RSTAB9
- aplicação =new AplicaçãoCliente(ligação, endereço);
- }
- captura (exceção de exceção)
- {
- if (aplicação != zero)
- {
- if (application.State != CommunicationState.Faulted)
- {
- aplicação.Fechar();
- logger.Error(exceção, "Ocorreu algo:" + exceção.Message);
- }
- else
- {
- aplicação.Abort();
- logger.Error(exceção, "Falha na comunicação com o RFEM:" + excessão.Message);
- }
- }
- Consola.WsiteLine(exsection.ToString());
- }
- finally
- {
- AplicaçãoInfo = aplicação.get_information();
- registo.Info("Nome: {0}, Versão:{1}, Tipo: {2}, idioma: {3} ", AplicaçãoInfo.name, AplicaçãoInfo.version, AplicaçãoInfo.type, AplicaçãoInfo.language_name);
- Consola.WiteLine("Nome: {0}, Versão:{1}, Tipo: {2}, idioma: {3} ", AplicaçãoInfo.name, AplicaçãoInfo.version, AplicaçãoInfo.type, AplicaçãoInfo.language_name);
- }
}
string modelName = "MyTestModel"
string modelUrl=""
Modelo do clienteModelo = novo ModelClient(Binding, novo EndpointAdwww(modelUrl));
- /código#
Para configurar uma ligação, o programa tem de estar aberto antes de executar o código. Após uma ligação bem-sucedida, são apresentadas informações sobre o programa na consola e é criado um novo modelo com um nome definido pelo utilizador no RFEM/RSTAB.
Definição de objetos de base
No próximo passo, pode definir o material e a secção da viga contínua. É importante que a descrição corresponda ao nome guardado na biblioteca de materiais ou secções do RFEM.
- code.csharp#
material materialConcrete = novo material
{
- nº = 1,
- nome = "C20/25 | EN 1992-1-1:2004/A1:2014"
};
secção secçãoRectângulo = nova secção
{
- nº = 1,
- material = materialConcrete.no,
- materialspecificado = verdadeiro,
- tipo = "section_type.TYPE_Paramétricas_MASSIVE_I,
- tipoEspecificado = verdadeiro,
- parametrization_type =section_parametrization_type.Parametrização_MASSIVE_I__MASSIVE_RECTANGLE__R_M1,
- parametrização_typeSpecified = verdadeiro,
- nome = "R_M1 0,5/1,0"
};
- /código#
Com a ajuda dos laços, vários objetos (nós, linhas, barras) são criados e organizados em listas. Os nós são definidos dependendo do número de vãos definido pelo utilizador e transferidos para a lista "lineDefinitionNodes". A lista será posteriormente utilizada para criar linhas baseadas nos seus nós de definição. Ao criar um modelo no RSTAB, a lista é utilizada para definir as barras com base nos seus nós de definição. No RFEM, as barras são definidas através de linhas.
- code.sharp#
OrdenadoList
int[] linearDefinitionNodes = novo int[spanNumber + 1];
int nóId = 1;
duplo xVetor = 0,0;
for (int i = 0; i < spanNumber + 1; i++)
{
- nó novoNó = novo()
- {
- no = noId,
- coordenadas = novo vector_3d () { x = xVector, y = 0,0, z = 0,0 },
- Coordenada_system_type = node_coordinate_system_type.COUNDINATE_SYSTEM_Cartesian,
- Coordenada_system_typeSpecified = verdadeiro,
- comentário = "parte de betão"
- };
- nós.Add(nodeId, novoNode);
- linearDefinitionNodes[i] = nodeId;
- xVetor = xVetor + vão;
- nóId++;
}
https://www.dlubal.com/pt
int ID dalinha = 1;
OrdenadoList
for (int i = 0; i < spanNumber; i++)
{
- linha novaLinha = nova()
- {
- no = linearId,
- definição_nodes = novo int[] { linearDefinitionNodes[i], linearDefinitionNodes[i + 1] },
- comentário = "linhas para vigas",
- tipo = linear_type.TYPE_POLYLINE,
- tipoEspecificado = verdadeiro,
- };
- linhas.Add(lineId, novaLinha);
- iddelinha++;
}
- /código#
Após a criação de todos os objetos de base, são definidos dois apoios de nós diferentes. O apoio nodal no primeiro nó deve ser fixo; os restantes apoios devem ser dimensionados como rolos na direção X. Os nós de definição para os vários tipos de apoio estão resumidos numa lista separada.
- code.csharp#
apoio_nodal apoio1 = novo ()
{
- nº = 1,
- nós = suportadoNodes1.ToArray(),
- mola = novo vector_3d() { x = duplo.PositiveInfinity, y = duplo.PositiveInfinity, z = duplo.PositiveInfinity },
- rotaal_restraint = novo vector_3d() { x = duplo.PositiveInfinity, y = 0,0, z = duplo.PositiveInfinity }
};
apoio_nodal support2 =new()
{
- no = 2,
- nós = suportadoNodes2.ToArray(),
- mola = novo vector_3d() { x = 0,0, y = duplo.PositiveInfinity, z = duplo.PositiveInfinity },
- rotaal_restraint = novo vector_3d() { x = 0,0, y = 0,0, z = duplo.PositiveInfinity }
};
nodalSupports.Add(apoio1);
nodalSupports.Add(apoio2);
- /código#
Transferência de objetos para o RFEM
Para que os objetos criados estejam disponíveis no RFEM/RSTAB, estes devem primeiro ser transferidos para o programa. Isto é realizado entre as duas funções "model.begin_modification" e "model.end_modification" utilizando funções específicas do objeto da biblioteca HLF. Todos os objetos de um tipo são transferidos para o programa através de loops folearning.
- code.csharp#
try
{
- model.begin_modification("Geometria");
- model.set_material(materialConcrete);
- model.set_section(sectionRectangle);
- folearning (KeyValuePair
nodeItem em nós) - {
- model.set_node(nodeItem.Value);
- }
- fo Construção (KeyValuePair
LineItem em linhas) - {
- model.set_line(lineItem.Value);
- }
- folearning (KeyValuePair
MemberItem em barras) - {
- model.set_member(memberItem.Value)
- }
- folearning (var nodalSupport em nodalSupports)
- {
- model.set_nodal_support(nodalSupport);
- }
}
captura (exceção de exceção)
{
- model.cancel_modification();
- logger.Error(exceção, "Ocorreu um problema ao criar a geometria" + excessão.Message);
- arrasto;
}
finally
{
- try
- {
- model.finish_modification();
- }
- captura (exceção de exceção)
- {
- logger.Error(exceção, "Ocorreu um erro ao terminar a modificação da geometria\n" + excessão.Message + "\n");
- model.reset();
- }
}
- /código#
Definição de cargas
Os casos de carga, as combinações de carga e as situações de dimensionamento são criados de forma semelhante aos objetos básicos e depois transferidos para o programa.
Em seguida, a carga da barra especificada anteriormente pelo utilizador pode ser criada:
- code.csharp#
Classificação
int Member_load_id = 1;
for (int i = 0; i < spanNumber; i++)
{
- Member_loadnewMemberLoad =new()
- {
- no = i + 1,
- Members_string = (i + 1).ToString(),
- Members = novo int[] { i + 1 },
- load_distribution = Member_load_load_distribution.LOAD_Distribution_UNIFORM,
- carga_distribuiçãoEspecificada = verdadeiro,
- Valor = MemberCarga * 1000,
- magnitudeEspecificada = verdadeiro,
- load_is_over_total_length = verdadeiro,
- load_is_over_total_lengthSpecified = verdadeiro,
- };
- Member_loads.Add(i + 1,newMemberLoad);
- Member_load_id++;
}
- /código#
Além de cargas uniformemente distribuídas, também são possíveis cargas trapezoidais e parabólicas.
Cálculo e saída de resultados
A função model.calculate(all) é utilizada para realizar todos os cálculos no RFEM.
Após um cálculo bem-sucedido, os resultados deste exemplo são apresentados na consola. A biblioteca HLF para C#também permite exportar os resultados em ficheiros XML ou CSV.
Finalmente, a função model.save() pode ser utilizada para guardar o modelo no caminho do ficheiro indicado entre parênteses:
- code.csharp#
Guardar modelo antes de fechar
model.save(CurrentDirectory +@"\testmodels");
aplicação.close_model(0, verdadeiro);
- /código#
Conclusão
No exemplo apresentado, as vantagens e a facilidade de utilização da biblioteca C#são tornadas claras. A estrutura pode ser adaptada rapidamente através de entradas definidas pelo utilizador, o que poupa muito tempo ao introduzir sistemas estruturais no RFEM 6 e no RSTAB 9. A biblioteca HLF para C#também oferece muitas outras funções, permitindo a criação de sistemas complexos.