Как задать кол-во циклов программы?

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Как задать кол-во циклов программы?

Сообщение aftaev »

Есть Gcode для проточки и отрезки колечек. Когда кольцо отрезано, в конце программы происходит смещение координат Z-10. и обнуляется.
G10 L2 P1 Z[#5223 - 10.0]
Спасибо РКМ , за подсказку :good:

Теперь нужен цикл программы, чтобы кольца автоматом резались. Очень желательно чтобы при старте программы выскакивало окошко, забиваем кол-во циклов. Такое возможно, не что вроде Input ?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
DSP1
Опытный
Сообщения: 172
Зарегистрирован: 15 янв 2012, 19:37
Репутация: 2
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение DSP1 »

aftaev писал(а):Очень желательно чтобы при старте программы выскакивало окошко, забиваем кол-во циклов.
Про окошко не знаю .
Можно в MDI перед запуском вбивать , напр. , #1=20 , а в конце проги сбрасывать в #1=0 , типа :
G0X100
G0Z0M3
O1 repeat [#1]
/_шырли-мырли
G0X100
G0Z-10
G92Z0
O1 endrepeat
G92.2
#1=0
M2

Вроде , параметры с некоторыми номерами / именами не сбрасываются по M2 , может , даже
инициализируются при включении . Разберешься по мануалу , если потребуется .
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение nkp »

выше написали правильно...
но если хочется именно окошко,то:
в ини файле, в разделе
[FILTER]
добавляем две строки:
PROGRAM_EXTENSION = .ngck Repeat Script
ngck = ./re.py
теперь любой код ,который мы хотим "повторять" (задавая чмсло повторов в окошке)),мы к расширению файла добавляес "k"
пример: kolco.ngck

Код: Выделить всё

G21 G18 G49 G40 G90 G61 G7 
F100
G1 X30 Z0
G1 X0
G1 X30
G10 L2 P1 Z[#5223 - 10.0]
M2
скриптик окошка re.py ложим в папку конфига
делаем его исполняемым
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

#!/usr/bin/python
# --*-- coding:utf-8 --*--
import re
from Tkinter import *
import os,sys

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
    def createWidgets(self):
        self.EntryFrame = Frame(self,bd=5)
        self.EntryFrame.grid(row=0, column=1)
        self.Rp = IntVar()
        self.Rp.set(1)
        self.R_Ent = Entry(self.EntryFrame, textvariable=self.Rp ,width=15)
        self.R_Ent.grid(row=10, column=1)
        self.quitButton = Button(self, text='Run',command=self.To)
        self.quitButton.grid(row=13, column=0, sticky=S)
    def To(self):

        filename = '/home/nkp/linuxcnc/nc_files/kolco.ngck'
        f = open(filename, "r")
        lines = f.readlines()
        rr = self.R_Ent.get()
        string='o100 repeat[%s]\n' % (rr) 
        w=0
        while not re.search("M2\s*",lines[w], re.I):
            string+=lines[w]
            w+=1
        string +='o100 endrepeat\n'
        string +='M2\n'
        sys.stdout.write(string)
        self.quit()

app = Application()
app.master.title("repeat")
app.mainloop()
в скриптике прописываем путь к нашему kolco.ngck
1.rar
(737 байт) 293 скачивания
Выделение_187.png (3072 просмотра) <a class='original' href='./download/file.php?id=111964&mode=view' target=_blank>Загрузить оригинал (33.63 КБ)</a>
Выделение_188.png (3072 просмотра) <a class='original' href='./download/file.php?id=111963&mode=view' target=_blank>Загрузить оригинал (50.62 КБ)</a>
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение Сергей Саныч »

Predator писал(а):А циклов типа WHILE нет в LinuxCNC
Есть.
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение nkp »

(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

nkp@nkp-desktop:~/linuxcnc/configs/G71$ python 
Python 2.7.3 (default, Oct 26 2016, 21:04:23) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> dir(Tkinter)
['ACTIVE', 'ALL', 'ANCHOR', 'ARC', 'At', 'AtEnd', 'AtInsert', 'AtSelFirst', 'AtSelLast', 'BASELINE', 'BEVEL', 'BOTH', 'BOTTOM', 'BROWSE', 'BUTT', 'BaseWidget', 'BitmapImage', 'BooleanType', 'BooleanVar', 'BufferType', 'BuiltinFunctionType', 'BuiltinMethodType', 'Button', 'CASCADE', 'CENTER', 'CHAR', 'CHECKBUTTON', 'CHORD', 'COMMAND', 'CURRENT', 'CallWrapper', 'Canvas', 'Checkbutton', 'ClassType', 'CodeType', 'ComplexType', 'DISABLED', 'DOTBOX', 'DictProxyType', 'DictType', 'DictionaryType', 'DoubleVar', 'E', 'END', 'EW', 'EXCEPTION', 'EXTENDED', 'EllipsisType', 'Entry', 'Event', 'FALSE', 'FIRST', 'FLAT', 'FileType', 'FloatType', 'Frame', 'FrameType', 'FunctionType', 'GROOVE', 'GeneratorType', 'GetSetDescriptorType', 'Grid', 'HIDDEN', 'HORIZONTAL', 'INSERT', 'INSIDE', 'Image', 'InstanceType', 'IntType', 'IntVar', 'LAST', 'LEFT', 'Label', 'LabelFrame', 'LambdaType', 'ListType', 'Listbox', 'LongType', 'MITER', 'MOVETO', 'MULTIPLE', 'MemberDescriptorType', 'Menu', 'Menubutton', 'Message', 'MethodType', 'Misc', 'ModuleType', 'N', 'NE', 'NO', 'NONE', 'NORMAL', 'NS', 'NSEW', 'NUMERIC', 'NW', 'NoDefaultRoot', 'NoneType', 'NotImplementedType', 'OFF', 'ON', 'OUTSIDE', 'ObjectType', 'OptionMenu', 'PAGES', 'PIESLICE', 'PROJECTING', 'Pack', 'PanedWindow', 'PhotoImage', 'Place', 'RADIOBUTTON', 'RAISED', 'READABLE', 'RIDGE', 'RIGHT', 'ROUND', 'Radiobutton', 'S', 'SCROLL', 'SE', 'SEL', 'SEL_FIRST', 'SEL_LAST', 'SEPARATOR', 'SINGLE', 'SOLID', 'SUNKEN', 'SW', 'Scale', 'Scrollbar', 'SliceType', 'Spinbox', 'StringType', 'StringTypes', 'StringVar', 'Studbutton', 'TOP', 'TRUE', 'Tcl', 'TclError', 'TclVersion', 'Text', 'Tk', 'TkVersion', 'Toplevel', 'TracebackType', 'Tributton', 'TupleType', 'TypeType', 'UNDERLINE', 'UNITS', 'UnboundMethodType', 'UnicodeType', 'VERTICAL', 'Variable', 'W', 'WORD', 'WRITABLE', 'Widget', 'Wm', 'X', 'XRangeType', 'XView', 'Y', 'YES', 'YView', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_cnfmerge', '_default_root', '_exit', '_flatten', '_setit', '_support_default_root', '_test', '_tkerror', '_tkinter', '_varnum', 'getboolean', 'getdouble', 'getint', 'image_names', 'image_types', 'mainloop', 'sys', 'tkinter', 'wantobjects']
>>> 
с Tkinter окошко появляется не в центре...
нет почему то метода "geometry"
===========================
Выделение_189.png (3041 просмотр) <a class='original' href='./download/file.php?id=111986&mode=view' target=_blank>Загрузить оригинал (60.07 КБ)</a>
на gtk конечно без проблем
re.py:

Код: Выделить всё

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
# example togglebutton.py

import pygtk
pygtk.require('2.0')
import gtk
import re
import os,sys

class ToggleButton:
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False
        
    def go(self):
        filename = '/home/nkp/linuxcnc/nc_files/kolco.ngck'
        f = open(filename, "r")
        lines = f.readlines()
        rr = int(self.entry.get_text())
        string='o100 repeat[%s]\n' % (rr) 
        w=0
        while not re.search("M2\s*",lines[w], re.I):
            string+=lines[w]
            w+=1
        string +='o100 endrepeat\n'
        string +='M2\n'
        sys.stdout.write(string) 
        gtk.main_quit()
             
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("repeat")
        self.window.connect("delete_event", self.delete_event)
        self.window.set_border_width(20)

        self.vbox = gtk.VBox(True, 2)
        self.window.add(self.vbox)

        self.entry = gtk.Entry()
        self.entry.set_max_length(5)
        self.vbox.pack_start(self.entry, True, True, 2)
        self.entry.show()
                
        self.button = gtk.Button("Run")
        self.button.connect("clicked", lambda x: self.go())
        self.vbox.pack_start(self.button, True, True, 2)
        self.button.show()
        self.vbox.show()
        
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.show()
        
def main():    
    gtk.main()
    return 0       
if __name__ == "__main__":
    ToggleButton()
    main()
    
    
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение aftaev »

Predator писал(а):А циклов типа WHILE нет в LinuxCNC?
если было бы еще и input вообще замечТательно было :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как задать кол-во циклов программы?

Сообщение nkp »

ну и само напрашивается ;) - вводить и число повторов ,и смещение

Код: Выделить всё

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
# example togglebutton.py

import pygtk
pygtk.require('2.0')
import gtk
import re
import os,sys

class ToggleButton:
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False
        
    def go(self):
        filename = '/home/nkp/linuxcnc/nc_files/kolco.ngck'
        f = open(filename, "r")
        lines = f.readlines()
        rr = int(self.entry.get_text())
        offset = int(self.entry1.get_text())
        string='o100 repeat[%s]\n' % (rr) 
        w=0
        while not re.search("M2\s*",lines[w], re.I):
            string+=lines[w]
            w+=1
        string +='G10 L2 P1 Z[#5223 - %s]\n' % (offset) 
        string +='o100 endrepeat\n'
        string +='M2\n'
        sys.stdout.write(string) 
        gtk.main_quit()
             
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("repeat")
        self.window.connect("delete_event", self.delete_event)
        self.window.set_border_width(20)

        self.vbox = gtk.VBox(True, 2)
        self.window.add(self.vbox)

        self.entry = gtk.Entry()
        self.entry.set_max_length(10)
        self.entry.set_text("n repeat")
        self.vbox.pack_start(self.entry, True, True, 2)
        self.entry.show()
        
        self.entry1 = gtk.Entry()
        self.entry1.set_max_length(10)
        self.entry1.set_text("offset")
        self.vbox.pack_start(self.entry1, True, True, 2)
        self.entry1.show() 
                       
        self.button = gtk.Button("Run")
        self.button.connect("clicked", lambda x: self.go())
        self.vbox.pack_start(self.button, True, True, 2)
        self.button.show()
        self.vbox.show()
        
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.show()
        
def main():    
    gtk.main()
    return 0       
if __name__ == "__main__":
    ToggleButton()
    main()
    
    
разумеется,что строка G10 L2 P1 Z[#5223... в самом файле уже не нужна))
Ответить

Вернуться в «LinuxCNC»