Передача данных EMC <--> COM
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Сейчас пойду пробовать, только я с питоном и всякими HAL не сильно дружу. А мне нужно, чтоб кроме приёма, linuxcnc при получении определённого символа, передавал в порт например текущие координаты.
Я где то видел твой пример, как передать в порт значение координаты X.
Я где то видел твой пример, как передать в порт значение координаты X.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Ну в принципе можешь и сам все написать. На питоне все ооочень просто.
В крайнем случае пиши, что надо передавать - поможем.
А с какими языками дружишь, hal можно много где использовать?
В крайнем случае пиши, что надо передавать - поможем.
А с какими языками дружишь, hal можно много где использовать?
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Да впринципе с ни какими плотно. Программированием в детстве занимался на Бейсике и асемблере, немного паскаль. А так изучаю понемногу при необходимости. Ну когда нужна была специфичная программа на КПК, немного изучил VB net. Когда нужен был контроллер для одной установки, изучил Arduino и Processing. Но все знания поверхностные достаточные для решения конкретной задачи.
Посмотрел тот пример, там всё есть и приём и передача. Если запустится, останется только тебя помучать по поводу HAL.
Посмотрел тот пример, там всё есть и приём и передача. Если запустится, останется только тебя помучать по поводу HAL.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Тогда проще сделать на питоне. Бери заготовку и меняй под себя.
В двух словах, если хочешь перекидывать пин положения, тебе надо сделать в своем компоненте пин положение по х,
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? Есть специальная команда на чтение и что у нее на выходе?
В двух словах, если хочешь перекидывать пин положения, тебе надо сделать в своем компоненте пин положение по х,
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
С помошью команды:
Запустил панельку, подвигал ползунки, посмотрел как их значения меняются на моём LCD экранчике.
А потом вроде и ничего не менял а запустить не получаеться пишет:
Код: Выделить всё
halrun arduino-vcp.halА потом вроде и ничего не менял а запустить не получаеться пишет:
Код: Выделить всё
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
А ты останавливал hal и arduino.py перед повторным запуском?
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Если просто закрыть то да. В списке процессов ничего нет.
После перезагрузки при первом запуске появляеться:
пишу снова
и появляется предыдущая ошибка.
После очередной перезагрузки, запустилось. Но остановив снова запустить немогу.
После перезагрузки при первом запуске появляеться:
Код: Выделить всё
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
после закрытия
Код: Выделить всё
halrun -U-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Решил попробовать этот скрипт. Так панель запускается пустая. В конфиге вписалnkp писал(а): Распаковать в папку с конфигурацией.
В 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Может кто понимающий напишет скрипт, который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее. Или по приходу текста, выполнял его как G code.
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Не слушается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
Стандарт уже есть-имя ему - Modbus.Nick писал(а):Надо выработать стандарт записи и чтения пинов в/из порта..
Хотя чего там-свой так свой
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Где скрипт будет брать данные?billsmith писал(а): который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Так все же запустилось?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
нет, пустая панель, может это связано с тем что у меня ещё своя панель висит: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
С LinuxCNC, с помощью HAL или как там, я в этом не очень.nkp писал(а):Где скрипт будет брать данные?billsmith писал(а): который будет в порт выдавать допустим "x:(значение) y:(значение) z:(значение) feed:(значение)" и слушать порт. Например если пришла "1" это jog_up и так далее.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Есть такое предложение, сделать универсальную кодировку.
Всего у нас есть ограниченное количество типов пинов:
bit, s32, u32 и float. Итого имеем 8 массивов:
bit_in, bit_out ... float_out.
Есть предложение обмениваться между пультом и LinuxCNC такими записями:
1-байт - номер массива [0-8] (в принципе можно использовать только 3 бита...).
n-байт - идентификатор поля - вот тут вопрос, что писать, номер в массиве, или тупо ту строчку, которой задается название пина. В принципе строчка была бы универсальней и понятней.
1-байт - конец идентификатора.
n-байт - значение пина.
1-байт - конец значения.
Если такая структура - нормальная, то можно быстренько написать.
MODBUS какой-то мутный
. Там только 2 типа данных, а у нас их 4. Кстати, а есть еще какие-нибудь стандарты передачи данных?
Всего у нас есть ограниченное количество типов пинов:
bit, s32, u32 и float. Итого имеем 8 массивов:
bit_in, bit_out ... float_out.
Есть предложение обмениваться между пультом и LinuxCNC такими записями:
1-байт - номер массива [0-8] (в принципе можно использовать только 3 бита...).
n-байт - идентификатор поля - вот тут вопрос, что писать, номер в массиве, или тупо ту строчку, которой задается название пина. В принципе строчка была бы универсальней и понятней.
1-байт - конец идентификатора.
n-байт - значение пина.
1-байт - конец значения.
Если такая структура - нормальная, то можно быстренько написать.
MODBUS какой-то мутный
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Я про задачу вцелом:billsmith писал(а):С LinuxCNC, с помощью HAL или как там, я в этом не очень.
можно подправить скрипт-он будет передавать координаты.Но как он должен срабатывать-когда , по какому событию?
В общих чертах-как это должно работать?
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
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 какой-то мутный. Там только 2 типа данных, а у нас их 4. Кстати, а есть еще какие-нибудь стандарты передачи данных?
Последнийм байтом пусть будет символ конца строки.
Последний раз редактировалось billsmith 05 июн 2012, 16:37, всего редактировалось 1 раз.
-
billsmith
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Мне кажется что можно выводить все данные просто с интервалом каким то. Например 0,1сек. Для любого пульта этого было бы достаточно. А пульт уже обновлял бы значения на экране по необходимости.nkp писал(а):Я про задачу вцелом:billsmith писал(а):С LinuxCNC, с помощью HAL или как там, я в этом не очень.
можно подправить скрипт-он будет передавать координаты.Но как он должен срабатывать-когда , по какому событию?
В общих чертах-как это должно работать?
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Я бы хотел отметить только такой момент- в modbus на команду мастер-устройства подчиненное устройство дает ответ(в простейшем случае повтор команды)
Тогда понятно:
1 команда дошла
1 понята правильно
наверно для станков это немаловажно (для управления)
Тогда понятно:
1 команда дошла
1 понята правильно
наверно для станков это немаловажно (для управления)
