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

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

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

Сообщение Nick »

можешь оставить time.sleep(.001) но перед записью поставить вот такое условие:

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

	delay = (delay+1)%10 
	if delay == 0 :
		...запись в порт...
и вверху программы delay = 0

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

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

Сообщение billsmith »

Nick писал(а):можешь оставить time.sleep(.001) но перед записью поставить вот такое условие:

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

	delay = (delay+1)%10 
	if delay == 0 :
		...запись в порт...
и вверху программы delay = 0

тогда запись будет делаться раз в 10 циклов.
Или в питоне какие то особенности или я не понял или так работать не будет. Но спасибо что натолкнул на мысль, сделаю так.

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

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

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

Сообщение Nick »

delay = (delay+1)%10 это значит прибавить к delay 1 и взять остаток от деления на 10. Т.е. если delay = 9 выражение будет (9+1)%10 = 0
То, что ты написал делает примерно тоже, но первый вариант проще и быстрее ;).
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

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

Сообщение Nick »

тут еще и присвоение дополнительное есть.

а сложение и деление это же вроде всего два такта ....

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

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

Сообщение billsmith »

Спасибо, просветил.
Теперь обдумываю, твои слова :).
Nick писал(а): billsmith писал(а):
2. Как сделать чтоб при получении строки, питоновский скрипт запускал его как g-code или запускал например подпрограмму в которой записан g-code?

Хитрая задача...
как мне кажется можно через halui-mdi-command-XX + ocall <#custom_command> + переписывание файла custom_command.ngc...
Хотя может есть варианты по-проще...?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение Serg »

Nick писал(а):тут еще и присвоение дополнительное есть.
1/10 присвоения, если точно - 1 раз в 10 циклов. ;)
Nick писал(а): а сложение и деление это же вроде всего два такта ....
зы щас проверим за питон :)....
На большом компе - да, но всё равно сложение+деление против просто сложения. :D

В принципе можно углубится и дальше и начать считать все такты, тогда наиболее эфективным будет такой код:

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

delay = delay-1
if delay == 0 :
    ...запись в порт...
   delay = 10
Поясню:
1 вариант: инкремент на 1, достать из памяти 10 , сравнить с 10, переход.
2 вариант: инремент на 1, достать из памяти 10, поделить на 10, сравнить с нулём, переход.
3 вариант: декремент на 1, сравнить с нулём, переход.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

delay = delay+1
if delay == 10 :
	delay = 0
	b = 1

0.7250 sec total
 0.07 usec/pass


Testing for 10000000 times

delay += 1
if delay == 10 :
	delay = 0
	b = 1

0.7276 sec total
 0.07 usec/pass


Testing for 10000000 times

delay = (delay+1)%10
if delay == 0 :
	b = 1

1.0898 sec total
 0.11 usec/pass


Testing for 10000000 times

delay += 1
delay %= 10
if delay == 0 :
	b = 1

1.1930 sec total
 0.12 usec/pass

Хммм в питоне так тоже быстрее... даже странно :)

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

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

Сообщение billsmith »

Ну нужно чтоб я с ардуины передавал команду с параметром. Например

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

offset,25,35
При этом запускалась подпрограмма ooffset.ngc

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

O<ooffset> sub

(DEBUG, Смещение X=#1 Y=#2)
G0 X0 Y0
G10 L20 P1 X[-#1] Y[-#2]
G0 X0 Y0

O<ooffset> endsub

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

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

Сообщение Nick »

Хммм... вообще есть вот такой вариант:
http://www.linuxcnc.org/docview/html/gu ... subroutine
причем в Oкод ocall можно передавать параметр... Т.е. может выйти вот так:
o<${какой-нибудь пин}> call [${еще пин}] [${еще пин}] [${еще пин}] ...
Надо пробовать...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

О, еще вариант!
emcrsh:
mdi <string>
With set, sends <string> as an MDI command.

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

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

Сообщение billsmith »

Nick писал(а):Хммм... вообще есть вот такой вариант:
http://www.linuxcnc.org/docview/html/gu ... subroutine
причем в Oкод ocall можно передавать параметр... Т.е. может выйти вот так:
o<${какой-нибудь пин}> call [${еще пин}] [${еще пин}] [${еще пин}] ...
Надо пробовать...
На GladeVCP я так и делаю. А вот как это сделать на питоне?
Вот моя панелька.
Хочу такую же сделать на ардуино.
Вложения
Панель GladeVCP
Панель GladeVCP
Снимок.png (25.09 КБ) 2229 просмотров
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

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

Сообщение billsmith »

Nick писал(а):О, еще вариант!
emcrsh:
mdi <string>
With set, sends <string> as an MDI command.
А из питона как так сделать?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Nick писал(а):А что сравнивать с 0 и decrement/increment можно прямо в памяти делать?
В терминах машинных кодов сравнение и переход типа
if delay == 10
выполняются так (при условии, что delay уже в одном из регистров):
1. из памяти извлекается 10
2. из регистра со значением delay вычитается 10, если результат равен 0, то взводится соотв. бит в регистре статуса CPU.
3. в зависимости от значения регистра статуса выполняется команда условного перехода.

В моём примере вычитание уже сделано предыдущей операцией и бит в регистре статуса имеет актуальное значение, остается только выполнить комунду условного перехода.

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

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

Сообщение billsmith »

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

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

Сообщение Nick »

billsmith писал(а):Ну а тогда может можно из питона, нажать определённую кнопку у меня на GladeVCP панели?
хмм.... может конечно и получится... но лучше разобраться с axis-remote.

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

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

Сообщение billsmith »

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

slava@slava-cnc:~$ axis-remote --help
axis-remote: cause AXIS to open, reload its opened file, or exit

Usage: axis-remote [--clear|--ping|--reload|--quit|--mdi command|filename]
       axis-remote [-c|-p|-r|-q|-m command]
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

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

Сообщение billsmith »

А вот первая проба пульта http://www.youtube.com/watch?v=u5CmCzVU ... e=youtu.be .
В дальнейшем кнопочки будут механическими, также планируется энкодер. А на экране будут функциональные кнопочки и информация.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

а axis-remote --mdi ? или axis-remote --help --mdi
Ну и попробуй в консоле выполнить скажем
axis-remote --mdi "(DEBUG, Hello World!)"
Ответить

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