[PikoCNC] Skrypt do frontów.Dzielenie bez reszty-szczebliny
-
Autor tematu - Specjalista poziom 3 (min. 600)
- Posty w temacie: 3
- Posty: 744
- Rejestracja: 09 cze 2009, 22:06
- Lokalizacja: k/Krakowa
- Kontakt:
[PikoCNC] Skrypt do frontów.Dzielenie bez reszty-szczebliny
Witam
Mam pytanko co do dzielenia.
Chce zrobić skrypt który będzie robił na elemencie szczelinki ilość i szerokość będzie zależała od szerokości elementu.
Jaką Komedą mogę podzielić wartość liczbową tak by dostać wynik bez reszty (5/2=2 a nie 2,5 )
Jest mi to niezbędne.
oczywiście po wszystkim umieszczę cały kod
Mam pytanko co do dzielenia.
Chce zrobić skrypt który będzie robił na elemencie szczelinki ilość i szerokość będzie zależała od szerokości elementu.
Jaką Komedą mogę podzielić wartość liczbową tak by dostać wynik bez reszty (5/2=2 a nie 2,5 )
Jest mi to niezbędne.
oczywiście po wszystkim umieszczę cały kod
Tagi:
-
- Specjalista poziom 1 (min. 100)
- Posty w temacie: 1
- Posty: 262
- Rejestracja: 27 kwie 2008, 21:27
- Lokalizacja: Z warsztatu
-
Autor tematu - Specjalista poziom 3 (min. 600)
- Posty w temacie: 3
- Posty: 744
- Rejestracja: 09 cze 2009, 22:06
- Lokalizacja: k/Krakowa
- Kontakt:
Tak czy inaczej byle by prowadziło do celu wcześniej pisałem w EduCAD i tam było dzielenie bez reszty dlatego pomyślałem że tu będzie podobnie...
[ Dodano: 2012-01-19, 19:56 ]
Instrukcja DIV załatwia sprawę tak dla potomności
Tu jest więcej gdyby ktoś potrzebował..
[ Dodano: 2012-01-25, 12:43 ]
i plik do zassania
[ Dodano: 2012-01-19, 19:56 ]
Instrukcja DIV załatwia sprawę tak dla potomności
Tu jest więcej gdyby ktoś potrzebował..
[ Dodano: 2012-01-25, 12:43 ]
i plik do zassania
program meblowy;
//==============================================================================
// program do frezowania ramek na frontach meblowych
//==============================================================================
var
szerokosc,i,szczeblina,iloscszczeblin,odstepszczeblin_staly,odstepszczeblin,wysokosc,margines,glebokosc,x1,y1:Integer;
Fxy,Fz: cardinal;
begin
// {$I panel_funkcje.pas} // dołączenie pliku z funkcjami
szerokosc:=296;
wysokosc:=713;
margines:=40;
fxy:=2500;
Fz:=800;
glebokosc:=-3;
szczeblina:=40;
//r_rogu:=12;
//frez_fi:=16;
//ZRapid:=10;
if (RUN_CNT=0) then begin // wykonywane tylko przy pierwszym uruchomieniu
SetArgPic('kwadrat.jpg'); // obrazek objaśniający
SetArg(0,'Szerokość (mm)',szerokosc);
SetArg(1,'Wysokość (mm)',wysokosc);
SetArg(2,'Margines (mm)',margines);
SetArg(4,'Szybkość Fxy (mm/min)',Fxy);
SetArg(5,'Szybkość Fz (mm/min)',Fz);
SetArg(6,'Głębokość wejście (mm)',glebokosc);
SetArg(8,'Szerokość szczebliny',szczeblina);
//SetArg(9,'Promień w rogu',r_rogu);
//SetArg(10,'Średnica freza palcowego (mm)',frez_fi);
end;
// Organizujeny sposób wyświetlania parametrów
ArgPageTitle('Wymiary frontu'); // nazwa pierwszej zakładki
ArgShow(0);
ArgShow(1);
ArgShow(2);
ArgSeparator('');
ArgSeparator('UWAGA!!! program obraca element.');
ArgSeparator('Długa krawędź zawsze po X.');
ArgSeparator('');
ArgSeparator('Autor: Marek Mitoński PPH MITEX');
ArgNewPage('Ustaienia'); // dodanie nowej zakładki
ArgShow(6);
ArgShow(7);
ArgShow(4);
ArgShow(5);
ArgShow(8);
ArgShow(9);
ArgShow(10);
ArgEdit; // i otwarcie okna edycji parametrów
szerokosc:=Arg(0);
wysokosc:=Arg(1);
margines:=Arg(2);
glebokosc:=Arg(6);
Fxy:=Arg(4);
Fz:=Arg(5);
szczeblina:=Arg(8);
// Rysowanie =================================================================
X1:=szerokosc;
Y1:=wysokosc;
SetM(3); //START
if (szerokosc>wysokosc) then begin //obracanie wymiarów
// prostokat w kolo
wysokosc:=y1;
szerokosc:=x1;
SetG(0); SetX(margines); SetY(margines); SetZ(10); write;
SetG(0); SetX(margines); SetY(margines); SetZ(1); write;
SetG(1); SetX(margines); SetY(margines); SetZ(glebokosc); SetF(Fz); write;
SetG(1); SetX(szerokosc-margines); SetY(margines); SetZ(glebokosc); SetF(Fxy); write;
SetG(1); SetX(szerokosc-margines); SetY(wysokosc-margines); SetZ(glebokosc); write;
SetG(1); SetX(margines); SetY(wysokosc-margines); SetZ(glebokosc); write;
SetG(1); SetX(margines); SetY(margines); SetZ(glebokosc); write;
SetG(0); SetX(margines); SetY(margines); SetZ(10); write;
// prostokata w kolo KONIEC
// szczebliny
iloscszczeblin:= (x1-margines-margines) div szczeblina;
odstepszczeblin:= (x1-margines-margines) / iloscszczeblin;
odstepszczeblin_staly :=odstepszczeblin;
for i := 0 to iloscszczeblin-2 do begin
SetG(0); SetX(margines+odstepszczeblin);SetY(margines); SetZ(10); SetF(Fz);write;
SetG(1); SetX(margines+odstepszczeblin);SetY(margines); SetZ(glebokosc); SetF(Fz);write;
SetG(1); SetX(margines+odstepszczeblin);SetY(wysokosc-margines); SetZ(glebokosc); SetF(Fxy) ;write;
SetG(0); SetX(margines+odstepszczeblin);SetY(wysokosc-margines); SetZ(10); SetF(Fxy) ;write;
odstepszczeblin:=odstepszczeblin+odstepszczeblin_staly;
end;
// szczebliny KONIEC
end else begin
// prostokat w kolo
wysokosc:=x1;
szerokosc:=y1;
SetG(0); SetX(margines); SetY(margines); SetZ(10); write;
SetG(0); SetX(margines); SetY(margines); SetZ(1); write;
SetG(1); SetX(margines); SetY(margines); SetZ(glebokosc); SetF(Fz); write;
SetG(1); SetX(szerokosc-margines); SetY(margines); SetZ(glebokosc); SetF(Fxy); write;
SetG(1); SetX(szerokosc-margines); SetY(wysokosc-margines); SetZ(glebokosc); write;
SetG(1); SetX(margines); SetY(wysokosc-margines); SetZ(glebokosc); write;
SetG(1); SetX(margines); SetY(margines); SetZ(glebokosc); write;
SetG(0); SetX(margines); SetY(margines); SetZ(10); write;
// koniec prostokata w kolo
// szczebliny
iloscszczeblin:= (x1-margines-margines) div szczeblina;
odstepszczeblin:= (x1-margines-margines) / iloscszczeblin;
odstepszczeblin_staly :=odstepszczeblin;
for i := 0 to iloscszczeblin-2 do begin
SetG(0); SetX(margines); SetY(margines+odstepszczeblin); SetZ(10); SetF(Fz);write;
SetG(1); SetX(margines); SetY(margines+odstepszczeblin); SetZ(glebokosc); SetF(Fz);write;
SetG(1); SetX(szerokosc-margines); SetY(margines+odstepszczeblin); SetZ(glebokosc); SetF(Fxy) ;write;
SetG(0); SetX(szerokosc-margines); SetY(margines+odstepszczeblin); SetZ(10); SetF(Fxy) ;write;
odstepszczeblin:=odstepszczeblin+odstepszczeblin_staly;
end;
// szczebliny KONIEC
end;
SetM(5); SetM(30); write; // KONIEC
end.
Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 3
- Posty: 478
- Rejestracja: 04 mar 2012, 13:51
- Lokalizacja: Warszawa
Witammitek pisze:Jaką Komedą mogę podzielić wartość liczbową tak by dostać wynik bez reszty (5/2=2 a nie 2,5 )
Skrypty do PikoCNC pisane są w języku Pascal. W PikoCNC zaimplementowano część funkcji i procedur ale nie wszystkie są opisane. Metodą prób i błędów można sprawdzić co jest dostępne. Powracając do tematu, jeżeli zdefiniuje Pan w sekcji const jakieś parametry to trzeba pamiętać że deklaracja c = 10 ; b=10.1 oznacza ze c będzie liczbą typu integer, a b typu zmienno- przecinkowego . Jeżeli nasz liczba jest typu zmienno przecinkowego to mamy dostępną funkcję Round - zaokrąglenie, oraz Trunc - pozostawienie części całkowitej. Wynikiem działa obu funkcji jest liczba całkowita. Mały przykład skryptu umieściłem w załączniku.
- Załączniki
-
- Round_test.zip
- (450 Bajtów) Pobrany 272 razy
Ostatnio zmieniony 12 paź 2012, 20:49 przez piotr_olbrysz, łącznie zmieniany 1 raz.
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 3
- Posty: 478
- Rejestracja: 04 mar 2012, 13:51
- Lokalizacja: Warszawa
Witammitek pisze:Div spasowało dobrze z Pascalem to moja pierwsza styczność więc często coś robię dłuższą drogą byle działało
Najważniejsze to się odważyć, a potem już samo pójdzie. Nicolas Wirth wymyślił Pascala aby nauczyć studentów eleganckiego programowania. Szczęśliwym posiadaczem PikoCNC zostałem głównie ze względu na możliwość pisania skryptów, co daje mi praktycznie nie ograniczone możliwości w działaniu.
Nie zawsze pisane oprogramowanie wygląda pięknie, istotne jest aby działało.
Aby kod wyglądał elegancko i czytelnie to oprogramowanie powinny pisać przy najmniej 2 osoby, pierwsza pisze a druga próbuje zrozumieć co przez to rozumiał autor i dopisuje komentarze.
Operator div zarezerwowany jest do dzielnia liczb całkowitych
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 1
- Posty: 631
- Rejestracja: 21 maja 2008, 10:02
- Lokalizacja: Damasławek
Dobre Chętnie się gdzieś zatrudnię jako ten drugi Osobiście unikam komentarza jak się da (bo czasami się nie da). Uważam, że zaciemniają program (niepotrzebnie przykuwają wzrok). Jak próbuje zrozumieć kod pisany przez kogoś innego to pierwsze co robię wywalam komentarze jeśli są zbyt obszerne – serioAby kod wyglądał elegancko i czytelnie to oprogramowanie powinny pisać przy najmniej 2 osoby, pierwsza pisze a druga próbuje zrozumieć co przez to rozumiał autor i dopisuje komentarze.
offtop: właśnie skończyłem import STL-a. Na obrazku już ścieżka z symulatora.
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 3
- Posty: 478
- Rejestracja: 04 mar 2012, 13:51
- Lokalizacja: Warszawa
Ja też, ale jak przybywa lat to i przybywa komentarzy. Jak po dwudziestu latach zobaczy Pan swój kod, to będzie się Pan zastanawiał co chciał przez to powiedzieć. Zgadzam się że nie powinno się pisać komentarzy oczywistych, tylko niezbędnecosimo pisze:Osobiście unikam komentarza jak się da
minimum. wg. ( młody nauczyciel mówi co wie, stary wie co mówi )
Piękne obrazki, i parę ładnych godzin siedzenia przed komputerem..
Cieszę się że humor Panu wraca, mimo moich listów.
Dzięki wymianie zdań z Panem Mitek , zrozumiałem ( dzięki napisaniu komentarza) jak działa mechanizm skryptów. Po prostu uruchamiany jest mechanizm interpretera pascala. Wszystkie procedury związane z CNC generują kod G i zapisują do listy stringów.
Np. procedura SetG(1) -> G1 , SetX(300) X300 itd. Procedura write dodaje to Listy lub wręcz do memo w dolnym lewym rogu. Jeżeli moje rozumowanie jest słuszne, to moje prośby o pewne modyfikacje nie mają sensu, ale ma za to sens prośba o wmątowanie w mechanizm skryptów coś w rodzaju online asm , czyli możliwość dodawania do skryptu linijek G-kodu czy linijek z Macro .
W załączniku umieściłem filmik obrazujący algorytm najazdu i zjazdu z czujnika długości
narzędzia. Chciało by się wiedzieć ile mm wynosi ruch płaszczyzny czujnika. Być może uda się namierzyć oscyloskopem czas zadziałania czujnika i czas zadziałania ( zmiana kierunku silnika) algorytmu PikoCNC
aby samemu coś zrozumieć, wystarczy to drugiemu wytłumaczyć
- Załączniki
-
- Czujnik_długości_narzędzia.zip
- (2.2 MiB) Pobrany 373 razy