Interfejs COM w VBA | 3. Tworzenie narzędzia

Artykuł o tematyce technicznej

Artykuł został przetłumaczony przez Google Translator Podgląd oryginalnego tekstu

W części 2.2 serii artykułów dotyczącej interfejsu COM opisano tworzenie i modyfikowanie podpór węzłowych, obciążeń, przypadków obciążeń, kombinacji obciążeń i kombinacji wyników na przykładzie pręta. W tej części wyjaśniono tworzenie poszczególnych narzędzi.

Rysunek 01 - Indywidualnie utworzone narzędzie EXCEL w programie RFEM

Informacje ogólne

Chcemy utworzyć narzędzie, które tworzy nieliniowe podpory węzłowe w węźle aktualnie wybranym w programie. W tym celu niezbędne są następujące elementy:

  • Pobieranie aktualnie wybranych węzłów
  • Tworzenie podpór węzłowych
  • Tworzenie i przydzielanie nieliniowości
  • Tworzenie narzędzi w programie

Punkty te zostaną następnie przetworzone. W tym celu wymagana jest wiedza z poprzednich artykułów, która nie będzie omawiana ponownie. Jednak już dostępne elementy w dostępnym kodzie źródłowym, takie jak przenoszenie konstrukcji w komentarzach, są prawie udokumentowane.

Uzyskanie aktualnie wybranych węzłów

Edytowanie wybranych elementów poprzez interfejs COM odbywa się przy użyciu już znanych funkcji, takich jak ImodelData.GetNodes dla węzłów. W celu zwrócenia tylko wybranych elementów należy przejść do edycji aktualnego wyboru poprzez IModelData.EnableSelections. Jeśli EnableSelections jest ustawione na True, IModelData.GetNodes zwraca tylko wybrane elementy. Oto konkretny przykład:

"Pobierz wybrane węzły"
iModDat.EnableSelections Prawda "Działa tylko z wybranymi obiektami
Dim węzły () jako RFEM5.Node
węzły = iModDat.GetNodes
iModDat.EnableSelections Fałsz "Ponownie pracujemy ze wszystkimi obiektami

Po pobraniu zaznaczonych węzłów ustawienie EnableSelections jest ponownie ustawiane na Incorrect, ponieważ może stać się częstym źródłem błędów. Ponieważ podpora węzłowa wymaga utworzenia listy węzłów w postaci ciągu znaków, jest ona tworzona w następujący sposób:

"Tworzenie listy węzłów
Dim nodeList jako Łańcuch znaków
DimjakoDługi
Dla i = 0 DoUBound (węzły, 1)
nodeList = nodeList & node (i) .Nie & ","
Dalej I

Tworzenie podpór węzłowych

Nieliniowość, w tym przypadku schemat, jest osobnym elementem, który można przypisać do podpory węzłowej tylko wtedy, gdy jest ona już dostępna w konstrukcji. W związku z tym konieczne jest utworzenie podpory węzłowej zgodnie ze znanymi zasadami poprzednich wkładów:

'Tworzenie podpór węzłowych
Dim NodSup jako RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Fałsz
nodSup.IsValid = Prawda
nodSup.nodeList = nodeList
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0,01
nodSup.RestraintConstantY = 0,01
nodSup.RestraintConstantZ = 0.01

nodSup.SupportConstantX = -1
nodSup.SupportConstantY = -1
nodSup.SupportConstantZ = -1

"Definiuj nieliniowość"
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport NodSup
iModDat.FinishModification

Jak widać w kodzie typ WorkingDiagramType jest oznaczony jako nieliniowy w globalnym kierunku Z.

Tworzenie i przydział podpór nieliniowych

Teraz, gdy dla nieliniowej WorkingDiagramType została przygotowana podpora węzłowa, należy ją utworzyć.

"Tworzenie nieliniowości"
Dim nldgrm jako RFEM5.Nieliniowy diagram

nldgrm.ForceType = StiffnessDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric = Prawda

"Utworzyć diagram
ReDim nldgrm.PositiveZone (3, 1)
nldgrm.PositiveZone (0, 0) = 0 #
nldgrm.PositiveZone (0, 1) = 0 #

nldgrm.PositiveZone (1, 0) = 0.01
nldgrm.PositiveZone (1, 1) = 100

nldgrm.PositiveZone (2, 0) = 0.03
nldgrm.PositiveZone (2, 1) = 200

nldgrm.PositiveZone (3, 0) = 0.05
nldgrm.PositiveZone (3, 1) = 300

Wykres składa się z pola dwuwymiarowego. Pierwszy wymiar odpowiada rekordowi danych, a drugi wymiar elementom zbioru danych. W tym przypadku pierwszym elementem w zbiorze danych jest przemieszczenie wm, a drugim - siła w N. W powyższym przykładzie powstają cztery zbiory danych, na przykład w których trzeci punkt na wykresie ma 30 mm i 0,2 kN. Ta nieliniowość musi zostać teraz przydzielona do dostępnego podparcia. W tym celu przenosimy interfejs do podpory węzłowej, a następnie do nieliniowości:

"Zastosować nieliniowość"
Dim iNodSup jako RFEM5.INodalSupport
Ustawić iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiag jako RFEM5.INonlinearityDiagram
Ustawić iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

Nieliniowość jest wzdłuż osi Z, dlatego należy ją wybrać w przypadku wywołania funkcji LengthAxisZ. Są one przydzielane w znanym bloku modyfikacji.

Tworzenie narzędzi w programie

W programie RFEM istnieje możliwość integracji programów zewnętrznych. W tym celu należy zmodyfikować plik RFEM.ini w ścieżce programu. W odróżnieniu od programowania w języku C # i VB, w którym tworzony jest plik wykonywalny, program Excel musi zostać użyty do wykonania programu w języku VBA. Programowi Excel można przydzielić otwarty plik przy użyciu argumentu podczas uruchamiania. Wyglądałoby to tak w wierszu poleceń, gdzie plik Excel jest przechowywany w C: \ temp, a Excel jest instalowany w wersji 32-bitowej:
„C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE” C: \ temp \ table1.xlsm

Spowoduje to otwarcie programu Excel żądanym plikiem. Ponieważ można otworzyć tylko zewnętrzny program RFEM bez dodatkowych argumentów (w tym przypadku np. Nazwa EXCEL.EXE), należy utworzyć plik wsadowy systemu Windows. Ten prosty plik tekstowy z rozszerzeniem „.bat” jest podobny do systemu Windows obejmuje plik wykonywalny EXE. Aby utworzyć plik TXT, należy na przykład utworzyć plik TXT, który po utworzeniu otrzymuje nowe rozszerzenie „.bat”. Ten plik wsadowy (zwany dalej EXCEL-Werzeug.bat) musi mieć następujący wpis:
„C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE” C: \ temp \ table1.xlsm
Odpowiada to poleceniu, które zostanie wprowadzone w linii komend.

Po utworzeniu pliku wykonywalnego można go wprowadzić w pliku RFEM.ini jako narzędzie zewnętrzne. RFEM.ini znajduje się w ścieżce programu RFEM (Standard dla RFEM 5.07 w wersji 64-bitowej: C: \ Program Files \ Dlubal \ RFEM 5.07). Należy dodać następujące pozycje:

NazwaKodu2 = narzędzie EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Werkzeug.bat"
ModuleDescription2 = Nieliniowe zwolnienie końca pręta

Plik wsadowy EXCEL-Werkzeug.bat oraz makro-tabela1.xlsmauch muszą zostać zapisane w C:/temp/.

Aby mieć pewność, że makro zostanie wykonane automatycznie, należy uruchomić podprogram automatycznie wykonywany przez program Excel podczas jego otwierania. Ten podprogram nazywa się Workbook_Open i musi być zapisany w zeszycie.

Rysunek 02 - Workbook_Open Subroutine in Workbook

Teraz brakuje, że program Excel zostanie zamknięty po pomyślnym wykonaniu. Jeżeli wystąpi błąd lub program RFEM nie zostanie otwarty, makro powinno być możliwe do edycji W tym celu zostanie wbudowane rozróżnienie przypadków. Cały szablon wygląda następująco:

Prywatny SubWorkbook_Open ()

"Wystąpił błąd przy uruchamianiu programu RFEM
Przy błędzie Błąd 2

Przenosi interfejs do programu RFEM
Dim iApp jakoRFEM5.Application
Ustawić iApp = GetObject (, "RFEM5.Application")

e: "W przypadku wystąpienia błędu wyświetlany jest komunikat" Nie ma otwartego programu RFEM "
Jeżeli Err.Number <> 0 Następnie
MsgBox "Nie ma otwartego programu RFEM", Err.Source
   Wyjdź Sub
Koniec Jeżeli

"Program rutynowy obsługujący błąd
Przy błędzie Błąd F

Licencja COM i dostęp do programu są zablokowane
iApp.LockLicense

"Uzyskaj interfejs dla aktywnego modelu
Dim iModel jako RFEM5.model
Jeżeli iApp.GetModelCount> 0 Następnie
Ustawić iModel = iApp.GetActiveModel
Inaczej
'Błędy w przypadku braku wystarczającej liczby modeli
Err.Raise vbObjectError, "LoadModel ()", "iApp.GetModelCount <1"
Koniec If

'Miejsce na własny kod źródłowy

f: "Błędy przechwytywania od kodu źródłowego
Jeżeli Err.Number <> 0 Then
MsgBox Err.Description ,, Err.Source
"Licencja COM jest zwolniona, dostęp do programu jest możliwy ponownie
iModel.GetApplication.UnlockLicense
Narzędzie powinno otwierać program Excel w przypadku wystąpienia błędu
   Wyjdź Sub
Koniec If

Po wygaśnięciu licencji COM dostęp do programu jest możliwy
iModel.GetApplication.UnlockLicense
Narzędzie powinno zamknąć program Excel, gdy aplikacja zakończy się powodzeniem
Aplikacja.Quit

End Sub

Brakuje natomiast odniesienia do wcześniej utworzonego podprocedury, który można znaleźć w sekcji "Umieść własny kod źródłowy". Pełny kod źródłowy znajduje się pod poniższym linkiem.

Podsumowanie

Utworzenie nieliniowej podpory węzłowej stanowi uzupełnienie wcześniejszych wkładów, natomiast utworzenie modułu zewnętrznego stanowi nowe terytorium. Osadzanie jest mniej problematyczne podczas korzystania z plików wykonywalnych, takich jak te zazwyczaj tworzone za pomocą programu Visual Studio oraz VB lub C #. Z tego względu opisano tutaj bardziej złożoną procedurę programu Excel.

Do pobrania

Linki

Kontakt

Kontakt do Dlubal

Mają Państwo pytania lub potrzebują porady?
Zapraszamy do bezpłatnego kontaktu z nami drogą mailową, poprzez czat lub forum lub odwiedzenia naszej strony z FAQ z użytecznymi wskazówkami i rozwiązaniami.

+48 (32) 782 46 26

+48 730 358 225

info@dlubal.pl

RFEM Program główny
RFEM 5.xx

Program główny

Oprogramowanie do obliczeń płaskich i przestrzennych układów konstrukcyjnych, obejmujących płyty, ściany, powłoki, pręty (belki), bryły i elementy kontaktowe, z wykorzystaniem Metody Elementów Skończonych (MES)

Cena pierwszej licencji
3 540,00 USD
RFEM Inne
RF-COM 5.xx

Moduł dodatkowy

Programowalny interfejs (API) w oparciu o technologię COM

Cena pierwszej licencji
580,00 USD