3101x
001441
23.5.2017

Rozhraní COM ve VBA | 3. Vytvoření nástroje

V části 2.2 článku o rozhraní COM popisujeme vytváření a úpravu uzlových podpor, zatížení, zatěžovacích stavů, kombinací zatížení a kombinací výsledků na příkladu prutu. Čtvrtá část popisuje vytváření jednotlivých nástrojů.

Základy

Chceme vytvořit nástroj, který vytvoří nelineární uzlové podpory na aktuálně vybraných uzlech v programu. K tomu jsou zapotřebí následující klíčové prvky:

  • Načte aktuálně vybrané uzly
  • Vytvoření uzlové podpory
  • Vytvořit a přiřadit nelinearitu
  • Spuštění nástroje v programu

Tyto body je třeba nyní vysvětlit. K tomu je třeba znát předchozí části této řady článků, které již nebudeme popisovat. Dostupný zdrojový kód však obsahuje komentáře, které dokumentují výše uvedené prvky, například načtení konstrukce.

Získat aktuálně vybraný uzel

Vybrané prvky můžete upravit pomocí rozhraní COM pomocí již známých funkcí, jako je například IModelData.GetNodes pro uzly. Pokud se však chceme vrátit pouze k vybraným prvkům, je třeba nejdříve přepnout na úpravu aktuálního výběru zadáním IModelData.EnableSelections. Pokud je volba EnableSelections nastavena na hodnotu TRUE, vrátí IModelData.GetNodes pouze vybrané prvky. Zde je konkrétní příklad:

'Získat vybrané uzly.
iModDat.EnableSelections True 'pracuje pouze s vybraným objektem
Dim uzly () As RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections False 'znovu pracovat se všemi objekty

Jakmile získáte vybrané uzly, EnableSelections se znovu nastaví na hodnotu false, protože to může často způsobit chyby. Protože uzlová podpora vyžaduje pro definici seznam uzlů, je k dispozici současně:

'Vytvořit seznam uzlů.
Dim nodeList As Řetězec
Dim iAsDlouho
Krátký dotaz - rychlá odpověď: i = 0KomuUBound (uzly, 1)
nodeList = nodeList & nodes (i) .Ne & ","
Další i

Vytvoření uzlové podpory

Nelinearita, respektive diagram v daném případě, je samostatným prvkem. Uzlové podpoře lze přiřadit, pouze pokud je v systému již k dispozici. Proto je třeba nejdříve vytvořit uzlovou podporu podle zásad vysvětlených v předchozích článcích:

'Vytvořit uzlové podpory.
Dim nodSup As RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = False
nodSup.IsValid = True
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

'Definovat nelinearitu.
nodSup.SupportNonlinearityZ = WorkDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Jak je vidět v kódu, WorkingDiagramType se zadá jako nelinearita v globálním směru osy Z.

Vytvoření a zadání nelineární podpory

Po přípravě uzlové podpory pro nelinearitu WorkDiagramType by se nyní mělo vytvořit:

'Vytvořit nelinearitu.
Dim nldgrm As RFEM5.NinlinearitaDiagram

nldgrm.ForceType = TuhostDiagramForceType.ŽádnáStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric = True

'Vytvořit 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.PozitivníZóna (2, 0) = 0,03
nldgrm.PositiveZone (2, 1) = 200

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

Diagram se skládá z dvourozměrného pole. První dimenze odpovídá datové sadě, druhá dimenze prvky datové sady. V tomto případě je prvním prvkem v sadě posun posun v m a druhým prvkem síla v N. Proto výše uvedený příklad vytvořil čtyři sady dat, kde třetí bod diagramu na místě je například 30 mm a 0,2 kN. Tuto nelinearitu je nyní třeba přiřadit stávající podpoře. K tomu je třeba získat rozhraní pro uzlovou podporu a poté pro nelinearitu:

"Přiřadit nelinearitu."
Dim iNodSup As RFEM5.INodalSupport
Set iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiag As RFEM5.INinlinearityDiagram
Set iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

V tomto případě je nelinearita podél osy Z, a proto je třeba při získávání nelinearity vybrat AlongAxisZ. Nelinearita se přiřadí ve známém Modifikačním bloku.

Spuštění nástroje v programu

Externí programy lze integrovat do programu RFEM. K tomu je třeba upravit program RFEM.ini. Na rozdíl od programování v C# a VB, kde se vytváří spustitelný soubor, vyžaduje VBA implementaci nástroje v Excelu. Excel lze přiřadit argument při otevření otevřeného souboru. Toto se zobrazí v příkazovém řádku následovně (soubor Excel je pod C: \ temp a Excel je nainstalován jako 32bitová verze):
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Tím se otevře Excel s požadovaným souborem. Aby se zajistilo, že RFEM otevře pouze externí program bez dalších argumentů (jako je v tomto případě název souboru za EXCEL.EXE), je třeba nejdříve vytvořit dávkový soubor Windows. Tento jednoduchý textový soubor včetně přípony ".bat" je Windows zpracován jako spustitelný soubor EXE. Proto můžeme v editoru vytvořit soubor TXT, který bude obsahovat novou příponu „.bat“. Možnost zobrazení přípony souboru musí být v Průzkumníku Windows nastavena jako první. Tento dávkový soubor (dále jen EXCEL-Tool.bat) pak musí obsahovat následující položku:
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
Tomu odpovídá příkaz, jako by byl zadán v příkazovém řádku.

Po vytvoření lze tento spustitelný soubor zadat v programu RFEM.ini jako externí nástroj. RFEM.ini je součástí programové cesty programu RFEM (výchozí cesta pro 64bitový program RFEM 5.07: C: \ Program Files \ Dlubal \ RFEM 5.07). Tam by se měly doplnit následující údaje:

ModuleName2 = EXCEL-Tool
ModuleExeName2 = "c: \ temp \ EXCEL-Tool.bat"
ModuleDescription2 = Nelineární kloub na konci prutu

V C:/temp/se samozřejmě musí uložit i dávkový soubor EXCEL-Tool.bat a makro table1.xlsm.

Pro automatické spuštění makra je třeba spustit podprogram v podprogramu, který program Excel automaticky otevře při otevření souboru. Tato podprogram se nazývá Workbook_Open a musí být uložena v sešitu.

Po úspěšném spuštění nyní musíme aplikaci Excel ukončit. Pokud dojde k chybě nebo se program RFEM neotevře, lze makro upravit. Za tímto účelem je integrován rozdíl případů. Celkový návrh je následující:

Soukromý SubWorkbook_Open ()

'RFEM.
On Error GoTo e

'Rozhraní s RFEM se načte.
Dim iAppAsRFEM5.Application
Set iApp = GetObject (, "RFEM5.Application")

e: 'v případě chyby se zobrazí „RFEM not open“
If Err.Number <> 0Then
MsgBox "RFEM není otevřený",, Err.Source
   Ukončit Sub
Konec If

'Program pro zpracování chyb.
On Error GoTo f

'COM licence a přístup k programům jsou uzamčeny.
iApp.LockLicense

'Získat rozhraní pro aktivní model.
Dim iModelAs RFEM5.model
If iApp.GetModelCount> 0 Then
Nastavte iModel = iApp.GetActiveModel
Else
'Chyba zobrazení, pokud není k dispozici dostatek modelů.
Err.Raise vbObjectError, "LoadModel ()","iApp.GetModelCount <1"
End If

'Místo pro vlastní zdrojový kód.

f: 'Zachytit chybu ze zdrojového kódu.
If Err.Number <> 0 Then
MsgBox Err.Description, , Err.Source
' Uvolněna COM licence, přístup k programu obnoven
iModel.GetApplication.UnlockLicense
'Nástroj umožňuje Excel otevřít v případě chyby.
   Exit Sub
End If

' Uvolněna COM licence, přístup k programu obnoven
iModel.GetApplication.UnlockLicense
'Nástroj úspěšně ukončí Excel.
Konkurz.Účet

End Sub

V tuto chvíli chybí pouze odkaz na dříve vytvořený podprogram, který se nachází pod "Místo pro vlastní zdrojový kód". Celý zdrojový kód je k dispozici na následujícím odkazu.

Závěr

Tento článek o vytvoření nelineární uzlové podpory popisuje použití nového externího modulu a doplňuje tak předchozí části této řady článků. Integrace je snadnější, pokud používáte spustitelné soubory, které se obvykle vytvářejí pomocí programů VisualStudio nebo VB nebo C #. Proto byl popsán složitý proces v aplikaci Excel.


Autor

Ing. Günthel zajišťuje technickou podporu zákazníkům.

Odkazy
Stahování