Страница 28 из 47

Re: MyGUI

Добавлено: 25 дек 2012, 14:11
nkp
Nick писал(а):хмм... а чем тебе не нравится подход ngcgui?
Может просто его доделать, например.......
так я ж как раз про это :)
только оргинал на тикле - а я пытаюсь на питоне и glade что то подобное сделать
Nick писал(а):Как ты вызываешь загрузку?
не понял - загрузку чего ...
открываем емс
нажимаем "Открыть" и загружаем наш скрипт,ну примерно такой:
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys ,os
import re
import pygtk
import gtk
from gladevcp.gladebuilder import GladeBuilder
import gladevcp
import time
class Widgets:
	def __init__(self, xml):
		self._xml = xml
	def __getattr__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise AttributeError, "No widget %r" % attr
		return r
	def __getitem__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise IndexError, "No widget %r" % attr
class Test:
	def color (self, data=None):
		i=0
		while i<3:
			self.widgets.button14.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#FF0095'))
			time.sleep(2)
			self.widgets.button14.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#F000FF'))
			time.sleep(2)
			i+=1		
	def open(self, widget, text_filter=None, all_filter=None):
		
		filename=None
		dialog=gtk.FileChooserDialog(title="Open ngcgui_file", action=gtk.FILE_CHOOSER_ACTION_OPEN,
			buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))		
		if (self.text_filter != None) and (self.all_filter != None):
			dialog.add_filter(self.text_filter)
			dialog.add_filter(self.all_filter)
		dialog.set_current_folder('~/emc2/nc_files')
		response = dialog.run()
#		if response == gtk.RESPONSE_OK:
		self.filename = dialog.get_filename()
#		elif response == gtk.RESPONSE_CANCEL:
#			print 'Cancel open'
		dialog.destroy()
		self.restart1 (self)
		(dirname, fname) = os.path.split(self.filename)
		(self.shortname, extension) = os.path.splitext(fname)
		n=[self.shortname,'.png']
		self.imj=''.join(n)
		if os.path.exists(str(self.imj)):
			self.widgets.image2.set_from_file(str(self.imj))
		else:
			self.widgets.image2.set_from_file('start.jpg')		
		self.update(self)
	def update(self, data=None):		
		f = open(self.filename, "r")
		lines = f.readlines()		
		x=0
		q=0
		while x < len(lines):
			if  re.search("#\d+ *[(*]", lines[x]):
				vel=re.findall('[(][=][-]?.?0?\d*[.]?\d*', lines[x])
#парсим комментарии				
				dat=re.findall('[(].+', lines[x])
				dat1=re.findall('\s+.+', dat[0])
				l=dat1[0]
				dat2=l[:-2]
				if len(dat2) != 0:  
					self.ent1[q].set_text(dat2)
				else:
					self.ent1[q].set_text('')				
				vel1=re.findall('[-]?\d+[.]?\d*', vel[0])
				if len(vel) != 0:  
					self.ent[q].set_text(vel1[0])
				else:
					 self.ent[q].set_text('')
				q+=1
			x+=1
#скрываем незанятые поля			
		t=0
		while t+q < 14 :	
			for r in self.ent :	
				w=self.ent[q+t]	
				w.hide()
			t+=1
		print q,'q'
		tt=0	
		while tt+q < 14 :	
			for k in self.ent1 :	
				wd=self.ent1[q+tt]	
				wd.hide()
			tt+=1		
		self.q=q
		f.close()				
	def make (self,widget, data=None):
		self.d = {
		1:self.widgets.entry1.get_text(),2:self.widgets.entry2.get_text(),
		3:self.widgets.entry3.get_text(),4:self.widgets.entry4.get_text(),
		5:self.widgets.entry5.get_text(),6:self.widgets.entry6.get_text(),
		7:self.widgets.entry7.get_text(),8:self.widgets.entry8.get_text(),
		9:self.widgets.entry9.get_text(),10:self.widgets.entry10.get_text(),
		11:self.widgets.entry11.get_text(),12:self.widgets.entry12.get_text(),
		13:self.widgets.entry13.get_text(),14:self.widgets.entry14.get_text()
		}
		for i  in  range(self.q):
			v=re.findall('[^0-9\-\.]', self.d.get(i+1))    
			if len(v) != 0  or  self.d.get(i+1)=='' or self.d.get(i+1)=='.':
				self.on_info(self)
				self.ent[i].set_text('')
				self.ebox[i].modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#8E898D'))
				self.ent[i].grab_focus ()
			else :
				self.ebox[i].modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#EDECEB'))
#		self.widgets.button3.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#6F7269'))

	def finish (self, data=None):
		self.cwd = os.getcwd()
		t=[self.cwd,'/ngcgui.ngc']
		self.imj=''.join(t)
		f = open(str(self.imj), "w")
		fname0=re.findall('\w+\.', self.filename)
		fname1=re.findall('\w+', fname0[0])
		ser=' '
		n=['o','<', fname1[0], '>','call', '\n','M2']		
		h=1
		m=5
		while h <= self.q:
			n.insert(m, '[')
			m+=1
			n.insert(m, self.d.get(h))
			m+=1
			n.insert(m, ']') 
			h+=1
			m+=1		
		j=ser.join(n)
		f.write(j)
		sys.stdout.write(j)
		f.close()
		gtk.main_quit()
	def restart1 (self, data=None):
		for i in range(14) :
			w=self.ent[i]
			wd=self.ent1[i]
			wd.show()	
			w.show()	
	def restart (self, data=None):
		for i in range(14) :
			w=self.ent[i]
			wd=self.ent1[i]
			wd.show()	
			w.show()
	def on_info(self, widget):
        	md = gtk.MessageDialog(parent=None, flags=0,
        	  type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_CLOSE,
        	  message_format="Ошибка ввода")
        	md.run()
        	md.destroy()
	def image1(self, widget):
		if os.path.exists(str(self.imj)):
			n=[self.shortname,'.png']
			self.imj=''.join(n)
			self.widgets.image2.set_from_file(str(self.imj))
		else:
			self.widgets.image2.set_from_file('start.jpg')
	def image2(self, widget):
		if os.path.exists(str(self.imj)):
			n=[self.shortname,'1.png']
			self.imj=''.join(n)
			self.widgets.image2.set_from_file(str(self.imj))
		else:
			self.widgets.image2.set_from_file('start.jpg')
	def image3(self, widget):
		if os.path.exists(str(self.imj)):
			n=[self.shortname,'2.png']
			self.imj=''.join(n)
			self.widgets.image2.set_from_file(str(self.imj))
		else:
			self.widgets.image2.set_from_file('start.jpg')
	def __init__(self ):		
		self.text_filter=gtk.FileFilter()
		self.text_filter.set_name(".ngc")
#		self.text_filter.add_mime_type("*.ngc")
		self.text_filter.add_pattern("*.ngc")
		
		self.all_filter=gtk.FileFilter()
		self.all_filter.set_name(".All_Files")
		self.all_filter.add_pattern("*")
		self.builder = gtk.Builder()
		self.builder.add_from_file("1.glade")
		self.builder.connect_signals(self)
		self.builder.get_object("window1").maximize()
		self.builder.get_object("window1").show()
		self.widgets = Widgets(self.builder)
		self.ebox=[
			self.widgets .eventbox1,self.widgets .eventbox2,
			self.widgets .eventbox3,self.widgets .eventbox4,
			self.widgets .eventbox5,self.widgets .eventbox6,
			self.widgets .eventbox7,self.widgets .eventbox8,
			self.widgets .eventbox9,self.widgets .eventbox10,
			self.widgets .eventbox11,self.widgets .eventbox12,
			self.widgets .eventbox13,self.widgets .eventbox14]
		self.ent = [
		self.widgets.entry1,self.widgets.entry2,
		self.widgets.entry3,self.widgets.entry4,
		self.widgets.entry5,self.widgets.entry6,
		self.widgets.entry7,self.widgets.entry8,
		self.widgets.entry9,self.widgets.entry10,
		self.widgets.entry11,self.widgets.entry12,
		self.widgets.entry13,self.widgets.entry14
		]
		self.ent1 = [
		self.widgets.entry15,self.widgets.entry16,
		self.widgets.entry17,self.widgets.entry18,
		self.widgets.entry19,self.widgets.entry20,
		self.widgets.entry21,self.widgets.entry22,
		self.widgets.entry23,self.widgets.entry24,
		self.widgets.entry25,self.widgets.entry26,
		self.widgets.entry27,self.widgets.entry28
		]
		self.widgets.image2.set_from_file('1.gif')
		self.widgets.image1.set_from_file('1.png')
		self.widgets.image3.set_from_file('1.png')
		self.widgets.window1.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#C3C8D2'))	
		self.widgets.entry23.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#C3C8D2'))
if __name__ == "__main__":
	main = Test()
	gtk.main()
	
он делает там все свои дела и выдает в sys.stdout О-код примерно такого вида:

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

o < 1sfer > call [ 30 ] [ 20 ] [ 10 ] [ 1 ] [ 0 ] [ 8 ] [ 400 ] 
 M2
вот этот код емс и загружает себе в работу(для этого в ини еще фильтр подправляем при надобности)
так у меня проблема - что емс этот код вроде бы не загружает по вышеописанной последовательности
но если жмем "перегрузить" - то все пучком...

Re: MyGUI

Добавлено: 25 дек 2012, 14:54
Nick
А попробуй сразу за открыть вызвать reload

Re: MyGUI

Добавлено: 02 янв 2013, 16:06
nkp
Lexxa,а ты пробовал вживую feed-override на аналоге 7и77 ???
4 резистора поставил на делители : feed-override,spindle-override,скорость перемещений, ручная смена инструмента.
(последний работает не в режиме регулятора - а в режиме выбора)
а вот для подачи попробовал как ты писал:
(для просмотра содержимого нажмите на ссылку)

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

loadrt limit1
addf limit1.0 servo-thread
setp limit1.0.min 0
setp limit1.0.max 12
net feed-override-in hm2_5i25.0.7i77.0.0.analogin0 => limit1.0.in
#feed override percentage = counts X scale
setp halui.feed-override.counts 10
net feed-override-lim limit1.0.out => halui.feed-override.scale
но на выходе (halui.spindle-override.value ) - 0

Re: MyGUI

Добавлено: 03 янв 2013, 12:09
Lexxa
nkp, еще нет пока, не до этого

Но вообще-то странно, поскольку уж как минимум 10 то должно быть.
А меняется ли выход с lim?

Re: MyGUI

Добавлено: 03 янв 2013, 12:35
nkp
пробовал по разному
и с лимит и без...
Снимок.png (2258 просмотров) <a class='original' href='./download/file.php?id=10556&mode=view' target=_blank>Загрузить оригинал (31.97 КБ)</a>
может НГ помехой тому был...)))))

Re: MyGUI

Добавлено: 04 янв 2013, 01:45
Nick
Мне вот это не нравится:
halui.feed-override.decrease bit in
pin for decreasing the FO (-=scale)

halui.feed-override.increase bit in
pin for increasing the FO (+=scale)

halui.feed-override.scale float in
pin for setting the scale on changing the FO

Не значит ли это, что scale используется для increase/decrease? Может добавить простой sum2 и сделать все через него?

Re: MyGUI

Добавлено: 04 янв 2013, 09:50
nkp
Nick писал(а):Может добавить простой sum2 и сделать все через него?
а что в итоге нам это даст??
чем это выгодней чем conv-float-s32 ???
------------------------------
чтоб "растянуть" шкалу мне нужно установить один из множителей в 0.0571
опять та же засада - halui.feed-override.counts только s32
зы при feed-override.counts равным 0
value равен 1:
Снимок-2.png (2237 просмотров) <a class='original' href='./download/file.php?id=10568&mode=view' target=_blank>Загрузить оригинал (22.96 КБ)</a>
???????

Re: MyGUI

Добавлено: 04 янв 2013, 11:39
Lexxa
Короче вот так вот работает:
hal (для просмотра содержимого нажмите на ссылку)

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

loadrt limit1
loadrt conv_float_s32

addf conv-float-s32.0 servo-thread
addf limit1.0 servo-thread

setp limit1.0.min 0
setp limit1.0.max 120
net feed-override-in pyvcp.anaout => limit1.0.in
#feed override percentage = counts X scale
setp halui.feed-override.count-enable true
setp    halui.feed-override.direct-value true
setp halui.feed-override.scale 0.01

net feed-override-lim limit1.0.out => conv-float-s32.0.in
net feed-override-lim-s32 conv-float-s32.0.out => halui.feed-override.counts
net feed-override-lim => pyvcp.fo-bar.in
net feed-ovveride-val halui.feed-override.value => pyvcp.fo-bar.val
проверял на pyvcp: (для просмотра содержимого нажмите на ссылку)
<pyvcp>
<vbox>
<bar>
<halpin>"fo-bar.in"</halpin>
<min_>0</min_>
<max_>120</max_>
<bgcolor>"grey"</bgcolor>
<fillcolor>"red"</fillcolor>
</bar>
<bar>
<halpin>"fo-bar.val"</halpin>
<min_>0</min_>
<max_>1.20</max_>
<bgcolor>"grey"</bgcolor>
<fillcolor>"green"</fillcolor>
</bar>
<dial>
<size>180</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>120</max_>
<text>"feed override"</text>
<initval>0</initval>
<resolution>1</resolution>
<halpin>"anaout"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"green"</edgecolor>
<dotcolor>"black"</dotcolor>
</dial>
</vbox>
</pyvcp>
Вопрос, как сделать, чтоб при включении емс сразу ставила такую подачу (в независимости от интерфейса)?

Re: MyGUI

Добавлено: 04 янв 2013, 16:40
Nick
Lexxa писал(а):Вопрос, как сделать, чтоб при включении емс сразу ставила такую подачу (в независимости от интерфейса)?
Какую "такую"? В смысле чтобы при включении feedoverride всегда был на определенном значении?
И что значит вне зависимости от интерфейса?
Если к пину подключен пин pyvcp или gladevcp, то надо ставить их средствами, если ничего не подключено - то setp halui.feed-override.counts 28

Re: MyGUI

Добавлено: 04 янв 2013, 16:45
Lexxa
да) такую какая установлена на halui.feed-override.value.
При запуске ЕМС ставит подачу 100% и стоит чуть шевельнуть FO, как она ставится ноль, 10 итд, но скачко со 100%.
Незаисимость от интерфейса - значит, чтоб хоть в keystrick хоть в touchy хоть в axis хоть в MyGUI

Re: MyGUI

Добавлено: 04 янв 2013, 16:56
Nick
попробуй запихать setp halui.feed-override.counts 28 в postgui.hal.
Правда не уверен, что его будут все интерфейсы запускать именно так...

Re: MyGUI

Добавлено: 04 янв 2013, 17:06
Lexxa
ругнется, что setp halui.feed-override.counts уже соединен с сигналом

Re: MyGUI

Добавлено: 04 янв 2013, 17:11
Nick
А сигнал к чему подключен? PyVCP?

Re: MyGUI

Добавлено: 04 янв 2013, 17:13
Lexxa
да. цепочка вообще такая
pyvcp.dial(float) -> lim1(float) -> conv_float_s32(s32) -> halui.feed-override.count(s32)

Re: MyGUI

Добавлено: 04 янв 2013, 17:18
Nick
А если поставить step перед привязываением сигнала? Может так сработатет?
вообще странно, получается, что до изменения значения dial pyvcp не меняет выходной пин что ли?
Или это все halui?

Re: MyGUI

Добавлено: 04 янв 2013, 17:23
Lexxa
а вот как раз хз, кто тут косячит. Странно что со scale не прокатило крутить подачу.
До привязки к сишгалу - не прокатило.

Re: MyGUI

Добавлено: 04 янв 2013, 17:49
Nick
А какие значения при этом на пинах? Посмотри в hal show, так можно будет определить, кто именно не поменял значение.

Re: MyGUI

Добавлено: 04 янв 2013, 17:54
nkp
Lexxa писал(а):Незаисимость от интерфейса - значит, чтоб хоть в ........ хоть в MyGUI
в mygui все работает как ты сказал
и ничего особого там не надо
сейчас еще раз проверил - да - на выключенном пульте установил процентов на 30 - включил - запустил программу - так и есть
(для просмотра содержимого нажмите на ссылку)

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

loadrt hal_parport cfg="0x0378 in b400 in  9c00 in "
addf parport.0.read base-thread 1
addf parport.0.write base-thread -1 
addf parport.1.read base-thread 1
addf parport.1.write base-thread -1
addf parport.2.read base-thread 1
addf parport.2.write base-thread -1
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed
####################################################################################################################################
net migz parport.0.pin-01-out  classicladder.0.out-03   #мигаем z
net migx parport.1.pin-17-out  classicladder.0.out-07 
net migz1 parport.1.pin-16-out  classicladder.0.out-13 
net migx1 parport.1.pin-14-out  classicladder.0.out-12
net zm parport.0.pin-11-in-not  classicladder.0.in-08
net xm parport.1.pin-13-in-not  classicladder.0.in-10
net zp parport.1.pin-09-in-not  classicladder.0.in-12
net xp parport.1.pin-08-in-not  classicladder.0.in-13
net z_home  halui.joint.0.home  classicladder.0.out-00
net x_home  halui.joint.2.home  classicladder.0.out-04
net is_z_home  halui.joint.0.is-homed  classicladder.0.in-09
net is_x_home  halui.joint.2.is-homed  classicladder.0.in-11
loadrt encoder num_chan=2
loadrt mult2 count=2
addf mult2.0 servo-thread
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 1
loadrt mux2 count=1
addf mux2.0  servo-thread

setp mux2.0.in0 100
setp mux2.0.in1 500
net out   mux2.0.out halui.jog-speed 
net sel  mux2.0.sel   classicladder.0.out-14 parport.1.pin-01-out  #кнопка ускор ход
setp mult2.0.in0  100
setp halui.feed-override.scale 0.0571
net enc.0-a => encoder.0.phase-A =>  parport.1.pin-04-in
net enc.0-b => encoder.0.phase-B =>  parport.1.pin-12-in
net mult halui.feed-override.value  mult2.0.in1 


#8888888888888888888888888888888888888888888888888888888888888888888888888888888
#net feed-override-in hm2_5i25.0.7i77.0.0.analogin0 => halui.feed-override.scale
#setp halui.feed-override.counts 0

#88888888888888888888888888888888888888888888888888888888888888888888
loadrt conv_float_s32  count=2
addf conv-float-s32.0 servo-thread
addf conv-float-s32.1 servo-thread
net conv conv-float-s32.0.in hm2_5i25.0.7i77.0.0.analogin0
net feed_an halui.feed-override.counts   conv-float-s32.0.out  

net jog_x_plus halui.jog.0.plus classicladder.0.out-05
net jog_z_plus halui.jog.2.minus classicladder.0.out-01
net jog_x_minus halui.jog.0.minus classicladder.0.out-09 
net jog_z_minus halui.jog.2.plus classicladder.0.out-11
#================================================================================ max_vel
setp halui.max-velocity.scale 0.0571
net conv1 conv-float-s32.1.in   hm2_5i25.0.7i77.0.0.analogin1
net feed_an1  halui.max-velocity.counts   conv-float-s32.1.out 

######################
loadrt mux4 count=1
addf mux4.0  servo-thread
setp mux4.0.in0 1
setp mux4.0.in1 0.1
setp mux4.0.in2 0.01
setp axis.0.jog-enable 1
setp axis.2.jog-enable 1
net max_out  mux4.0.out   halui.jog.0.increment  halui.jog.2.increment  
net sel0  mux4.0.sel0   parport.1.pin-03-in-not 
net sel1  mux4.0.sel1   parport.1.pin-02-in-not 
net inc_jog_x_plus      halui.jog.0.increment-plus    classicladder.0.out-06 
net inc_jog_z_plus      halui.jog.2.increment-plus    classicladder.0.out-10
net inc_jog_x_minus     halui.jog.0.increment-minus   classicladder.0.out-08 
net inc_jog_z_minus     halui.jog.2.increment-minus   classicladder.0.out-02
net no_inc_jog_x    axis.0.kb-jog-active  classicladder.0.in-14  classicladder.0.in-17 #блокоровка повторн нажатия стрелки при ijog
net no_inc_jog_z    axis.2.kb-jog-active  classicladder.0.in-15  classicladder.0.in-16
net no_rapid_butt   parport.0.pin-03-in-not  classicladder.0.in-18 #блокир кн быстр хода
#----------------------------------------mpg
addf mult2.1 servo-thread
setp   encoder.1.position-scale 1
net enc.1-a =>  parport.0.pin-13-in =>   encoder.1.phase-A 
net enc.1-b => parport.0.pin-08-in =>    encoder.1.phase-B
setp axis.0.jog-vel-mode 0
setp axis.2.jog-vel-mode 0
net pend-counts  encoder.1.counts axis.0.jog-counts axis.2.jog-counts
net mpg-x-in    parport.1.pin-11-in-not  classicladder.0.in-19   
net mpg-z-in    parport.1.pin-15-in-not  classicladder.0.in-20  
net mpg-x-out  classicladder.0.out-15   axis.0.jog-enable
net mpg-z-out  classicladder.0.out-16   axis.2.jog-enable
setp mult2.1.in0 0.25
net  max_out  mult2.1.in1 
net  jog-scal   mult2.1.out   axis.0.jog-scale   axis.2.jog-scale
###################################################################################################################################




#net analog axis.0.joint-vel-cmd  hm2_5i25.0.7i77.0.1.analogout0
#setp hm2_5i25.0.7i77.0.1.analogena 1
standard_pinout.hal
(4.75 КБ) 1026 скачиваний

Re: MyGUI

Добавлено: 06 янв 2013, 16:05
nkp
добавляю режим Step
создал пин ,к нему прицепил функцию :

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

	def step(self,widget):
		self.c.auto(linuxcnc.AUTO_STEP)	
но так как

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

connect("value-changed"
то при каждом нажатии отрабатывает 2 кадра
(реагирует на нажатие-отпускание кнопки)
как это обойти ??

Re: MyGUI

Добавлено: 06 янв 2013, 16:09
Nick
nkp писал(а):connect("value-changed"
А к кому цепляешь, к кнопке?