[PikoCNC] Skrypt do frontów.Dzielenie bez reszty-szczebliny

Dyskusje dotyczące działania obsługi programu PikoCNC
Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 742
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

[PikoCNC] Skrypt do frontów.Dzielenie bez reszty-szczebliny

#1

Post napisał: mitek » 17 sty 2012, 16:05

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 :)



Tagi:

Awatar użytkownika

silvesters
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 262
Rejestracja: 27 kwie 2008, 21:27
Lokalizacja: Z warsztatu

#2

Post napisał: silvesters » 17 sty 2012, 16:20

W iso mazaka zrobił bym to w taki sposób, że najpierw bym podzielił normalnie a później użył funkcję "FIX" jest to pomijanie wartości ułamkowych. Może tutaj jest podobnie.

Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 742
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

#3

Post napisał: mitek » 17 sty 2012, 18:14

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 :)
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 :-D


piotr_olbrysz
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 478
Rejestracja: 04 mar 2012, 13:51
Lokalizacja: Warszawa

#4

Post napisał: piotr_olbrysz » 12 paź 2012, 09:17

mitek pisze:Jaką Komedą mogę podzielić wartość liczbową tak by dostać wynik bez reszty (5/2=2 a nie 2,5 )
Witam
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 205 razy
Ostatnio zmieniony 12 paź 2012, 20:49 przez piotr_olbrysz, łącznie zmieniany 1 raz.

Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 742
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

#5

Post napisał: mitek » 12 paź 2012, 09:25

Div spasowało dobrze :) z Pascalem to moja pierwsza styczność więc często coś robię dłuższą drogą byle działało :)
Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi :-D


piotr_olbrysz
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 478
Rejestracja: 04 mar 2012, 13:51
Lokalizacja: Warszawa

#6

Post napisał: piotr_olbrysz » 12 paź 2012, 20:30

mitek 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
Witam
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

Awatar użytkownika

cosimo
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 569
Rejestracja: 21 maja 2008, 10:02
Lokalizacja: Damasławek

#7

Post napisał: cosimo » 12 paź 2012, 22:36

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.
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 – serio ;-)

offtop: właśnie skończyłem import STL-a. Na obrazku już ścieżka z symulatora.
ObrazekObrazek


piotr_olbrysz
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 478
Rejestracja: 04 mar 2012, 13:51
Lokalizacja: Warszawa

#8

Post napisał: piotr_olbrysz » 13 paź 2012, 08:17

cosimo pisze:Osobiście unikam komentarza jak się da
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ędne
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 :mrgreen: 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 272 razy

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „PikoCNC”