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

Odborný článek

Tento text byl přeložen Google překladačem Zobrazit původní text

V části 2.2 této série jsme si na příkladu prutu ukázali, jak se vytváří a upravují uzlové podpory, zatížení, zatěžovací stavy, kombinace zatížení a kombinace výsledků. V následujícím příspěvku si předvedeme, jak si mohou uživatelé sami vytvářet vlastní nástroje.

Obr. 01 - Individuálně vytvořený EXCEL nástroj v programu RFEM

Základy

Chceme-li vytvořit uzel, který vytvoří nelineární uzlové podpory v uzlu aktuálně vybraném v programu. Potřebné jsou následující jádrové prvky:

  • Získat aktuálně vybrané uzly
  • Vytvoření uzlové podpory
  • Vytvoření a přiřazení nelinearit
  • Vytvoření nástroje v programu

Následující body budou zpracovány. Z tohoto důvodu jsou znalosti z předchozích článků nutné a nebudou znovu projednány. Již obsažené prvky v dostupném zdrojovém kódu, jako například získání struktury v komentářích, ovšem téměř dokumentují.

Získat aktuálně vybrané uzly

Úpravy vybraných prvků přes rozhraní COM se provádějí s již známými funkcemi jako například IModelData.GetNodes pro uzly. Pokud chceme vybrané prvky vrátit pouze, je třeba provést úpravu aktuálního výběru pomocí příkazu 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'
Volba iModDat.EnableSelections Pravda 'Pracuje pouze s vybranými objekty
Dim uzly () As RFEM5.Node
uzly = iModDat.GetNodes
Volba iModDat.EnableSelections Falešný 'znovu pracovat se všemi objekty

Po načtení vybraných uzlů je EnableSelections nastavena na hodnotu Nesprávná, protože se může stát častým zdrojem chyb. Vzhledem k tomu, že uzelová podpora vyžaduje seznam uzlů jako řetězec, vytvoří se takto:

'Vytvořit seznam uzlů'
Dim Seznam node As Řetězec
DimAsDlouhé
Pro i = 0 DoUBound (uzly, 1)
nodeList = uzelVýpis & uzly (i) .No & ","
Další I

Vytvoření uzlové podpory

Nelinearita, v tomto případě diagram, je samostatným prvkem. Uzlové podpoře lze přiřadit, pouze pokud je v konstrukci již k dispozici. Proto je třeba založit uzlové podpory podle známých principů předchozích příspěvků:

'Vytvořit uzlové podpory
Dim nodSup As RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Falešný
nodSup.IsValid = Pravda
nodSup.nodeList = seznam node
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0.01
nodNávrataRestaveníKonstantY = 0,01
nodNávrataRestaveníConstantZ = 0.01

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

'Definovat nelinearitu'
NodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
Podpora iModDat.SetNodalSupport
iModDat.FinishModification

Jak lze vidět v kódu, typ WorkingDiagramType je označen jako nelinearita v globálním směru z.

Vytvoření a přiřazení nelineárních podpor

Nelineární podpora již byla připravena pro nelinearitu WorkingDiagramType, je třeba ji vytvořit:

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

nldgrm.ForceType = TuhostDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAzastavenTyp.Typ.TentoTentoDiagramTyp
nldgrm.Symmetrický = Pravda

'Vytvořit diagram
ReDim nldgrm.PositiveZone (3, 1)
nldgrm.PositiveZone (0, 0) = 0 #
nldgrm.PositiveZone (0, 1) = 0 #

nldgrm.Pozitivnízóna (1, 0) = 0,01
nldgrm.Pozitivnízóna (1, 1) = 100

nldgrm.Pozitivnízóna (2, 0) = 0,03
nldgrm.Pozitivnízóna (2, 1) = 200

nldgrm.Pozitivnízóna (3, 0) = 0,05
nldgrm.Pozitivnízóna (3, 1) = 300

Diagram se skládá z dvourozměrného pole. První rozměr odpovídá datovému záznamu a druhému rozměru prvkům datové sady. Zde je prvním prvkem v sadě dat posun v m a druhý silou v N. Výše uvedený příklad tak například vytvoří čtyři sady dat, kde třetím bodem diagramu jsou 30 mm a 0,2 kN. Tato nelinearita musí nyní být přiřazena dostupné podpoře. Za tímto účelem uvedeme rozhraní k uzlové podpoře a následně k nelinearitě:

'Použití nelinearity'
Dim iNodSup As RFEM5.INodalSupport
Nastavit iNodSup = Podpora iModDat.GetNodalSupport (100, BodVýpočet)
Dim iNldiag As RFEM5.INonlinearityDiagram
Nastavit iNldiag = iNodSup.GetNonlinearita (po délceAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

Nelinearita leží podél osy Z, a proto je třeba ji zvolit, pokud vyvoláme LengthAxisZ. Jsou zařazeny do známého modifikačního bloku.

Vytvoření nástroje v programu

V RFEMu lze externí programy integrovat. V takovém případě je třeba v programu RFEM.ini upravovat. Na rozdíl od programování ve složkách C # a VB, kde je vytvořen spustitelný soubor, je třeba u programu VBA použít Excel. Příkaz Excel může přiřadit otevřenému souboru při spuštění. Takto by vypadalo toto z příkazového řádku, kde je soubor Excel uložen pod C: \ temp a Excel je nainstalován jako 32bitová verze:
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Otevře se tak soubor Excel. Vzhledem k tomu, že lze v RFEMu otevřít pouze externí program bez dalších argumentů (například název souboru EXCEL.EXE), je třeba vytvořit dávkový soubor systému Windows.Tento jednoduchý textový soubor s příponou ".bat" je jako Windows Zahrnuje spustitelný soubor EXE. Pro vytvoření souboru TXT je třeba například vytvořit soubor TXT, který po vytvoření obdrží novou příponu „.bat“. Tento dávkový soubor (dále jen EXCEL-Werzeug.bat) musí obsahovat následující záznam:
"C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
To odpovídá příkazu tak, jak bychom zadali v příkazovém řádku.

Po vytvoření spustitelného souboru je lze zadat do souboru RFEM.ini jako externí nástroj. RFEM.ini se nachází v programu RFEM (standard pro program RFEM 5.07 64-Bit: C: \ Program Files \ Dlubal \ RFEM 5.07). Je třeba doplnit následující údaje:

Název_modelu2 = nástroj EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Werkzeug.bat"
Modul Popis2 = Nelineární krajní uvolnění prutu

Samozřejmě je třeba uložit dávkový soubor EXCEL-Werkzeug.bat a makro tabulka1.xlsmauch pod C:/temp/.

Abychom zajistili automatické spuštění makra, musíme spustit podprogram v podprogramu, který otevřeme automaticky. Tento podprogram se nazývá Workbook_Open a musí být uložen v sešitu.

Obr. 02 - Subrutina Workbook_Open uložená do sešitu

Nyní chybí, že Excel bude po úspěšném spuštění ukončen. Pokud dojde k chybě nebo se program RFEM neotevře, mělo by být možné makro upravit Za tímto účelem se rozlišuje případ. Celá šablona vypadá následovně:

Soukromé SubWorkbook_Open ()

Msgstr "Chyba při ručním spuštění programu RFEM
Při chybě v programu GoTo e

Přináší rozhraní RFEM
Dim iApp AsRFEM5.Aplikace
Nastavit iApp = GetObject (, "RFEM5.Aplikace")

e: 'Pokud dojde k chybě, zobrazí se hlášení' RFEM not open '
Pokud Err.Number <> 0 Poté
MsgBox "RFEM není otevřen", Err.Source
   Konec Sub
Koniec Pokud

'Chyba při zpracování rutinního programu
Při chybě v programu GoTo f

Licence z programu COM a přístup k programu jsou blokovány
iApp.LockLicense

'Získat rozhraní pro aktivní model
Dim iModel As RFEM5model
Pokud iApp.GetModelCount> 0 Poté
Nastavíme iModel = iApp.GetActiveModel
Else
'Chyby, pokud není k dispozici dostatek modelů
Err.Raise vbObjectError, "LoadModel ()", "iApp.GetModelCount <1"
End If

'Prostor pro vlastní zdrojový kód

f: 'Chyby při zachycení ze zdrojového kódu
Číslo Err.Number <> 0 Pak
MsgBox Err.Description ,, Err.Source
'Licence COM se uvolní a programový přístup je opět možný
iModel.GetApplication.UnlockLicense
'Nástroj by měl Excel zachovat, pokud dojde k chybě
   Konec
End If

Po uvolnění protokolu COM je přístup k programu opět možný
iModel.GetApplication.UnlockLicense
'Nástroj by měl aplikaci Excel ukončit, jakmile je aplikace úspěšná
Aplikace.Přestat

Konec podřízené

Nyní chybí pouze odkaz na dříve vytvořený podprogram, který se nachází pod položkou "Místo pro vlastní zdrojový kód". Zdrojový kód je k dispozici na následujícím odkazu.

Shrnutí

Vytvoření nelineární uzlové podpory je doplněním předchozích příspěvků, zatímco vytvoření externího modulu představuje nové území. Vložení je méně problematické, pokud používáme spustitelné soubory, jako obvykle vytvořené pomocí programu Visual Studio a VB nebo C #. Z tohoto důvodu jsme popsali složitější proceduru v Excelu.

Ke stažení

Odkazy

Kontakt

Kontakt

Máte dotazy nebo potřebujete poradit?
Kontaktujte prosím kdykoli naši bezplatnou technickou podporu e-mailem, na chatu nebo na fóru anebo se podívejte do sekce často kladených dotazů (FAQ).

+420 227 203 203

info@dlubal.cz

RFEM Hlavní program
RFEM 5.xx

Hlavní program

Program RFEM pro statické výpočty metodou konečných prvků umožňuje rychlé a snadné modelování konstrukcí, které se skládají z prutů, desek, stěn, skořepin a těles. Pro následná posouzení jsou k dispozici přídavné moduly, které zohledňují specifické vlastnosti materiálů a podmínky uvedené v normách.

Cena za první licenci
3 540,00 USD
RFEM Ostatní
RF-COM 5.xx

Přídavný modul

Programovatelné rozhraní COM

Cena za první licenci
580,00 USD