Zobrazit plnou verzi příspěvku: LSP se sekne na příkazu LIMITS

Kubeczka
07.06.2016, 14:27

Zdravím. Mám hodně programů v LISPu, které používají příkaz LIMITS. Na některých CAD stanicích ať už s Windows 7 nebo 10 tyto programy havarují právě na tomto příkazu. Tyto LISPy už chodí spolehlivě od verze 2002 do 2014 (2015 jsme přeskočili). Zkusil jsem smazat uživatelům jejich profily a znova je vytvořit - zafungovalo to, ale jen dočasně. Po několika dnech se problém objevil znova. Už mě nic nenapadá. Prosím, pomozte. Děkuji.

Vladimír Michl
07.06.2016, 16:31

Co konkrétně to hlásí? Jakým způsoben je příkaz volán? Pošlete okolní kus kódu.

Kubeczka
08.06.2016, 08:16

Přikládám koncovou sekci programu: ;********************************************        (setq nfile (getvar "DWGNAME"))        (setq cesta (getvar "DWGPREFIX"))        (setq scrfile (strcat cesta "DWG-PDF.scr"))        (setq dlns (strlen nfile))        (setq nfile (substr nfile 1 (- dlns 4)))        (setq zn (chr 34))        (PrintFileName)        (if (= (findfile scrfile) nil) (setq f (open scrfile "w"))                                       (setq f (open scrfile "a"))        )        (write-line "-PLOT" f)        (write-line "_Y" f) ;Detailní konfigurace vykreslování? [Ano/Ne] <Ne>: _Y        (write-line "Model" f) ;Zadejte název rozvržení nebo [?] <Model>: Model        (write-line "DWG-PDF.pc3" f) ;Zadejte název výstupního zařízení nebo [?] <DWG-PDF.pc3>:        (write-line FormPDF f) ;Zadejte velikost papíru nebo [?] <TZA1 (594.00 x 841.00 MM)>:        (write-line "_M" f) ;Zadejte rozměry papíru [Palce/Milimetry] <Milimetry>:        (write-line natoc f) ;Zadejte orientaci výkresu [na Výšku/na šířKu] <šířKu>: _L        (write-line "_N" f) ;Kreslit vzhůru nohama? [Ano/Ne] <Ne>: _N        (write-line "_W" f) ;Zadejte vykreslovanou plochu [Displej/Maximálně/meZe/Pohled/Okno] <meZe>: _W        (write-line (strcat (rtos (car pt1)) "," (rtos (cadr pt1))) f)        (write-line (strcat (rtos (car pt2)) "," (rtos (cadr pt2))) f)        (write-line "_F" f) ;Zadejte měřítko vykreslování (Vykreslené Pixely=Kreslící jednotky) nebo [Maximálně] <Maximálně>: _F        (write-line "_C" f) ;Zadejte odsazení vykreslování (x,y) nebo [Centrovat] <Centrovat>: _C        (write-line "_Y" f) ;Vykreslit se styly vykreslování? [Ano/Ne] <Ano>: _Y        (write-line "TZ_SV_BTk_Ploter.ctb" f) ;Zadejte název tabulky stylu vykreslování nebo [?] (zadejte . pro žádnou) <TZ_SV_BTk_TIFF.ctb>:        (write-line "_Y" f) ;Vykreslovat s tloušťkou čar? [Ano/Ne] <Ano>: _Y        (write-line "_W" f) ;Zadejte nastavení stínovaného výkresu [dle Zobrazení/Drátový/Skrytý/Rendering] <Drátový>: _W        (write-line nfile f)        (write-line "_N" f) ;Uložit změny do nastavení stránky [Ano/Ne]? <N> _Y        (write-line "_Y" f) ;Pokračovat s vykreslováním [Ano/Ne] <A>: _Y        (write-line "_Delay" f)        (write-line "1000" f)        (close f)        (if (= i (- dl 1))          (progn            (setq f (open scrfile "a"))            (write-line "(ukonceni)" f)            (close f)          )          (setq i (1+ i))        )      )    )  )  (setq pt1max (list xpt1max ypt1max 0.0))  (setq pt2max (list xpt2max ypt2max 0.0))  (command "_LIMITS" pt1max pt2max)  (command "_ZOOM" "_W" pt1max pt2max);********************************************; Spuštění tisku;********************************************  (setvar "FILEDIA" 0)  (command "_SCRIPT" scrfile);***************************************************************************; Ukončení;***************************************************************************(defun ukonceni ()  (setq prikaz (strcat "del " (chr 34) scrfile (chr 34)))  (command "_SHELL" prikaz)  (command "_REGENALL")  (setvar "CMDDIA" 1)  (setvar "FILEDIA" 1)  (setvar "CMDECHO" 1)  (setvar "ATTDIA" 1)  (setvar "OSMODE" 255)  (princ));***************************************************************************)  Program si nejprve ošahá modelový prostor, najde v něm bloky rámečků (musí být stejné - více listů jednoho výkresu) a zjistí maximální rozměry, tedy levý dolní a pravý horní bod. Pak vygeneruje skriptovací soubor s posloupností příkazů _-plot a následně jej spustí. Po dokončení pak pomocí příkazu SHELL skriptovací soubor vymaže. Program zhavaruje na příkazu LIMITS, kde očekává vstupní body. Tedy buď čeká na příkazu LIMITSnebo skript projede celý i LISP, ale v Podrobnostech publikování a vykreslování vypíše hlášku:Chyby nevykresleny - Neplatné okno.Problém je v tom, že skript je vygenerován správně, včetně správně zadaných souřadnic rohů vykreslení. Aby toho nebylo málo, tak se k tomu druží problém s textovým oknem, které sice po zmáčknutí F2 se aktivuje, ale okamžitě zmizí za oknem AutoCADu, takže je nemožné se k němu dostat. Jedině přes druhý monitor nebo zmenšením oken.

Kubeczka
08.06.2016, 09:13

Jen pro pořádek: AutoCAD Mechanical 2016 SP1Windows 7Windows 10 jen na některých CAD stanicích (na větší polovině to chodí)

Vladimír Michl
08.06.2016, 09:13

Asi bude záležet jakou hodnotu mají symboly xpt1max, atd. - možná si je těsně před tím LIMITS vypište (PRINT). Ale hlavně nechápu, k čemu tam ten LIMITS (a i ten ZOOM) je - následné vykreslení se stejně děje na volbu Okno (s jinými body pt1 a pt2).

Vladimír Michl
08.06.2016, 09:40

F2 ale standardně není na textové okno - viz tip:http://www.cadforum.cz/cadforum/klavesa-f2-mi-neotevre-textove-okno-autocadu-tip10949

Kubeczka
08.06.2016, 10:19

LIMITS je tam od dob, kdy to někteří zákazníci vysloveně požadovali a ZOOM jsem přidal pro kontrolu výkresu. Není to úplně zbytečné. Hodněkrát to upozornilo na chyby konstruktérů ve výkresech.

Kubeczka
08.06.2016, 10:24

Hodnoty xpt1max atd. jsem kontroloval - jsou v pořádku a také jsou správně vloženy do skriptu.Vzpomínám si, že když začaly tyhle problémy, tak tyto hodnoty byly nilové. Přitom ve všech nižších verzích AutoCADu tyto programy pracovaly spolehlivě. Neměli by v Autodesku prověřit proměnné, jestli nedochází k přepisu?

Vladimír Michl
08.06.2016, 10:57

To ale nejsou proměnné Autodesku, nýbrž vaše - pokud mají hodnotu nil, program je zřejmě někde nenastavuje správně (to v poskytnuté části kódu není). LIMITS a ZOOM jsou zde zbytečné pro účely vykreslování - pokud ale program dělá ještě něco jiného, pak je tam nechte.

Kubeczka
08.06.2016, 11:38

Neměl jsem na mysli svoje proměnné.Na některých stanicích tento program nenastavil moje proměnné a zasekl se pak zákonitě na příkazu LIMITS, na stejných dnes proměnné nastavil, zapsal do skriptu, ale ve výsledku vyhodil chybu v Podrobnostech. A na větší polovině CAD stanic funguje.Chcete říct, že když mi programy běží spolehlivě 10 let a pak najednou ve verzi 2016 havarují za stejných podmínek (rozuměj stejné výkresy), tak je to moje chyba? Napište mi, prosím, v čem. Rád bych ten problém vyřešil. Děkuji.

Kubeczka
08.06.2016, 12:35

Provedl jsem jeden test:Body limity jsou vypočteny a zadány správně, ale příkaz LIMITS zahlásil - Neplatné meze, chyba, funkce zrušena.Příkaz LIMITS přesto chce zadat levý dolní roh a nabízí souřadnice přesně vypočítané programem,po odklepnutí chce zadat pravý horní roh a nabízí souřadnice přesně vypočítané programem,pak úspěšně skončí. Když však chci na příkazový řádek zadat:(command "_LIMITS" pt1max pt2max), tak zahlásí chybu (viz. výše).Následně vložím řádek:(command "_ZOOM" "_W" pt1max pt2max), který úspěšně provede.Tak, a teď "babo" raď.Prošel jsem dalších pár stanic, ale u nich to funguje dobře.

Kubeczka
08.06.2016, 12:43

Další test:Vyhodil jsem z programu řádek s příkazem LIMITS a spustil ho.Program proběhl, ale v Podrobnostech publikování a vykreslování vypíše hlášku:Chyby nevykresleny - Neplatné okno.Přičemž souřadnice jsou vypočteny správně. 

Kubeczka
08.06.2016, 13:31

Na jedné stanici jeden den to fungovalo dobře, na druhý už nikoliv.Co je v AutoCADu Mechanical 2016 nestabilního? A nebo nestíhá vykonávat řádky LISPu interpreterem?Zkusím dát za každý řádek příkaz DELAY.Pane Michl, můžete zareagovat? Děkuji

Vladimír Michl
08.06.2016, 14:02

Pošlete asi nejlépe plný program na Helpdesk - z kusů kódu se nedá poznat kde se může "nepovést" nastavení některé z oněch uživatelských proměnných - programový kód z nějakého důvodu používá různé proměnné na určení rohů okna. Příkaz LIMITS (a asi tedy i ten PLOT W) nejspíše selže proto, že ony uživatelské proměnné určující okno mají v ten okamžik nesprávně nastavenou hodnotu.

Kubeczka
09.06.2016, 07:40

Bohužel, nejsem zákazníkem CAD Studia, proto se nemohu přihlásit do Helpdesku.Testoval jsem program ve VisualLISPu krokováním a sledováním proměnných.Vše proběhlo naprosto korektně, skriptovací soubor byl korektně vytvořen, uzavřen a pak spuštěn.Výkres obsahuje dva listy - u prvního listu se objevilo okénko s průběhem operace, u druhého už ne.Skončilo to hlášením v Podrobnostech publikování a vykreslování:Chyby nevykresleny - Neplatné okno.Přičemž souřadnice byly naprosto přesné atd. Přikládám výpis skriptu: -PLOT_YModelDWG-PDF.pc3TZA0 (1189.00 x 841.00 MM)_M_L_N_W5945,011890,4205_F_C_YTZ_SV_BTk_Ploter.ctb_Y_W"K:\DATA_ALL\NohalP\2016\Danieli-podvesny manipulator\Manipulator-1504\04-Mezitraverza\91600009__.02.pdf"_N_Y_Delay1000-PLOT_YModelDWG-PDF.pc3TZA0 (1189.00 x 841.00 MM)_M_L_N_W0,05945,4205_F_C_YTZ_SV_BTk_Ploter.ctb_Y_W"K:\DATA_ALL\NohalP\2016\Danieli-podvesny manipulator\Manipulator-1504\04-Mezitraverza\91600009__.01.pdf"_N_Y_Delay1000(ukonceni)

Kubeczka
09.06.2016, 07:49

Proč to funguje na 8 z 10 stanic, přičemž všechny mají stejné nastavení, stejný profil uživatele, stejný profil v AutoCADu Mechanical, stejné nastavení tiskáren, jak systémových tak AutoCADových, pracovní adresáře i cesty k podpůrným souborům jsou nastaveny stejně, spouští stejné LISPy, všichni používají stejnou šablonu se stejně nastavenými systémovými proměnnými AutoCADu Mechanical atd.? Ladění proběhlo úspěšně až na konečný tisk. Proč to fungovalo bezmála 10 let a teď najednou ne?Podle staré moudrosti (nejen IT) je 99,9% chyb mezi klávesnicí a židlí. Jen najít tu pravou. Stále méně jsem přesvědčen, že je to ta moje.

Vladimír Michl
09.06.2016, 08:05

Těch důvodů selhání může být celá řada (namátkou třeba nastavení LIMCHECK nebo priority uchopování). Bez konkrétního výkresu a celého kódu to asi neodhalíme (Helpdesk je i pro "cizí" zákazníky - jako placená služba).

Kubeczka
09.06.2016, 08:14

Po dobu běhu programu je uchopování vypnuto - OSMODE=0

Kubeczka
16.06.2016, 07:25

Vypadá to, že se do AutoCADu přihrávají nezávisle nějaké pluginy, ale jestli ony způsobují havárie při odesílání dat na tiskárny, to nedokážu říct. Na radu kolegů jsem porovnal extrahované registry s korektním nastavením a špatným.