Zobrazit plnou verzi příspěvku: Dosiahnutie rozmedzia požadovanej hodnoty

hanc.mat
12.10.2018, 11:53
Dobrý deň, Chcel by som si vypočítať vzdialenosť dier(B) od okraja valca ak mám definovanú šírku valca, rozstup dier medzi sebou a priemer dier i požadovanú hodnotu ktorá je akceptovatelná na začiatku a konci poľa dier(patternu). Rozstup dier v poli A = 12 mm Dĺžka valca = DV = je premenliva a uživateľom definovanávzdialenosť od okraja valca = B, jedná sa o súmernú súčiastkuPočet dier = Pocet_dier= DV/Avzdialenosť od okraja = B = (DV - (floor(ND)*A))2Ja ale požadujem aby 8.5<B<12.5Teda potrebujem pravidlo: Select Case B Case Is < 8.5     Pocet_dier = (((DV / (A * 2))) - 1)     B = ( TrackWidth - ( Pocet_dier * A * 2 ul ) ) / 2 ul Case Is > 12.5        Pocet_dier = (((TrackWidth / (A * 2))) + 1)     B = ( DV - ( DDPB5 * A * 2 ul ) ) / 2 ul     Return ´bez return to nevracia diery súmerne do streduCase 8.5 To 12.5     DDPB2 = ((TrackWidth / (RowToRowDistance * 2)))     RuleParametersOutput()End Selectbez return to nevracia diery súmerne do streduOtazka je ako nechat iLogic aby overil hodnotu a ak nieje spravna vypočítal hodnotu ktorá bude v rozmedzi od 8.5 do 12.5 inač musi opakovat if kde pročíta alebo odpočíta 1 dieru. Kedže dĺžka sa mení ľubovolne od 0 do 1000 mm.Ďakujem za akýkoľvek nápad. Skúšal som to podmieňovať IF mi ale neberie to, a pri While End While sa mi to zacyklí.

Vladimír Michl
12.10.2018, 12:43

Aniž bych se pouštěl do geometrických rozborů, logika algoritmu mne spíš vede k řešení typu: - spočíst všechny proměnné- WHILE "B mimo meze" - IF "B přelezlo hranici" THEN provést korekční výpočet B - IF "B podlezlo hranici" THEN provést jiný korekční výpočet B- END WHILE nebo místo korekčního výpočtu jen přidat/ubrat díru a cyklit ještě až přes to počítání proměnných

hanc.mat
12.10.2018, 13:31
Ak pouzijem While B<8.5i=1Počet dier = (prvotny pocet dier) - i)End While dojde k nekonecnemu vypoctu !Skusam uy verziu ze nanovo neprepočívam prvotné výpočty ale po podmienke že je čislo menšie/vacsie ako požadované tak mi počita nanovo hodnotu.Ako napísať že ak si dosiahol hodnotu sprav nič?

Vladimír Michl
12.10.2018, 13:37

to je ten while - není-li splněna podmínka, neprovede se nic (pokud přepočet v onom příkladu vždy vede ke zvětšení B, pak by smyčka měla skončit, protože B přeleze těch 8.5)

Navara
12.10.2018, 13:49

Nevystačil byste si jenom s parametry? Zkuste se podívat na tohle vlákno:https://www.cadforum.cz/forum/forum_posts.asp?TID=26469&KW=&title=parametryŘeší se tam sice zábradlí, ale princip je stejný.

hanc.mat
12.10.2018, 14:16
nie nevystačim si s parametrami nakoľko ja potrebujem overenie pomocou iLogicu a hlavne na koci si z toho robím formular s výberom kde si môžem meniť premenne a kde už potom ani to čo je v prvotnom priklade fix nebude fix.Teda pevná ,,rozteč" medzi dierami. Bude fixna ale podla už existujúceho pravidla naviazaná na veľkosť diery. Samozrejme šírka sa môže meniť v 0,5mm intervaloch a z toho si nema zmysel vytvarať excel tabulku a hľadať v nej prieniky. To je ľahšie prísť nato ako funguje prikaz ,,while,, a rozbehať ho do funkčného prikazu. Zatiaľ som došiel nato že asi bude treba pridavať len +1,+2 alebo -1,-2 a malo by to sedieť tak momentalne vytvaram len zbytočne velky IF ktory to ošetri. a vytvori X 6 novych parametrov ak sa nieco tak ...ja by som skor potreboval ozrejmiť čo v mojom prikaze Select Case mam doplniť poprípade zameniť Case za IF s podprikazom While ... aby sa to necyklilo dookola ... a overilo mi hodnotu a ak nieje pravdivaupravali mi tu hodnotu ipravou +-i kým pravidlo sa nestane pravdou.Skúšam to While ale zatial len 10x restart Inventora

hanc.mat
12.10.2018, 14:29
Select Case BCase Is < 8.5     Pocet_dier = (((DV / (A * 2))) - 1)     B1 = ( dlžka_valca - ( Pocet_dier * A * 2 ul ) ) / 2 ul      IF 8.5 > B1        Pocet_dier_1 = Pocet_dier - 1        B2 = ( dlžka_valca - ( Pocet_dier_1 * A * 2 ul ) ) / 2 ul...RuleParametersOutput()End Selecttýmto zIfovaním to viem vypočítať Otázka je ako to zjednodušiť aby som si nasledne nemusel kontrolovať ktorá hodnota (B, B1,B2, ..:Bx) je v rozmedzi od 8.5 do 12.5???hanc.mat2018-10-12 14:32:40

hanc.mat
15.10.2018, 10:02
takze som zistil že v danom rozmedzi sa to vie zacyklit lebo dana hodnota pri danych vstupoch nieje vzdy dosiahnutelnaDakujem za ochotu a snahu o pomoc

hanc.mat
16.10.2018, 13:41
Ak by niekoho zaujímalo riešenie mojeho problému tak: IF 8.5> B ThenDo While 8.5 > B     Pocet_dier = (((DV / (A * 2))) - 1)     B = ( dlžka_valca - ( (Pocet_dier-1) * A * 2 ul ) ) / 2 ul LoopEnd If