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 troca de dados. 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. As propriedades dos objetos' podem ser definidas e especificadas com base nos parâmetros. 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ó:
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"
};
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:
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));
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.
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"
};
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.
OrdenadoList nós = novo 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 linhas = novo 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);
id de linha++;
}
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.
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);
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.
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();
}
}
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:
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++;
}
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:
''Guardar modelo antes de fechar''
model.save(CurrentDirectory +@"\testmodels");
aplicação.close_model(0, verdadeiro);
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.