3096x
001441
2017-05-23

Interfejs COM w języku VBA | 3. Tworzenie narzędzia

W części 2.2 serii artykułów na temat 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 czwartej części wyjaśniono tworzenie poszczególnych narzędzi.

Informacje ogólne

Chcemy utworzyć narzędzie, które utworzy nieliniowe podpory węzłowe na aktualnie wybranych w programie węzłach. Aby to zrobić, wymagane są następujące kluczowe elementy:

  • Pobierz aktualnie wybrane węzły
  • Tworzenie podpór węzłowych
  • Utworzyć i przydzielić nieliniowość
  • Uruchamianie narzędzia w programie

Punkty te należy teraz wyjaśnić. Wymaga to znajomości poprzednich części tej serii artykułów, które nie zostaną ponownie opisane. Dostępny kod źródłowy zawiera jednak komentarze dokumentujące wspomniane elementy, na przykład otrzymanie konstrukcji.

Uzyskaj aktualnie wybrany węzeł

Wybrane elementy można edytować za pomocą interfejsu COM, korzystając ze znanych już funkcji, takich jak IModelData.GetNodes dla węzłów. Aby jednak zwrócić tylko wybrane elementy, należy najpierw przełączyć do edytowania bieżącego wyboru, wprowadzając IModelData.EnableSelections. Jeżeli dla opcji EnableSelections ustawiona jest wartość True, moduł IModelData.GetNodes zwraca tylko wybrane elementy. Oto konkretny przykład:

'Uzyskaj wybrane węzły.
iModDat.EnableSelections Prawda 'pracować tylko z wybranym obiektem
Dim węzły () As RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections Fałsz 'ponownie pracować ze wszystkimi obiektami

Po uzyskaniu wybranych węzłów EnableSelections jest ponownie resetowana do wartości false, ponieważ często może to powodować błędy. Ponieważ podpora węzłowa wymaga do definicji listy węzłów w postaci ciągu, jest ona udostępniana jednocześnie:

'Utworzyć listę węzłów.
Dim nodeList As Łańcuch znaków
Dim iAsDługi
Jeżeli chcesz zadać krótkie pytanie techniczne, i = 0 ToUBound (węzły, 1)
węzełLista = węzełLista i węzły (i). „,”
Następny i

Tworzenie podpór węzłowych

Nieliniowość lub wykres, w konkretnym przypadku, jest osobnym elementem. Może on zostać przydzielony do podpory węzłowej tylko wtedy, gdy jest już dostępna w systemie. Dlatego konieczne jest najpierw utworzenie podpory węzłowej, zgodnie z zasadami wyjaśnionymi w poprzednich artykułach:

'Utworzyć podpory węzłowe.
Dim nodSup As 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

'Zdefiniować nieliniowość.
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Jak widać w kodzie, WorkingDiagramType jest określone jako nieliniowość w globalnym kierunku z.

Tworzenie i przydzielanie podpory nieliniowej

Po przygotowaniu obsługi węzła dla nieliniowości WorkingDiagramType, należy ją teraz utworzyć:

'Utworzyć nieliniowość.
Dim nldgrm As RFEM5 Wykres nieliniowości

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

'Utworzyć wykres.
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 dwuwymiarowej tablicy. Pierwszy wymiar odnosi się do zbioru danych, a drugi do elementów zbioru danych. W tym przypadku pierwszym elementem w zbiorze danych jest przemieszczenie w m, a drugim elementem jest siła w N. Dlatego w powyższym przykładzie utworzono cztery zbiory danych, w których na przykład trzeci punkt wykresu w tym miejscu wynosi 30 mm i 0,2 kN. Ta nieliniowość zostanie teraz przypisana do istniejącej podpory. Aby to zrobić, konieczne jest uzyskanie interfejsu dla podpory węzłowej, a następnie dla nieliniowości:

'Przypisać nieliniowość.
Dim iNodSup As RFEM5.INodalSupport
Ustawić iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiag As RFEM5. Wykres liniowości
Ustawić iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

W tym przypadku nieliniowość przebiega wzdłuż osi Z, dlatego w przypadku uzyskania nieliniowości należy wybrać AlongAxisZ. Nieliniowość jest przydzielana w znanym bloku Modyfikacja.

Uruchamianie narzędzia w programie

Z programem RFEM można zintegrować programy zewnętrzne. W tym celu w ścieżce programu należy zmodyfikować plik RFEM.ini. W przeciwieństwie do programowania w C# i VB, w którym tworzony jest plik wykonywalny, VBA wymaga programu Excel do zaimplementowania narzędzia. Excel może zostać przydzielony przez argument podczas otwierania pliku, który ma zostać otwarty. Informacja ta pojawia się w wierszu polecenia (plik Excel znajduje się w obszarze C: \ temp, a program Excel jest zainstalowany w wersji 32-bitowej):
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

W ten sposób zostanie otwarty program Excel z żądanym plikiem. Aby mieć pewność, że program RFEM otworzy zewnętrzny program tylko bez dodatkowych argumentów (w tym przypadku za nazwą pliku EXCEL.EXE), konieczne jest wcześniejsze utworzenie pliku wsadowego w systemie Windows. Ten prosty plik tekstowy z rozszerzeniem ".bat" jest traktowany przez system Windows jako plik wykonywalny EXE. Z tego względu za pomocą edytora można utworzyć plik TXT, który zawiera nowe rozszerzenie „.bat”. W oknie Eksploratora Windows należy najpierw ustawić opcję wyświetlania rozszerzenia pliku. Ten plik wsadowy (zwany dalej EXCEL-Tool.bat) musi zawierać następujący wpis:
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
To polecenie odpowiada tak, jak zostało wprowadzone w wierszu polecenia.

Po utworzeniu ten plik wykonywalny można wprowadzić w programie RFEM.ini jako narzędzie zewnętrzne. Program RFEM.ini znajduje się w ścieżce programu programu RFEM (domyślna ścieżka w programie RFEM 5.07 64-bit: C: \ Program Files \ Dlubal \ RFEM 5.07). W tym miejscu należy dodać następujące wpisy:

ModułNazwa2 = Narzędzie EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Tool.bat"
Moduł Opis2 = Nieliniowe zwolnienie pręta

Oczywiście plik wsadowy EXCEL-Tool.bat i makra table1.xlsm również muszą być przechowywane w C:/temp/.

W celu automatycznego uruchomienia makra należy uruchomić podprogram w podprogramie wykonywanym automatycznie przez program Excel podczas otwierania pliku. Podprogram ten ma nazwę Workbook_Open i musi być przechowywany w skoroszycie.

Teraz musimy zamknąć program Excel po pomyślnym uruchomieniu. Jeżeli wystąpi błąd lub program RFEM nie otworzy się, makro można edytować. W tym celu zintegrowane jest rozróżnienie przypadku. Pełny szkic jest następujący:

Prywatne SubWorkbook_Open ()

'Program obsługi błędów uruchomił program RFEM.
W przypadku błędu Idź do e

'Pobierany jest interfejs z programem RFEM.
Dim iApp AsRFEM5.Aplikacja
Ustawić iApp = GetObject (, „RFEM5.Aplikacja”)

e: 'w przypadku błędu wyświetlany jest komunikat "RFEM nie otwarty"
If Err.Number <> 0 Więc
MsgBox „Program RFEM nie otwarty”,, Err.Source
   Zakończ Sub
Koniec If

'Program obsługi błędów.
W przypadku błędu Idź do F

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

'Uzyskaj interfejs dla aktywnego modelu.
Dim iModel As RFEM5.model
If iApp.GetModelCount> 0 Więc
Ustaw iModel = iApp.GetActiveModel
Else
'Błąd wyświetlania, gdy modeli nie jest dostępnych.
Err.Raise vbObjectError, "LoadModel ()",„iApp.GetModelCount <1”
End If

„Miejsce na własny kod źródłowy.

f: „Błąd przechwytywania z kodu źródłowego.
Jeżeli numer błędu <> 0 wtedy
MsgBox Err.Description,, Err.Source
'Licencja COM została odblokowana, dostęp do programu jest ponownie możliwy.
iModel.GetApplication.UnlockLicense
Narzędzie to umożliwia otwieranie programu Excel w przypadku wystąpienia błędu.
   Exit Sub
End If

'Licencja COM została odblokowana, ponownie możliwy dostęp do programu
iModel.GetApplication.UnlockLicense
„Po pomyślnym zastosowaniu narzędzie zamyka program Excel.
Aplikacja.Zatrzymać

End Sub

W tej chwili brakuje tylko odniesienia do utworzonego wcześniej podprogramu, który znajduje się w sekcji „Miejsce na własny kod źródłowy”. Pełny kod źródłowy jest dostępny pod linkiem.

Podsumowanie

W tym artykule dotyczącym tworzenia nieliniowej podpory węzłowej opisano zastosowanie nowego modułu zewnętrznego i tym samym jest on uzupełnieniem poprzednich rozdziałów z tej serii artykułów. Integracja z plikami wykonywalnymi jest mniej problematyczna, ponieważ zazwyczaj są tworzone w programach Visual Studio i VB lub C #. Z tego powodu opisano tutaj bardziej złożony proces z Excelem.


Autor

Pan Günthel zapewnia wsparcie techniczne klientom firmy Dlubal Software i zajmuje się ich zapytaniami.

Odnośniki
Pobrane