Esta página é útil?
3586x
001806
2023-07-19

Tutorial sobre Serviço web e API em C#

O nosso Serviço web oferece ao utilizador a possibilidade de comunicar com o RFEM 6 e o RSTAB 9 utilizando diversas linguagens de programação. As funções de alto nível (HLF) da Dlubal permitem expandir e simplificar a funcionalidade do Serviço web. Em linha com o RFEM 6 e o RSTAB 9, a utilização do nosso serviço web torna o trabalho do engenheiro mais fácil e rápido. Veja por si mesmo! Este tutorial mostra como utilizar a #library C com um exemplo simples.

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.


Autor

A Eng.ª Göbel presta apoio técnico a clientes da Dlubal Software.

Ligações