API de servicio web tutorial en VBA

Artículo técnico sobre el tema del análisis de estructuras usando Dlubal Software

  • Base de conocimientos

Artículo técnico

Este artículo fue traducido por el Traductor de Google

Ver texto original

Webservice ist eine Kommunikation zwischen Maschinen beziehungsweise Programmen. Diese Kommunikation wird über das Netzwerk bereitgestellt und kann daher von jedem Programm, welches Zeichenketten über das HTTP-Protokoll verschicken und empfangen kann, genutzt werden. RFEM 6 y RSTAB 9 proporcionan una interfaz basada en estos servicios web multiplataforma. Este tutorial muestra los conceptos básicos sobre el uso del lenguaje de programación VBA.

Grundlagen Webservice API am Beispiel von VBA

Para el formateo de la cadena, se usa el formato XML según las especificaciones del protocolo SOAP. La siguiente consulta sirve como ejemplo:

<Sobre xmlns = "http://schemas.xmlsoap.org/soap/envelope/">
<Cuerpo>
<get_active_model xmlns = "http://www.dlubal.com/rfem.xsd"/>
</Body>
</sobre>

Ein typisches Element der XML-Formatierung ist der Beginn eines Abschnitts mit dem Zeichen "<" Danach folgt ein Bezeichner und, falls keine weiteren untergeordneten Elemente folgen, es wird der Abschnitt mit "/>" beendet. Un ejemplo es la tercera línea:

<get_active_model xmlns = "http://www.dlubal.com/rfem.xsd"/>

Si hay subelementos, comienza con "<", el comando y ">" y termina con "</", el comando y ">". El ejemplo apropiado es la sección "Cuerpo":

<Cuerpo>
<get_active_model xmlns = "http://www.dlubal.com/rfem.xsd"/>
</Body>

El formato con espacios y saltos de línea se usa aquí sólo con fines ilustrativos. Esto no es necesario para la transferencia. Los elementos "Cuerpo" y "Envolvente" son elementos estándar para la transferencia y se utilizan para cada comando.

Todos los comandos disponibles se pueden leer utilizando la interfaz WSDL. Es gibt Software, mit deren Hilfe daraus Listen erzeugt werden können. Uno de estos programas es SoapUI. Für die API von RFEM 6 gibt es zwei Listen, die Befehle für die Anwendung und die für das Modell. Ambas listas se pueden descargar al final de este artículo.

Dado que los comandos se envían a través de HTTP, se requieren direcciones URL para el direccionamiento. La dirección predeterminada de las aplicaciones RSTAB/RFEM es "http://localhost: 8081/" y se puede cambiar en la configuración del programa. A los modelos abiertos se les asignan direcciones en orden ascendente para que el primer modelo abierto tenga la dirección "http://localhost: 8082/". Para obtener la dirección del modelo activo, se envía el comando "get_active_model". Una respuesta correspondiente de RFEM 6 se ve así:

<? xml version = "1.0"?>
<Sobre xmlns: soap = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns: soap-enc = "http://schemas.xmlsoap.org/soap/encoding/"
xmlns: xsd = "http://www.w3.org/2001/XMLSchema"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance">
<jabón: cuerpo>
<n1: get_active_modelResponse
xmlns: n1 = "http://www.dlubal.com/rfem.xsd">
<valor>
                http://127.0.0.1:8082/
</valor>
</n1: get_active_modelResponse>
</soap: Body>
</soap: Sobre>

Los detalles adicionales de la sección "Sobre" (alemán: Umschlag/Briefumschlag) sowie die vorangestellte Zeile "<?xml version="1.0"?>" sollen zunächst die verwendeten Standards aufzeigen und hier nicht weiter erörtert werden. En cualquier caso, puede ver que los elementos "Envelope" y "Body" se utilizan de nuevo. Innerhalb von "Body" steckt die Antwort von RFEM 6 durch den Befehlsnamen "get_active_model" und dem angehängten Wort "Response". El contenido de esta respuesta es un "valor", es decir, la dirección del modelo activo. Además, RFEM ahora está bloqueado para un mayor acceso.

En el siguiente ejemplo, queremos crear una barra con dos apoyos en nudo y una carga. Para poder comunicarse con RFEM a través de VBA, se requieren los siguientes objetos:

solicitud como MSXML2.XMLHTTP60
respuesta como MSXML2.DOMDocument

Das Objekt XMLHTTP60 hat eine integrierte Funktion zum Senden einer HTTP-Anfrage an eine URL und wird daher für die Anfrage verwendet. La respuesta se puede evaluar utilizando el documento DOM. El siguiente ejemplo combina la solicitud "get_active_model" mostrada anteriormente con los comandos utilizados en VBA:

' obtener la URL del modelo activo con el comando "get_active_model"
str_envelope =
"<Sobre xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Cuerpo>" & _
"<get_active_model xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
"</Body>" & _
"</Envelope>"

' abrir solicitud y enviarla
request.Open "Publicar", "http://localhost: 8081/", Falso
request.Send (str_envelope)

' obtiene la respuesta y la transforma en un objeto xml
response.LoadXML (request.responseText)

Primero, la solicitud se guarda en formato XML en la variable "str_envelope" y la solicitud se abre en RFEM utilizando el método "Open" de la variable "request". El contenido de la variable "str_envelope" ahora se puede enviar utilizando el método "Enviar". Se puede acceder a la respuesta utilizando el método "ResponseText". En este caso específico, esto se importa directamente a través del método "LoadXML" de la variable "respuesta".

La variable "respuesta" del tipo DOMDocuments tiene el método LoadXML y, por lo tanto, puede reconocer el formato XML. La ventaja es que el tipo DOMDocuments también proporciona el método GetElementsByTagName. Esto le permite extraer elementos directamente del código. A continuación, se amplía el código anterior para que esté disponible la dirección URL del modelo:

' obtener http-status
status = request.status
Si el estado <> "200" Entonces
MsgBox "get_active_model: Envío no satisfactorio - & quot; & quot; & quot; response.Text
Exit Sub
End If

url_model = response.GetElementsByTagName ("valor") (0) .Text

Antes de leer la URL, se puede comprobar el estado de la respuesta. Son códigos de estado HTTP estandarizados. El estado "200" significa que la transferencia fue "correcta". Después de esta consulta, la URL del modelo se almacena en la cadena url_model. Para esto, se busca el elemento "valor" en la respuesta XML. Si una respuesta contiene varios elementos, todos los valores se almacenan dentro de la sección "valor", de forma que no es posible una evaluación con el identificador "valor", pero se tratan los subelementos de "valor". Descubra más en el ejemplo práctico. En el caso de la dirección del modelo, el único valor devuelto es la URL, por lo que "valor" es correcto aquí.

Ejemplo práctico en VBA

Ahora que conocemos todos los elementos básicos, sigue un ejemplo simple. Queremos crear una viga en dos pilares a los que se pueda aplicar una carga en la barra.

Primero, se definen e inicializan las variables descritas anteriormente:

' definir variables
Solicitud de atenuación como MSXML2.XMLHTTP60
Respuesta atenuada como MSXML2.DOMDocument60

Dim str_envelope como cadena
Atenuar url_app como cadena
Atenuar url_model como cadena

' variables de inicio
Establecer solicitud = Nuevo MSXML2.XMLHTTP60

Establecer respuesta = Nuevo MSXML2.DOMDocument60
Con respuesta
.async = Falso
.preserveWhiteSpace = False
.validateOnParse = Falso
.resolveExternals = Falso
' Usar la funcionalidad completa de XPath
.SetProperty "SelectionLanguage", "XPath"
' Agregar espacios de nombres específicos para trabajar con rutas
.SetProperty "SelectionNamespaces", "xmlns: soap =" "http://www.w3.org/2003/05/soap-envelope" "" & _
"xmlns: xsd =" "http://www.dlubal.com/rfem.xsd" "" & _
"xmlns: n1 =" "urn: schemas-microsoft-com: conjunto de filas" "" & _
"xmlns =" "http://www.dlubal.com/rfem.xsd" ""
Terminar con

url_app = "http://localhost: 8081/"

Además de las variables "solicitud" y "respuesta", se crea la cadena "str_envelope" para la solicitud y "url_app" y "url_model" para las direcciones de la aplicación y el modelo. Durante la inicialización, las especificaciones conocidas del protocolo SOAP se pueden transferir para evaluar el formato XML de la respuesta. La dirección del modelo se obtendrá más tarde, pero se debe especificar la dirección de la aplicación. Como ya se mencionó, se debe introducir la dirección predeterminada "http://localhost: 8081/".

El siguiente paso es probar la conexión con la aplicación. Para esta prueba, se consulta la información estándar de la aplicación utilizando el comando "get_information":

' compruebe la URL de la aplicación con el comando "get_information"
str_envelope = "<Sobre xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Cuerpo>" & _
"<get_information xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
"</Body>" & _
"</Envelope>"

' abrir solicitud y enviarla
request.Open "Publicar", url_app, Falso
request.Send (str_envelope)

' obtiene la respuesta y la transforma en un objeto xml
response.LoadXML (request.responseText)

' obtener http-status
status = request.Status
Si el estado <> "200" Entonces
MsgBox "get_information: Envío no satisfactorio - & quot; & quot; & quot; response.Text
Exit Sub
End If

' leer la información de la aplicación
Dim str1 como cadena
str1 = ""
str1 = str1 & response.GetElementsByTagName ("nombre") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("tipo") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("versión") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("language_name") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("language_id") (0) .Text

MsgBox str1, vbInformation, "Response to" "get_information" "request"

Como ya se describió en la primera parte, la solicitud con formato XML se prepara y se guarda en "str_envelope". "request.Open" abre la conexión con la aplicación. La palabra clave "Publicar" representa el envío de la solicitud. El tercer parámetro se establece en "true" y, por lo tanto, se realiza una transmisión síncrona. Luego, "request.Send" envía la cadena preparada.

Después de la transferencia, la respuesta se guarda en "respuesta" y se verifica con "request.Status" para ver si la solicitud se realizó correctamente. Der Status wird dabei von RFEM vergeben, sodass diese bei einer fehlerhaften Anfrage, zum Beispiel einem unbekannten Befehl, einen Fehler zurückgibt. Si el estado no es "200", el programa se interrumpe y el error se muestra en una ventana (MsgBox).

Si no se han producido errores, ahora se puede leer la diversa información transferida usando "GetElementsByTagName". En el ejemplo específico, la información se muestra en una ventana.

Los siguientes elementos son muy similares, por lo que solo se describen las características especiales (el código fuente completo está disponible para descargar). Para configurar una viga en dos pilares con una carga en la barra, se requieren las siguientes funciones:

  1. Nodo - set_node
  2. Línea - set_line
  3. Material - set_material
  4. Sección - set_section
  5. Miembro - set_member
  6. Soporte en nudo - set_nodal_support
  7. Parámetros de cálculo - set_static_analysis_settings
  8. Caso de carga - set_load_case
  9. Carga de barra - set_member_load

Como la mayoría de los demás, la función "set_node" tiene muchos parámetros, pero generalmente no son necesarios. En la lista de comandos ya mencionada del modelo de RFEM, puede ver la variedad de parámetros. Sobre todo son importantes los parámetros que no están marcados como "opcionales", ya que deben completarse en cada caso. En el ejemplo, se transfieren los siguientes parámetros:

begin_modification (url_model)

' establecer el nudo 1 en [0,0,0] con el comando "set_node"
str_envelope =
"<Sobre xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Cuerpo>" & _
"<set_node xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valor xmlns =" "" ">" & _
"<no> 1 </no>" & _
"<type> TYPE_STANDARD </type>" & _
"<coordinate_1> 0 </coordinate_1>" & _
"<coordinate_2> 0 </coordinate_2>" & _
"<coordinate_3> 0 </coordinate_3>" & _
"</valor>" & _
"</set_node> & amp; _
"</Body>" & _
"</Envelope>"

Solo el número de nudo no es opcional y el resto se puede asignar. Además de los parámetros posibles, la lista de comandos también muestra listas por tipos. En este caso específico, actualmente son posibles cinco tipos diferentes. Se ha seleccionado el tipo predeterminado "TYPE_STANDARD". El primer nudo que se muestra aquí se crea en la ubicación (0; 0; 0), el segundo nudo en (5.5; 0; 0). Los valores para los números decimales son los siguientes:

...
"<valor xmlns =" "" ">" & _
"<no> 2 </no>" & _
"<type> TYPE_STANDARD </type>" & _
"<coordinate_1> 5.5 </coordinate_1>" & _
"<coordinate_2> 0 </coordinate_2>" & _
"<coordinate_3> 0 </coordinate_3>" & _
"</valor>" & _
...

Las listas son otra característica especial. La línea necesita dos nudos cuyos números se pueden transferir como una lista. Los elementos de una lista, como "definition_nodes", están separados por espacios:

...
"<set_line xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valor xmlns =" "" ">" & _
"<no> 1 </no>" & _
"<type> TYPE_POLYLINE </type>" & _
"<definition_nodes> 1 2 </definition_nodes>" & _
"</valor>" & _
"</set_line>" & _
...

Para poder crear la barra, se debe crear una sección, que a su vez requiere un material. Las secciones y los materiales se pueden usar desde la base de datos interna. Por lo tanto, es suficiente especificar un identificador conocido. Para el material, el identificador es "S235" y la sección tiene el nombre "IPE 300":

...
"<set_section xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valor xmlns =" "" ">" & _
"<no> 1 </no>" & _
"<material> 1 </material>" & _
"<tipo> TYPE_STANDARDIZED_STEEL </type>"
"<nombre> IPE 300 </name>" & _
"</valor>" & _
"</set_section> & amp; _
...

Para comprobar si un nombre como "IPE 300" es válido, puede utilizar la entrada en la interfaz gráfica de usuario.

Para introducir la barra en sí, no se requieren más conocimientos, pero para introducir un apoyo fijo, tiene que definir una rigidez elástica "infinita". La palabra clave "INF" se utiliza para la transferencia:

...
"<set_nodal_support xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valor xmlns =" "" ">" & _
"<no> 1 </no>" & _
"<nodos> 1 </nodos>" & _
"<spring_x> INF </spring_x>" & _
"<spring_y> INF </spring_y>" & _
"<spring_z> INF </spring_z>" & _
"<Coacción_rotacional_x> INF </i> Coacción_rotacional_x>" & _
"<Coacción_de_rotación_y> 0 </b> Coacción_de_rotación_y>" & _
"<Coacción_de_rotación_z> INF </b>
"</valor>" & _
"</set_nodal_support> & amp; _
...

La creación del caso de carga y los parámetros de cálculo no requiere ningún conocimiento adicional. La última peculiaridad es un valor adicional al crear la carga, ya que se debe especificar fuera del área "<valor>". En el caso de una carga en barra, el caso de carga correspondiente se debe transferir allí:

...
"<set_member_load xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<load_case_no xmlns =" "" "> 1 </load_case_no>" & _
"<valor xmlns =" "" ">" & _
"<no> 1 </no>" & _
"<load_type> LOAD_TYPE_FORCE </load_type>" & _
"<members> 1 </members>" & _
"<load_distribution> LOAD_DISTRIBUTION_UNIFORM </load_distribution>" & _
"<load_direction> LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE </load_direction>" & _
"<magnitud> 1000 </magnitud>" & _
"</valor>" & _
"</set_member_load> & amp; _
...

Ergänzend dazu sei erwähnt, dass die Reihenfolge der Elemente innerhalb des Bereichs "value" keine Rolle spielt, außerhalb aber schon. Der angegebene Lastfall muss also vor dem Bereich "value" stehen.

Además de las funciones anteriores para crear y exportar datos, hay dos funciones especiales que se presentan aquí. Si se transfieren elementos al programa, el programa pasa automáticamente al modo "Modificación". El programa comprueba los nuevos elementos y los integra. Wenn mehrere neue Elemente angelegt werden sollen, ist es daher sinnvoll, das Programm für diese Zeit in diesem Bearbeitungsmodus zu lassen, damit die Abarbeitung schneller ist. Las funciones "begin_modification" y "finish_modification" están disponibles para este propósito. En el ejemplo, se llama "begin_modification" antes de crear el primer nudo y "finish_modification" al final después de crear el caso de carga. Ambas funciones también se crearon como funciones de VBA en el programa. Die Funktionen sind eigenständig und daher werden innerhalb der Funktionen erneut die Variablen "request" und "response" angelegt. Sin embargo, como no se requieren elementos nuevos para esto, no se describirán más aquí. Interessant ist der Vergleich mit und ohne die Nutzung dieser Funktionen, welcher immer einen Geschwindigkeitsunterschied bringen wird.

Resumen

Die WebService-API ist ein mächtiges Werkzeug für RFEM und RSTAB. La transferencia simple basada en HTTP permite la implementación de la interfaz en muchos lenguajes de programación, no solo en VBA como se muestra aquí, y la programación multiplataforma es posible.

Autor

Dipl.-Ing. Thomas Günthel

Dipl.-Ing. Thomas Günthel

Soporte técnico

El Sr. Günthel proporciona asistencia técnica a nuestros clientes.

Palabras clave

Servicio web API COM

Enlaces

  • Vistas 555x
  • Actualizado 19. abril 2022

Contacte con nosotros

Contacta con Dlubal

¿Tiene más preguntas o necesita un consejo? Póngase en contacto con nosotros por teléfono, correo electrónico, chat o foro, o encuentre soluciones sugeridas y consejos útiles en nuestra página de preguntas frecuentes disponible las 24 horas, los 7 días de la semana.

+34 911 438 160

[email protected]

Curso de formación | Español

RFEM 6 | Fundamentos básicos

Curso de formación en línea 25. agosto 2022 15:00 - 17:00 CEST

Cursos de formación en línea | Inglés

Eurocódigo 3 | Estructuras de acero según EN 1993-1-1

Curso de formación en línea 8. septiembre 2022 9:00 - 13:00 CEST

Modelado y cálculo de estructuras de acero RFEM 6 y RSTAB 9

Modelado y cálculo de estructuras de acero en RFEM 6 y RSTAB 9

Webinar 8. septiembre 2022 16:00 - 17:10 CEST

Cursos de formación en línea | Inglés

Eurocódigo 5 | Estructuras de madera según EN 1995-1-1

Curso de formación en línea 15. septiembre 2022 9:00 - 13:00 CEST

Cursos de formación en línea | Inglés

RFEM 6 | Análisis dinámico y diseño sísmico según EC 8

Curso de formación en línea 21. septiembre 2022 9:00 - 13:00 CEST

Cursos de formación en línea | Inglés

RFEM 6 | Fundamentos básicos

Curso de formación en línea 7. octubre 2022 9:00 - 13:00 CEST

Cursos de formación en línea | Inglés

RFEM 6 | Estudiantes | Introducción al cálculo de barras

Curso de formación en línea 12. octubre 2022 16:00 - 19:00 CEST

Cursos de formación en línea | Inglés

Eurocódigo 2 | Estructuras de hormigón según EN 1992-1-1

Curso de formación en línea 18. octubre 2022 9:00 - 13:00 CEST

Cursos de formación en línea | Inglés

RSECTION | Estudiantes | Introducción a la teoría de la fuerza

Curso de formación en línea 19. octubre 2022 16:00 - 19:00 CEST

Cursos de formación en línea | Inglés

RFEM 6 | Estudiantes | Introducción a FEM

Curso de formación en línea 27. octubre 2022 16:00 - 19:00 CEST

Cursos de formación en línea | Inglés

RFEM 6 | Estudiantes | Introducción al diseño de acero

Curso de formación en línea 10. noviembre 2022 16:00 - 17:00 CET

Cursos de formación en línea | Inglés

Eurocódigo 3 | Estructuras de acero según EN 1993-1-1

Curso de formación en línea 17. noviembre 2022 9:00 - 13:00 CET

Cursos de formación en línea | Inglés

RFEM 6 | Estudiantes | Introducción al diseño de hormigón armado

Curso de formación en línea 18. noviembre 2022 16:00 - 17:00 CET

Cursos de formación en línea | Inglés

RFEM 6 | Análisis dinámico y diseño sísmico según EC 8

Curso de formación en línea 23. noviembre 2022 9:00 - 13:00 CET

Cursos de formación en línea | Inglés

Eurocódigo 5 | Estructuras de madera según EN 1995-1-1

Curso de formación en línea 8. diciembre 2022 9:00 - 13:00 CET

RFEM 6
Recibidor con cubierta abovedada

Programa principal

El programa de análisis estructural RFEM 6 es la base de un sistema de software modular.
El programa principal RFEM 6 se usa para definir estructuras, materiales y cargas de sistemas estructurales planos y espaciales compuestos por placas, muros, láminas y barras.
El programa también puede diseñar estructuras combinadas, así como elementos sólidos y de contacto.

Precio de la primera licencia
3.990,00 USD
RSTAB 9
software de análisis de estructuras y entramados reticulares

Programa principal

El programa de análisis y diseño de estructuras de pórticos y entramados RSTAB 9 contiene una gama de funciones similar al software RFEM de elementos finitos, prestando especial atención a los pórticos y entramados.
Por lo tanto, es muy fácil de usar y durante muchos años ha sido la mejor opción para el análisis estructural de estructuras de vigas compuestas de acero, hormigón, madera, aluminio y otros materiales.

Precio de la primera licencia
2.550,00 USD