[----1----]
[----2----]
PYVCP = panel.xml
[----3----]
O sub
#<_ActualMeasureZ> = 0 (Tworzy parametr <_ActualMeasureZ>)
O100 IF [ EXISTS[#<_FirstTool>] EQ 0 ] (JeĹli nie istnieje parametr flaga <_FirstTool>)
#<_FirstTool> = 0 (Tworzy flagÄ <_FirstTool> i przypisuje jej wartoĹÄ 0)
O100 ENDIF
T1
M70 (Zapisuje aktualny stan)
G21 (JednostkÄ odlegĹoĹci sÄ [mm])
G94 (JednostkÄ ruchu jest [jednostka/min])
G90 (Programowanie absolutne)
G53 G0 Z-0.01 (Podnosi oĹ Z do bezpiecznej wysokoĹci - w tym przypadku maksymalna wysokoĹÄ = 0)
G53 G0 X#<_ini[TOOL_CHANGE_POS]X> Y#<_ini[TOOL_CHANGE_POS]Y> (PrzesĂłwa w osi X i Y do zdefiniowanego punktu wymiany narzÄdzia)
G53 G0 Z#<_ini[TOOL_CHANGE_POS]Z> (PrzesĂłwa w osi Z do zdefiniowanego punktu wymiany narzÄdzia)
M100 P0 (WyĹwietla komunikat aby zamontowaÄ/zmieniÄ narzÄdzie. Czeka na klikniÄcie "Kontynuuj")
G53 G0 Z-0.01 (Podnosi oĹ Z do bezpiecznej wysokoĹci - w tym przypadku maksymalna wysokoĹÄ = 0)
G53 G0 X#<_ini[TOOLSENSOR]X> Y#<_ini[TOOLSENSOR]Y> (PrzesĂłwa w osi X i Y do zdefiniowanego punktu pomiaru dĹugoĹci narzÄdzia)
G53 G0 Z#<_ini[TOOLSENSOR]Z> (PrzesĂłwa w osi Z do zdefiniowanego punktu pomiaru dĹugoĹci narzÄdzia)
M100 P1 (WyĹwietla komunikat aby zamontowaÄ czujnik. Czeka na klikniÄcie "Kontynuuj")
G91 (Programowanie przyrostowe)
O200 IF [ #<_FirstTool> EQ 0 ] (Jesli pomiar pierwszego narzÄdzia)
# = #5422 (Zapisuje aktualnÄ wartoĹc z osi Z uwzglÄdniajÄ c offsety)
G38.3 Z-#<_ini[TOOLSENSOR]MAX_CHANGE> F400 (ObniĹźa narzÄdzie do momentu kontaktu)
# = #5063 (Odczytuje wynik pomiaru)
G38.5 Z10 F50 (Podnosi narzÄdzie do utracenia kontaktu)
# = #5063 (Odczytuje wynik pomiaru)
#<_FirstMeasureZ> = [# - #] (Zapisuje wynik pierwszego pomiaru w osi Z)
(debug, Zmierzono pierwsze narzedzie = #<_FirstMeasureZ>) (WyĹwietla wynik pomiaru pierwszego narzÄdzia)
O200 ELSE (Jesli pomiar kolejnego narzedzia)
# = #5422 (Zapisuje aktualnÄ wartoĹc z osi Z uwzglÄdniajÄ c offsety)
G38.3 Z-#<_ini[TOOLSENSOR]MAX_CHANGE> F400 (ObniĹźa narzÄdzie do momentu kontaktu)
# = #5063 (Odczytuje wynik pomiaru)
G38.5 Z10 F50 (Podnosi narzÄdzie do utracenia kontaktu)
# = #5063 (Odczytuje wynik pomiaru)
#<_ActualMeasureZ> = [# - #] (Zapisuje wynik aktualnego pomiaru w osi Z)
(debug, Zmierzono kolejne narzedzie = #<_ActualMeasureZ>) (WyĹwietla wynik pomiaru kolejnego narzÄdzia)
O200 ENDIF
G90 (Programowanie absolutne)
G53 G0 Z#<_ini[TOOLSENSOR]Z> (Podnosi oĹ Z do zdefiniowanego punktu czujnika)
M100 P2 (WĹwietla komunikat aby zdemontowaÄ/zabezpieczyÄ czujnik)
G53 G0 Z #<_ini[AFTER_CHANGE_POSITION]z> (PrzesĂłwa oĹ Z do zdefiniowanego punktu po wymianie narzÄdzia)
M72 (Przywraca zapisany stan)
O300 IF [ #<_FirstTool> EQ 0 ] (Jesli pomiar pierwszego narzÄdzia)
#<_FirstTool> = 1 (Ustawia flagÄ, Ĺźe pierwsze narzÄdzie zmierzozno)
G10 L1 P1 R0.25 Z#<_FirstMeasureZ> (Wpisuje offset Z do tablicy narzÄdzi)
G43 H1 (WĹÄ cza kompensacjÄ dĹugoĹci narzÄdzia dla narzÄdzia 1)
(msg, Narzedzie pierwsze gotowe) (WyĹwietla komunikat, Ĺźe narzÄdzie gotowe)
O300 ELSE
G10 L1 P1 R0.25 Z#<_ActualMeasureZ> (Wpisuje offset Z do tablicy narzÄdzi)
G43 H1 (WĹÄ cza kompensacjÄ dĹugoĹci narzÄdzia dla narzÄdzia 1)
(G43.1 Z#<_ActualOffsetZ>) (Ponownie ustawia dynamicznie offset dĹugoĹci aktualnego narzÄdzia)
(msg, Narzedzie kolejne gotowe)
O300 ENDIF
O endsub
m2
[----4----]
[TOOL_CHANGE_POS]
X = 120
Y = 0
Z = 0
[TOOLSENSOR]
X = 220
Y = 13
Z = -48
MAX_CHANGE = 32
[AFTER_CHANGE_POSITION]
X = 120
Y = 0
Z = 0
[----5----] (Dla starszych systemów, pytchon 2!!!!!!!!!!)
#!/usr/bin/python
title="Komunikat LinuxCNC"
fontsize = 15
import sys
import os
import ConfigParser
import Tkinter as tk
MessageFilePath = __file__ + "messages.ini"
proceed = "Y"
if not os.path.isfile(MessageFilePath):
instruction = MessageFilePath + " does not exist"
proceed = "N"
else:
if len(sys.argv) == 1:
instruction = "M100 was called with no P value"
proceed = "N"
else:
P=sys.argv[1]
if len(P)<7:
ps=P
else:
ps=P[0:len(P)-7]
cfg = ConfigParser.ConfigParser()
try:
cfg.read(MessageFilePath)
instruction = cfg.get("Messages", ps)
instruction = instruction.decode("unicode_escape")
except (ConfigParser.MissingSectionHeaderError), Argument:
proceed = "N"
instruction = "First line of\n" + MessageFilePath + "\nmust be:\n[Messages]"
pass
except (ConfigParser.MissingSectionHeaderError, ConfigParser.NoOptionError), Argument:
proceed = "N"
instruction = "There is no message for number\n" + P + "\n in the file\n" + MessageFilePath
if instruction == "":
instruction = "The message for P" + P + " is blank"
proceed = "N"
mess = os.linesep + instruction.replace("\n", os.linesep) + os.linesep
window = tk.Tk()
window.title(title)
window.geometry("300x200")
msg = tk.Message(window, text = mess,width=1000)
msg.config(fg="Black", font=("times", fontsize, "bold"))
def close(event):
exit(1)
window.bind("",close)
if proceed == "Y":
def go_on(event):
exit(0)
window.bind("",go_on)
def Continue_clicked():
exit(0)
btnContinue = tk.Button(window,text="Kontynuuj",command=Continue_clicked,width=60,height=1,font=("Helvetica", "20"))
btnContinue.configure(bg = "gray")
def Stop_clicked():
exit(1)
msg.pack()
if proceed == "Y":
btnContinue.pack()
window.mainloop()
[----5.2----] (Dla nowszych systemów z pytchon 3!!!!)
#!/usr/bin/env python3
title = "Komunikat LinuxCNC"
fontsize = 15
import sys
import os
import configparser
import tkinter as tk
MessageFilePath = os.path.join(os.path.dirname(__file__), "M100messages.ini")
proceed = "Y"
if not os.path.isfile(MessageFilePath):
instruction = MessageFilePath + " does not exist"
proceed = "N"
else:
if len(sys.argv) == 1:
instruction = "M100 was called with no P value"
proceed = "N"
else:
P = sys.argv[1]
if len(P) < 7:
ps = P
else:
ps = P[0:len(P) - 7]
cfg = configparser.ConfigParser()
try:
cfg.read(MessageFilePath)
instruction = cfg.get("Messages", ps)
# Konwersja znaków specjalnych
instruction = bytes(instruction, "utf-8").decode("unicode_escape")
except configparser.MissingSectionHeaderError as Argument:
proceed = "N"
instruction = "First line of\n" + MessageFilePath + "\nmust be:\n[Messages]"
except (configparser.MissingSectionHeaderError, configparser.NoOptionError) as Argument:
proceed = "N"
instruction = "There is no message for number\n" + P + "\n in the file\n" + MessageFilePath
if instruction == "":
instruction = "The message for P" + P + " is blank"
proceed = "N"
mess = os.linesep + instruction.replace("\n", os.linesep) + os.linesep
window = tk.Tk()
window.title(title)
window.geometry("500x300")
msg = tk.Message(window, text=mess, width=480)
msg.config(fg="Black", font=("Times", fontsize, "bold"))
def close(event):
sys.exit(1)
window.bind("", close)
if proceed == "Y":
def go_on(event):
sys.exit(0)
window.bind("", go_on)
def Continue_clicked():
sys.exit(0)
btnContinue = tk.Button(window, text="Kontynuuj", command=Continue_clicked, width=20, height=2, font=("Helvetica", 16))
btnContinue.configure(bg="gray")
def Stop_clicked():
sys.exit(1)
msg.pack(pady=20)
if proceed == "Y":
btnContinue.pack()
window.mainloop()
[----6----]
[Messages]
# uzyj \n do zasygnalizowania nowej linii
0=Zamontuj nowe narzedzie \n Kontynuuj gdy gotowe
1=Pomiar dlugosci narzedzia \n Podlacz kabel czujnika\n Kontynuuj gdy gotowe
2=Zakonczono pomiar narzedzia \n Odlacz kabel czujnika \n kontynuuj gdy gotowe
[----7----]
SUBROUTINE_PATH = ./algorytmy
FEATURES = 12
REMAP=M6 modalgroup=6 ngc=wymiana_narzedzia
REMAP=M06 modalgroup=6 ngc=wymiana_narzedzia
[----8----]
HALUI = halui
[----9----]
[HALUI]
# dodaj polecenia halui MDI (maks 64)
MDI_COMMAND = O call
[----10----]
net remote-wymiana_narzedzia halui.mdi-command-00 <= pyvcp.wymiana_narzedzia
[----11----]
net probe-in <= parport.0.pin-15-in