Tutorial API usługi sieciowej w VBA

Artykuł techniczny na temat analizy statyczno-wytrzymałościowej w programach Dlubal Software

  • Baza informacji

Artykuł o tematyce technicznej

Artykuł został przetłumaczony przez Google Translator

Podgląd oryginalnego tekstu

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. Programy RFEM 6 i RSTAB 9 zapewniają interfejs oparty na tych wieloplatformowych usługach sieciowych. W tym tutorialu pokazano podstawy korzystania z języka programowania VBA.

Grundlagen Webservice API am Beispiel von VBA

Do sformatowania ciągu znaków wykorzystywany jest format XML zgodnie ze specyfikacjami protokołu SOAP. Jako przykład może posłużyć poniższe zapytanie:

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

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. Jednym z przykładów jest trzecia linia:

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

Jeśli istnieją podelementy, zaczyna się na "<", polecenie i "">", a kończy na "</", komendzie i "">". Właściwym przykładem jest sekcja "Body":

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

Formatowanie ze spacjami i podziałami wierszy zostało użyte wyłącznie w celach ilustracyjnych. Nie jest to wymagane w przypadku transferu. Elementy "Body" i "Obwiednia" są elementami standardowymi do przenoszenia i są używane do każdego polecenia.

Wszystkie dostępne polecenia można odczytać za pomocą interfejsu WSDL. Es gibt Software, mit deren Hilfe daraus Listen erzeugt werden können. Jednym z takich programów jest SoapUI. Für die API von RFEM 6 gibt es zwei Listen, die Befehle für die Anwendung und die für das Modell. Obie listy można pobrać na końcu tego artykułu.

Ponieważ polecenia są przesyłane za pomocą protokołu HTTP, do adresowania wymagane są adresy URL. Domyślny adres aplikacji RSTAB/RFEM to "http://localhost: 8081/" i można go zmienić w ustawieniach w programie. Otwieranym modelom przydzielane są adresy w kolejności wzrastającej, dlatego pierwszy otwarty model posiada adres „http://localhost: 8082/”. Aby pobrać adres aktywnego modelu, wysyła się komendę "get_active_model". Odpowiednia odpowiedź z programu RFEM 6 wygląda tak:

<? wersja xml = "1.0"?>
<Koperta xmlns: mydło = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns: mydło-enc = "http://schemas.xmlsoap.org/soap/encoding/"
xmlns: xsd = "http://www.w3.org/2001/XMLSchema"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance">
<mydło:Ciało>
<n1: get_active_modelResponse
xmlns: n1 = "http://www.dlubal.com/rfem.xsd">
<wartość>
                http://127.0.0.1:8082/
</value>
</a>getd_active_modelResponse>
</soap: Ciało>
</soap: Envelope>

Dodatkowe informacje w sekcji „Koperta” (niemiecki: Umschlag/Briefumschlag) sowie die vorangestellte Zeile "<?xml version="1.0"?>" sollen zunächst die verwendeten Standards aufzeigen und hier nicht weiter erörtert werden. W każdym razie widać, że elementy "Envelope" i "Body" są ponownie używane. Innerhalb von "Body" steckt die Antwort von RFEM 6 durch den Befehlsnamen "get_active_model" und dem angehängten Wort "Response". „Wartością”, czyli treścią tej odpowiedzi, jest adres aktywnego modelu. Ponadto program RFEM został zablokowany, aby umożliwić inny dostęp.

W poniższym przykładzie chcemy utworzyć pręt z dwiema podporami węzłowymi i obciążeniem. Aby móc komunikować się z programem RFEM za pomocą VBA, wymagane są następujące obiekty:

żądanie As MSXML2.XMLHTTP60
odpowiedź As 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. Odpowiedź może zostać przeanalizowana na podstawie dokumentu DOM. Poniższy przykład łączy pokazane wcześniej żądanie "get_active_model" z poleceniami używanymi w VBA:

' Uzyskaj aktywny adres URL modelu za pomocą polecenia "get_active_model"
str_envelope =
"<Koperta xmlns =" "http://schemas.xmlsoap.org/soap/koperta/" "> " & _
„<Bryła>” & _
"<get_active_model xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
„</Body>” & _
„</Koperta>”

'Otwórz i wyślij prośbę
request.Open "Post", "http://localhost: 8081/", False
request.Send (str_envelope)

' Uzyskaj odpowiedź i przekształć ją w obiekt xml
response.LoadXML (request.responseText)

Najpierw zapytanie jest zapisywane w formacie XML w zmiennej "str_envelope", a zapytanie jest otwierane w programie RFEM przy użyciu metody "Open" zmiennej "request". Zawartość zmiennej "str_envelope" można teraz wysłać przy użyciu metody "Send". Odpowiedź może być uzyskana za pomocą metody „Odpowiedź na tekst”. W tym konkretnym przypadku jest ona importowana bezpośrednio przy użyciu metody „LoadXML” zmiennej „odpowiedź”.

Zmienna "odpowiedź" typu DOMDocuments posiada metodę LoadXML i dzięki temu może rozpoznać formatowanie XML. Zaletą tego typu jest to, że typ DOMDocuments udostępnia również metodę GetElementsByTagName. Pozwala to na wyodrębnienie elementów bezpośrednio z kodu. Poniżej poprzedni kod został rozszerzony, tak aby dostępny był adres URL modelu:

' uzyskaj status http
status = prośba.status
Jeżeli status <> „200”, To
MsgBox "get_active_model: Wysłanie nie powiodło się - &quot;; &quot;; &quot;; odpowiedź.Tekst
Zakończ Sub
End If

url_model = odpowiedź.GetElementsByTagName („wartość”) (0) .Text

Przed odczytaniem adresu URL można sprawdzić stan odpowiedzi. Są to ustandaryzowane kody stanu HTTP. Status „200” oznacza, że transfer został wykonany „OK”. Po tym zapytaniu adres URL modelu jest przechowywany w ciągu url_model. W tym celu w odpowiedzi XML wyszukuje się element „wartość”. Jeżeli odpowiedź składa się z kilku elementów, wszystkie wartości są przechowywane w sekcji „wartość”, dzięki czemu nie jest możliwa analiza za pomocą identyfikatora „wartość”, lecz podelementy „wartość” są uwzględnione. Dowiedz się więcej w praktycznym przykładzie. W przypadku adresu modelu jedyną zwracaną wartością jest adres URL, dlatego też "wartość" jest tu pomyślna.

Praktyczny przykład w VBA

Teraz, gdy znamy wszystkie podstawowe elementy, poniżej podano prosty przykład. Chcemy utworzyć belkę na dwóch słupach, do której można przyłożyć obciążenie prętowe.

Najpierw są definiowane i inicjowane zmienne opisane powyżej:

'zdefiniuj zmienne
Żądanie przyciemnienia As MSXML2.XMLHTTP60
Odpowiedź przygaszona As MSXML2.DOMDocument60

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

' zmienne początkowe
Ustaw żądanie = Nowy MSXML2.XMLHTTP60

Ustaw odpowiedź = Nowy MSXML2.DOMDocument60
Z odpowiedzią
.async = Fałsz
.preserveWhiteSpace = False
.validateOnParse = False
.resolveExternals = False
' Korzystaj z pełnej funkcjonalności XPath
.SetProperty "SelectionLanguage", "XPath"
' Dodawanie określonych przestrzeni nazw do pracy ze ścieżkami
.SetProperty "SelectionNamespaces", "xmlns:soap =" "http://www.w3.org/2003/05/soap-envelope" "& _
"xmlns: xsd =" "http://www.dlubal.com/rfem.xsd" "& _
"xmlns: n1 ="" urna: schemas-microsoft-com: zestaw wierszy" "" & _
„xmlns =" "http://www.dlubal.com/rfem.xsd" ""
Zakończ na

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

Oprócz zmiennych "request" i "response" tworzony jest ciąg znaków "str_envelope" dla żądania oraz "url_app" i "url_model" dla adresów aplikacji i modelu. Podczas inicjalizacji można przesłać znane specyfikacje protokołu SOAP w celu oceny formatowania XML odpowiedzi. Adres modelu zostanie pobrany później, ale należy podać adres aplikacji. Jak już wspomniano, należy wprowadzić domyślny adres „http://localhost: 8081/”.

Kolejnym krokiem jest przetestowanie połączenia z aplikacją. W tym celu standardowe informacje o aplikacji są odpytywane za pomocą polecenia "get_information":

' sprawdź adres URL aplikacji za pomocą polecenia "get_information"
str_envelope = "<Koperta xmlns =" "http://schemas.xmlsoap.org/soap/envelope/" "> " & _
„<Bryła>” & _
"<get_information xmlns =" "http://www.dlubal.com/rfem.xsd" "/>" & _
„</Body>” & _
„</Koperta>”

'Otwórz i wyślij prośbę
request.Open "Post", url_app, False
request.Send (str_envelope)

' Uzyskaj odpowiedź i przekształć ją w obiekt xml
response.LoadXML (request.responseText)

' uzyskaj status http
status = prośba.Status
Jeżeli status <> „200”, To
MsgBox "get_information: Wysłanie nie powiodło się - &quot;; &quot;; &quot;; odpowiedź.Tekst
Zakończ Sub
End If

' przeczytanie informacji o aplikacji
Dim str1 As String
str1 = ""
słowo1 = słowo1 i odpowiedź.GetElementsByTagName („nazwa”) (0) .Text i amp; vbLf
słowo1 = słowo1 i odpowiedź.GetElementsByTagName („typ”) (0) .Text i amp; vbLf
słowo1 = słowo1 i odpowiedź.GetElementsByTagName („wersja”) (0) .Text i amp; vbLf
str1 = str1 i odpowiedź.GetElementsByTagName („language_name”) (0) .Text i amp; vbLf
str1 = str1 i odpowiedź.GetElementsByTagName („language_id”) (0) .Text

MsgBox str1, vbInformation, "Odpowiedź na" "get_information" "request"

Jak już opisano w pierwszej części, żądanie w formacie XML jest przygotowywane i zapisywane w „str_envelope”. "Wniosek.Otwórz" otwiera połączenie z aplikacją. Słowo kluczowe „Poczta” oznacza wysłanie zapytania. Trzeci parametr ma wartość „prawda”, dzięki czemu realizowana jest transmisja synchroniczna. Następnie "request.Send" wysyła przygotowany ciąg znaków.

Po zakończeniu transferu, odpowiedź jest zapisywana w "odpowiedzi" i poprzez "zapytanie.Status" sprawdzana jest czy żądanie zostało wysłane. Der Status wird dabei von RFEM vergeben, sodass diese bei einer fehlerhaften Anfrage, zum Beispiel einem unbekannten Befehl, einen Fehler zurückgibt. Jeżeli status nie jest "200", program zostanie przerwany, a błąd zostanie wyświetlony w oknie (MsgBox).

Jeżeli nie wystąpiły błędy, możliwe jest odczytanie różnych przesłanych informacji za pomocą funkcji „GetElementsByTagName”. W konkretnym przykładzie informacje są następnie wyświetlane w oknie.

Poniższe elementy są bardzo podobne, dlatego opisane są tylko specjalne funkcje (kompletny kod źródłowy można pobrać). Aby ustawić belkę na dwóch słupach z obciążeniem prętowym, wymagane są następujące funkcje:

  1. Węzeł - set_node
  2. Linia - set_line
  3. Materiał - set_material
  4. Przekrój - zbiór_przekrój
  5. Pręt - zbiór_prętu
  6. Podpora węzłowa - set_nodal_support
  7. Parametry obliczeń - zestaw_ustawień_analizy_statycznej
  8. Przypadek obciążenia - set_load_case
  9. Obciążenie pręta - set_member_load

Podobnie jak większość innych funkcji, funkcja "set_node" ma wiele parametrów, ale zazwyczaj nie są one wymagane. Na wspomnianej już liście poleceń modelu RFEM widać różnorodność parametrów. Przede wszystkim istotne są parametry, które nie są oznaczone jako „opcjonalne”, ponieważ w każdym przypadku należy je uzupełnić. W tym przykładzie przenoszone są następujące parametry:

begin_modification (url_model)

' ustaw węzeł 1 na [0,00] za pomocą polecenia "set_node"
str_envelope =
"<Koperta xmlns =" "http://schemas.xmlsoap.org/soap/koperta/" "> " & _
„<Bryła>” & _
"<set_node xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
„<wartość xmlns =" „” ">” & _
„<no>1</no> i _
„<type> TYPE_STANDARD </type>” & _
„<współrzędna_1> 0 </współrzędna_1>” i _
„<współrzędna_2> 0 </współrzędna_2>” i _
„<współrzędna_3>0 </współrzędna_3>” i _
„</value>” & _
"</set_node> &amp; _
„</Body>” & _
„</Koperta>”

Tylko numer węzła nie jest opcjonalny i można przydzielić resztę. Oprócz możliwych parametrów lista poleceń zawiera również zestawienia typów. W tym konkretnym przypadku dostępnych jest obecnie pięć różnych typów. Wybrano domyślny typ "TYPE_STANDARD". Pokazany tutaj pierwszy węzeł jest tworzony w lokalizacji (0; 0; 0), drugi węzeł (5,5; 0; 0). Wartości liczb dziesiętnych są wówczas następujące:

...
„<wartość xmlns =" „” ">” & _
„<no>2</no>” i _
„<type> TYPE_STANDARD </type>” & _
„<współrzędna_1>5,5 </współrzędna_1>” i _
„<współrzędna_2> 0 </współrzędna_2>” i _
„<współrzędna_3>0 </współrzędna_3>” i _
„</value>” & _
...

Listy to kolejna szczególna funkcja. Linia wymaga dwóch węzłów, których numery można przenieść w postaci listy. Elementy listy, takie jak „definition_nodes”, są oddzielone spacjami:

...
"<set_line xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
„<wartość xmlns =" „” ">” & _
„<no>1</no> i _
„<type> TYPE_POLYLINE </type>” i _
"<definicja_węzłów> 1 2 </definicja_węzły>" & _
„</value>” & _
„</set_line>” & _
...

Aby móc utworzyć pręt, należy utworzyć przekrój, do którego z kolei potrzebny jest materiał. Można korzystać z przekrojów i materiałów z wewnętrznej bazy danych. Dlatego wystarczy podać znany identyfikator. W przypadku materiału oznaczenie to „S235”, a przekrój ma nazwę „IPE 300”:

...
"<set_section xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
„<wartość xmlns =" „” ">” & _
„<no>1</no> i _
„<material>1 </material>” i _
„<type> TYPE_STANDARDIZED_STEEL </type>” & _
„<nazwa> IPE 300 </nazwa>” & _
„</value>” & _
"</set_section> &amp; _
...

Aby sprawdzić, czy nazwa taka jak „IPE 300“ jest prawidłowa, można użyć wpisu w graficznym interfejsie użytkownika.

Aby wprowadzić sam pręt, nie jest wymagana wiedza, ale aby wprowadzić nieruchomą podporę, należy zdefiniować „nieskończoną“ sztywność sprężystą. Do transferu używane jest słowo kluczowe "INF":

...
"<set_nodal_support xmlns =" "http://www.dlubal.com/rfem.xsd" "> " & _
„<wartość xmlns =" „” ">” & _
„<no>1</no> i _
„<węzły>1 </węzły>” i _
„<wiosna_x>INF </i>wiosna x>&amp;nz _
„<wiosna_y> INF </i>wiosna y> &#39;
„<wiosna_z>INF </i>wiosna z>&#39;
„<Ograniczenie_obrotowe_x>INF </i>ograniczenie_obrotowe_x>” & _
„<Ograniczenie_obrotowe_y> 0 </p>Ograniczenie_obrotowe_y> i _
„<rotacyjny_ograniczenie_z>INF </i>ograniczenie_obrotowe_z>” i _
„</value>” & _
"</set_nodal_support> &amp; _
...

Tworzenie przypadku obciążenia i parametrów obliczeniowych nie wymaga dodatkowej wiedzy. Ostatnia osobliwość jest dodatkową wartością podczas tworzenia obciążenia, ponieważ musi zostać zdefiniowana poza obszarem "<wartość>". W przypadku obciążenia prętowego, należy tam przenieść odpowiedni przypadek obciążenia:

...
"<set_member_load xmlns =" "http://www.dlubal.com/rfem.xsd" ">" & _
"<load_case_no xmlns =" "" ">1 </load_case_no>" & _
„<wartość xmlns =" „” ">” & _
„<no>1</no> i _
„<load_type> LOAD_TYPE_FORCE </load_type>” & _
„<członków>1 </empirycznych>” i _
"<load_distribution> LOAD_DISTRIBUTION_UNIFORM </load_distribution>" & _
"<Kierunek_ładowania> LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE </load_direction>" & _
„<magnituda> 1000 </magn.>” i _
„</value>” & _
"</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.

Oprócz poprzednich funkcji tworzenia i eksportu danych, w tym miejscu prezentowane są dwie funkcje specjalne. Jeżeli elementy zostaną przeniesione do programu, program automatycznie przechodzi w tryb "Modyfikacji". Program sprawdza nowe elementy i integruje je. 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. W tym celu służą funkcje "begin_modification" i "finish_modification". W tym przykładzie „begin_modification” jest wywoływana przed utworzeniem pierwszego węzła, a „finish_modification” - na końcu po utworzeniu przypadku obciążenia. Obie funkcje zostały również utworzone jako funkcje VBA w programie. Die Funktionen sind eigenständig und daher werden innerhalb der Funktionen erneut die Variablen "request" und "response" angelegt. Ponieważ jednak nie są do tego potrzebne nowe elementy, nie będą one tutaj omawiane. Interessant ist der Vergleich mit und ohne die Nutzung dieser Funktionen, welcher immer einen Geschwindigkeitsunterschied bringen wird.

Podsumowanie

Die WebService-API ist ein mächtiges Werkzeug für RFEM und RSTAB. Prosty transfer oparty na protokole HTTP pozwala na zaimplementowanie interfejsu w wielu językach programowania, nie tylko w VBA, jak pokazano tutaj, dzięki czemu możliwe jest programowanie międzyplatformowe.

Autor

Dipl.-Ing. Thomas Günthel

Dipl.-Ing. Thomas Günthel

Customer Support

Pan Günthel zapewnia wsparcie techniczne dla naszych klientów.

Słowa kluczowe

Web service API COM

Linki

Skomentuj...

Skomentuj...

  • Odwiedziny 406x
  • Zaktualizowane 19. kwietnia 2022

Kontakt

Skontaktuj się z firmą Dlubal

Mają Państwo pytania lub potrzebują porady? Skontaktuj się z nami telefonicznie, mailowo, na czacie lub na forum lub znajdź sugerowane rozwiązania i przydatne wskazówki na stronie FAQ, dostępnej przez całą dobę.

+48 (32) 782 46 26

+48 730 358 225

[email protected]

Event Invitation

XXXVI Ogólnopolskie Warsztaty Pracy Projektanta Konstrukcji

Konferencje 28. czerwca 2022 - 1. lipca 2022

Szkolenia online | Angielski

RFEM 6 | Informacje ogólne | USA

Szkolenie online 20. lipca 2022 12:00 - 16:00 EDT

Szkolenia online | Angielski

RFEM 6 | Informacje ogólne

Szkolenie online 29. lipca 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

Eurokod 2 | Konstrukcje betonowe zgodnie z DIN EN 1992-1-1

Szkolenie online 12. sierpnia 2022 8:30 - 12:30 CEST

Szkolenia online | Angielski

Eurokod 3 | Konstrukcje stalowe zgodnie z DIN EN 1993-1-1

Szkolenie online 8. września 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

Eurokod 5 | Konstrukcje drewniane zgodnie z DIN EN 1995-1-1

Szkolenie online 15. września 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

RFEM 6 | Analiza dynamiczna i obliczenia sejsmiczne zgodnie z EC 8

Szkolenie online 21. września 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

RFEM 6 | Informacje ogólne

Szkolenie online 7. października 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

Eurokod 2 | Konstrukcje betonowe zgodnie z DIN EN 1992-1-1

Szkolenie online 14. października 2022 9:00 - 13:00 CEST

Szkolenia online | Angielski

Eurokod 3 | Konstrukcje stalowe zgodnie z DIN EN 1993-1-1

Szkolenie online 17. listopada 2022 9:00 - 13:00 CET

Szkolenia online | Angielski

RFEM 6 | Analiza dynamiczna i obliczenia sejsmiczne zgodnie z EC 8

Szkolenie online 23. listopada 2022 9:00 - 13:00 CET

Szkolenia online | Angielski

Eurokod 5 | Konstrukcje drewniane zgodnie z DIN EN 1995-1-1

Szkolenie online 8. grudnia 2022 9:00 - 13:00 CET

Symulacja wiatru CFD z RWIND 2

Symulacja wiatru CFD z RWIND 2

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

Szkolenia online | Angielski

Eurokod 5 | Konstrukcje drewniane zgodnie z DIN EN 1995-1-1

Szkolenie online 15. czerwca 2022 8:30 - 12:30 CEST

Szkolenia online | Angielski

RFEM 6 dla studentów | USA

Szkolenie online 8. czerwca 2022 13:00 - 16:00 EDT

RFEM 6
Hala z dachem łukowym

Program główny

Program do analizy statyczno-wytrzymałościowej RFEM 6 jest podstawą systemu modułowego oprogramowania.
Program główny RFEM 6 służy do definiowania konstrukcji, materiałów i obciążeń płaskich i przestrzennych układów konstrukcyjnych składających się z płyt, ścian, powłok i prętów.
Program umożliwia wymiarowanie konstrukcji złożonych oraz elementów bryłowych i kontaktowych.

Cena pierwszej licencji
3 990,00 USD
RSTAB 9
Oprogramowanie do obliczeń konstrukcji szkieletowych

Program główny

Program RSTAB 9 do analizy statyczno-wytrzymałościowej konstrukcji szkieletowych i kratownic zawiera podobny zakres funkcji jak program RFEM (MES), zwracając szczególną uwagę na ramy i kratownice.
Dlatego jest bardzo łatwy w użyciu i przez wiele lat był najlepszym wyborem do analizy statyczno-wytrzymałościowej konstrukcji belkowych składających się ze stali, betonu, drewna, aluminium i innych materiałów.

Cena pierwszej licencji
2 550,00 USD