V dnešním článku si ukážeme sice jednoduché ale podle mě užitečné pravidlo. Vytvoříme si pravidlo, které nám při vytváření plechového dílce bude hlídat jeho mezní hodnoty tak, aby se nám rozvin tohoto výrobku vešel do našeho polotovaru. Máme plech metr krát metr a nechceme svařovat? Pak si musíme pohlídat aby se nám rozvin výrobku na něj vešel. A nejlépe na to použít právě pravidla iLogic.
Pokud při vytváření plechového výrobku přesáhneme předem nastavené mezní hodnoty tak se nám celý plechový díl zabarví do červena. Jakmile hodnoty spravíme tak se barva vrátí do původní. A protože jsme se v minulých článcích již naučili s iLogicem pracovat tak si ho uděláme tzv. blbuvzdorné. Sám si vytvoří proměnné a sám se nás zeptá na jejich nastavení při prvním spuštění ze šablony.
A jako vždy uvádím nejdřív celý zdrojový kód iLogicu, který si můžete jednoduše zkopírovat do prázdného iLogic pravidla a vše Vám bude fungovat. Pravidla máme tentokrát 2. První nám při vybrání šablony a vytvoření souboru nastaví velikost polotovaru a druhé pravidlo hlídá změny modelu a kontroluje velikosti:
Pravidlo 1: “PocatecniNastaveni”
oMyParameter=ThisApplication.ActiveDocument.ComponentDefinition.Parameters.UserParameters nastX= InputBox("Nastavte maximalni hodnotu X", "Nastaveni polotovaru", "") nastY= InputBox("Nastavte maximalni hodnotu Y", "Nastaveni polotovaru", "") Try Parameter("MAX_X") = nastX Catch oParameter=oMyParameter.AddByExpression("MAX_X", nastX, UnitsTypeEnum.kMillimeterLengthUnits) End Try RuleParametersOutput() InventorVb.DocumentUpdate() Try Parameter("MAX_Y") = nastY Catch oParameter=oMyParameter.AddByExpression("MAX_Y", nastY, UnitsTypeEnum.kMillimeterLengthUnits) End Try RuleParametersOutput() InventorVb.DocumentUpdate() Try Parameter("BARVA_SAVE") = Parameter("BARVA_SAVE") Catch oParameter=oMyParameter.AddByValue("BARVA_SAVE", "", UnitsTypeEnum.kTextUnits) End Try
Pravidlo 2: “HlidaniRozmeru”
InventorVb.DocumentUpdate() x = MaxOfMany(SheetMetal.FlatExtentsLength, SheetMetal.FlatExtentsWidth) y = MinOfMany(SheetMetal.FlatExtentsLength, SheetMetal.FlatExtentsWidth) maxX = MaxOfMany(Parameter("MAX_X"), Parameter("MAX_Y")) maxY = MinOfMany(Parameter("MAX_X"), Parameter("MAX_Y")) If iProperties.PartColor<>"Red" AndAlso iProperties.PartColor<>"Červená" Then Parameter("BARVA_SAVE") = iProperties.PartColor End If If x > maxX Or y > maxY Then iProperties.PartColor = "Red" MessageBox.Show("Přesáhli jste velikost polotovaru." & vbLf & "Velikost polotovaru je:" & Parameter("MAX_X") & "x" & Parameter("MAX_Y") & vbLf & "Velikost Vašeho modelu je:" & Ceil(x) & "x" & Ceil(y), "POZOR!",MessageBoxButtons.OK,MessageBoxIcon.Error) ThisApplication.ActiveView.Update() Else iProperties.PartColor = Parameter("BARVA_SAVE") ThisApplication.ActiveView.Update() End If
Nebo si také celé ipt můžete stáhnout, uložte jako šablonu a používejte (Inventor 2016):
iLogic soubor - Mezní Hodnoty Plechu
Vysvětlení kódu iLogic
Počáteční Nastavení
A nyní jdeme postupně si vysvětlit všechny části kódu. A začneme prvním pravidlem. Toto pravidlo jsem si nastavil přes iSpouštěč, aby se spustilo v momentě vytvoření dokumentu z této čistě šablony.
Z tohoto pravidla většinu už známe. Řádek oMyParameter má v podstatě jen zkracovací funkci. Nastavíme do něj cestu k parametrům kterou pak několikrát použijeme zkráceně jen jako oMyParameter. Novinkou pro nás jsou 2 řádky s InputBox – Díky nim na nás při vytvoření dokumentu vyskočí okno do kterého když zadáme hodnotu tak se nám uloží do proměnné nastX a nastY a ty si pak dále přeuložíme do pevných parametrů modelu.
Následují tři bloky začínající Try a končící End Try. Jinak řečeno, nejdříve si přes Try zjistíme, zda je již v tabulce parametrů vytvořený uživatelský parametr MAX_X. Který samozřejmě nebude existovat při prvním spuštění pravidla a následně už vždy bude. Tudíž pokud neexistuje tak pomocí Catch přejdeme dále, kde si vyhodíme InputBox ve kterém se uživatele zeptáme na jednu mezní hodnotu polotovaru. Jakmile ji zadá, tak se zapíše do proměnné nastX, která se po té použije při vytvoření uživatelského parametru MAX_X pomocí funkce oParameter. Parametr bude zadán v tomto případě v milimetrech – UnitsTypeEnum.kMillimeterLengthUnits.
Následuje úplně stejný blok, akorát pro druhou hodnotu MAX_Y. A poslední Try blok je pro barvu. Pokud naše pravidlo zjistí, že jsme přesáhli mezních hodnot, tak změní barvu modelu na červenou. A jakmile model změníme tak musí umět vrátit barvu zpátky a aby ji mohl vrátit zpátky tak ji musí mít někde uloženou. Proto si barvu budeme ukládat do parametru BARVA_SAVE. Pokud tedy pomocí Try zjistíme, že parametr neexistuje tak si jej vytvoříme, abychom do něj mohli dále zapisovat.
Hlidaní Rozměru
První pravidlo máme hotovo, parmatry vytvořeny a nastaveny, takže jdeme na pravidlo druhé:
InventorVb.DocumentUpdate()
Pokud s iLogicem pracujete pravidelně tak se naučíte, že pokud Vám něco nefunguje a mělo by, tak tam zkuste přidat aktualizaci dokumentu. Co se stane když tento kus kódu vynecháme? iLogic nám zůstane lidově řečeno pozadu. Jakmile nastavíme kótu pro délku (např. d0) na 1400mm kde v mém případě by už měl řvát, jelikož rozvin by měl být 1570mm, tak nezařve a místo toho nám řekne že je vše v pořádku. Bude totiž pracovat s kótou, která tam byla posledně (v mém případě 1300mm), což je s rozvinem 1470mm a to je v pořádku. Takže si tímto řádkem pomůžeme, aby měl vždy aktuální data.
Dále si zjistíme velikost rozvinu:
x = MaxOfMany(SheetMetal.FlatExtentsLength, SheetMetal.FlatExtentsWidth)
y = MinOfMany(SheetMetal.FlatExtentsLength, SheetMetal.FlatExtentsWidth)
Pozor! Neni XY jako XY. V našem případě je X vždy ta delší kóta a Y vždy ta kratší. Což na výsledku nic nemění. Koukáme totiž na celý rozvin a jestli rozvin jako takový dokážeme umístit na náš polotovar. A abychom porovnávaly jablka s jablky tak si ještě porovnáme námi zadané mezní hodnoty polotovaru a vytáhneme nejdelší a nejkratší:
maxX = MaxOfMany(Parameter(„MAX_X“), Parameter(„MAX_Y“))
maxY = MinOfMany(Parameter(„MAX_X“), Parameter(„MAX_Y“))
Dík těmto čtyřem řádkům tak budeme porovnávat nejdelší stranu s nejdelší a nejkratší s nejkratší. Nestane se nám tak, že by nám model zařval při rozměrech 900×1500, když je náš polotovar v délkách 2000×1000 – prostě bude vědět, že si náš plech na polotovaru můžeme otočit a tak se druhá strana vleze.
Ještě nám chybí uložení aktuální barvy do proměnné, abychom ji posléze mohli použít:
If iProperties.PartColor<>„Red“ AndAlso iProperties.PartColor<>„Červená“ Then
Parameter(„BARVA_SAVE“) = iProperties.PartColor
End If
Pokud je barva našeho modelu nastavená Red (červená v angličtině) nebo Červená, pak tento blok přeskočí. Pokud tak není, tak vezme barvu z iVlastností a uloží ji do naší proměnné.
A v poslední části kódu, která je ohraničená If a End If budeme kontrolovat celý smysl kódu a to zda jsme rozměry přesáhli nebo ne. Pokud jsme rozměry přesáhli (If x > maxX Or y > maxY Then), tak si jednak to iVlastností plechu nastavíme barvu Červená: iProperties.PartColor = „Red“, zaktualizujeme opět dokument ( ThisApplication.ActiveView.Update() ) , aby se nám změna aplikovala a vyhodíme uživateli hlášku, aby věděl co se s modelem stalo a že je něco špatně:
MessageBox.Show(„Přesáhli jste velikost polotovaru.“ & vbLf & „Velikost polotovaru je:“ & Parameter(„MAX_X“) & „x“ & Parameter(„MAX_Y“) & vbLf & „Velikost Vašeho modelu je:“ & Ceil(x) & „x“ & Ceil(y), „POZOR!“,MessageBoxButtons.OK,MessageBoxIcon.Error)
Jedinou část kódu, kterou jsme si z tohoto hlášení ještě nevysvětlovali je Ceil(). V tomto případě se jedná o běžnou matematickou funkci Ceiling. Ta nám zařídí, že nám pravidlo číselný parametr X zaokrouhlí nahoru na nejbližší celé číslo.
Nicméně pokud jsme mezní hodnoty nepřekoročili, tak se provede příkaz Else. Barva se nám vrátí z uloženého parametru BARVA_SAVE. Přes iSpoučtěče si nastavíme, aby se druhé pravidlo spouštělo vždy, když se změní geometrie modelu.
A to je pro dnes vše. Nyní máme připravenou šablonu plechu, která nám umí pěkně a zcela automaticky ohlídat mezní hodnoty našeho polotovaru. Pokud máte k příkladu nějaké otázky, můžete je napsat níže do komentářů. Rád Vám na ně odpovím. Pokud ještě nejste zaregistrováni na blogu, tak tak určitě učiňte a příště vás na nový článek upozorníme hned při vydání.
Při překliknutí z náčrtu do modelu v souboru plechu s tímto pravidlem spadne Inventor. Máme 2017.
Zkoušeli jsme to na více počítačích.
Dobrý den, taky mám Inventor 2017 a soubor s pravidlem v něm odzkoušený a u mě nepadá. Převzal jste soubor, který je zde ke stažení nebo jste se pokoušel dle návodu vytvořit vlastní pravidlo? Pokud vlastní můžete mi ho zaslat na e-mail? Podívám se na to, kde by mohla být chyba. (matej.skarka@adeon.cz)
Dobrý den, kód jsem překopíroval ze dvou oken, z této stránky. První pravidlo funguje bez problémů, to znamená že se objeví po sobě dvě okna na zadání mezí X a Y. U aktivace druhého pravidla Inventor spadne. Posílám vám to v textových souborech na E-mail.
Díky.