Глобальные переменные

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Aleks3085
Новичок
Сообщения: 11
Зарегистрирован: 28 июл 2023, 17:50
Репутация: 0
Настоящее имя: Александр
Контактная информация:

Глобальные переменные

Сообщение Aleks3085 »

Доброго времени суток. Уважаемы форумчане, не могу для себя окончательно прояснить, каким образом я могу создать глобальную переменную, которую можно использовать на запись/чтение в .NGC файле, и притянуть ее ещё в pyvcp, как булевые так и с плавающей точкой. Прошу помочь.
a321
Мастер
Сообщения: 568
Зарегистрирован: 03 дек 2016, 00:30
Репутация: 66
Контактная информация:

Re: Глобальные переменные

Сообщение a321 »

Вопрос поставлен с размахом и неопределнностью. Запись-чтение какими средствами-способами? Булевы - это масштабно, https://wikiless.tiekoetter.com/wiki/%D ... 8F?lang=ru
Глобальная, это, видимо та, которая "видна" в подпрограммах. Это начинающиеся подчеркивания, например #<lok> - локальная, #<_glob> - глобальная. Русские буковки понимает тоже. За большее не скажу, не пробовал.
Aleks3085
Новичок
Сообщения: 11
Зарегистрирован: 28 июл 2023, 17:50
Репутация: 0
Настоящее имя: Александр
Контактная информация:

Re: Глобальные переменные

Сообщение Aleks3085 »

a321 писал(а): 15 мар 2024, 23:21 Вопрос поставлен с размахом и неопределнностью. Запись-чтение какими средствами-способами? Булевы - это масштабно, https://wikiless.tiekoetter.com/wiki/%D ... 8F?lang=ru
Глобальная, это, видимо та, которая "видна" в подпрограммах. Это начинающиеся подчеркивания, например #<lok> - локальная, #<_glob> - глобальная. Русские буковки понимает тоже. За большее не скажу, не пробовал.
Если конкретнее: на определенном этапе исполнения программы (написана в .ngc), необходимо ее прервать, ввести коррекцию по оси Z (коррекцию определяем визуально, накидывая ее с РГИ до определенного момента), и перезапустить занова с поправленными координатами (стартовые координаты + получившаяся коррекция). При этом желательно отображение величины получившейся коррекции на панели (
Pyvcp, или другая).
Аватара пользователя
hmnijp
Мастер
Сообщения: 1719
Зарегистрирован: 20 авг 2017, 15:02
Репутация: 526
Настоящее имя: Константин
Откуда: Ульяновск
Контактная информация:

Re: Глобальные переменные

Сообщение hmnijp »

Aleks3085 писал(а): не могу для себя окончательно прояснить, каким образом я могу создать глобальную переменную, которую можно использовать на запись/чтение в .NGC файле, и притянуть ее ещё в pyvcp, как булевые так и с плавающей точкой.
Из G-кода нельзя напрямую писать в Hal пины. Только через M67 (устанавливает значение на пине motion.analog-out который соединяется уже с каким либо пином). Читать из gcoda можно как <_hal> или <_ini>.

Aleks3085 писал(а): Если конкретнее: на определенном этапе исполнения программы (написана в .ngc), необходимо ее прервать, ввести коррекцию по оси Z (коррекцию определяем визуально, накидывая ее с РГИ до определенного момента), и перезапустить занова с поправленными координатами (стартовые координаты + получившаяся коррекция). При этом желательно отображение величины получившейся коррекции на панели (
Pyvcp, или другая).
Есть два пути:
1) Либо вы пользуетесь классической компенсацией на длину инструмента G43 - Останавливаете программу(стоп, не пауза). Меняете значение длины в таблице кодом G10L1P0Z... ( pyvcp.length-input это значение которое добавляете к табличной из панели pyvcp)

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

G10 L1 P#<_hal[iocontrol.0.tool-number]>  Z[#<_hal[halui.tool.length_offset.z]> + #<_hal[pyvcp.length-input]> ]
И потом перезапускаете выполнение программы (со строки например) чтобы планер перерисовал траекторию с новым значением компенсации.
photo_2024-01-12_06-17-22.jpg (681 просмотр) <a class='original' href='./download/file.php?id=211296&sid=d27d1d80309cb4df9f09c9c68f36ef99&mode=view' target=_blank>Загрузить оригинал (100.23 КБ)</a>

2) Либо вы пользуетесь external-offsets https://linuxcnc.org/docs/html/motion/e ... fsets.html
С этим можно в реальном времени без остановки добавлять-убавлять смещение по любой оси просто подавая на пин axis.L.eoffset-...(scale*count) значение с любого источника, например с той же панели pyvcp, или хоть с генератора синусоидального сигнала. в примерах есть конфигурации готовые (sim - axis - external offsets). Сейчас так обычно THC на плазмах - лазерах подключают.
Aleks3085
Новичок
Сообщения: 11
Зарегистрирован: 28 июл 2023, 17:50
Репутация: 0
Настоящее имя: Александр
Контактная информация:

Re: Глобальные переменные

Сообщение Aleks3085 »

hmnijp писал(а): 16 мар 2024, 16:08
Aleks3085 писал(а): не могу для себя окончательно прояснить, каким образом я могу создать глобальную переменную, которую можно использовать на запись/чтение в .NGC файле, и притянуть ее ещё в pyvcp, как булевые так и с плавающей точкой.
Из G-кода нельзя напрямую писать в Hal пины. Только через M67 (устанавливает значение на пине motion.analog-out который соединяется уже с каким либо пином). Читать из gcoda можно как <_hal> или <_ini>.

Aleks3085 писал(а): Если конкретнее: на определенном этапе исполнения программы (написана в .ngc), необходимо ее прервать, ввести коррекцию по оси Z (коррекцию определяем визуально, накидывая ее с РГИ до определенного момента), и перезапустить занова с поправленными координатами (стартовые координаты + получившаяся коррекция). При этом желательно отображение величины получившейся коррекции на панели (
Pyvcp, или другая).
Есть два пути:
1) Либо вы пользуетесь классической компенсацией на длину инструмента G43 - Останавливаете программу(стоп, не пауза). Меняете значение длины в таблице кодом G10L1P0Z... ( pyvcp.length-input это значение которое добавляете к табличной из панели pyvcp)

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

G10 L1 P#<_hal[iocontrol.0.tool-number]>  Z[#<_hal[halui.tool.length_offset.z]> + #<_hal[pyvcp.length-input]> ]
И потом перезапускаете выполнение программы (со строки например) чтобы планер перерисовал траекторию с новым значением компенсации.
photo_2024-01-12_06-17-22.jpg


2) Либо вы пользуетесь external-offsets https://linuxcnc.org/docs/html/motion/e ... fsets.html
С этим можно в реальном времени без остановки добавлять-убавлять смещение по любой оси просто подавая на пин axis.L.eoffset-...(scale*count) значение с любого источника, например с той же панели pyvcp, или хоть с генератора синусоидального сигнала. в примерах есть конфигурации готовые (sim - axis - external offsets). Сейчас так обычно THC на плазмах - лазерах подключают.
Спасибо. Решил использовать вариант с Еоффсетами, уже подтянул конфигурацию из сим, надо теперь разобраться как ещё сбросить в ноль автоматически этот офсет из программы перед ее завершением или сразу по завершении.
Аватара пользователя
hmnijp
Мастер
Сообщения: 1719
Зарегистрирован: 20 авг 2017, 15:02
Репутация: 526
Настоящее имя: Константин
Откуда: Ульяновск
Контактная информация:

Re: Глобальные переменные

Сообщение hmnijp »

Aleks3085 писал(а): надо теперь разобраться как ещё сбросить в ноль автоматически этот офсет из программы перед ее завершением или сразу по завершении.
Написать простенький M-код и вызывать его в конце (ремап M2/M30 сделать нельзя)
который будет устанавливать пин - axis.L.eoffset-clear = true что будет сбрасывать офсет. в мануале написано что надо именно сбрасывать счетчик, а не выключать eoffsets, тк в этом случае смещение сохранится.
то есть с командой:
halcmd setp axis.z.eoffset-clear true

Там примеры:
https://linuxcnc.org/docs/2.9/html/gcod ... :m100-m199
sergx99
Новичок
Сообщения: 35
Зарегистрирован: 27 фев 2016, 17:03
Репутация: 7
Настоящее имя: Сергей
Контактная информация:

Re: Глобальные переменные

Сообщение sergx99 »

a321 писал(а): 15 мар 2024, 23:21...
Русские буковки понимает тоже. За большее не скажу, не пробовал.
lunuxcnc_cyrillic.jpg (553 просмотра) <a class='original' href='./download/file.php?id=211341&sid=d27d1d80309cb4df9f09c9c68f36ef99&mode=view' target=_blank>Загрузить оригинал (347.37 КБ)</a>
С русскими буквами не всегда гладко, глянул уточнить размер и не мог понять понял что пилю.
Исполнилось правильно, - 23, 29 и 32 строки не отображались из-за кириллицы в комментариях, linuxcnc 2.7.15

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

...
#<lenght> = 8.0 (8мм)
#<_global_down_num> = 8
#<_global_down_step> = [[#<_global_up_work> + #<lenght>] / #<_global_down_num>]

#<_global_diametr> = 205 (D = 206мм)
o<my_drill> call [0] [0]

#<_global_down_num> = 1
#<_global_down_step> = [[#<_global_up_work> + #<lenght>] / #<_global_down_num>]
#<_global_diametr> = 201 (D = 206мм)
o<my_drill> call [0] [0]

M2
#
a321
Мастер
Сообщения: 568
Зарегистрирован: 03 дек 2016, 00:30
Репутация: 66
Контактная информация:

Re: Глобальные переменные

Сообщение a321 »

каждодневная практика -


o<крепеж> sub ([1- Х][2- У][3 - угол][4- Ширина])
G0 Z[#<_bz>]
G92.2


o<крепеж_instr1> if [#<_N> eq 1 or #<_N> eq 0] (фреза 3 крепеж изнанка)
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4510
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Глобальные переменные

Сообщение xenon-alien »

Что бы не плодить темы, то спрошу здесь.
Для ручной смены инструмента можно указать положения. Но так как стол подвижной, то ось У можно не двигать.
Есть ли какая-то глобальная переменная текущего положения, которую можно прописать в *,ини файле?
TOOL_CHANGE_POSITION = 510 #<_yyy.yyyy> 0 (x y z координаты)
sergx99
Новичок
Сообщения: 35
Зарегистрирован: 27 фев 2016, 17:03
Репутация: 7
Настоящее имя: Сергей
Контактная информация:

Re: Глобальные переменные

Сообщение sergx99 »

xenon-alien писал(а): 23 мар 2024, 20:59 Что бы не плодить темы, то спрошу здесь.
Для ручной смены инструмента можно указать положения. Но так как стол подвижной, то ось У можно не двигать.
Есть ли какая-то глобальная переменная текущего положения, которую можно прописать в *,ини файле?
TOOL_CHANGE_POSITION = 510 #<_yyy.yyyy> 0 (x y z координаты)
В качестве догадки, на основе темы [WIKI] Работа с центроискателем в LinuxCNC
В ini файле

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

[TOOLSENSOR]
# Absolute coordinates of the toolsetter pad 
X = 10
Y = 10
В файле probe_down.ngc

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

G53 G1 X[#<_ini[TOOLSENSOR]X>] Y[#<_ini[TOOLSENSOR]Y>]
По идее достаточно убрать перемещение по Y

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

G53 G1 X[#<_ini[TOOLSENSOR]X>]
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4510
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Глобальные переменные

Сообщение xenon-alien »

sergx99 писал(а): В качестве догадки, на основе темы [WIKI] Работа с центроискателем в LinuxCNC
В ini файле
Меня интересовал самый примитивный способ без ремапа.
То что вы предложили - это ремап М кода.
И речи не было про центро-искатель от vers, а обычная ручная смена в АТС шпинделе с компенсацией по таблице инструмента.
Аватара пользователя
hmnijp
Мастер
Сообщения: 1719
Зарегистрирован: 20 авг 2017, 15:02
Репутация: 526
Настоящее имя: Константин
Откуда: Ульяновск
Контактная информация:

Re: Глобальные переменные

Сообщение hmnijp »

xenon-alien писал(а): Есть ли какая-то глобальная переменная
Вообще по задумке для смены инcтрумента кроме TOOL_CHANGE_POSITION предполагается использовать точку G30...
и есть связанный с этим параметр
[EMCIO]TOOL_CHANGE_AT_G30 = 1 - The machine is moved to reference point defined by parameters 5181-5186 for G30 if the value is 1. For more information see G-code Parameters and G-code G30-G30.1.


xenon-alien писал(а): То что вы предложили - это ремап М кода.
Нет, он имел в виду - в ини создать свой раздел и параметр, и ссылаться на него в коде. никто не запрещает делать их сколько угодно:
#<_ini[MYVARIABLES]X>
Но есть минус - он обновляется только с перезапуском.
vtgmfg
Мастер
Сообщения: 1475
Зарегистрирован: 23 июн 2022, 14:13
Репутация: 55
Настоящее имя: Максим
Контактная информация:

Re: Глобальные переменные

Сообщение vtgmfg »

hmnijp писал(а): использовать точку G30...
из праздного любопытства.. вот есть в УП строка TxM6 - этого недостаточно разве для автосмены инструмента?
Аватара пользователя
hmnijp
Мастер
Сообщения: 1719
Зарегистрирован: 20 авг 2017, 15:02
Репутация: 526
Настоящее имя: Константин
Откуда: Ульяновск
Контактная информация:

Re: Глобальные переменные

Сообщение hmnijp »

vtgmfg писал(а): строка TxM6 - этого недостаточно разве для автосмены инструмента?
достаточно. всё определяется внутри m6
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4510
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Глобальные переменные

Сообщение xenon-alien »

hmnijp писал(а): Нет, он имел в виду
hmnijp писал(а): #<_ini[MYVARIABLES]X>
Но есть минус - он обновляется только с перезапуском.
А для чего мне создавать собственные переменные, если есть глобальная переменная текущей координаты стола?
Просто я не в курсе под каким именем (ещё не добрался).
И переспросил, будет ли оно так работать с ини файла. Для того и есть
hmnijp писал(а): TOOL_CHANGE_POSITION
Для удобства и простоты.
На офф. форуме чувак материл этот
hmnijp писал(а): [EMCIO]TOOL_CHANGE_AT_G30 = 1
Ибо оно ехало, не так как он хотел и ему тоже предложили ремап.
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: Глобальные переменные

Сообщение alex_sar »

xenon-alien писал(а): Просто я не в курсе под каким именем (ещё не добрался).
найти ее нетрудно (numbered parameters linuxcnc), но очень сомнительно что она будет перевычисляться после первичной загрузки...

проще наверное постпроцессор покривить чтобы вставлял g53g0z0 перед сменой инструмента, а в ini файле вообще ничего не указывать.
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4510
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Глобальные переменные

Сообщение xenon-alien »

alex_sar писал(а): проще наверное постпроцессор покривить чтобы вставлял g53g0z0 перед сменой инструмента, а в ini файле вообще ничего не указывать.
Вообще-то для этого есть раздел [EMCIO] Section
в ini файле.
TOOL_CHANGE_QUILL_UP = 1 - The Z axis will be moved to machine zero prior to the tool change when the value is 1. This is the same as issuing a G0 G53 Z0.
А этим хотел указать позицию смены, только без изменения по оси У. (что бы стол туда-сюда не гонять лишний раз)
TOOL_CHANGE_POSITION = 0 0 2 - Specifies the XYZ location to move to when performing a tool change if three digits are used. Specifies the XYZABC location when 6 digits are used. Specifies the XYZABCUVW location when 9 digits are used. Tool Changes can be combined. For example if you combine the quill up with change position you can move the Z first then the X and Y.
Вот я и понадеялся, что можно обойтись без ремапа, но что-то подсказывает, что нет... :wik:
Ответить

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