Контроллер ЧПУ

Контроллеры, драйверы, датчики, управляющие устройства.
Horeen

Re: Контроллер ЧПУ

Сообщение Horeen »

о-первых у меня тупо нет девайса, с которым работать, отлаживать как?
Есть ПО для эмуляции, хоть тот же Proteus, который отлично эмулирует МК и COM-порт, позволяя связывать реальную программу с виртуальным контроллером.
разработчик девайса делает под него же драйвер используя открытые соглашения о вызовах.
Согоасен. Для этого в виндах есть стандартный элемент управления, со стандартными же вызовами (одинаково работающих во всех языках разработки). MSComm, если не ошибаюсь. С твоей точки зрения, работа с ним происходит так же, как и с dll-кой для LPT, что ты используешь сейчас. Речи не идёть о написании своего драйвера или библиотеки.

Если всё же хочется, что бы МК был "повторителем", т.е. подчинялся машине интерполяции в проге на компе (без лишней самодеятельности), то можно было бы выдавать что-то вида:

При начале работы (т.е. всего один раз на один файл g-кода):
- начальная скорость движения (в герцах)
- длинна участка разгона до максимальной скорости (в шагах)

При каждом кадре:
- координаты цели для каждой участвующей оси (в шагах)
- рассчитанный на компе тайминг выдачи импульсов для каждой участвующей оси (в мкс)

При этом можно n-кадров пихать в небольшой буфер МК и потом уже обрабатывать движение (с заполнением буфера по запросу при необходимости).
Таким макаром МК ничего не интерполирует, понятия не имеет о дискретности шага (шагов на миллиметр) и способен выдать огромную частоту (хватит хоть на 256кратное дробление шага при 100 оборотах в секунду).
Координаты конечных целей кадра в шагах от того, что прога на компе уже знает (из своих настроек) какова дискретность шага, к тому же это позволяет в МК избавится от вычислений с плавающей точкой и других вычислений, которые с успехом и так делает прога со стороны компа. Да, координаты, конечно, относительно нуля. Они же, по сути, и описывают направление движения. Т.е. понятно, что если текущая координата у оси "1000" шагов, и приходит цель в "500", то едем на 500 шагов назад, если "1500", то на 500 шагов вперёд. Комп же сам знает сколько это в милиметрах, что и показывает на экране. Это так.. для размышлений. Такой протокол уже удачно был использован для CNC толи немцами, толи поляками, но был коммерческим проектом, так что не подберёшся.
koolhatcker

Re: Контроллер ЧПУ

Сообщение koolhatcker »

Рад резонансу )ab(
Хотя цель была другой, но лишний азарт в достижении цели ещё никому не помешал...
Архива так и не увидел и весь форум читать некогда, поэтому позволю себе ограничиться тем, что пробегусь по высказываниям сегодняшнего дня..
Прога знать не знала, что работает с COM-портом. Вместо штатной внешней библиотеки работы LPT-порта в винде подсовывалась самодельная (с тем же именем и теми же входными данными). Эта библиотека кэшировала параллельные данные якобы для LPT-порта в буфер, так же отслеживала временные интервалы прихода этих данный от проги. Потом отправляла данные в буфер МК в виде пачки данных, содержащих направление шага для каждой оси и время, через которое эти шаги должны выходить из МК. Т.е. интепроляции в МК не производилось, т.к. по сути, данные уже были "прямопотоковые" и отинтерполированные прогой на компе. Можно представить, что упрощенно это выглядит так - параллельный байт выводится не в LPT, а в последовательном виде (через последовательный же порт) передаётся в МК, который выводит полученный байт уже в параллельном виде на свой порт (с учётом тайминга).
Помимо того, что скорость упадает в 9 раз(при той же частоте вывода в порт), так ещё и передаётся избыточная инфа("время, через которое эти шаги должны выходить из МК"). Т.е. передали направление, а следом ещё 1-2 байта с инфой о скорости? Если я неправильно воспринял, то будьте добры не спешить и излагать ваши мысли так, чтобы они были поняты однозначнго всеми без исключения )ab( .
Тот же KCam. На оф.сайте есть и команды протокола и исходники той части KCama, которая отвечает за работу с внешним контроллером по COMу
Ссылочки будьте добры пожалуйста. Обе две. И на описание протокола и на исходники. Я не нашёл. И не только на их сайте, но и во всём интернете. Нашлись только цены на ту железку, что может транслировать данные от Kcam в S/D.
неспроста ещё никто так и не написал своей прошивки для работы с KCam по именно их протаколу.
Именно потому никто и не написал, что протокол закрыт. Сами посудите - список команд известен, времянки передаются, транслировать в S/D при таком раскладе сможет любой школьник старших классов. Тем не менее никто до сих пор не сделал. Включая китайцев.
Вобще, тема благодатная, и бесспорно заслуживает внимания (это не про KCam, а вообще).
Спору нет. Только вот есть одно "НО". Раз уж речь идёт не о универсальной железяке, а о связке комп+железо, то отсюда вытекают как минимум 2 следствия: 1)Софт должен быть как минимум не хуже того софта, к которому все привыкли и которым все пользуются. 2)Железо будет совместимо только с этим софтом.
Наверное, malvin, действительно, понял что так делать не надо, потому что привязывается к моей разработке и решил соскочить с темы.
Если так и есть, то зря имхо. Ведь есть много связок софт+железо и все они несовместимы. То есть производитель бьёт 2-х зайцев - Sale(Soft && Hard) )ab( .
И им невыгодно раскрывать свои протоколы чтобы например железо для их софта делали другие фирмы. Банально теряется монополия и падает цена. Поэтому тут всё просто - либо делать свою связку либо реверсинжинирить чужую(вместе со всеми недостатками реализации обмена и недостатками софта). А оно надо?
внешний МК автоматически "наследовал" все фичи и способности управляющего ПО, т.к. являлся по сути простым "повторителем" выводных данных.
Horeen, неужели вы не видите, что это не совсем правильно? Ведь при таком подходе узким местом быстродействия железа будет являться интерфейс связи его с ПК.
на самом деле универсальным должно быть не конкретное решение, а протокол. А там как бы вы уже не сделали - всегда найдутся умельцы написать прошивку для своего контроллера, который будет понимать, что от него хочет управляющее ПО. Отсутствие такого ПО с хорошо документированным протоколом и останавливает развитие любительских конструкций в этой сфере.
А вот тут поддерживаю. Мне например достаточно строки из файла по ком порту(до CR/LF). А уж что с ней делать - контроллер разберётся )ab( .
Это что касаемо передачи данных в контроллер, для передачи данных обратно нужна еще одна процедура, типа
Код: Выделить всё
unsigned int __stdcall CncState(char *uType)
возвращает значение состояния или код (вот тут есть что обсудить)
Вы отдаёте себе отчёт в том, насколько упадёт быстродействие(с учётом медленных интерфейсов), если гонять данные в обе стороны, а не в одну? Я о том, что допустим двигатель находится в стадии разгона и после КАЖДОГО шага контроллер передаёт значение состояния текущей скорости например )ab( .
Но может можно подумать и оптимизировать как-то... но протокол изначально не ахти какой (не смотря на предельную простоту).
Нафиг )ab( .
Шлём в ком порт строку Г-кода и курим... пока железяка не рапортует об успешном выполнении этой строки и готовности к выполнению следующей.
При начале работы (т.е. всего один раз на один файл g-кода):
- начальная скорость движения (в герцах)
- длинна участка разгона до максимальной скорости (в шагах)
ВАЩЕ не согласен с обоими пунктами. )ab(
Скорость нужна не начальная, а общая. Связывающая время перемещения из точки А в точку Б со временем, в течение которого это перемещение происходит. А начальная скорость всегда будет равна нулю )ab( .
Длина участка разгона(равно как и торможения) будет величиной переменной и напрямую связанной с расстоянием от точки А до точки Б. )ab(
При каждом кадре:
- координаты цели для каждой участвующей оси (в шагах)
- рассчитанный на компе тайминг выдачи импульсов для каждой участвующей оси (в мкс)
Координаты цели содержатся в кадре ПО ОПРЕДЕЛЕНИЮ.
Тайминг будет изменяться для каждого шага в процессе разгона(торможения). Предлагаете передавать ВСЮ таблицу таймингов для каждого разгона/торможения?
способен выдать огромную частоту (хватит хоть на 256кратное дробление шага при 100 оборотах в секунду).
При наличии обратной связи с ПК - тупо не успеет из-за низкой скорости интерфейса.
Уф. Вроде хватит для первого раза. )ab(
Прошу понять правильно - это всего лишь вопросы, которые возникли в ходе чтения сегодняшних сообщений.
Horeen

Re: Контроллер ЧПУ

Сообщение Horeen »

Ню, тогда продолжим ^^
Помимо того, что скорость упадает в 9 раз(при той же частоте вывода в порт), так ещё и передаётся избыточная инфа("время, через которое эти шаги должны выходить из МК"). Т.е. передали направление, а следом ещё 1-2 байта с инфой о скорости?
Это не совсем верно. Вы про частоту отправки байта программой или про скорость соединения COM-порта с МК? Если скорость соединения высока (хоть 115кБит\с), то принципиально нет большой разницы через что слать посылки, LPT или COM. Скажем, и туда и сюда можно слать байт через равные промежутки времени (например, 5кГц). Ню, не совсем удачный пример, но всё же.
Ссылочки будьте добры пожалуйста. Обе две. И на описание протокола и на исходники. Я не нашёл.
http://kellyware.com/anonymous/MaxStepp ... _v102b.zip
http://amigomel.net/gallery/cnc/MaxStep ... d_List.zip
есть одно "НО". Раз уж речь идёт не о универсальной железяке, а о связке комп+железо, то отсюда вытекают как минимум 2 следствия: 1)Софт должен быть как минимум не хуже того софта, к которому все привыкли и которым все пользуются.
Позволю не согласится. За неимением альтернативы люди пользуются и куда более ущербными вещами. Как бы плох софт не был, но за неимением LPT на ноуте люди всё же платят по 100у.е. за разработки поляков и немцев, ПО которых и рядом не стоило с Мачем по возможностям. И это, пожалуй, относится не только к CNC, а вообще ко всему в нашем мире. По сути, спрос рождает новая возможность, какой бы плохой она по-первости не была.
Horeen, неужели вы не видите, что это не совсем правильно? Ведь при таком подходе узким местом быстродействия железа будет являться интерфейс связи его с ПК.
Откуда у вас эта склонность неправильно истолковывать прямые и понятные вещи? o_O Чёрным по синему несколько раз писал, что в корне не поддерживаю энтузиазма по этому протоколу.
Вы же сами просили описать суть обсуждаемой темы, что и было сделано. Только и всего. Если не заметили - я не участвовал в обсуждении данного проекта. Ах да, вам же лень читать всю тему..
Шлём в ком порт строку Г-кода и курим... пока железяка не рапортует об успешном выполнении этой строки и готовности к выполнению следующей.
Я так и делал, работало. И ПО почти готово. Но есть ещё люфты и прочая лабудень, в которую очень не хотелось бы вникать, т.к. прикладной программист из мя никакой *__*
ВАЩЕ не согласен с обоими пунктами.
Да ради бога! Это просто пример возможной реализации. Можно всё поменять и переделать, абы придти к консенсусу в конце концов :)
При наличии обратной связи с ПК - тупо не успеет из-за низкой скорости интерфейса.
Речи не идёт о передаче компу текущих координат после каждого сделанного шага. Зная длину и скорость, за которую ось её пройдёт, прога на ПК и сама может примерно точно показывать изменение координат при движении в пределах одного кадра. МК только в конце кадра сообщит, что всё ОК (т.е. доехали). Где тут тормоза? Между кадрами не успеете передать байт? Успеете. Благо UART в большинстве МК аппаратно реализован, и нас не должно калыхать как и когда он передаст засланный в буфер отправки байт. А записать байт в буфер можно за очень короткое время.
spike
Почётный участник
Почётный участник
Сообщения: 358
Зарегистрирован: 08 фев 2010, 01:03
Репутация: 5
Контактная информация:

Re: Контроллер ЧПУ

Сообщение spike »

Засел я вчера за описание, да так всю ночь и сочинял, но теперь друзья, извиняйте, зарылся - буду писать долго и много, начиная с самого начала. Приведу и здесь некоторую часть, для лучшего понимания идеи.

koolhatcker, Horeen, я знаю про ваши разработки и знаю что у вас есть проблемы с функциональностью, ну просто не впихнуть всего в контроллер. Иначе вы бы просто не пришли сюда )ad( . Ведь нужно же двигаться дальше.

Поймите одну простую вещь: я в корне против подготовки траектории на стороне контроллера. Аргументы наверное не буду приводить, потом как нибудь... при этом я не против разумного контроллера - но выполняющего задачи, которые ему действительно под силу. Например, это интерполяция траекторий приводов - функций координат приводов в зависимости от функции времени и выполнение этих траекторий на приводах.

При этом я ничего не навязываю вам - наоборот, концепция, которая положена в основу CNCOpen и разрабатываемой сейчас 3-ей верси GIGAMESH позволяет подключать модули в любую точку многоступенчатого преобразования "информация-замысел" в "информацию-изделие".
Вот я о чем (очень кратко и упрощено, в качестве примера приведу простой и в то же время реальный пример):

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

Есть G-код, нужно провести инструмент по соответствующей траектории.
Предлагается такое решение:
  • преобразовать G-код в некий канонический код;
  • преобразовать канонический код в код траектории-автоматики-времени;
  • преобразовать код траектории-автоматики-времени в электрические импульсы;
Именно таким образом будет работать GIGAMESH 3 (на схеме - залитые голубым цветом фигуры):
CNCOpen.png (4718 просмотров) <a class='original' href='./download/file.php?id=2971&sid=6b28e637b88f3de0cb46787e095799cb&mode=view' target=_blank>Загрузить оригинал (54.17 КБ)</a>
так вот, на любом этапе этого многоступенчатого преобразования может быть встроен любой преобразователь информации. Например, ваша ситуация (когда есть контроллер, который умеет делать интерполяцию) - на данный момент это конвертер 1 в предложенной нотации. Т.е. обрабатывая некий входной код (G-код) контроллер выдает импульсы на привода.

В этой теме изначально речь шла вообще ни об одном из конвертеров 1-3, а шла речь о некой прослойке между ковертером 3-го уровня и портом (источником данных HI/LO - протокола). Единственной задачей LPTBridge (этой прослойки было выравнивание длительности импульсов.
LPT.png (4718 просмотров) <a class='original' href='./download/file.php?id=2973&sid=6b28e637b88f3de0cb46787e095799cb&mode=view' target=_blank>Загрузить оригинал (36.52 КБ)</a>
LPTBridge.png (4718 просмотров) <a class='original' href='./download/file.php?id=2974&sid=6b28e637b88f3de0cb46787e095799cb&mode=view' target=_blank>Загрузить оригинал (44.53 КБ)</a>
Позже обсуждался вариант конвертера 3-го уровня. Этот конвертер посредством процедуры CncCmd должен был получать готовый код приводов и длительности импульсов (для каждого шага). Собственно, Horeen, неплохо изложил идею этого контроллера выше. Детали (соглашения о вызовах процедур этого конвертера) тоже описаны выше.

Дальше о плюсах и минусах конвертера 3-го уровня:
Мне прекрасно понятны очевидные минусы варианта конвертера 3-го уровня с "прямопотоковыми", готовыми для использования приводами, данными.
При предложенном подходе вся функциональность, масштабируемость и расширяемость функционала РС-программы автоматически переносится на контроллер. Получается пусть и не слишком быстрая, но вполне работоспособная система.
Подчеркну: цель и задача такого подключения - наладка обмена между уровнем РС и PLC. Протокол передачи прост до безобразия. Усложнять его - да пожалуйста, упаковывать данные - тоже. В таком контроллере определенную сложность представляют сервисные процедуры, типа поиска индекса приводов и т.п., которые требуют либо обратной связи, либо некоторого запрограммированного поведения контроллера и соответсвующих команд в протокол обмена. Вот, собственно, для их решения и нужна работающая система.
Как я уже говорил у меня готов алгоритм упаковки интерполированных данных (использующий совершенно новый подход к передаче информации приводам). Без лишней скромности скажу что это очень круто, но пока не буду рассказывать в чем круть. )bt8(

Насколько я понимаю вам может быть интересен преобразователь 2, преобразующий канонический код в импульсы для приводов? В этом случае вам не нужно заботиться о парсинге и интерпретации входного кода. Но при этом все фичи ваших контроллеров будут задействованы.
Converter 2.png (4718 просмотров) <a class='original' href='./download/file.php?id=2972&sid=6b28e637b88f3de0cb46787e095799cb&mode=view' target=_blank>Загрузить оригинал (40.62 КБ)</a>
Это будет, но пока не готово. Можно обсудить канонический код - первое приближение имеется.

Продолжение следует.
Аватара пользователя
malvin
Кандидат
Сообщения: 99
Зарегистрирован: 23 сен 2009, 10:12
Репутация: -26
Контактная информация:

Re: Контроллер ЧПУ

Сообщение malvin »

Ну что, ребята, какие у вас новости? Все так же обсуждаете, что лучше, корявый недо-МК-контроллер, мач или мост?)))
Нужен лазер. Форумчане, порекомендуйте пожалуйста твердотельный лазер с маленьким пятном. || Для работы над X-Cam нужны бетта-тестеры.
Ответить

Вернуться в «Электроника»