Stránka 18 z 20

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 12:15
od itbart
Zdar hošani!

může mi prosím někdo objasnit funkci LBL 0 ? Řádek 16 po vyhodnocení skočí na řádek 23 a program následně po provedení řádku 25 (LBL 0) pokračuje vesele na řádek 26 nikoliv zpět na řádek 17, jak bych očekával a program končí. Proč tomu tak je?
Použití LBL až za M30 je nutné (pokud neni splněna podmínka, pak nechci LBL provádět). Díky borci! :idea:

Kód: Vybrat vše

0  BEGIN PGM AAA MM 
1  BLK FORM 0.1 Z  X+35.9999  Y-61  Z+20
2  BLK FORM 0.2  X+2486  Y+1329  Z+35
3  ;
4  PLANE RESET STAY
5  CYCL DEF 7.0 NULOVY BOD
6  CYCL DEF 7.1  X+7.5
7  CYCL DEF 7.2  Y+17.5
8  CYCL DEF 7.3  Z+0
9  L  Z+0 R0 FMAX M91
10 L  B+0  C+0 FMAX
11 ;
12 Q50 = 0
13 Q51 = 10
14 ;
15 Q60 = Q50 ;MAX
16 FN 11: IF +Q51 GT +Q60 GOTO LBL "MAX2"
17 FN 16: F-PRINT TNC:\MERENI_Z_FORMAT.A / SCREEN:
18 FN 14: ERROR= 1010
19 L  Z+0 R0 FMAX M91
20 L  B+0  C+0 FMAX
21 M30
22 ;MAX
23 LBL "MAX2"
24 Q60 = Q51
25 LBL 0
26 L IX+100 FMAX
27 END PGM AAA MM 

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 2:07
od testone
zkus místo M30 na ř. 21 příkaz M2

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 2:45
od itbart
testone píše:zkus místo M30 na ř. 21 příkaz M2
Nezabralo. Je možné, že GOTO prostě neumožňuje návrat? CALL LBL 10 a LBL 0 mi funguje správně.

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 6:10
od jcerki
Ak chces aby ti LBL "skakal" v PGM , M30 (M2)musi byt az za danym LBL ... ty si vlastne preskocil M30 (M2), posunul si sa v X-e o 100mm a ukoncil si PGM bez M30 (M2) ...Pusti si to po bloku a uvidis ako to "skace" ...
V opacnom pripade musis PGM vytvorit tak , aby to pri splneni resp. nesplneni podmienky "skakalo" spravne ...
V tvojom PGM bude podmienka vzdy splnena ...

Pozn. M30 a M2 su identicke funkcie...

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 6:43
od jcerki
Tolerance prekrocena
Tolerance prekrocena
Pozor, pri takto definovanom ERROR-e ti stroj zastavi na danej vete (118) ... PGM sa nedokonci ...

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 6:56
od itbart
Diky moc za reakce. Po bloku jsem to zkousel - podminku to vyhodnoti podle ocekavani, ale LBL 0 se nevrati na radek 17 jak jsem ocekaval. Pouziti LBL za M30 si myslim ze je ok, pokud existuje predpoklad, ze LBL provest nechci, jen pokud bude splnena podminka. Musim to zkratka uchopit nejak jinak a vymyslet jine skoky :D Ano, na obrazku to vypad tak jak potrebuju :)

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 7:05
od jcerki
Dostal si moj mail ?

Re: HEIDENHAIN iTNC 530

Napsal: 14. 6. 2018, 9:55
od jcerki
Este som to trochu vylepsil :-)
Tolerance prekrocena.png

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 4:53
od doncarlos
Koukám, že žádná rada nejde na podstatu věci, umístění před nebo za M30 s tím niiak nesouvisí,
LBL 0 je prostě návratová instrukce pro ukončení podprogramu vyvolaného příkazem - pouze a jedině - CALL LBL,
interně v Heidnu při použití CALL LBL dojde k uložení adresy aktuálního řádku na tzv stack - zásobník, pak skok na podprogram,
ten se provádí až narazí na LBL 0, tehdy si přečte ze stacku návratovou adresu a přenese chod programu na tuto + 1,
pokud program jen tak narazí na LBL 0, tak na stacku nic není a program normálně pokračuje. Tento mechanismus
řeší i vnoření podprogramů, kdy se z podprogramu volá další podprogram. Celá interní realizace stacku je složitější,
ale pro vysvětlení to určitě stačí

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 9:06
od itbart
Díky, takhle jsem to chtěl slyšet :) Nakonec jsem to dal nějak dohromady - určitě to jde elegantnějším způsobem. :idea:

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 12:37
od doncarlos
Díky, takhle jsem to chtěl slyšet :) Nakonec jsem to dal nějak dohromady - určitě to jde elegantnějším způsobem.
No z výpisu vidím, že vše marno, nepochopil jsi vůbec nic.

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 12:57
od itbart
To si nemyslím, chápu to správně. Jen je zkrátka problém v tom, že IF a LBL jsem použil poprvé v životě - nemám přesnou představu o struktuře těchto cyklů v PGM, to je vše.

Edit: uznavam - pouziti LBL 0 je blbost, ale zaroven je to fuk.

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 3:44
od OompaLoompa
LBL 0 ti len označuje koniec tzv. "sub-rutiny"
ak chceš, aby ti to po "LBL 0" skákalo späť, musíš použiť CALL :!: namiesto GOTO

a myslím že podľa štandardu by mali byť všetky sub-rutiny/bloky v programe zadefinované až po M30, čiže minimálne z tohto pohľadu to jedno asi nie je..
 

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 6:09
od itbart
Souhlasim. Ale, IF CALL LBL zapsat nelze.

Re: HEIDENHAIN iTNC 530

Napsal: 15. 6. 2018, 8:54
od OompaLoompa
itbart píše:Souhlasim. Ale, IF CALL LBL zapsat nelze.
No veď OK, a čo tak namiesto toho tú podmienku znegovať, a použiť IF → GOTO na preskočenie CALL LBL? :)

Teda namiesto:

Kód: Vybrat vše

15 Q60 = Q50 ;MAX
16 FN 11: IF +Q51 GT +Q60 GOTO LBL "MAX2"
17 FN 16: F-PRINT TNC:\MERENI_Z_FORMAT.A / SCREEN:
to poňať dáko takto:

Kód: Vybrat vše

15 Q60 = Q50 ;MAX
16 FN 11: IF +Q51 LT +Q60 GOTO LBL "NOMAX"
17 FN 12: IF +Q51 EQU +Q60 GOTO LBL "NOMAX"
18 CALL LBL "MAX2"
19 LBL "NOMAX"
20 FN 16: F-PRINT TNC:\MERENI_Z_FORMAT.A / SCREEN:
Tie čísielka riadkov, FN, atď. si už uprav podla potreby..