Znaleziono 3 wyniki

autor: Leoo
24 wrz 2007, 19:47
Forum: Heidenhain
Temat: Programowanie parametryczne
Odpowiedzi: 84
Odsłony: 33149

Kolega zbytnio "rozczłonkował" algorytm.
LBL 23, LBL 5, LBL6 można scalić z główną gałęzią kopiując wiersze. W ten sposób zmniejszymy nieco objętość stosu procesora maszyny.
Ciekawi mnie jak zachowuje się np. moduł LBL 20. Powiedzmy, że jest wywołany przez CALL?
Poza tym LBL 20 i LBL 21 wyglądają dość podobnie, wręcz identycznie. Może wystarczy jeden z nich?
autor: Leoo
23 wrz 2007, 21:57
Forum: Heidenhain
Temat: Programowanie parametryczne
Odpowiedzi: 84
Odsłony: 33149

Pozwoliłem sobie zmienić kolejność podprogramów, zgodnie z poprzednim postem. Puste wiersze umieściełem w celu zwiększenia czytelności. Z analizy wynika jednokrotne przejście programu. Czy LBL 0, kończący moduł LBL 52 jest końcem programu? Jeśli tak, to brakuje wywołań do innych podprogramów, poza LBL 2 i LBL4 a algorytm wykonany będzie tylko raz.

TOOL CALL 15 Z S100
FN 0: Q30 =+0 ; WSPOLRZEDNA OSI X
FN 0: Q31 =+0 ; WSPOLRZEDNA OSI Y
FN 0: Q32 =+0 ; WSPOLRZEDNA OSI Z
FN 0: Q33 =+150 ; SREDNICA OBRABIANA
FN 0: Q34 =+100 ; SREDNICA WEJ-WYJ
FN 0: Q35 =+11 ; NADDATEK W OSI Z
FN 0: Q36 =+50 ; NADDATEK NA SREDNICY
FN 0: Q37 =+1 ; NADDATEK NA OSTATNIE PRZEJSCIE W OSI Z
FN 0: Q38 =+2 ; NADDATEK NA OSTATNIE PRZEJSCIE NA SREDNICY
FN 0: Q39 =+10 ; ILOSC PRZEJSC W OSI Z
FN 0: Q40 =+7 ; ILOSC PRZEJSC NA SREDNICY
FN 0: Q55 =+0 ;
FN 0: Q56 =+180 ; KAT WEJSCIA
FN 0: Q57 =+20 ; KAT WYJSCIA
FN 0: Q58 =+5000 ; POSUW FREZOWANIA
FN 0: Q59 =+2 ; RODZAJ FREZOWANIA
FN 9: IF +Q59 EQU +0 GOTO LBL 50 ; NA JEDNO PRZEJSCIE
FN 9: IF +Q59 EQU +1 GOTO LBL 51 ; FREZOWANIE SREDNIC
FN 9: IF +Q59 EQU +2 GOTO LBL 52 ; FREZOWANIE W OSI Z

LBL 52 ; FREZOWANIE W OSI Z
CALL LBL 2 ;
Q55 = Q33 + Q34
FN 4: Q55 =+Q55 DIV +4
FN 4: Q33 =+Q33 DIV +2
Q50 = Q33 - Q55
Q52 = Q32 + Q35 ; Q52 CALKOWITA DLUGOSC
Q62 = Q35 - Q37 ; Q62 DLUGOSC BEZ OSTATNIEGO PRZEJSCIA
Q63 = Q62 / Q39 ; Q63 WIELKOSC WIORA
Q64 = Q52 - Q63 ; Q64 AKTUALNY ZET
Q65 = Q32 + Q37 ; Q65 NADDATEK NA OSTATNIE PRZEJSCIE
CALL LBL 4
LBL 0 ;*********** Czy to jest koniec programu?

LBL 2 ; BEZPIECZNA WYSOKOSC I PRZESUNIECIE PUNKTU
Q32 = Q32 + 100
L Z+Q32 FMAX
Q32 = Q32 - 100
CYCL DEF 7.0 PUNKT BAZOWY
CYCL DEF 7.1 IX+Q30
CYCL DEF 7.2 IY+Q31
LBL 0

LBL 23
FN 11: IF +Q35 GT +0 GOTO LBL 20
FN 12: IF +Q35 LT +0 GOTO LBL 21
LBL 0

LBL 5 ;
Q64 = Q64 - Q63 ; Q64 AKTUALNY ZET
CALL LBL 4
CALL LBL 23
LBL 0

LBL 6 ;
Q64 = Q32 ; OSTATNIE PRZEJSCIE
CALL LBL 4
CALL LBL 23
LBL 0

LBL 4
L X+0 Y+0 R0 FMAX
L Z+Q64 F1000 M13
CC X+Q50 Y+0
LP PR+Q55 PA+Q56 RL F1000
C X+Q33 Y+0 DR+ FQ58
CC X+0 Y+0
C X+Q33 Y+0 DR+
CC X+Q50 Y+0
CP PA+Q57 DR+
L X+0 Y+0 R0 F2000
LBL 0

LBL 20 ;
FN 9: IF +Q64 EQU +Q32 GOTO LBL 7
FN 11: IF +Q64 GT +Q65 GOTO LBL 5
FN 12: IF +Q64 LT +Q65 GOTO LBL 6
FN 9: IF +Q64 EQU +Q65 GOTO LBL 6
LBL 0

LBL 21 ;
FN 9: IF +Q64 EQU +Q32 GOTO LBL 7
FN 12: IF +Q64 LT +Q65 GOTO LBL 5
FN 11: IF +Q64 GT +Q65 GOTO LBL 6
FN 9: IF +Q64 EQU +Q65 GOTO LBL 6
LBL 0

LBL 7 ; BEZPIECZNA WYSOKOSC I POWROT DO PUNKTU
CYCL DEF 7.0 PUNKT BAZOWY
CYCL DEF 7.1 IX-Q30
CYCL DEF 7.2 IY-Q31
CYCL DEF 7.3 IZ+Q32
Q32 = Q32 + 100
L Z+Q32 FMAX
Q32 = Q32 - 100
LBL 0
autor: Leoo
22 wrz 2007, 15:51
Forum: Heidenhain
Temat: Programowanie parametryczne
Odpowiedzi: 84
Odsłony: 33149

Nie znam się kompletnie na takim programowaniu. Podejrzewam, że LBL 0 jest równoznaczne z powrotem z podprogramu, zwykle oznaczane jako RET. Skoro tak, to brakuje LBL 0 między poniższymi liniami, co skutkuje generowaniem błędu "kompilacji".
easy2002 pisze:FN 12: IF +Q35 LT +0 GOTO LBL 21
LBL 20 ;
LBL 20 jest częścią LBL 4 - chyba że taki był zamiar.
Dla aktualnie ustawionego parametru Q59=+2 mamy skok warunkowy do LBL52, jednej z trzech gałęzi algorytmu głównego. Nie wiem czy to ma jakieś znaczenie w tym wypadku ale raczej należy umieszczać podprogramy (tu LBL 2) geograficznie za algorytmem głównym, jak to ma miejsce w przypadku LBL 4, LBL5, LBL20 itd. Analizując dalszą część LBL 52, mamy kilka operacji arytmetycznych i wywołanie podprogramu LBL 4, który z kolei może wywołać LBL 20 lub LBL21 i mamy problem. Rozkaz GOTO zwykle oznacza skok bezwarunkowy, w związku z czym nie mamy powrotu z LBL4, mimo że wywoływany był jako podprogram. Mamy więc badzo duże rozwidlenie algorytmu i tak naprawdę nie wiadomo gdzie jest jego koniec. Większość kompilatorów języków wyższego rzędu wymaga, po deklaracji warunku IF, użycia słowa-klucza END IF informującego kompilator o zakończeniu procesu warunkowego. Podobnie wymagane jest słowo END na końcu listingu.

Wróć do „Programowanie parametryczne”