MyGUI

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: MyGUI

Сообщение Serg »

По идее надо на стороне linuxcnc написать более-менее универсальный обработчик примерно как для месы, чтоб он при конекте с конкретным МК опрашиваел его какие у него есть входы-выходы - дискретные, аналоговые энкодеры, индикаторы и т.п. и создавал соотв. пины.

P.S. Кто будет пробовать рекомендую сразу выбирать контроллер с аппаратной реализацией USB, иначе велика вероятность получить "5, 4, 3, 2, 1, 0, Stop". А лучше с аппаратной реализацией Serial и отдельным чипом Serial-USB, что программить поменьше и получить универсальный интерфейс.
P.P.S. Я наверно займусь этим через 2-3 недели - буду пульт себе делать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

UAVpilot писал(а):По идее надо на стороне linuxcnc написать более-менее универсальный обработчик примерно как для месы, чтоб он при конекте с конкретным МК опрашиваел его какие у него есть входы-выходы - дискретные, аналоговые энкодеры, индикаторы и т.п. и создавал соотв. пины.
Я думаю этим и занимается hal_input :
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
#    Copyright 2007 Jeff Epler <jepler@unpythonic.net>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import linux_event, sys, os, fcntl, hal, select, time, glob, fnmatch, select
from hal import *

def tohalname(s): return str(s).lower().replace("_", "-")

class HalWrapper:
    def __init__(self, comp):
	self._comp = comp
	self._drive = {}
	self._pins = set()
	self._params = set()

    def drive(self):
	for k, v in self._drive.items(): setattr(self._comp, k, v)

    def newpin(self, *args):
	self._pins.add(args[0])
	return self._comp.newpin(*args)
    def newparam(self, *args):
	self._params.add(args[0])
 	return self._comp.newparam(*args)

    def __getitem__(self, k):
	if k in self._drive: return self._drive[k]
	return self._comp[k]

    def __setitem__(self, k, v):
	if k in self._params:
	    self._comp[k] = v; return
	if k in self._pins:
	    self._comp[k] = v; return
	raise KeyError, k
	self._drive[k] = v

class HalInputDevice:
    def __init__(self, comp, idx, name, parts='KRAL'):
	self.device = linux_event.InputDevice(name)

	self.idx = idx
	self.codes = set()
	self.last = {}
	self.rel_items = []
	self.abs_items = []
	self.comp = comp
        self.parts = parts

        if 'K' in parts:
            for key in self.device.get_bits('EV_KEY'):
                key = tohalname(key)
                self.codes.add(key)
                comp.newpin("%s.%s" % (idx, key), HAL_BIT, HAL_OUT)
                comp.newpin("%s.%s-not" % (idx, key), HAL_BIT, HAL_OUT)
                self.set(key + "-not", 1)

        if 'R' in parts:
            for axis in self.device.get_bits('EV_REL'):
                name = tohalname(axis)
                self.codes.add(name)
                comp.newpin("%s.%s-position" % (idx, name), HAL_FLOAT, HAL_OUT)
                comp.newpin("%s.%s-counts" % (idx, name), HAL_S32, HAL_OUT)
                comp.newpin("%s.%s-reset" % (idx, name), HAL_BIT, HAL_IN)
                comp.newpin("%s.%s-scale" % (idx, name), HAL_FLOAT, HAL_IN)
                self.set(name + '-scale', 1.)
                self.rel_items.append(name)

        if 'A' in parts:
            for axis in self.device.get_bits('EV_ABS'):
                name = tohalname(axis)
                self.codes.add(name)
                absinfo = self.device.get_absinfo(axis)
                comp.newpin("%s.%s-position" % (idx, name), HAL_FLOAT, HAL_OUT)
                comp.newpin("%s.%s-counts" % (idx, name), HAL_S32, HAL_OUT)
                comp.newpin("%s.%s-is-pos" % (idx, name), HAL_BIT, HAL_OUT)
                comp.newpin("%s.%s-is-neg" % (idx, name), HAL_BIT, HAL_OUT)
                comp.newpin("%s.%s-scale" % (idx, name), HAL_FLOAT, HAL_IN)
                comp.newpin("%s.%s-offset" % (idx, name), HAL_FLOAT, HAL_IN)
                comp.newpin("%s.%s-fuzz" % (idx, name), HAL_S32, HAL_IN)
                comp.newpin("%s.%s-flat" % (idx, name), HAL_S32, HAL_IN)
                comp.newparam("%s.%s-min" % (idx, name), HAL_S32, HAL_RO)
                comp.newparam("%s.%s-max" % (idx, name), HAL_S32, HAL_RO)
                center = (absinfo.minimum + absinfo.maximum)/2.
                halfrange = (absinfo.maximum - absinfo.minimum)/2. or 1
                self.set(name + "-counts", absinfo.value)
                self.set(name + "-position",
                    (absinfo.value - center) / halfrange)
                self.set(name + "-scale", halfrange)
                self.set(name + "-offset", center)
                self.set(name + "-fuzz", absinfo.fuzz)
                self.set(name + "-flat", absinfo.flat)
                self.set(name + "-min", absinfo.minimum)
                self.set(name + "-max", absinfo.maximum)
                self.abs_items.append(name)

	self.ledmap = {}
        if 'L' in parts:
            for led in self.device.get_bits('EV_LED'):
                name = tohalname(led)
                self.ledmap[name] = led
                comp.newpin("%s.%s" % (idx, name), HAL_BIT, HAL_IN)
                comp.newpin("%s.%s-invert" % (idx, name), HAL_BIT, HAL_IN)
                self.last[name] = 0
                self.device.write_event('EV_LED', led, 0)
	
    def get(self, name):
	name = "%s.%s" % (self.idx, name)
	return self.comp[name]

    def set(self, name, value):
	name = "%s.%s" % (self.idx, name)
	self.comp[name] = value

    def update(self):
	while self.device.readable():
	    ev = self.device.read_event()
	    if ev.type == 'EV_SYN': continue
	    elif ev.type == 'EV_SND': continue
	    elif ev.type == 'EV_MSC': continue
            elif ev.type == 'EV_LED': continue
            elif ev.type == 'EV_KEY' and 'K' not in self.parts: continue
            elif ev.type == 'EV_REL' and 'R' not in self.parts: continue
            elif ev.type == 'EV_ABS' and 'A' not in self.parts: continue
	    code = tohalname(ev.code)
	    if code not in self.codes:
		print >>sys.stderr, "Unexpected event", ev.type, ev.code
		continue
	    if ev.type == 'EV_KEY':
		if ev.value:
		    self.set(code, 1)
		    self.set(code + "-not", 0)
		else:
		    self.set(code, 0)
		    self.set(code + "-not", 1)
	    elif ev.type == 'EV_REL':
		self.set(code + "-counts", self.get(code + "-counts") + ev.value)
	    elif ev.type == 'EV_ABS':
		flat = self.get(code + "-flat")
		fuzz = self.get(code + "-fuzz")
		center = int(self.get(code + "-offset"))
		if ev.value < center-flat or ev.value > center+flat:
		    value = ev.value
		else: value = center
		if abs(value - self.get(code + "-counts")) > fuzz:
		    self.set(code + "-counts", value)

                
	for a in self.abs_items:
	    value = self.get(a + "-counts")
	    scale = self.get(a + "-scale") or 1
	    offset = self.get(a + "-offset")
	    position = (value - offset) / scale
	    self.set(a + "-position", position)
	    # Use .01 because my Joystick isn't exactly zero at rest. maybe should be a parameter?
	    self.set(a + "-is-neg", (position < -.01) )
	    self.set(a + "-is-pos", (position >  .01) )

	for r in self.rel_items:
	    reset = self.get(r + "-reset")
	    scale = self.get(r + "-scale") or 1
	    if reset: self.set(r + "-counts", 0)
	    self.set(r + "-position", self.get(r + "-counts") / scale)

	for k, v in self.last.items():
	    # Note: this is OK because the hal module always returns True or False for HAL_BIT values
	    u = self.comp["%s.%s" % (self.idx, k)] != self.comp["%s.%s-invert" % (self.idx, k)]
	    if u != self.last[k]:
		led = self.ledmap[k]
		self.device.write_event('EV_LED', led, u)
		self.last[k] = u

h = component("hal_input")
w = HalWrapper(h)
h.setprefix("input")
d = []
i = 0
parts = 'KRAL'
for f in sys.argv[1:]:
    if f.startswith("-"):
        parts = f[1:]K
    else:
        try:
            d.append(HalInputDevice(w, i, f, parts))
        except LookupError, detail:
            raise SystemExit, detail
        parts = 'KRAL'
        i += 1
w.drive()
h.ready()

fds = [dev.device.fileno() for dev in d]
try:
    while 1:
	select.select(fds, [], [], .01)
	for i in d: i.update()
	w.drive()
except KeyboardInterrupt:
    pass
талько он опрашивает все подключаемые устройства
наверно нетрудно будет дописать "привязку" его к одному определенному устройству
скорей всего использует он данные модуля linux_event.py :
(для просмотра содержимого нажмите на ссылку)

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

#    Copyright 2007 Jeff Epler <jepler@unpythonic.net>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import struct, fcntl, array, os, select, glob, fnmatch, time, re

size_shift = 16
def SZ(a,b): return a | (b<<size_shift)

def get_name(f):
    return fcntl.ioctl(f, SZ(EVIOCGNAME, 1024), '\0' * 1024)

def get_phys(f):
    return fcntl.ioctl(f, SZ(EVIOCGPHYS, 1024), '\0' * 1024)

# get_uniq seems to return -ENOENT on all my devices
def get_uniq(f):
    return fcntl.ioctl(f, SZ(EVIOCGUNIQ, 1024), '\0' * 1024)

def get_bits(f, o=0):
    o = EV_invert.get(o, o)
    if o == 'EV_SYN': fmap, rmap, prefix = EV_invert, EV, "SYN"
    elif o == 'EV_KEY': fmap, rmap, prefix = KEYBTN_invert, KEY, "KEY"
    elif o == 'EV_LED': fmap, rmap, prefix = LED_invert, LED, "LED"
    elif o == 'EV_ABS': fmap, rmap, prefix = ABS_invert, ABS, "ABS"
    elif o == 'EV_REL': fmap, rmap, prefix = REL_invert, REL, "REL"
    else: raise ValueError, "get_bits: unexpected map %s" % o

    sz = max(fmap) + 1
    a = fcntl.ioctl(f, SZ(EVIOCGBIT+EV[o], sz), '\0' * ((sz+7)/8))
    ret = set()
    for j, ch in enumerate(a):
	ch = ord(ch)
	for i in range(8):
	    b = 1<<i
	    if ch & b:
		k = j*8+i
		if k not in fmap:
		    name = "%s_%d" % (prefix, k)
		    fmap[k] = name
		    rmap[name] = k
		ret.add(fmap[k])
    return ret

def get_keys(f):
    ret = set()

class InputId:
    format = "HHHH"
    size = struct.calcsize(format)
    def __init__(self, buf):
	self.bustype, self.vendor, self.product, self.version = \
	    struct.unpack(self.format, buf)
	self.bustype = BUS_invert.get(self.bustype, self.bustype)
    @classmethod
    def get(cls, fd):
	buf = fcntl.ioctl(fd, EVIOCGID, '\0' * cls.size)
	return cls(buf)

    def __repr__(self):
	return "<InputId: %s %04x:%04x version=%d>" % (
	    self.bustype, self.vendor, self.product, self.version)
class AbsInfo:
    format = "iiiii"
    size = struct.calcsize(format)
    def __init__(self, *args):
	if len(args) == 1:
	    self.value, self.minimum, self.maximum, self.fuzz, self.flat = \
		struct.unpack(self.format, args[0])
	else:
	    self.value, self.minimum, self.maximum, self.fuzz, self.flat = args
    def __repr__(self):
	return "<AbsInfo: %8d %8d %8d %8d %8d>" % (
	    self.value, self.minimum, self.maximum, self.fuzz, self.flat)
	
    @classmethod
    def get(cls, fd, idx):
	idx = ABS.get(idx, idx)
	buf = fcntl.ioctl(fd, EVIOCGABS + idx, '\0' * cls.size)
	return cls(buf)

    def set(self, fd, idx):
	idx = ABS.get(idx, idx)
	buf = struct.pack(format, self.value, self.minimum, self.maximum, 
			    self.fuzz, self.flat)
	fcntl.ioctl(fd, EVIOCSABS + idx, buf)

def mapcode(type, code):
    if type == EV_REL: return REL_invert.get(code, code)
    if type == EV_ABS: return ABS_invert.get(code, code)
    if type == EV_KEY:
	if code in KEY_invert:
	    return KEY_invert[code]
	return BTN_invert.get(code, code)
    if type == EV_REL: return REL_invert.get(code, code)

class Event:
    format = "llHHi"
    size = struct.calcsize(format)

    def __init__(self, buf):
	data = struct.unpack(self.format, buf)
	self.time = data[0] + data[1] * 1e-9
	self.type = EV_invert[data[2]]
	self.code = data[3]
	self.value = data[4]

    @classmethod
    def read(cls, f):
	if isinstance(f, int):
	    buf = os.read(f, cls.size)
	else:
	    buf = f.read(size)
	return cls(buf)

    @classmethod
    def write(cls, f, *args):
	if len(args) == 3:
	    event_time = time.time()
	    time_seconds = int(event_time)
	    time_ns = int((event_time - time_seconds) * 1e9)
	    type, code, value = args
	elif len(args) == 4:
	    event_time, type, code, value = args
	    time_seconds = int(event_time)
	    time_ns = int((event_time - time_seconds) * 1e9)
	else:
	    time_seconds, time_ns, type, code, value = args
	if type == 'EV_LED' and isinstance(code, str): code = LED[code]
	type = EV.get(type, type)
	buf = struct.pack(cls.format, time_seconds, time_ns, type, code, value)
	os.write(f, buf)

    def __repr__(self):
	code = self.code
	if isinstance(code, int): code = "%04x" % code
	return "<Event %s %s %8d>" % (self.type, code, self.value)

EV = {
	'EV_SYN': 0x00,
	'EV_KEY': 0x01,
	'EV_REL': 0x02,
	'EV_ABS': 0x03,
	'EV_MSC': 0x04,
	'EV_SW': 0x05,
	'EV_LED': 0x11,
	'EV_SND': 0x12,
	'EV_REP': 0x14,
	'EV_FF': 0x15,
	'EV_PWR': 0x16,
	'EV_FF_STATUS': 0x17,
}
REL = {
	'REL_X': 0x00,
	'REL_Y': 0x01,
	'REL_Z': 0x02,
	'REL_RX': 0x03,
	'REL_RY': 0x04,
	'REL_RZ': 0x05,
	'REL_HWHEEL': 0x06,
	'REL_DIAL': 0x07,
	'REL_WHEEL': 0x08,
	'REL_MISC': 0x09,
}
KEY = {
	'KEY_RESERVED': 0,
	'KEY_ESC': 1,
	'KEY_1': 2,
	'KEY_2': 3,
	'KEY_3': 4,
	'KEY_4': 5,
	'KEY_5': 6,
	'KEY_6': 7,
	'KEY_7': 8,
	'KEY_8': 9,
	'KEY_9': 10,
	'KEY_0': 11,
	'KEY_MINUS': 12,
	'KEY_EQUAL': 13,
	'KEY_BACKSPACE': 14,
	'KEY_TAB': 15,
	'KEY_Q': 16,
	'KEY_W': 17,
	'KEY_E': 18,
	'KEY_R': 19,
	'KEY_T': 20,
	'KEY_Y': 21,
	'KEY_U': 22,
	'KEY_I': 23,
	'KEY_O': 24,
	'KEY_P': 25,
	'KEY_LEFTBRACE': 26,
	'KEY_RIGHTBRACE': 27,
	'KEY_ENTER': 28,
	'KEY_LEFTCTRL': 29,
	'KEY_A': 30,
	'KEY_S': 31,
	'KEY_D': 32,
	'KEY_F': 33,
	'KEY_G': 34,
	'KEY_H': 35,
	'KEY_J': 36,
	'KEY_K': 37,
	'KEY_L': 38,
	'KEY_SEMICOLON': 39,
	'KEY_APOSTROPHE': 40,
	'KEY_GRAVE': 41,
	'KEY_LEFTSHIFT': 42,
	'KEY_BACKSLASH': 43,
	'KEY_Z': 44,
	'KEY_X': 45,
	'KEY_C': 46,
	'KEY_V': 47,
	'KEY_B': 48,
	'KEY_N': 49,
	'KEY_M': 50,
	'KEY_COMMA': 51,
	'KEY_DOT': 52,
	'KEY_SLASH': 53,
	'KEY_RIGHTSHIFT': 54,
	'KEY_KPASTERISK': 55,
	'KEY_LEFTALT': 56,
	'KEY_SPACE': 57,
	'KEY_CAPSLOCK': 58,
	'KEY_F1': 59,
	'KEY_F2': 60,
	'KEY_F3': 61,
	'KEY_F4': 62,
	'KEY_F5': 63,
	'KEY_F6': 64,
	'KEY_F7': 65,
	'KEY_F8': 66,
	'KEY_F9': 67,
	'KEY_F10': 68,
	'KEY_NUMLOCK': 69,
	'KEY_SCROLLLOCK': 70,
	'KEY_KP7': 71,
	'KEY_KP8': 72,
	'KEY_KP9': 73,
	'KEY_KPMINUS': 74,
	'KEY_KP4': 75,
	'KEY_KP5': 76,
	'KEY_KP6': 77,
	'KEY_KPPLUS': 78,
	'KEY_KP1': 79,
	'KEY_KP2': 80,
	'KEY_KP3': 81,
	'KEY_KP0': 82,
	'KEY_KPDOT': 83,
	'KEY_ZENKAKUHANKAKU': 85,
	'KEY_102ND': 86,
	'KEY_F11': 87,
	'KEY_F12': 88,
	'KEY_RO': 89,
	'KEY_KATAKANA': 90,
	'KEY_HIRAGANA': 91,
	'KEY_HENKAN': 92,
	'KEY_KATAKANAHIRAGANA': 93,
	'KEY_MUHENKAN': 94,
	'KEY_KPJPCOMMA': 95,
	'KEY_KPENTER': 96,
	'KEY_RIGHTCTRL': 97,
	'KEY_KPSLASH': 98,
	'KEY_SYSRQ': 99,
	'KEY_RIGHTALT': 100,
	'KEY_LINEFEED': 101,
	'KEY_HOME': 102,
	'KEY_UP': 103,
	'KEY_PAGEUP': 104,
	'KEY_LEFT': 105,
	'KEY_RIGHT': 106,
	'KEY_END': 107,
	'KEY_DOWN': 108,
	'KEY_PAGEDOWN': 109,
	'KEY_INSERT': 110,
	'KEY_DELETE': 111,
	'KEY_MACRO': 112,
	'KEY_MUTE': 113,
	'KEY_VOLUMEDOWN': 114,
	'KEY_VOLUMEUP': 115,
	'KEY_POWER': 116,
	'KEY_KPEQUAL': 117,
	'KEY_KPPLUSMINUS': 118,
	'KEY_PAUSE': 119,
	'KEY_KPCOMMA': 121,
	'KEY_HANGUEL': 122,
	'KEY_HANJA': 123,
	'KEY_YEN': 124,
	'KEY_LEFTMETA': 125,
	'KEY_RIGHTMETA': 126,
	'KEY_COMPOSE': 127,
	'KEY_STOP': 128,
	'KEY_AGAIN': 129,
	'KEY_PROPS': 130,
	'KEY_UNDO': 131,
	'KEY_FRONT': 132,
	'KEY_COPY': 133,
	'KEY_OPEN': 134,
	'KEY_PASTE': 135,
	'KEY_FIND': 136,
	'KEY_CUT': 137,
	'KEY_HELP': 138,
	'KEY_MENU': 139,
	'KEY_CALC': 140,
	'KEY_SETUP': 141,
	'KEY_SLEEP': 142,
	'KEY_WAKEUP': 143,
	'KEY_FILE': 144,
	'KEY_SENDFILE': 145,
	'KEY_DELETEFILE': 146,
	'KEY_XFER': 147,
	'KEY_PROG1': 148,
	'KEY_PROG2': 149,
	'KEY_WWW': 150,
	'KEY_MSDOS': 151,
	'KEY_COFFEE': 152,
	'KEY_DIRECTION': 153,
	'KEY_CYCLEWINDOWS': 154,
	'KEY_MAIL': 155,
	'KEY_BOOKMARKS': 156,
	'KEY_COMPUTER': 157,
	'KEY_BACK': 158,
	'KEY_FORWARD': 159,
	'KEY_CLOSECD': 160,
	'KEY_EJECTCD': 161,
	'KEY_EJECTCLOSECD': 162,
	'KEY_NEXTSONG': 163,
	'KEY_PLAYPAUSE': 164,
	'KEY_PREVIOUSSONG': 165,
	'KEY_STOPCD': 166,
	'KEY_RECORD': 167,
	'KEY_REWIND': 168,
	'KEY_PHONE': 169,
	'KEY_ISO': 170,
	'KEY_CONFIG': 171,
	'KEY_HOMEPAGE': 172,
	'KEY_REFRESH': 173,
	'KEY_EXIT': 174,
	'KEY_MOVE': 175,
	'KEY_EDIT': 176,
	'KEY_SCROLLUP': 177,
	'KEY_SCROLLDOWN': 178,
	'KEY_KPLEFTPAREN': 179,
	'KEY_KPRIGHTPAREN': 180,
	'KEY_NEW': 181,
	'KEY_REDO': 182,
	'KEY_F13': 183,
	'KEY_F14': 184,
	'KEY_F15': 185,
	'KEY_F16': 186,
	'KEY_F17': 187,
	'KEY_F18': 188,
	'KEY_F19': 189,
	'KEY_F20': 190,
	'KEY_F21': 191,
	'KEY_F22': 192,
	'KEY_F23': 193,
	'KEY_F24': 194,
	'KEY_PLAYCD': 200,
	'KEY_PAUSECD': 201,
	'KEY_PROG3': 202,
	'KEY_PROG4': 203,
	'KEY_SUSPEND': 205,
	'KEY_CLOSE': 206,
	'KEY_PLAY': 207,
	'KEY_FASTFORWARD': 208,
	'KEY_BASSBOOST': 209,
	'KEY_PRINT': 210,
	'KEY_HP': 211,
	'KEY_CAMERA': 212,
	'KEY_SOUND': 213,
	'KEY_QUESTION': 214,
	'KEY_EMAIL': 215,
	'KEY_CHAT': 216,
	'KEY_SEARCH': 217,
	'KEY_CONNECT': 218,
	'KEY_FINANCE': 219,
	'KEY_SPORT': 220,
	'KEY_SHOP': 221,
	'KEY_ALTERASE': 222,
	'KEY_CANCEL': 223,
	'KEY_BRIGHTNESSDOWN': 224,
	'KEY_BRIGHTNESSUP': 225,
	'KEY_MEDIA': 226,
	'KEY_SWITCHVIDEOMODE': 227,
	'KEY_KBDILLUMTOGGLE': 228,
	'KEY_KBDILLUMDOWN': 229,
	'KEY_KBDILLUMUP': 230,
	'KEY_SEND': 231,
	'KEY_REPLY': 232,
	'KEY_FORWARDMAIL': 233,
	'KEY_SAVE': 234,
	'KEY_DOCUMENTS': 235,
	'KEY_UNKNOWN': 240,
        'KEY_VIDEO_NEXT':	241,
        'KEY_VIDEO_PREV':	242,
        'KEY_BRIGHTNESS_CYCLE':	243,
        'KEY_BRIGHTNESS_ZERO':	244,
        'KEY_DISPLAY_OFF':	245,
        'KEY_WIMAX':		246,
        'KEY_RFKILL':		247,

	'KEY_OK': 0x160,
	'KEY_SELECT': 0x161,
	'KEY_GOTO': 0x162,
	'KEY_CLEAR': 0x163,
	'KEY_POWER2': 0x164,
	'KEY_OPTION': 0x165,
	'KEY_INFO': 0x166,
	'KEY_TIME': 0x167,
	'KEY_VENDOR': 0x168,
	'KEY_ARCHIVE': 0x169,
	'KEY_PROGRAM': 0x16a,
	'KEY_CHANNEL': 0x16b,
	'KEY_FAVORITES': 0x16c,
	'KEY_EPG': 0x16d,
	'KEY_PVR': 0x16e,
	'KEY_MHP': 0x16f,
	'KEY_LANGUAGE': 0x170,
	'KEY_TITLE': 0x171,
	'KEY_SUBTITLE': 0x172,
	'KEY_ANGLE': 0x173,
	'KEY_ZOOM': 0x174,
	'KEY_MODE': 0x175,
	'KEY_KEYBOARD': 0x176,
	'KEY_SCREEN': 0x177,
	'KEY_PC': 0x178,
	'KEY_TV': 0x179,
	'KEY_TV2': 0x17a,
	'KEY_VCR': 0x17b,
	'KEY_VCR2': 0x17c,
	'KEY_SAT': 0x17d,
	'KEY_SAT2': 0x17e,
	'KEY_CD': 0x17f,
	'KEY_TAPE': 0x180,
	'KEY_RADIO': 0x181,
	'KEY_TUNER': 0x182,
	'KEY_PLAYER': 0x183,
	'KEY_TEXT': 0x184,
	'KEY_DVD': 0x185,
	'KEY_AUX': 0x186,
	'KEY_MP3': 0x187,
	'KEY_AUDIO': 0x188,
	'KEY_VIDEO': 0x189,
	'KEY_DIRECTORY': 0x18a,
	'KEY_LIST': 0x18b,
	'KEY_MEMO': 0x18c,
	'KEY_CALENDAR': 0x18d,
	'KEY_RED': 0x18e,
	'KEY_GREEN': 0x18f,
	'KEY_YELLOW': 0x190,
	'KEY_BLUE': 0x191,
	'KEY_CHANNELUP': 0x192,
	'KEY_CHANNELDOWN': 0x193,
	'KEY_FIRST': 0x194,
	'KEY_LAST': 0x195,
	'KEY_AB': 0x196,
	'KEY_NEXT': 0x197,
	'KEY_RESTART': 0x198,
	'KEY_SLOW': 0x199,
	'KEY_SHUFFLE': 0x19a,
	'KEY_BREAK': 0x19b,
	'KEY_PREVIOUS': 0x19c,
	'KEY_DIGITS': 0x19d,
	'KEY_TEEN': 0x19e,
	'KEY_TWEN': 0x19f,
	'KEY_DEL_EOL': 0x1c0,
	'KEY_DEL_EOS': 0x1c1,
	'KEY_INS_LINE': 0x1c2,
	'KEY_DEL_LINE': 0x1c3,
	'KEY_FN': 0x1d0,
	'KEY_FN_ESC': 0x1d1,
	'KEY_FN_F1': 0x1d2,
	'KEY_FN_F2': 0x1d3,
	'KEY_FN_F3': 0x1d4,
	'KEY_FN_F4': 0x1d5,
	'KEY_FN_F5': 0x1d6,
	'KEY_FN_F6': 0x1d7,
	'KEY_FN_F7': 0x1d8,
	'KEY_FN_F8': 0x1d9,
	'KEY_FN_F9': 0x1da,
	'KEY_FN_F10': 0x1db,
	'KEY_FN_F11': 0x1dc,
	'KEY_FN_F12': 0x1dd,
	'KEY_FN_1': 0x1de,
	'KEY_FN_2': 0x1df,
	'KEY_FN_D': 0x1e0,
	'KEY_FN_E': 0x1e1,
	'KEY_FN_F': 0x1e2,
	'KEY_FN_S': 0x1e3,
	'KEY_FN_B': 0x1e4,
        'KEY_BRL_DOT1': 		0x1f1,
        'KEY_BRL_DOT2': 		0x1f2,
        'KEY_BRL_DOT3': 		0x1f3,
        'KEY_BRL_DOT4': 		0x1f4,
        'KEY_BRL_DOT5': 		0x1f5,
        'KEY_BRL_DOT6': 		0x1f6,
        'KEY_BRL_DOT7': 		0x1f7,
        'KEY_BRL_DOT8': 		0x1f8,
        'KEY_BRL_DOT9': 		0x1f9,
        'KEY_BRL_DOT10': 		0x1fa,
        'KEY_NUMERIC_0': 		0x200,
        'KEY_NUMERIC_1': 		0x201,
        'KEY_NUMERIC_2': 		0x202,
        'KEY_NUMERIC_3': 		0x203,
        'KEY_NUMERIC_4': 		0x204,
        'KEY_NUMERIC_5': 		0x205,
        'KEY_NUMERIC_6': 		0x206,
        'KEY_NUMERIC_7': 		0x207,
        'KEY_NUMERIC_8': 		0x208,
        'KEY_NUMERIC_9': 		0x209,
        'KEY_NUMERIC_STAR': 	0x20a,
        'KEY_NUMERIC_POUND': 	0x20b,
        'KEY_CAMERA_FOCUS': 	0x210,
        'KEY_WPS_BUTTON': 	0x211,
        'KEY_TOUCHPAD_TOGGLE': 	0x212,
        'KEY_TOUCHPAD_ON': 	0x213,
        'KEY_TOUCHPAD_OFF': 	0x214,
        'KEY_CAMERA_ZOOMIN': 	0x215,
        'KEY_CAMERA_ZOOMOUT': 	0x216,
        'KEY_CAMERA_UP': 	0x217,
        'KEY_CAMERA_DOWN': 	0x218,
        'KEY_CAMERA_LEFT': 	0x219,
        'KEY_CAMERA_RIGHT': 	0x21a,
}
BTN = {
	'BTN_MISC': 0x100,
	'BTN_0': 0x100,
	'BTN_1': 0x101,
	'BTN_2': 0x102,
	'BTN_3': 0x103,
	'BTN_4': 0x104,
	'BTN_5': 0x105,
	'BTN_6': 0x106,
	'BTN_7': 0x107,
	'BTN_8': 0x108,
	'BTN_9': 0x109,
	'BTN_10': 0x10a,
	'BTN_11': 0x10b,
	'BTN_12': 0x10c,
	'BTN_13': 0x10d,
	'BTN_14': 0x10e,
	'BTN_15': 0x10f,
	'BTN_MOUSE': 0x110,
	'BTN_LEFT': 0x110,
	'BTN_RIGHT': 0x111,
	'BTN_MIDDLE': 0x112,
	'BTN_SIDE': 0x113,
	'BTN_EXTRA': 0x114,
	'BTN_FORWARD': 0x115,
	'BTN_BACK': 0x116,
	'BTN_TASK': 0x117,
	'BTN_JOYSTICK': 0x120,
	'BTN_TRIGGER': 0x120,
	'BTN_THUMB': 0x121,
	'BTN_THUMB2': 0x122,
	'BTN_TOP': 0x123,
	'BTN_TOP2': 0x124,
	'BTN_PINKIE': 0x125,
	'BTN_BASE': 0x126,
	'BTN_BASE2': 0x127,
	'BTN_BASE3': 0x128,
	'BTN_BASE4': 0x129,
	'BTN_BASE5': 0x12a,
	'BTN_BASE6': 0x12b,
	'BTN_DEAD': 0x12f,
	'BTN_GAMEPAD': 0x130,
	'BTN_A': 0x130,
	'BTN_B': 0x131,
	'BTN_C': 0x132,
	'BTN_X': 0x133,
	'BTN_Y': 0x134,
	'BTN_Z': 0x135,
	'BTN_TL': 0x136,
	'BTN_TR': 0x137,
	'BTN_TL2': 0x138,
	'BTN_TR2': 0x139,
	'BTN_SELECT': 0x13a,
	'BTN_START': 0x13b,
	'BTN_MODE': 0x13c,
	'BTN_THUMBL': 0x13d,
	'BTN_THUMBR': 0x13e,
	'BTN_DIGI': 0x140,
	'BTN_TOOL_PEN': 0x140,
	'BTN_TOOL_RUBBER': 0x141,
	'BTN_TOOL_BRUSH': 0x142,
	'BTN_TOOL_PENCIL': 0x143,
	'BTN_TOOL_AIRBRUSH': 0x144,
	'BTN_TOOL_FINGER': 0x145,
	'BTN_TOOL_MOUSE': 0x146,
	'BTN_TOOL_LENS': 0x147,
	'BTN_TOUCH': 0x14a,
	'BTN_STYLUS': 0x14b,
	'BTN_STYLUS2': 0x14c,
	'BTN_TOOL_DOUBLETAP': 0x14d,
	'BTN_TOOL_TRIPLETAP': 0x14e,
        'BTN_TOOL_QUADTAP':     0x14f,
	'BTN_WHEEL': 0x150,
	'BTN_GEAR_DOWN': 0x150,
	'BTN_GEAR_UP': 0x151,

        'BTN_TRIGGER_HAPPY': 		0x2c0,
        'BTN_TRIGGER_HAPPY1': 		0x2c0,
        'BTN_TRIGGER_HAPPY2': 		0x2c1,
        'BTN_TRIGGER_HAPPY3': 		0x2c2,
        'BTN_TRIGGER_HAPPY4': 		0x2c3,
        'BTN_TRIGGER_HAPPY5': 		0x2c4,
        'BTN_TRIGGER_HAPPY6': 		0x2c5,
        'BTN_TRIGGER_HAPPY7': 		0x2c6,
        'BTN_TRIGGER_HAPPY8': 		0x2c7,
        'BTN_TRIGGER_HAPPY9': 		0x2c8,
        'BTN_TRIGGER_HAPPY10': 		0x2c9,
        'BTN_TRIGGER_HAPPY11': 		0x2ca,
        'BTN_TRIGGER_HAPPY12': 		0x2cb,
        'BTN_TRIGGER_HAPPY13': 		0x2cc,
        'BTN_TRIGGER_HAPPY14': 		0x2cd,
        'BTN_TRIGGER_HAPPY15': 		0x2ce,
        'BTN_TRIGGER_HAPPY16': 		0x2cf,
        'BTN_TRIGGER_HAPPY17': 		0x2d0,
        'BTN_TRIGGER_HAPPY18': 		0x2d1,
        'BTN_TRIGGER_HAPPY19': 		0x2d2,
        'BTN_TRIGGER_HAPPY20': 		0x2d3,
        'BTN_TRIGGER_HAPPY21': 		0x2d4,
        'BTN_TRIGGER_HAPPY22': 		0x2d5,
        'BTN_TRIGGER_HAPPY23': 		0x2d6,
        'BTN_TRIGGER_HAPPY24': 		0x2d7,
        'BTN_TRIGGER_HAPPY25': 		0x2d8,
        'BTN_TRIGGER_HAPPY26': 		0x2d9,
        'BTN_TRIGGER_HAPPY27': 		0x2da,
        'BTN_TRIGGER_HAPPY28': 		0x2db,
        'BTN_TRIGGER_HAPPY29': 		0x2dc,
        'BTN_TRIGGER_HAPPY30': 		0x2dd,
        'BTN_TRIGGER_HAPPY31': 		0x2de,
        'BTN_TRIGGER_HAPPY32': 		0x2df,
        'BTN_TRIGGER_HAPPY33': 		0x2e0,
        'BTN_TRIGGER_HAPPY34': 		0x2e1,
        'BTN_TRIGGER_HAPPY35': 		0x2e2,
        'BTN_TRIGGER_HAPPY36': 		0x2e3,
        'BTN_TRIGGER_HAPPY37': 		0x2e4,
        'BTN_TRIGGER_HAPPY38': 		0x2e5,
        'BTN_TRIGGER_HAPPY39': 		0x2e6,
        'BTN_TRIGGER_HAPPY40': 		0x2e7,
}
BUS = {
	'BUS_PCI': 0x01,
	'BUS_ISAPNP': 0x02,
	'BUS_USB': 0x03,
	'BUS_HIL': 0x04,
	'BUS_BLUETOOTH': 0x05,
	'BUS_ISA': 0x10,
	'BUS_I8042': 0x11,
	'BUS_XTKBD': 0x12,
	'BUS_RS232': 0x13,
	'BUS_GAMEPORT': 0x14,
	'BUS_PARPORT': 0x15,
	'BUS_AMIGA': 0x16,
	'BUS_ADB': 0x17,
	'BUS_I2C': 0x18,
	'BUS_HOST': 0x19,
	'BUS_GSC': 0x1A,
        'BUS_ATARI': 0x1B,
        'BUS_SPI':   0x1C,
}
ABS = {
	'ABS_X': 0x00,
	'ABS_Y': 0x01,
	'ABS_Z': 0x02,
	'ABS_RX': 0x03,
	'ABS_RY': 0x04,
	'ABS_RZ': 0x05,
	'ABS_THROTTLE': 0x06,
	'ABS_RUDDER': 0x07,
	'ABS_WHEEL': 0x08,
	'ABS_GAS': 0x09,
	'ABS_BRAKE': 0x0a,
	'ABS_HAT0X': 0x10,
	'ABS_HAT0Y': 0x11,
	'ABS_HAT1X': 0x12,
	'ABS_HAT1Y': 0x13,
	'ABS_HAT2X': 0x14,
	'ABS_HAT2Y': 0x15,
	'ABS_HAT3X': 0x16,
	'ABS_HAT3Y': 0x17,
	'ABS_PRESSURE': 0x18,
	'ABS_DISTANCE': 0x19,
	'ABS_TILT_X': 0x1a,
	'ABS_TILT_Y': 0x1b,
	'ABS_TOOL_WIDTH': 0x1c,
	'ABS_VOLUME': 0x20,
	'ABS_MISC': 0x28,
        'ABS_MT_SLOT':	0x2f,
        'ABS_MT_TOUCH_MAJOR': 0x30,
        'ABS_MT_TOUCH_MINOR': 0x31,
        'ABS_MT_WIDTH_MAJOR': 0x32,
        'ABS_MT_WIDTH_MINOR': 0x33,
        'ABS_MT_ORIENTATION': 0x34,
        'ABS_MT_POSITION_X':  0x35,
        'ABS_MT_POSITION_Y':  0x36,
        'ABS_MT_TOOL_TYPE':   0x37,
        'ABS_MT_BLOB_ID':     0x38,
        'ABS_MT_TRACKING_ID': 0x39,
        'ABS_MT_PRESSURE':    0x3a,
        'ABS_MT_DISTANCE':    0x3b,
}
LED = {
	'LED_NUML': 0x00,
	'LED_CAPSL': 0x01,
	'LED_SCROLLL': 0x02,
	'LED_COMPOSE': 0x03,
	'LED_KANA': 0x04,
	'LED_SLEEP': 0x05,
	'LED_SUSPEND': 0x06,
	'LED_MUTE': 0x07,
	'LED_MISC': 0x08,
	'LED_MAIL': 0x09,
	'LED_CHARGING': 0x0a,
}

def i(x):
    return x - 2**32
EVIOCGVERSION        = i(0x80044501)
EVIOCGID             = i(0x80084502)
EVIOCGREP            = i(0x80084503)
EVIOCSREP            = 0x40084503
EVIOCGKEYCODE        = i(0x80084504)
EVIOCSKEYCODE        = 0x40084504
EVIOCGNAME           = i(0x80004506)
EVIOCGPHYS           = i(0x80004507)
EVIOCGUNIQ           = i(0x80004508)
EVIOCGKEY            = i(0x80004518)
EVIOCGLED            = i(0x80004519)
EVIOCGSND            = i(0x8000451a)
EVIOCGBIT            = i(0x80004520)
EVIOCGABS            = i(0x80144540)
EVIOCSABS            = 0x401445c0
EVIOCSFF             = 0x402c4580
EVIOCRMFF            = 0x40044581
EVIOCGEFFECTS        = i(0x80044584)
EVIOCGRAB            = 0x40044590

def invert(d):
    return dict((v,k) for k,v in d.iteritems())
ABS_invert = invert(ABS)
BTN_invert = invert(BTN)
BUS_invert = invert(BUS)
EV_invert = invert(EV)
KEY_invert = invert(KEY)
LED_invert = invert(LED)
REL_invert = invert(REL)
del invert
KEYBTN_invert = KEY_invert.copy()
KEYBTN_invert.update(BTN_invert)

def humanize(s):
    s = re.split("(\d+)", s)
    def maybe_int(ss):
        if ss and ss[0] in "0123456789": return int(ss)
        return ss
    return map(maybe_int, s)

def find(pattern):
    if ":" in pattern:
        pattern, idx = pattern.rsplit(":", 1)
        idx = int(idx)
    else:
        idx = 0
    if os.path.exists("/dev/input/event%s" % pattern):
	return os.open("/dev/input/event%s" % pattern, os.O_RDWR)

    candidates = glob.glob("/dev/input/event*")
    candidates.sort(key=humanize)
    successful_opens = 0
    for c in candidates:
	try:
	    f = os.open(c, os.O_RDWR)
	except os.error:
	    continue
        successful_opens += 1

	name = get_name(f)
	if name.find(pattern) != -1 or fnmatch.fnmatch(name, pattern):
            if idx == 0:
                return f
            else:
                idx -= 1
                continue

        try:
            phys = get_phys(f)
        except IOError:
            pass
        else:
            if phys.find(pattern) != -1 or fnmatch.fnmatch(phys, pattern):
                if idx == 0:
                    return f
                else:
                    idx -= 1
                    continue

	id = InputId.get(f)
	sid = "Bus=%s Vendor=%04x Product=%04x Version=%04x" % (\
	    id.bustype, id.vendor, id.product, id.version)
	if sid.find(pattern) != -1 or fnmatch.fnmatch(sid, pattern):
            if idx == 0:
                return f
            else:
                idx -= 1
                continue

	sid = "%04x:%04x" % (id.vendor, id.product)
	if sid.find(pattern) != -1 or fnmatch.fnmatch(sid, pattern):
            if idx == 0:
                return f
            else:
                idx -= 1
                continue

	os.close(f)
    if not successful_opens:
        raise LookupError, """\
No input devices could be opened.  This usually indicates a misconfigured
system.  Please read the section 'PERMISSIONS AND UDEV' in the hal_input
manpage"""
    raise LookupError, (
        "No input device matching %r was found (%d devices checked)" 
            % (pattern, successful_opens))

def decode(map, mapname, code):
    if isinstance(code, str): return code
    if code in map: return map[code]
    return "%s_%s" % (mapname, code)

class InputDevice:
    def __init__(self, pattern):
	if pattern.startswith("+"):
	    exclusive = 1
	    pattern = pattern[1:]
	else:
	    exclusive = 0

	self.f = find(pattern)

	if exclusive:
	    fcntl.ioctl(self.f, EVIOCGRAB, 1)
    	
    def fileno(self): return self.f
    def readable(self):
	r, w, x = select.select([self.f], [], [], 0)
	return self.f in r

    def get_bits(self, arg): return get_bits(self.f, arg)
    def get_absinfo(self, arg): return AbsInfo.get(self.f, arg)
    def read_event(self):
	e = Event.read(self.f)
	if e.type == 'EV_KEY': e.code = decode(KEYBTN_invert, 'KEY', e.code)
	elif e.type == 'EV_ABS': e.code = decode(ABS_invert, 'ABS', e.code)
	elif e.type == 'EV_REL': e.code = decode(REL_invert, 'REL', e.code)
	elif e.type == 'EV_LED': e.code = decode(LED_invert, 'LED', e.code)
	return e

    def write_event(self, *args):
	Event.write(self.f, *args)
отсюда два вопроса:
первый риторический - так уж необходимо модифицировать этот модуль,чтоб он "видел" только одно наше устройство?
(все равно он наверно никак не перегружает ни хал ни систему вцелом - так как опрос только один раз в начале)
а второй вопрос остается открытым:
что нужно нашему устройству на МК , чтоб его "увидел" hal_input ??
почему он не видит arduino в устройстве ,работающем через usb ???
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Наверное потому, что arduino не генерирует event-ов.
Эти event генерят драйверы устройств. Можно наверное написать драйвер для ардуины, которые будет генерировать ивенты, которые будет перехватываться linux_event.py, с которым будет работать hal_input. Но не проще ли сделать свой скрипт типо arduino.py, который будет работать с ардуиной?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):Эти event генерят драйверы устройств
но как же пример с джойстиком?(я ж драйвер никакой не ставил)
или драйвер уже стоял в убунту ?
Nick писал(а):, с которым будет работать hal_input. Но не проще ли сделать свой скрипт типо arduino.py, который будет работать с ардуиной?
оно то проще
но вопрос как надежней для меня пока открыт
не надежней ли отслеживать события системные через linux_event.py
чем работать через порт ?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: MyGUI

Сообщение Serg »

hal_input работает со стандартными устройствами ввода (может я не прав, пока изучал "по диагонали"), а наше устройство нестандартное. Ну и правильней сделать так, чтобы поддерживалось несколько подобных устройств одновременно. Мысль примерно такая: есть устройство в какой-то своей конфигурации, при подключении к linuxcnc оно само сообщает свои возможности и в hal создаются соотв. пины.

Да, драйвер джойстика в системе уже есть.

Надёжность ровно одинаковая - какая разница откуда читать данные, из файла /dev/ttyUSB0 или из /dev/input/event0? Только вот в первом случае можно вести полноценный диалог (читать и писать), а во втором только слушать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

UAVpilot,
спасибо - аж полегчало - теперь вопросов нет :)
-------------------
щас на обеде будет время - изучу архитектуру МК , ну может успею выучить си,
уже вечером все спаяю и прошью :)
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: MyGUI

Сообщение Lexxa »

Делов там на час на все про все
:bender:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

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

Re: MyGUI

Сообщение nkp »

Кто подскажет:
шлейф на 5i25 + 7i77 прямой - 1-й к 1-у, 2-й ко 2-у.......25-й к 25-у ?????
пока нет готового -хочу спаять...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Да, прямой.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

вот думаю проверить конфиг без станка с SIM_ENCODER
я так понял что выходы этого компонента через физические выходы порта соеденяешь с входом энкодера на mesa
прописав в хал:

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

loadrt sim_encoder
addf sim-encoder.update-speed servo-thread
addf sim-encoder.make-pulses base-thread
setp sim-encoder.0.ppr 2540
setp sim-encoder.0.speed 5
net phA sim-encoder.0.phase-A => parport.0.pin-02-out
net phB sim-encoder.0.phase-B => parport.0.pin-05-out
net phZ sim-encoder.0.phase-Z => parport.0.pin-04-out
емс запускается и на пинах sim-encoder.0.phase-A и аналогичных сразу же генерируются импульсы: то есть мы еще ничего не включали а он уже "крутит"
как его правильно применять??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

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

Re: MyGUI

Сообщение nkp »

Соеденил 5и25 с 7и77 самоспаянным кабелем (прозвонил его 2 раза)
по примеру из этой темы запустился емс - но 7и77 не видна:
(для просмотра содержимого нажмите на ссылку)

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

     7  bit   IN          FALSE  axis.1.amp-fault-in
     7  float OUT             0  axis.1.backlash-corr
     7  float OUT             0  axis.1.backlash-filt
     7  float OUT             0  axis.1.backlash-vel
     7  float OUT             0  axis.1.coarse-pos-cmd
     7  bit   OUT         FALSE  axis.1.error
     7  float OUT             0  axis.1.f-error
     7  float OUT         0.002  axis.1.f-error-lim
     7  bit   OUT         FALSE  axis.1.f-errored
     7  bit   OUT         FALSE  axis.1.faulted
     7  float OUT             0  axis.1.free-pos-cmd
     7  bit   OUT         FALSE  axis.1.free-tp-enable
     7  float OUT             0  axis.1.free-vel-lim
     7  bit   IN          FALSE  axis.1.home-sw-in
     7  bit   OUT         FALSE  axis.1.homed
     7  bit   OUT         FALSE  axis.1.homing
     7  bit   OUT          TRUE  axis.1.in-position
     7  bit   I/O         FALSE  axis.1.index-enable
     7  s32   IN              0  axis.1.jog-counts
     7  bit   IN          FALSE  axis.1.jog-enable
     7  float IN              0  axis.1.jog-scale
     7  bit   IN          FALSE  axis.1.jog-vel-mode
     7  float OUT             0  axis.1.joint-pos-cmd
     7  float OUT             0  axis.1.joint-pos-fb
     7  float OUT             0  axis.1.joint-vel-cmd
     7  bit   OUT         FALSE  axis.1.kb-jog-active
     7  float OUT             0  axis.1.motor-offset
     7  float OUT             0  axis.1.motor-pos-cmd
     7  float IN              0  axis.1.motor-pos-fb
     7  bit   OUT         FALSE  axis.1.neg-hard-limit
     7  bit   IN          FALSE  axis.1.neg-lim-sw-in
     7  bit   OUT         FALSE  axis.1.pos-hard-limit
     7  bit   IN          FALSE  axis.1.pos-lim-sw-in
     7  bit   OUT         FALSE  axis.1.wheel-jog-active
     7  bit   OUT          TRUE  axis.2.active
     7  bit   OUT         FALSE  axis.2.amp-enable-out
     7  bit   IN          FALSE  axis.2.amp-fault-in
     7  float OUT             0  axis.2.backlash-corr
     7  float OUT             0  axis.2.backlash-filt
     7  float OUT             0  axis.2.backlash-vel
     7  float OUT             0  axis.2.coarse-pos-cmd
     7  bit   OUT         FALSE  axis.2.error
     7  float OUT             0  axis.2.f-error
     7  float OUT         0.002  axis.2.f-error-lim
     7  bit   OUT         FALSE  axis.2.f-errored
     7  bit   OUT         FALSE  axis.2.faulted
     7  float OUT             0  axis.2.free-pos-cmd
     7  bit   OUT         FALSE  axis.2.free-tp-enable
     7  float OUT             0  axis.2.free-vel-lim
     7  bit   IN          FALSE  axis.2.home-sw-in
     7  bit   OUT         FALSE  axis.2.homed
     7  bit   OUT         FALSE  axis.2.homing
     7  bit   OUT          TRUE  axis.2.in-position
     7  bit   I/O         FALSE  axis.2.index-enable
     7  s32   IN              0  axis.2.jog-counts
     7  bit   IN          FALSE  axis.2.jog-enable
     7  float IN              0  axis.2.jog-scale
     7  bit   IN          FALSE  axis.2.jog-vel-mode
     7  float OUT             0  axis.2.joint-pos-cmd
     7  float OUT             0  axis.2.joint-pos-fb
     7  float OUT             0  axis.2.joint-vel-cmd
     7  bit   OUT         FALSE  axis.2.kb-jog-active
     7  float OUT             0  axis.2.motor-offset
     7  float OUT             0  axis.2.motor-pos-cmd
     7  float IN              0  axis.2.motor-pos-fb
     7  bit   OUT         FALSE  axis.2.neg-hard-limit
     7  bit   IN          FALSE  axis.2.neg-lim-sw-in
     7  bit   OUT         FALSE  axis.2.pos-hard-limit
     7  bit   IN          FALSE  axis.2.pos-lim-sw-in
     7  bit   OUT         FALSE  axis.2.wheel-jog-active
    10  bit   OUT         FALSE  axisui.jog.a
    10  bit   OUT         FALSE  axisui.jog.b
    10  bit   OUT         FALSE  axisui.jog.c
    10  float OUT             0  axisui.jog.increment
    10  bit   OUT         FALSE  axisui.jog.u
    10  bit   OUT         FALSE  axisui.jog.v
    10  bit   OUT         FALSE  axisui.jog.w
    10  bit   OUT          TRUE  axisui.jog.x
    10  bit   OUT         FALSE  axisui.jog.y
    10  bit   OUT         FALSE  axisui.jog.z
    10  bit   IN          FALSE  axisui.notifications-clear
    10  bit   IN          FALSE  axisui.notifications-clear-error
    10  bit   IN          FALSE  axisui.notifications-clear-info
    10  bit   IN          FALSE  axisui.set-manual-mode
     9  s32   OUT             0  hm2_5i25.0.encoder.00.count
     9  s32   OUT             0  hm2_5i25.0.encoder.00.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.00.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.00.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.00.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.00.position
     9  float OUT             0  hm2_5i25.0.encoder.00.position-latched
     9  s32   OUT             0  hm2_5i25.0.encoder.00.rawcounts
     9  s32   OUT             0  hm2_5i25.0.encoder.00.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.00.reset
     9  float OUT             0  hm2_5i25.0.encoder.00.velocity
     9  s32   OUT             0  hm2_5i25.0.encoder.01.count
     9  s32   OUT             0  hm2_5i25.0.encoder.01.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.01.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.01.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.01.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.01.position
     9  float OUT             0  hm2_5i25.0.encoder.01.position-latched
     9  s32   OUT             0  hm2_5i25.0.encoder.01.rawcounts
     9  s32   OUT             0  hm2_5i25.0.encoder.01.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.01.reset
     9  float OUT             0  hm2_5i25.0.encoder.01.velocity
     9  s32   OUT             0  hm2_5i25.0.encoder.02.count
     9  s32   OUT             0  hm2_5i25.0.encoder.02.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.02.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.02.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.02.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.02.position
     9  float OUT             0  hm2_5i25.0.encoder.02.position-latched
     9  s32   OUT             2  hm2_5i25.0.encoder.02.rawcounts
     9  s32   OUT             2  hm2_5i25.0.encoder.02.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.02.reset
     9  float OUT             0  hm2_5i25.0.encoder.02.velocity
     9  s32   OUT             0  hm2_5i25.0.encoder.03.count
     9  s32   OUT             0  hm2_5i25.0.encoder.03.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.03.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.03.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.03.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.03.position
     9  float OUT             0  hm2_5i25.0.encoder.03.position-latched
     9  s32   OUT             2  hm2_5i25.0.encoder.03.rawcounts
     9  s32   OUT             2  hm2_5i25.0.encoder.03.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.03.reset
     9  float OUT             0  hm2_5i25.0.encoder.03.velocity
     9  s32   OUT             0  hm2_5i25.0.encoder.04.count
     9  s32   OUT             0  hm2_5i25.0.encoder.04.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.04.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.04.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.04.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.04.position
     9  float OUT             0  hm2_5i25.0.encoder.04.position-latched
     9  s32   OUT             0  hm2_5i25.0.encoder.04.rawcounts
     9  s32   OUT             0  hm2_5i25.0.encoder.04.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.04.reset
     9  float OUT             0  hm2_5i25.0.encoder.04.velocity
     9  s32   OUT             0  hm2_5i25.0.encoder.05.count
     9  s32   OUT             0  hm2_5i25.0.encoder.05.count-latched
     9  bit   I/O         FALSE  hm2_5i25.0.encoder.05.index-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.05.latch-enable
     9  bit   IN          FALSE  hm2_5i25.0.encoder.05.latch-polarity
     9  float OUT             0  hm2_5i25.0.encoder.05.position
     9  float OUT             0  hm2_5i25.0.encoder.05.position-latched
     9  s32   OUT             0  hm2_5i25.0.encoder.05.rawcounts
     9  s32   OUT             0  hm2_5i25.0.encoder.05.rawlatch
     9  bit   IN          FALSE  hm2_5i25.0.encoder.05.reset
     9  float OUT             0  hm2_5i25.0.encoder.05.velocity
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.000.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.000.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.000.out
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.001.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.001.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.001.out
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.002.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.002.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.002.out
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.003.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.003.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.003.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.004.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.004.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.004.out
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.005.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.005.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.005.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.006.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.006.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.006.out
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.007.in
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.007.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.008.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.008.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.009.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.009.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.010.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.010.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.011.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.011.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.012.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.012.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.013.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.013.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.014.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.014.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.015.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.015.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.016.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.016.in_not
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.017.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.017.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.017.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.018.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.018.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.018.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.019.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.019.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.019.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.020.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.020.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.020.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.021.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.021.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.021.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.022.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.022.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.022.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.023.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.023.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.023.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.024.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.024.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.024.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.025.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.025.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.025.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.026.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.026.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.026.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.027.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.027.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.027.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.028.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.028.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.028.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.029.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.029.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.029.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.030.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.030.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.030.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.031.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.031.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.031.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.032.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.032.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.032.out
     9  bit   OUT          TRUE  hm2_5i25.0.gpio.033.in
     9  bit   OUT         FALSE  hm2_5i25.0.gpio.033.in_not
     9  bit   IN          FALSE  hm2_5i25.0.gpio.033.out
     9  bit   IN          FALSE  hm2_5i25.0.led.CR01
     9  bit   IN          FALSE  hm2_5i25.0.led.CR02
     9  bit   I/O         FALSE  hm2_5i25.0.watchdog.has_bit
     5  bit   OUT         FALSE  iocontrol.0.coolant-flood
     5  bit   OUT         FALSE  iocontrol.0.coolant-mist
     5  bit   IN          FALSE  iocontrol.0.emc-enable-in <== estop-loop
     5  bit   OUT         FALSE  iocontrol.0.lube
     5  bit   IN          FALSE  iocontrol.0.lube_level
     5  bit   OUT         FALSE  iocontrol.0.tool-change ==> tool-change-loop
     5  bit   IN          FALSE  iocontrol.0.tool-changed <== tool-change-loop
     5  s32   OUT             0  iocontrol.0.tool-number
     5  s32   OUT             0  iocontrol.0.tool-prep-number
     5  s32   OUT             0  iocontrol.0.tool-prep-pocket
     5  bit   OUT         FALSE  iocontrol.0.tool-prepare ==> tool-prep-loop
     5  bit   IN          FALSE  iocontrol.0.tool-prepared <== tool-prep-loop
     5  bit   OUT         FALSE  iocontrol.0.user-enable-out ==> estop-loop
     5  bit   OUT         FALSE  iocontrol.0.user-request-enable
     7  float IN              1  motion.adaptive-feed
     7  float IN              0  motion.analog-in-00
     7  float IN              0  motion.analog-in-01
     7  float IN              0  motion.analog-in-02
     7  float IN              0  motion.analog-in-03
     7  float OUT             0  motion.analog-out-00
     7  float OUT             0  motion.analog-out-01
     7  float OUT             0  motion.analog-out-02
     7  float OUT             0  motion.analog-out-03
     7  bit   OUT         FALSE  motion.coord-error
     7  bit   OUT          TRUE  motion.coord-mode
     7  float OUT             0  motion.current-vel
     7  bit   IN          FALSE  motion.digital-in-00
     7  bit   IN          FALSE  motion.digital-in-01
     7  bit   IN          FALSE  motion.digital-in-02
     7  bit   IN          FALSE  motion.digital-in-03
     7  bit   OUT         FALSE  motion.digital-out-00
     7  bit   OUT         FALSE  motion.digital-out-01
     7  bit   OUT         FALSE  motion.digital-out-02
     7  bit   OUT         FALSE  motion.digital-out-03
     7  float OUT             0  motion.distance-to-go
     7  bit   IN           TRUE  motion.enable
     7  bit   IN          FALSE  motion.feed-hold
     7  bit   OUT          TRUE  motion.in-position
     7  bit   IN          FALSE  motion.motion-enabled
     7  bit   OUT         FALSE  motion.on-soft-limit
     7  bit   IN          FALSE  motion.probe-input
     7  s32   OUT             0  motion.program-line
     7  float OUT             0  motion.requested-vel
     7  bit   IN           TRUE  motion.spindle-at-speed
     7  bit   OUT          TRUE  motion.spindle-brake
     7  bit   OUT         FALSE  motion.spindle-forward
     7  bit   I/O         FALSE  motion.spindle-index-enable
     7  bit   OUT         FALSE  motion.spindle-on
     7  bit   OUT         FALSE  motion.spindle-reverse
     7  float IN              0  motion.spindle-revs
     7  float OUT             0  motion.spindle-speed-cmd-rps
     7  float IN              0  motion.spindle-speed-in
     7  float OUT             0  motion.spindle-speed-out
     7  float OUT             0  motion.spindle-speed-out-rps
     7  bit   OUT         FALSE  motion.teleop-mode
     7  float OUT             0  motion.tooloffset.a
     7  float OUT             0  motion.tooloffset.b
     7  float OUT             0  motion.tooloffset.c
     7  float OUT             0  motion.tooloffset.u
     7  float OUT             0  motion.tooloffset.v
     7  float OUT             0  motion.tooloffset.w
     7  float OUT             0  motion.tooloffset.x
     7  float OUT             0  motion.tooloffset.y
     7  float OUT             0  motion.tooloffset.z

Pin Aliases:
 Alias                                      Original Name

Signals:
Type          Value  Name     (linked to)
bit           FALSE  estop-loop
                         ==> iocontrol.0.emc-enable-in
                         <== iocontrol.0.user-enable-out
bit           FALSE  tool-change-loop
                         <== iocontrol.0.tool-change
                         ==> iocontrol.0.tool-changed
bit           FALSE  tool-prep-loop
                         <== iocontrol.0.tool-prepare
                         ==> iocontrol.0.tool-prepared

Parameters:
Owner   Type  Dir         Value  Name
     7  s32   RO              0  axis.0.home-state
     7  s32   RO              0  axis.1.home-state
     7  s32   RO              0  axis.2.home-state
     9  bit   RW          FALSE  hm2_5i25.0.encoder.00.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.00.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.00.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.00.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.00.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.00.scale
     9  float RW            0.5  hm2_5i25.0.encoder.00.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.encoder.01.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.01.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.01.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.01.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.01.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.01.scale
     9  float RW            0.5  hm2_5i25.0.encoder.01.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.encoder.02.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.02.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.02.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.02.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.02.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.02.scale
     9  float RW            0.5  hm2_5i25.0.encoder.02.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.encoder.03.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.03.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.03.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.03.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.03.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.03.scale
     9  float RW            0.5  hm2_5i25.0.encoder.03.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.encoder.04.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.04.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.04.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.04.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.04.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.04.scale
     9  float RW            0.5  hm2_5i25.0.encoder.04.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.encoder.05.counter-mode
     9  bit   RW           TRUE  hm2_5i25.0.encoder.05.filter
     9  bit   RW          FALSE  hm2_5i25.0.encoder.05.index-invert
     9  bit   RW          FALSE  hm2_5i25.0.encoder.05.index-mask
     9  bit   RW          FALSE  hm2_5i25.0.encoder.05.index-mask-invert
     9  float RW              1  hm2_5i25.0.encoder.05.scale
     9  float RW            0.5  hm2_5i25.0.encoder.05.vel-timeout
     9  bit   RW          FALSE  hm2_5i25.0.gpio.000.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.000.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.000.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.001.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.001.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.001.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.002.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.002.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.002.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.003.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.003.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.003.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.004.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.004.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.004.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.005.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.005.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.005.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.006.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.006.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.006.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.007.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.007.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.017.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.017.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.017.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.018.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.018.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.018.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.019.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.019.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.019.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.020.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.020.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.020.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.021.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.021.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.021.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.022.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.022.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.022.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.023.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.023.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.023.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.024.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.024.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.024.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.025.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.025.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.025.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.026.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.026.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.026.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.027.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.027.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.027.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.028.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.028.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.028.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.029.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.029.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.029.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.030.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.030.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.030.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.031.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.031.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.031.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.032.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.032.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.032.is_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.033.invert_output
     9  bit   RW          FALSE  hm2_5i25.0.gpio.033.is_opendrain
     9  bit   RW          FALSE  hm2_5i25.0.gpio.033.is_output
     9  bit   RW          FALSE  hm2_5i25.0.io_error
     9  s32   RO           2786  hm2_5i25.0.pet_watchdog.time
     9  s32   RW           8386  hm2_5i25.0.pet_watchdog.tmax
     9  s32   RO          23674  hm2_5i25.0.read.time
     9  s32   RW          49812  hm2_5i25.0.read.tmax
     9  s32   RO              0  hm2_5i25.0.read_gpio.time
     9  s32   RW              0  hm2_5i25.0.read_gpio.tmax
     9  u32   RW     0x00989680  hm2_5i25.0.watchdog.timeout_ns
     9  s32   RO           6216  hm2_5i25.0.write.time
     9  s32   RW          20552  hm2_5i25.0.write.tmax
     9  s32   RO              0  hm2_5i25.0.write_gpio.time
     9  s32   RW              0  hm2_5i25.0.write_gpio.tmax
     7  s32   RO            336  motion-command-handler.time
     7  s32   RW           4326  motion-command-handler.tmax
     7  s32   RO           6608  motion-controller.time
     7  s32   RW          32830  motion-controller.tmax
     7  bit   RO          FALSE  motion.debug-bit-0
     7  bit   RO          FALSE  motion.debug-bit-1
     7  float RO              1  motion.debug-float-0
     7  float RO              0  motion.debug-float-1
     7  float RO              0  motion.debug-float-2
     7  float RO              1  motion.debug-float-3
     7  s32   RO              0  motion.debug-s32-0
     7  s32   RO              0  motion.debug-s32-1
     7  u32   RO     0x002A9E60  motion.servo.last-period
     7  float RO        1000370  motion.servo.last-period-ns
     7  u32   RW     0x00000000  motion.servo.overruns
     7  float RO              0  tc.0.acc
     7  float RO              0  tc.0.pos
     7  float RO              0  tc.0.vel
     7  float RO              0  tc.1.acc
     7  float RO              0  tc.1.pos
     7  float RO              0  tc.1.vel
     7  float RO              0  tc.2.acc
     7  float RO              0  tc.2.pos
     7  float RO              0  tc.2.vel
     7  float RO              0  tc.3.acc
     7  float RO              0  tc.3.pos
     7  float RO              0  tc.3.vel
     7  u32   RO     0x00000000  traj.active_tc
     7  float RO              0  traj.pos_out
     7  float RO              0  traj.vel_out

Parameter Aliases:
 Alias                                      Original Name

Exported Functions:
Owner   CodeAddr  Arg       FP   Users  Name
 00009  fa5cc411  f68f5000  NO       1   hm2_5i25.0.pet_watchdog
 00009  fa5be9af  f68f5000  YES      1   hm2_5i25.0.read
 00009  fa5be8d7  f68f5000  YES      0   hm2_5i25.0.read_gpio
 00009  fa5be908  f68f5000  YES      1   hm2_5i25.0.write
 00009  fa5be8a6  f68f5000  YES      0   hm2_5i25.0.write_gpio
 00007  fa2ed759  00000000  YES      1   motion-command-handler
 00007  fa2efcb2  00000000  YES      1   motion-controller

Realtime Threads:
     Period  FP     Name               (     Time, Max-Time )
     999882  YES          servo-thread (    42574,    98630 )
                  1 hm2_5i25.0.read
                  2 motion-command-handler
                  3 motion-controller
                  4 hm2_5i25.0.write
                  5 hm2_5i25.0.pet_watchdog

nkp@nkp-desktop:~$ 
переключатели не трогал
дополнительное питание не подключал
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

hal какой?
Кстати, что у тебя на обложке 5i25 написано на наклейке configuration?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

hal отсюда:

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

# Basic 5i25/7i77 configuration

# kinematics
loadrt trivkins

# motion controller
loadrt motmod servo_period_nsec=1000000 num_joints=[TRAJ]AXES

# hostmot2 driver
# if you have any firmware trouble, enable the debug flags here and see what's going on in the syslog
#loadrt hostmot2 debug_idrom=1 debug_module_descriptors=1 debug_pin_descriptors=1 debug_modules=1
loadrt hostmot2

# load low-level driver
loadrt hm2_pci config="num_encoders=6  sserial_port_0=000xxx"

setp hm2_5i25.0.watchdog.timeout_ns 10000000

# THREADS
addf hm2_5i25.0.read         servo-thread
addf motion-command-handler               servo-thread
addf motion-controller                    servo-thread
addf hm2_5i25.0.write        servo-thread
addf hm2_5i25.0.pet_watchdog servo-thread

# Standard I/O Block - EStop, Etc

# create a signal for the estop loopback
net estop-loop iocontrol.0.user-enable-out => iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change => iocontrol.0.tool-changed
эту строку:

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

loadrt hm2_pci config="num_encoders=6  sserial_port_0=000xxx"
изменял по разному
Последний раз редактировалось nkp 21 ноя 2012, 16:34, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):Кстати, что у тебя на обложке 5i25 написано на наклейке configuration?
PB120046.JPG (3922 просмотра) <a class='original' href='./download/file.php?id=9592&mode=view' target=_blank>Загрузить оригинал (2.03 МБ)</a>
Последний раз редактировалось nkp 21 ноя 2012, 17:25, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

по идее достаточно просто запустить консоль, там halrun и туда:

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

loadrt hostmot2
loadrt hm2_pci

# и потом можно:
show pin hm2_5i25.0
Кстати, лампочки на плате зажглись?
И в какой слот ты 7i77 включил?


ЗЫ с фото не успел :), на всякий случай, вот эта наклейка:
Вложения
MESA 5i25 linuxcnc управление серво и шаговыми двигателями 5i25.jpg (3922 просмотра) <a class='original' href='./download/file.php?id=9593&mode=view' target=_blank>Загрузить оригинал (207.91 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):Кстати, лампочки на плате зажглись?
нет
Nick писал(а):И в какой слот ты 7i77 включил?
так:
1211.jpg
1211.jpg (35.18 КБ) 3919 просмотров
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

вот здесь про питание :

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

BREAKOUT POWER OPTION
The 5I25 has the option to supply 5V power from the host computer to the breakout
board. This option is used by all Mesa breakout boards to simplify wiring. The option uses
4 parallel cable signals that are normally used as grounds for supplying 5V to the remote
breakout board (DB25 pins 22,23,24 and 25). These pins are AC bypassed on both the
5I25 and Mesa breakout cards so do not compromise AC signal integrity.
The 5V power option is individually selectable for the two I/O connectors. The
breakout 5V power is protected by per connector PTC devices so will not cause damage
to the 5I25 or system if accidentally shorted. This option should only be enabled for Mesa
breakout boards or boards specifically wired to accept 5V power on DB25 pins 22 through
25. When the option is disabled DB25 pins 22 through 25 are grounded
W1 (P2 POWER ) W2 (P3 POWER)
UP UP BREAKOUT POWER ENABLED
DOWN, DOWN BREAKOUT POWER DISABLED (DEFAULT)
вот эти переключатели:
Рабочий стол 1(002).jpg (3910 просмотров) <a class='original' href='./download/file.php?id=9599&mode=view' target=_blank>Загрузить оригинал (184.84 КБ)</a>
мне кажеться дело в них
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Да, если переключатели W1 и W2 на плате 5i25 в верхнем положении (по рисунку приведенному выше) - то
питание 7I77 осуществляется через пины 18-26 (+5V) разъема DB25.
В нижнее положение W1 и W2 ставятся при подаче на 7I77 напряжения 5V извне
(так они и были установлены по дефолту,что и указано в man)
---------------
интересно - зачем внешнее питание плате?
неужели ее потребление этого требует?
если да - то зачем сделано опционально а не жестко-внешнее и всё тут???
Ответить

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