Передача данных EMC <--> COM

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

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

Re: Передача данных EMC <--> COM

Сообщение Nick »

Ну в принципе можешь и сам все написать. На питоне все ооочень просто.

В крайнем случае пиши, что надо передавать - поможем.

А с какими языками дружишь, hal можно много где использовать?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Да впринципе с ни какими плотно. Программированием в детстве занимался на Бейсике и асемблере, немного паскаль. А так изучаю понемногу при необходимости. Ну когда нужна была специфичная программа на КПК, немного изучил VB net. Когда нужен был контроллер для одной установки, изучил Arduino и Processing. Но все знания поверхностные достаточные для решения конкретной задачи.

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

Re: Передача данных EMC <--> COM

Сообщение Nick »

Тогда проще сделать на питоне. Бери заготовку и меняй под себя.

В двух словах, если хочешь перекидывать пин положения, тебе надо сделать в своем компоненте пин положение по х,
h = hal.component('XXXX')
h.newpin("x-pos", hal.HAL_FLOAT, hal.HAL_IN)

потом в рабочем цикле проверяем не изменилось ли значение h["x-pos"] и если изменилось, пишем его в порт.

ну и в hal файле будет строчка
net xpos <= axis.N.joint-pos-fb
net xpos => XXXX.x-pos

Хмм.... надо бы довести скритп из Передача данных EMC <--> COM #5 до ума.

Надо выработать стандарт записи и чтения пинов в/из порта...
Кстати, а как читать из serial? Есть специальная команда на чтение и что у нее на выходе?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

С помошью команды:

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

 halrun arduino-vcp.hal
Запустил панельку, подвигал ползунки, посмотрел как их значения меняются на моём LCD экранчике.
А потом вроде и ничего не менял а запустить не получаеться пишет:

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

slava@slava-cnc:~/linuxcnc/configs/CNCtest$ halrun arduino-vcp.hal
Traceback (most recent call last):
  File "./arduino.py", line 79, in <module>
    c['digital-in-%02d' % pinmap[port]] = b != 0
IndexError: list index out of range
Component Pins:
Owner   Type  Dir         Value  Name
     5  float IN              0  arduino-vcp.analog-in-00
     5  float IN              0  arduino-vcp.analog-in-00b
     5  float IN              0  arduino-vcp.analog-in-01
     5  float IN              0  arduino-vcp.analog-in-01b
     5  float IN              0  arduino-vcp.analog-in-02
     5  float IN              0  arduino-vcp.analog-in-02b
     5  float IN              0  arduino-vcp.analog-in-03
     5  float IN              0  arduino-vcp.analog-in-03b
     5  float IN              0  arduino-vcp.analog-in-04
     5  float IN              0  arduino-vcp.analog-in-04b
     5  float IN              0  arduino-vcp.analog-in-05
     5  float IN              0  arduino-vcp.analog-in-05b
     5  float OUT             0  arduino-vcp.analog-out-03-f
     5  s32   OUT             0  arduino-vcp.analog-out-03-i
     5  float OUT             0  arduino-vcp.analog-out-05-f
     5  s32   OUT             0  arduino-vcp.analog-out-05-i
     5  float OUT             0  arduino-vcp.analog-out-06-f
     5  s32   OUT             0  arduino-vcp.analog-out-06-i
     5  float OUT             0  arduino-vcp.analog-out-09-f
     5  s32   OUT             0  arduino-vcp.analog-out-09-i
     5  float OUT             0  arduino-vcp.analog-out-10-f
     5  s32   OUT             0  arduino-vcp.analog-out-10-i
     5  float OUT             0  arduino-vcp.analog-out-11-f
     5  s32   OUT             0  arduino-vcp.analog-out-11-i
     5  bit   IN          FALSE  arduino-vcp.digital-in-08
     5  bit   IN          FALSE  arduino-vcp.digital-in-12
     5  bit   IN          FALSE  arduino-vcp.digital-in-13
     5  bit   OUT         FALSE  arduino-vcp.digital-out-02
     5  bit   OUT         FALSE  arduino-vcp.digital-out-04
     5  bit   OUT         FALSE  arduino-vcp.digital-out-07

arduino-vcp.hal:6: Pin 'arduino.analog-in-00' does not exist

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

Re: Передача данных EMC <--> COM

Сообщение Nick »

А ты останавливал hal и arduino.py перед повторным запуском?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Если просто закрыть то да. В списке процессов ничего нет.
После перезагрузки при первом запуске появляеться:

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

slava@slava-cnc:~/linuxcnc/configs/CNCtest$ halrun arduino-vcp.hal
Traceback (most recent call last):
  File "./arduino.py", line 79, in <module>
    c['digital-in-%02d' % pinmap[port]] = b != 0
IndexError: list index out of range
arduino-vcp.hal:1: ./arduino.py exited without becoming ready
пишу снова

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

halrun arduino-vcp.hal
и появляется предыдущая ошибка.
После очередной перезагрузки, запустилось. Но остановив снова запустить немогу.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

после закрытия

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

halrun -U
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

nkp писал(а):
com.tar
Распаковать в папку с конфигурацией.
В ini файл [DISPLAY]:

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

EMBED_TAB_NAME = com
EMBED_TAB_COMMAND = halcmd loadusr   gladevcp -u com.py -H com_tab.hal -x {XID}  com_tab.ui
Решил попробовать этот скрипт. Так панель запускается пустая. В конфиге вписал

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

EMBED_TAB_NAME = com
EMBED_TAB_COMMAND = halcmd loadusr   gladevcp -u com.py -H com_tab.hal -x {XID}  com.ui
так как в архиве находится com.ui а не com_tab.ui

Может кто понимающий напишет скрипт, который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее. Или по приходу текста, выполнял его как G code.
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

nkp писал(а):после закрытия

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

halrun -U
Не слушается

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

slava@slava-cnc:~/linuxcnc/configs/CNCtest$ halrun -U
RTAPI: ERROR: could not open shared memory (errno=2)
ERROR: rtapi init failed
HALCMD: Release Mutex failed!
RTAPI: ERROR: could not open shared memory (errno=2)
/usr/bin/halrun: строка 10:  2698 Ошибка сегментирования                   halcmd stop
RTAPI: ERROR: could not open shared memory (errno=2)
/usr/bin/halrun: строка 10:  2699 Ошибка сегментирования                   halcmd unload all
ERROR: Module hal_lib does not exist in /proc/modules
ERROR: Module rtapi does not exist in /proc/modules
ERROR: Module rtai_math does not exist in /proc/modules
ERROR: Module rtai_sem does not exist in /proc/modules
ERROR: Module rtai_fifos does not exist in /proc/modules
ERROR: Module rtai_sched does not exist in /proc/modules
ERROR: Module rtai_hal does not exist in /proc/modules
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

Nick писал(а):Надо выработать стандарт записи и чтения пинов в/из порта..
Стандарт уже есть-имя ему - Modbus.
Хотя чего там-свой так свой :hehehe:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

billsmith писал(а): который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее.
Где скрипт будет брать данные?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

billsmith писал(а):Решил попробовать этот скрипт. Так панель запускается пустая. В конфиге вписалКод: Выделить всёEMBED_TAB_NAME = comEMBED_TAB_COMMAND = halcmd loadusr   gladevcp -u com.py -H com_tab.hal -x {XID}  com.uiтак как в архиве находится com.ui а не com_tab.ui
Так все же запустилось?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

nkp писал(а):
billsmith писал(а):Решил попробовать этот скрипт. Так панель запускается пустая. В конфиге вписалКод: Выделить всёEMBED_TAB_NAME = comEMBED_TAB_COMMAND = halcmd loadusr   gladevcp -u com.py -H com_tab.hal -x {XID}  com.uiтак как в архиве находится com.ui а не com_tab.ui
Так все же запустилось?
нет, пустая панель, может это связано с тем что у меня ещё своя панель висит:

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

# Создан stepconf в Tue May 29 20:26:09 2012
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf

[EMC]
MACHINE = CNC
DEBUG = 0

[DISPLAY]
DISPLAY = axis
EDITOR = gedit
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.5
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/slava/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
# add GladeVCP panel where PyVCP used to live:
GLADEVCP= gladevcp/manual-example.ui
EMBED_TAB_NAME = com
EMBED_TAB_COMMAND = halcmd loadusr gladevcp -u com/com.py -H com/com_tab.hal -x {XID}  com/com.ui

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var
SUBROUTINE_PATH = gladevcp/

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
BASE_PERIOD = 69444
SERVO_PERIOD = 1000000

[HAL]
HALUI = halui
HALFILE = CNC.hal
POSTGUI_HALFILE =  gladevcp/manual-example.hal

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 9.00
MAX_LINEAR_VELOCITY = 90.00

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

[AXIS_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 85.5005472035
MAX_ACCELERATION = 1800.0
STEPGEN_MAXACCEL = 2250.0
SCALE = 160.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -0.001
MAX_LIMIT = 798.0
HOME_OFFSET = -2.000000
HOME_SEARCH_VEL = -10.000000
HOME_LATCH_VEL = -3.125000
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1

[AXIS_1]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 1500.0
STEPGEN_MAXACCEL = 1875.0
SCALE = 160.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -0.001
MAX_LIMIT = 1125.0
HOME_OFFSET = -2.000000
HOME_SEARCH_VEL = -10.000000
HOME_LATCH_VEL = -3.125000
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 2

[AXIS_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 85.5005472035
MAX_ACCELERATION = 2500.0
STEPGEN_MAXACCEL = 3125.0
SCALE = 160.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -130.0
MAX_LIMIT = 0.001
HOME_OFFSET = 2.000000
HOME_SEARCH_VEL = 10.000000
HOME_LATCH_VEL = 3.125000
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

nkp писал(а):
billsmith писал(а): который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее.
Где скрипт будет брать данные?
С LinuxCNC, с помощью HAL или как там, я в этом не очень.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Nick »

Есть такое предложение, сделать универсальную кодировку.
Всего у нас есть ограниченное количество типов пинов:

bit, s32, u32 и float. Итого имеем 8 массивов:
bit_in, bit_out ... float_out.
Есть предложение обмениваться между пультом и LinuxCNC такими записями:
1-байт - номер массива [0-8] (в принципе можно использовать только 3 бита...).
n-байт - идентификатор поля - вот тут вопрос, что писать, номер в массиве, или тупо ту строчку, которой задается название пина. В принципе строчка была бы универсальней и понятней.
1-байт - конец идентификатора.
n-байт - значение пина.
1-байт - конец значения.

Если такая структура - нормальная, то можно быстренько написать.

MODBUS какой-то мутный :freak:. Там только 2 типа данных, а у нас их 4. Кстати, а есть еще какие-нибудь стандарты передачи данных?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

billsmith писал(а):С LinuxCNC, с помощью HAL или как там, я в этом не очень.
Я про задачу вцелом:
можно подправить скрипт-он будет передавать координаты.Но как он должен срабатывать-когда , по какому событию?
В общих чертах-как это должно работать?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Nick писал(а):Есть такое предложение, сделать универсальную кодировку.
Всего у нас есть ограниченное количество типов пинов:

bit, s32, u32 и float. Итого имеем 8 массивов:
bit_in, bit_out ... float_out.
Есть предложение обмениваться между пультом и LinuxCNC такими записями:
1-байт - номер массива [0-8] (в принципе можно использовать только 3 бита...).
n-байт - идентификатор поля - вот тут вопрос, что писать, номер в массиве, или тупо ту строчку, которой задается название пина. В принципе строчка была бы универсальней и понятней.
1-байт - конец идентификатора.
n-байт - значение пина.
1-байт - конец значения.

Если такая структура - нормальная, то можно быстренько написать.

MODBUS какой-то мутный :freak:. Там только 2 типа данных, а у нас их 4. Кстати, а есть еще какие-нибудь стандарты передачи данных?
Да впринципе нормально. На ардуино читать ком порт, расшифровывать данные и выводить на любой экран просто.
Последнийм байтом пусть будет символ конца строки.
Последний раз редактировалось billsmith 05 июн 2012, 16:37, всего редактировалось 1 раз.
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

nkp писал(а):
billsmith писал(а):С LinuxCNC, с помощью HAL или как там, я в этом не очень.
Я про задачу вцелом:
можно подправить скрипт-он будет передавать координаты.Но как он должен срабатывать-когда , по какому событию?
В общих чертах-как это должно работать?
Мне кажется что можно выводить все данные просто с интервалом каким то. Например 0,1сек. Для любого пульта этого было бы достаточно. А пульт уже обновлял бы значения на экране по необходимости.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

Я бы хотел отметить только такой момент- в modbus на команду мастер-устройства подчиненное устройство дает ответ(в простейшем случае повтор команды)
Тогда понятно:
1 команда дошла
1 понята правильно
наверно для станков это немаловажно (для управления)
Ответить

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