Tutorial API del servizio web in VBA

Articolo tecnico sul tema Analisi strutturale con Dlubal Software

  • Knowledge Base

Articolo tecnico

Questo articolo è stato tradotto da Google Traduttore

Visualizza il testo originale

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 e RSTAB 9 forniscono un'interfaccia basata su questi servizi web multipiattaforma. Questo tutorial mostra le basi utilizzando il linguaggio di programmazione VBA.

Grundlagen Webservice API am Beispiel von VBA

Per la formattazione della stringa si utilizza il formato XML secondo le specifiche del protocollo SOAP. La seguente query serve come esempio:

<Inviluppo xmlns = "http://schemas.xmlsoap.org/soap/envelope/">
<Corpo>
<get_active_model xmlns = "http://www.dlubal.com/rfem.xsd"/>
</Body>
</Busta>

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 esempio è la terza riga:

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

Se ci sono sottoelementi, inizia con "<", il comando e ">" e termina con "</", il comando e ">". L'esempio appropriato è la sezione "Corpo":

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

La formattazione con spazi e interruzioni di riga viene utilizzata solo a scopo illustrativo. Questo non è necessario per il trasferimento. Gli elementi "Corpo" e "Inviluppo" sono elementi standard per il trasferimento e vengono utilizzati per ciascun comando.

Tutti i comandi disponibili possono essere letti utilizzando l'interfaccia WSDL. Es gibt Software, mit deren Hilfe daraus Listen erzeugt werden können. Uno di questi software è SoapUI. Für die API von RFEM 6 gibt es zwei Listen, die Befehle für die Anwendung und die für das Modell. Entrambi gli elenchi possono essere scaricati alla fine di questo articolo.

Poiché i comandi vengono inviati tramite HTTP, gli indirizzi URL sono necessari per l'indirizzamento. L'indirizzo predefinito delle applicazioni RSTAB/RFEM è "http://localhost: 8081/" e può essere modificato nelle impostazioni del programma. Ai modelli aperti vengono assegnati gli indirizzi in ordine crescente in modo che il primo modello aperto abbia l'indirizzo "http://localhost: 8082/". Per ottenere l'indirizzo del modello attivo, viene inviato il comando "get_active_model". Una risposta corrispondente da RFEM 6 si presenta così:

<? versione xml = "1.0"?>
<Inviluppo 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">
<sapone: Corpo>
<n1: get_active_modelResponse
xmlns: n1 = "http://www.dlubal.com/rfem.xsd">
<valore>
                http://127.0.0.1:8082/
</value>
</n1: get_active_modelResponse>
</soap: Corpo>
</soap: Busta>

I dettagli aggiuntivi della sezione "Busta" (tedesco: Umschlag/Briefumschlag) sowie die vorangestellte Zeile "<?xml version="1.0"?>" sollen zunächst die verwendeten Standards aufzeigen und hier nicht weiter erörtert werden. In ogni caso, è possibile vedere che gli elementi "Inviluppo" e "Corpo" vengono utilizzati di nuovo. Innerhalb von "Body" steckt die Antwort von RFEM 6 durch den Befehlsnamen "get_active_model" und dem angehängten Wort "Response". Il contenuto di questa risposta è un "valore", ovvero l'indirizzo del modello attivo. Inoltre, RFEM è ora bloccato per un ulteriore accesso.

Nell'esempio seguente, vogliamo creare un'asta con due vincoli esterni nodali e un carico. Per poter comunicare con RFEM tramite VBA, sono necessari i seguenti oggetti:

richiesta come MSXML2.XMLHTTP60
risposta come 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 risposta può quindi essere valutata utilizzando il documento DOM. Il seguente esempio combina la richiesta "get_active_model" mostrata in precedenza con i comandi utilizzati in VBA:

' ottieni l'URL del modello attivo con il comando "get_active_model"
str_envelope =
"<Inviluppo xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Corpo>" & _
"<get_active_model xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
"</Body>" & _
"</Busta>"

' apri la richiesta e inviala
richiesta.Apri "Post", "http://localhost: 8081/", False
richiesta.Invia (str_envelope)

' ottieni la risposta e trasformala in un oggetto xml
response.LoadXML (request.responseText)

Innanzitutto, la richiesta viene salvata in formato XML nella variabile "str_envelope" e la richiesta viene aperta in RFEM utilizzando il metodo "Apri" della variabile "request". Il contenuto della variabile "str_envelope" può ora essere inviato utilizzando il metodo "Invia". È quindi possibile accedere alla risposta utilizzando il metodo "ResponseText". In questo caso specifico, questo viene importato direttamente tramite il metodo "LoadXML" della variabile "response".

La variabile "response" del tipo DOMDocuments ha il metodo LoadXML e può quindi riconoscere la formattazione XML. Il vantaggio è che il tipo DOMDocuments fornisce anche il metodo GetElementsByTagName. Ciò consente di estrarre gli elementi direttamente dal codice. Di seguito, il codice precedente viene esteso in modo che l'indirizzo URL del modello sia disponibile:

' ottieni lo stato http
stato = richiesta.stato
Se lo stato <> "200" Allora
MsgBox "get_active_model: Invio non riuscito - & quot; &quot; &quot; risposta.Testo
Esci da sotto
End If

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

Prima di leggere l'URL, è possibile verificare lo stato della risposta. Sono codici di stato HTTP standardizzati. Lo stato "200" significa che il trasferimento è stato "OK". Dopo questa query, l'URL del modello viene memorizzato nella stringa url_model. Per questo, l'elemento "valore" viene cercato nella risposta XML. Se una risposta contiene più elementi, tutti i valori sono memorizzati nella sezione "valore", in modo che non sia possibile alcuna valutazione con l'identificatore "valore", ma i sottoelementi di "valore" siano indirizzati. Scopri di più nell'esempio pratico. Nel caso dell'indirizzo del modello, l'unico valore restituito è l'URL, quindi "valore" ha successo qui.

Esempio pratico in VBA

Ora che conosciamo tutti gli elementi di base, segue un semplice esempio. Vogliamo creare una trave su due colonne a cui può essere applicato un carico dell'asta.

Innanzitutto, le variabili sopra descritte sono definite e inizializzate:

' definisci variabili
Richiesta di attenuazione come MSXML2.XMLHTTP60
Risposta fioca As MSXML2.DOMDocument60

Dim str_envelope As String
Dim url_app As String
Dim url_model As String

' variabili iniziali
Imposta richiesta = Nuovo MSXML2.XMLHTTP60

Imposta risposta = Nuovo MSXML2.DOMDocument60
Con risposta
.asincrono = Falso
.preserveWhiteSpace = False
.validateOnParse = False
.resolveExternals = False
' Utilizza la funzionalità completa di XPath
.SetProperty "SelectionLanguage", "XPath"
' Aggiungi spazi dei nomi specifici per lavorare con i percorsi
.SetProperty "SelectionNamespaces", "xmlns: soap =" "http://www.w3.org/2003/05/soap-envelope" "" & _
"xmlns: xsd =" "http://www.dlubal.com/rfem.xsd" "" & _
"xmlns: n1 =" "urn: schemi-microsoft-com: set di righe" "" & _
"xmlns=" "http://www.dlubal.com/rfem.xsd" ""
Termina con

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

Oltre alle variabili "request" e "response", viene creata la stringa "str_envelope" per la richiesta e "url_app" e "url_model" per gli indirizzi dell'applicazione e del modello. Durante l'inizializzazione, le specifiche note del protocollo SOAP possono essere trasferite per valutare la formattazione XML della risposta. L'indirizzo del modello verrà recuperato in seguito, ma è necessario specificare l'indirizzo dell'applicazione. Come già accennato, è necessario inserire l'indirizzo predefinito "http://localhost: 8081/".

Il prossimo passo è testare la connessione all'applicazione. Per questo test, le informazioni standard dell'applicazione vengono richieste utilizzando il comando "get_information":

' controlla l'URL dell'applicazione con il comando "get_information"
str_envelope = "<Envelope xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Corpo>" & _
"<get_information xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
"</Body>" & _
"</Busta>"

' apri la richiesta e inviala
request.Open "Post", url_app, False
richiesta.Invia (str_envelope)

' ottieni la risposta e trasformala in un oggetto xml
response.LoadXML (request.responseText)

' ottieni lo stato http
stato = richiesta.Stato
Se lo stato <> "200" Allora
MsgBox "get_information: Invio non riuscito - & quot; &quot; &quot; risposta.Testo
Esci da sotto
End If

' leggi le informazioni sull'applicazione
Dim str1 As String
str1 = ""
str1 = str1 & response.GetElementsByTagName ("nome") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("tipo") (0) .Text & amp; vbLf
str1 = str1 & response.GetElementsByTagName ("versione") (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, "Risposta a" "get_information" "richiesta"

Come già descritto nella prima parte, la richiesta in formato XML viene preparata e salvata in "str_envelope". "request.Open" apre la connessione all'applicazione. La parola chiave "Post" sta per l'invio della richiesta. Il terzo parametro è impostato su "true" e quindi viene eseguita una trasmissione sincrona. Quindi, "request.Send" invia la stringa preparata.

Dopo il trasferimento, la risposta viene salvata in "risposta" e verificata con "request.Status" per verificare se la richiesta ha avuto successo. Der Status wird dabei von RFEM vergeben, sodass diese bei einer fehlerhaften Anfrage, zum Beispiel einem unbekannten Befehl, einen Fehler zurückgibt. Se lo stato non è "200", il programma viene interrotto e l'errore viene visualizzato in una finestra (MsgBox).

Se non si sono verificati errori, le varie informazioni trasferite possono ora essere lette utilizzando "GetElementsByTagName". Nell'esempio specifico, le informazioni vengono quindi visualizzate in una finestra.

I seguenti elementi sono molto simili, quindi sono descritte solo le caratteristiche speciali (il codice sorgente completo è disponibile per il download). Per impostare una trave su due colonne con un carico dell'asta, sono necessarie le seguenti funzioni:

  1. Nodo - set_node
  2. Linea - set_line
  3. Materiale - set_material
  4. Sezione trasversale - imposta_sezione
  5. Asta - set_asta
  6. Supporto nodale - set_nodal_support
  7. Parametri di calcolo - set_static_analysis_settings
  8. Caso di carico - set_load_case
  9. Carico dell'asta - set_member_load

Come la maggior parte delle altre, la funzione "set_node" ha molti parametri, ma di solito non sono necessari. Nell'elenco dei comandi già menzionato del modello RFEM, è possibile vedere la varietà di parametri. Soprattutto, i parametri che non sono contrassegnati come "opzionali" sono importanti, poiché devono essere completati in ogni caso. Nell'esempio, vengono trasferiti i seguenti parametri:

begin_modification (url_model)

' imposta il nodo 1 su [0,0,0] con il comando "set_node"
str_envelope =
"<Inviluppo xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" ">" & _
"<Corpo>" & _
"<set_node xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valore xmlns =" "" ">" & _
"<no> 1</no>" & _
"<tipo>TIPO_STANDARD</tipo>" & _
"<coordinate_1>0</coordinate_1>" & _
"<coordinate_2>0</coordinate_2>" & _
"<coordinate_3>0</coordinate_3>" & _
"</valore>" & _
"</set_node> &amp; _
"</Body>" & _
"</Busta>"

Solo il numero del nodo non è opzionale e il resto può essere assegnato. Oltre ai possibili parametri, l'elenco dei comandi mostra anche gli elenchi per i tipi. In questo caso specifico, sono attualmente possibili cinque diversi tipi. È stato selezionato il tipo predefinito "TYPE_STANDARD". Il primo nodo mostrato qui viene creato nella posizione (0; 0; 0), il secondo nodo in (5.5; 0; 0). I valori per i numeri decimali sono quindi i seguenti:

...
"<valore xmlns =" "" ">" & _
"<no>2</no>" & _
"<tipo>TIPO_STANDARD</tipo>" & _
"<coordinate_1>5.5</coordinate_1>" & _
"<coordinate_2>0</coordinate_2>" & _
"<coordinate_3>0</coordinate_3>" & _
"</valore>" & _
...

Gli elenchi sono un'altra caratteristica speciale. La linea ha bisogno di due nodi i cui numeri possono essere trasferiti come una lista. Gli elementi di una lista, come "definition_nodes", sono separati da spazi:

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

Per poter creare l'asta, è necessario creare una sezione trasversale che a sua volta richiede un materiale. Le sezioni trasversali e i materiali possono essere utilizzati dal database interno. Pertanto, è sufficiente specificare un identificatore noto. Per il materiale, l'identificatore è "S235" e la sezione trasversale ha il nome "IPE 300":

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

Per verificare se un nome come "IPE 300" è valido, è possibile utilizzare la voce nell'interfaccia utente grafica.

Per inserire l'asta stessa, non sono necessarie ulteriori conoscenze, ma per inserire un vincolo esterno fisso, è necessario definire una rigidezza della molla "infinita". La parola chiave "INF" viene utilizzata per il trasferimento:

...
"<set_nodal_support xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<valore xmlns =" "" ">" & _
"<no> 1</no>" & _
"<nodi> 1</nodi>" & _
"<spring_x>INF</spring_x>" & _
"<spring_y>INF </spring_y>" & _
"<spring_z>INF</spring_z>" & _
"<rotational_restraint_x>INF </rotational_restraint_x>" & _
"<rotational_restraint_y> 0</rotational_restraint_y>" & _
"<rotational_restraint_z>INF </rotational_restraint_z>" & _
"</valore>" & _
"</set_nodal_support> &amp; _
...

La creazione del caso di carico e dei parametri di calcolo non richiede alcuna conoscenza aggiuntiva. L'ultima particolarità è un valore aggiuntivo durante la creazione del carico, perché deve essere specificato al di fuori dell'area "<valore>". Nel caso di un carico dell'asta, il caso di carico corrispondente deve essere trasferito lì:

...
"<set_member_load xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<load_case_no xmlns =" "" "> 1 </load_case_no>" & _
"<valore xmlns =" "" ">" & _
"<no> 1</no>" & _
"<load_type>LOAD_TYPE_FORCE</load_type>" & _
"<aste> 1</aste>" & _
"<load_distribution>LOAD_DISTRIBUTION_UNIFORM</load_distribution>" & _
"<load_direction>LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE</load_direction>" & _
"<magnitudine> 1000</magnitudine>" & _
"</valore>" & _
"</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.

Oltre alle funzioni precedenti per la creazione e l'esportazione dei dati, ci sono due funzioni speciali che vengono presentate qui. Se gli elementi vengono trasferiti al programma, il programma passa automaticamente in modalità "Modifica". Il programma verifica i nuovi elementi e li 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. A tale scopo sono disponibili le funzioni "begin_modification" e "finish_modification". Nell'esempio, "begin_modification" è chiamato prima della creazione del primo nodo e "finish_modification" è chiamato alla fine dopo aver creato il caso di carico. Entrambe le funzioni sono state create anche come funzioni VBA nel programma. Die Funktionen sind eigenständig und daher werden innerhalb der Funktionen erneut die Variablen "request" und "response" angelegt. Tuttavia, poiché non sono necessari nuovi elementi per questo, non saranno descritti ulteriormente qui. Interessant ist der Vergleich mit und ohne die Nutzung dieser Funktionen, welcher immer einen Geschwindigkeitsunterschied bringen wird.

Sommario

Die WebService-API ist ein mächtiges Werkzeug für RFEM und RSTAB. Il semplice trasferimento basato su HTTP consente l'implementazione dell'interfaccia in molti linguaggi di programmazione, non solo in VBA come mostrato qui, e la programmazione multipiattaforma diventa possibile.

Autore

Dipl.-Ing. Thomas Günthel

Dipl.-Ing. Thomas Günthel

Assistenza clienti

Mr. Günthel fornisce supporto tecnico ai nostri clienti.

Parole chiave

Servizio web API COM

Link

Scrivi un commento...

Scrivi un commento...

  • Visualizzazioni 402x
  • Aggiornato 19. aprile 2022

Contattaci

Contatta Dlubal

Ha altre domande o ha bisogno di consigli? Contattaci via telefono, e-mail, chat o forum o trova soluzioni suggerite e consigli utili nella nostra pagina delle domande frequenti disponibile 24 ore su 24, 7 giorni su 7.

+39 051 9525 443

[email protected]

Corso di formazione online | Inglese

RFEM 6 | Base | USA

Corsi di formazione online 20. luglio 2022 12:00 - 16:00 EDT

Corso di formazione online | Inglese

RFEM 6 | Base

Corsi di formazione online 29. luglio 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

Eurocodice 2 | Strutture di calcestruzzo secondo DIN EN 1992-1-1

Corsi di formazione online 12. agosto 2022 8:30 - 12:30 CEST

Corso di formazione online | Inglese

Eurocodice 3 | Strutture di acciaio secondo EN 1993-1-1

Corsi di formazione online 8. settembre 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

Eurocodice 5 | Strutture di legno secondo DIN EN 1995-1-1

Corsi di formazione online 15. settembre 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

RFEM 6 | Analisi dinamica e verifica sismica secondo EC 8

Corsi di formazione online 21. settembre 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

RFEM 6 | Base

Corsi di formazione online 7. ottobre 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

Eurocodice 2 | Strutture in calcestruzzo secondo DIN EN 1992-1-1

Corsi di formazione online 14. ottobre 2022 9:00 - 13:00 CEST

Corso di formazione online | Inglese

Eurocodice 3 | Strutture di acciaio secondo EN 1993-1-1

Corsi di formazione online 17. novembre 2022 9:00 - 13:00 CET

Corso di formazione online | Inglese

RFEM 6 | Analisi dinamica e verifica sismica secondo EC 8

Corsi di formazione online 23. novembre 2022 9:00 - 13:00 CET

Corso di formazione online | Inglese

Eurocodice 5 | Strutture di legno secondo DIN EN 1995-1-1

Corsi di formazione online 8. dicembre 2022 9:00 - 13:00 CET

Simulazione del vento CFD con RWIND 2

Simulazione del vento CFD con RWIND 2

Webinar 29. giugno 2022 14:00 - 15:00 EDT

Corso di formazione online | Inglese

Eurocodice 5 | Strutture in legno secondo DIN EN 1995-1-1

Corsi di formazione online 15. giugno 2022 8:30 - 12:30 CEST

Corso di formazione online | Inglese

RFEM 6 per gli studenti | USA

Corsi di formazione online 8. giugno 2022 13:00 - 16:00 EDT

ADM 2020 Verifica dell'alluminio in\n RFEM 6

ADM 2020 Verifica dell'alluminio in RFEM 6

Webinar 25. maggio 2022 14:00 - 15:00 EDT

Corso di formazione online | Inglese

RFEM 6 | Studenti | Introduzione alle costruzioni in legno

Corsi di formazione online 25. maggio 2022 16:00 - 17:00 CEST

RFEM 6
Ingresso con copertura ad arco

Programma principale

Il programma di analisi strutturale RFEM 6 è la base di un sistema software modulare.
Il programma principale RFEM 6 viene utilizzato per definire strutture, materiali e carichi di sistemi strutturali piani e spaziali costituiti da piastre, pareti, gusci e aste.
Con il programma è possibile progettare anche strutture composte, elementi solidi e di contatto.

Prezzo della prima licenza
3.990,00 USD
RSTAB 9
programma di calcolo per strutture intelaiate

Programma principale

Il programma di analisi e progettazione di strutture intelaiate RSTAB 9 contiene una gamma di funzioni simile a quella del software agli elementi finiti RFEM, con particolare attenzione a strutture intelaiate e travature reticolari.
È quindi molto facile da usare e da molti anni è la scelta migliore per il calcolo e la verifica di strutture intelaiate di acciaio, calcestruzzo, legno, alluminio e altri materiali.

Prezzo della prima licenza
2.550,00 USD