Я немного поисследовал NCStudio
Фигасе!
Теперь чо, осталось нарисовать интерфейс и все?
Для тех, кто не в теме: Распаковываете архив на компе, где есть плата 5.5.60 с драйвером, запускаете экзешник и двигаете станок кнопками.
Отправлено 22 Декабрь 2022 - 20:30
Я немного поисследовал NCStudio
Фигасе!
Теперь чо, осталось нарисовать интерфейс и все?
Для тех, кто не в теме: Распаковываете архив на компе, где есть плата 5.5.60 с драйвером, запускаете экзешник и двигаете станок кнопками.
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 23 Декабрь 2022 - 09:08
нарисовать интерфейс и все?
Не всё так просто. Я же говорю - контроллер не работает с G-кодом самостоятельно, и драйвер этого тоже не делает. Если писать программу на уровне запросов к драйверу без промежуточных библиотек придётся самостоятельно рассчитывать ускорения. Но в принципе можно заюзать NCCore.dll + NCInterp.dll и работать с G-кодом.
Кстати в исходнике ошибка в 183 строке: вместо NCCMD_OutPort должно быть NCCMD_InPort.
Отправлено 23 Декабрь 2022 - 11:07
Основная команда - это генерация заданного количества импульсов на протяжении 0,005 сек.
Есть у меня старенькие диаграммы для пурпурного контроллера NcStudio 146кГц** (против обычной платы 5.5.60 - 47кГц) - равномерное движение, торможение и разгон.
Чо-то я не могу объяснить их банальным "заданное количества импульсов за один такт".
Чо-то там сложнее...
**Судя по косвенным признакам, декларируемая разница в частотах контроллеров может быть и чисто маркетинговым ходом (серваки спокойнее относятся к неравномерным импульсам, чем шаговики, а пурпурная для серваков). При подключении шаговиков к пурпурной плате 146кГц не получается получить максимальную скорость выше, чем у плат 47кГц - шаговики начинают пропускать.
И ещё из старого, чтоб далеко не лазить
Исполнение следующего кода
G65 P1022 L10000
M30
O1022 ' one pulse
M901 H0 P1 'set pin12 to 1
G04 P5
M901 H0 P0 'set pin12 to 0
G04 P5
M17
Проводит к генерации на 12-м пине меандра с периодом 9,2мс.
Т.е. максимальная частота 108,7Гц.
Длительность паузы после изменения состояния порта кратно 5 мс, т.е.
G04 P1 - 5мс
G04 P5 - 5мс
G04 P6 - 10мс
G04 P10 - 10мс
G04 P11 - 15мс
G04 P15 - 15мс
и т.д.
**********************************************************************************
Без пауз
G65 P1022 L1000000
M30
O1022 ' one pulse
M901 H0 P1 'set pin12 to 1
M901 H0 P0 'set pin12 to 0
M17
период импульсов составит 7мкс, т.е. 142 кГц.
********************************************************************************
К сожалению при непрерывной выдаче в порт миллиона импульсов (~7 секунд) синхронизация на осциллографе сбивается несколько раз. Подозрение на "грязные", нестабильные импульсы.
Сообщение отредактировал lkbyysq: 23 Декабрь 2022 - 11:23
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 23 Декабрь 2022 - 11:46
Сообщение отредактировал lkbyysq: 23 Декабрь 2022 - 12:20
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 23 Декабрь 2022 - 12:19
Контроллер не знает, что такое ускорение. Он генерирует частоту. Допустим имеем станок, настроенный на 100 импульсов на миллиметр, тогда при скорости 100 мм/сек получим 10000 импульсов в секунду. NCStudio принимает пакеты длительностью 0,005 сек - следовательно за один такт должно генерироваться 50 импульсов.
Теперь нам нужно ускорение (пускай будет 1000 мм/сек). Переводим в импульсы - 1000*100*0,005*0,005=2,5 импульса в такт. Всё - можно генерировать команды: первый такт - 0 импульсов, второй такт 3 импульса (округляем), третий 5, четвёртый 8 и так далее до достижения 50 импульсов. Для торможения повторяем в обратном порядке.
Включение/выключение отдельного пина производится другой командой. При этом она выполняется в обход очереди остальных команд. В файле NCStudio.inc смотри команды с кодами 8XXX.
Отправлено 23 Декабрь 2022 - 12:31
Сообщение отредактировал lkbyysq: 23 Декабрь 2022 - 12:35
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 23 Декабрь 2022 - 12:33
Диаграммы снимались при выполнении JOG или при выполнении G-кода? Я не до конца разобрался, но по-моему G-код выполняется пакетами по 0,005 сек, а для перемещения с клавиатуры есть отдельный IOCTL-запрос, в котором указывается ускорение.
Отправлено 23 Декабрь 2022 - 12:44
Если пользовались "трассировщиком DLL", то каким?Я немного поисследовал NCStudio 5.5.60.0.
Сообщение отредактировал lkbyysq: 23 Декабрь 2022 - 12:45
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 23 Декабрь 2022 - 12:45
В структуре инициализации станка ускорения присутствуют, но как я понял не учитываются контроллером. Я смотрел в отладчике - при непрерывном перемещении (jog) отправляется IOCTL 22E03h (у меня он назван NC_SetJogContext), а при перемещении шагами NCStudio закидывает пакеты в очередь. Я экспериментировал с этим запросом, но как-то не получилось заставить станок двигаться.
Отправлено 23 Декабрь 2022 - 13:44
В общем в структуре, которая передаётся в NC_SetJogContext мне не понятны 2 байта по смещению 41 (29h)
Они изменяются при каждом перемещении и если они заданы не правильно контроллер никак не реагирует. При остановке они равны нулю. Остальное более или менее понятно - там есть скорость обычной подачи, скорость ускоренной подачи, ускорение, направление движения по осям и флаг ускоренной подачи.
Отправлено 23 Декабрь 2022 - 14:25
Сообщение отредактировал lkbyysq: 23 Декабрь 2022 - 14:27
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 24 Декабрь 2022 - 12:20
Вроде бы получилось использовать JOG. Эти два байта, о которых я писал ранее не имеют значения. Просто при инициализации контроллера нужно послать 3 IOCTL запроса с кодом 22E030h и "магическими" цифрами 102h, 101h, 301h. Пока смотрю в симуляции (запускаю через DrvSimu.dll) и вижу что при отправке NC_SetJogContext эмулятор драйвера просто помещает в очередь те же самые пакеты. Возможно на реальном оборудовании будет по-другому. Наверное в понедельник проверю на железе и попробую снять осциллограммы. Ещё заметил что первый пакет вначале разгона или торможения имеет код 1000h, а последующие 1100h, но в той проге, что я выкладывал я отсылал пакеты только с кодом 1100h и не заметил разницы.
Отправлено 24 Декабрь 2022 - 13:29
Ну в общем написал вторую программу и сравниваю с первой так:
1) Зажимаю кнопку перемещения на 10 секунд
2) Смотрю как изменились машинные координаты
В первой версии (пакеты формируются вручную, длительность принята за 0,005 сек) при скорости 100 мм/сек получаю 1300 мм (есть инерция при торможении так, что будем считать, что это 1000 мм), во второй версии (пакеты формируются эмулятором драйвера, длительность принята за 0,005 сек) - 400 мм. Обнаруживается закономерность 1000*0,002/0,005=400 (вспоминаем осциллограммы из поста №163). Похоже, что действительно в JOG-mode можно получить более плавное передвижение. Такая разница может быть объяснена тем, что пакеты при выполнении G-кода формируются из режима пользователя, а в JOG-mode из режима ядра (подробнее здесь). В режиме пользователя программный код может быть прерван другими процессами (вытесняющая многозадачность), из-за этого трудно работать с маленькими временными периодами, а вот драйвер теоретически может запретить прерывания на время формирования пакетов.
Отправлено 24 Декабрь 2022 - 19:07
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 26 Декабрь 2022 - 13:57
Сообщение отредактировал lkbyysq: 26 Декабрь 2022 - 13:59
Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).
Отправлено 28 Декабрь 2022 - 21:47
Я немного поисследовал NCStudio 5.5.60.0 и оказалось, что контроллер по сути умеет только генерировать импульсы заданной частоты и изменять уровни сигналов на выходах. Драйвер тоже не выполняет никаких расчётов.
Вау!!! Респект!!! Вот я вовремя сюда заглянул!!!
Отправлено 07 Август 2024 - 13:38
Добрый день умные люди.
Сам я слабоват в данной теме, но хочется тоже добавить несколько кнопок для упрощения рабочего процесса.
У меня 2 вопроса.
1. Как правильно продублировать (что прописать в pablic.dat) кнопки "Стоп" и "Пауза". Хочется их сделать большими.
2. Я правильно прописал простое перемещение?
Отправлено 07 Август 2024 - 19:32
так пропишите да посмотрите, потом сотрете , если нет результата. В следующий раз можете не спрашивать. Пишите, смотрите, стирайте.Я правильно прописал простое перемещение?
O121
G905 G903 G53 G00 G90 Z=-5
G905 G903 G53 G00 G90 X=700.5 Y=2202.5
M17
Отправлено 07 Август 2024 - 19:45
так пропишите да посмотрите, потом сотрете , если нет результата. В следующий раз можете не спрашивать. Пишите, смотрите, стирайте.
Мне сказали что в кнопках (pablic.dat) М00 и М30 работать не будут, решил тут спросить. Не любитель краш-тестов, что бы наугад что то писать.
0 пользователей, 3 гостей, 0 анонимных