[----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