Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Система команд сервоконтроллера
Форум разработчиков электроники ELECTRONIX.ru > Силовая Электроника - Power Electronics > Электрические машины, Электропривод и Управление
Страницы: 1, 2, 3, 4
_Pasha
^C - это скока? Помню ^Z=26, а это - забыл sad.gif

И вот еще мысль:

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

Хочу еще попробовать навернуть конструкции типа X.S, т.е. обращение к другому девайсу 

Код
axis1: S+= axis2.S


Выполнение этого уже требует разговора двух девайсов. Не вижу сложностей:

Код
axis2*axis1: S? (здесь CRC в hex-виде) - это слейв спросил у своего "коллеги", чо там у него за Сэ

@axis2*axis1: S=120 (здесь CRC в hex-виде) - на что он ответил.

@axis1 S+=120 OK - а если бы не ответил, то был бы ERROR


В общем-то, логика не нарушается, потому что мастер по-прежнему инициирует обмен

Задача - эти все навороты разместить в символах, чтоб было понятно пользоваться и чтоб словоподобных команд было минимум, и чтоб парсилось это все легко.
Rst7
Цитата
^C - это скока?


=3

Цитата
Хочу еще попробовать навернуть конструкции типа X.S, т.е. обращение к другому девайсу


Ох сдается мне, что для таких вещей лучше CAN. Девайсы флудят своим состоянием в шину, а кому надо - настраивает свои фильтры на интересующий ID - и гребет всегда свежие данные.
_Pasha
Цитата(Rst7 @ Feb 19 2009, 14:35) *
Девайсы флудят своим состоянием в шину

Тут немножко не так. Имхо, текстовый протокол служит двум целям. С одной стороны, обеспечить систему команд типа "подай-принеси" и какой-нить локальный контроллер может запросто гонять скрипты на этом уровне. Там не надо извратов с флудо-слейвами. С другой стороны - комфорт для юзера и почти язык для ручного управления, настройки, просмотра.

В BIN-е фантазии кончаются, начинается скорость. Как только скорость оставляет желать и начинают хихикать сторонники 12мегабит, имеется еще более тупой и адекватный интерфейс - step/dir/an


Простенько, и со вкусом... это только выглядит замороченно, в реале должно быть проще.
Rst7
Цитата
другой стороны - комфорт для юзера и почти язык для ручного управления, настройки, просмотра.


Надо бы Вам ко мне в гости зайти. Я покажу, как делается комфортно для юзера smile.gif
evgeny_ch
Продолжу про оптику.
Упоминаемый уже Бекхоф, с интерфейсом Lightbus, он же Sercos,
переходит на CoDeSys. Почитал немного из форума.
Картинка из каталога.
slog
Про оптику - это конечно красиво, и у неё много достоинств. Но как-то сложновато.
А EtherCAT не сложнее Sercos, но гораздо красивее.
А вобще, заколебали уже большие производители промэлектроники - каждый изобретает собственный ни с кем не совместимый интерфейс.
Даёшь поголовный переход на CoDeSys и EtherCAT !!! Всё что не совместимо - в мусор!!!
haker_fox
Цитата(_Pasha @ Feb 19 2009, 18:47) *
Тут немножко не так. Имхо, текстовый протокол служит двум целям. С одной стороны, обеспечить систему команд типа "подай-принеси" и какой-нить локальный контроллер может запросто гонять скрипты на этом уровне. Там не надо извратов с флудо-слейвами. С другой стороны - комфорт для юзера и почти язык для ручного управления, настройки, просмотра.

Уф! 1111493779.gif Вы все-таки решили, что текстовый протокол имеет место быть. Это здорово (ИМХО).
Мне понравился подход с подтверждением, т.е. когда серва может ответить, что она получила, а юзер подтвердить выполнение. Сам я такого бы не придумал. Надо бы Вашу идею на свой девайс перенести, не возражаете?)
Чем еще хорош (ИМХО опять же) текстовый интерфейс, что с ним относительно несложно с матлабом соединиться. Ведь, наверно же полезно видеть графики, показывающие динамику процесса. Поиграться с ПИДом, посравнивать реальную систему с математической моделью. Или это все я ерунду изложил?
_Pasha
Цитата(haker_fox @ Feb 19 2009, 16:53) *
Или это все я ерунду изложил?

Вот я на такую аудиторию и рассчитываю в первую очередь. Чтоб это уже был не elm-chan две тысячи затертого года.


Вы только не спешите это все реализовать - пофантазируйте тоже, пока оно не устоялось. Мне кажется, что оно будет проще в реализации.
dpss
Цитата(evgeny_ch @ Feb 19 2009, 14:35) *
Продолжу про оптику.
Упоминаемый уже Бекхоф, с интерфейсом Lightbus, он же Sercos,
переходит на CoDeSys. Почитал немного из форума.
Картинка из каталога.

Небольшое уточнение: софт Бекхофа сделан но основе CoDeSys . Бекхофф купил лицензию на ядро и приспособил под свои задачи. В каждом модуле
находится ASIC ET1100 или ET1200 или маленький Циклон. Через интерфейс физического уровня (Микрел) он подключается к эзернету. Когда на DIN планке вплотную сидит много модулей связь между ними идет чераз LVDS. Так они экономят деньги и время.
http://www.beckhoff.de/download/Document/E..._all_v2i2i1.pdf
http://www.beckhoff.de/download/Document/E...et_all_v1i4.pdf
http://www.beckhoff.de/download/Document/E...11-014X_V16.pdf
http://www.beckhoff.de/download/Document/E...8721BL_v1i0.pdf
haker_fox
Цитата(_Pasha @ Feb 19 2009, 20:59) *
Вот я на такую аудиторию и рассчитываю в первую очередь. Чтоб это уже был не elm-chan две тысячи затертого года.

В elm-chan хотябы неплохо токовую защиту поставить, что, впрочем было реализовано в других модификациях.
Цитата(_Pasha @ Feb 19 2009, 20:59) *
Вы только не спешите это все реализовать - пофантазируйте тоже, пока оно не устоялось. Мне кажется, что оно будет проще в реализации.

Вспоминая свои летние рассуждения на форуме по приводу, не могу не вспомнить, что был также предложен вариант реализации одного физического интерфейса, например RS-485, чтобы несколько приводов на одну шину можно было посадить и не городить кучу разъемов на хосте. Правда в этом случае придеться делать переходник RS-485<->RS-232, для подключения к компу. Также предполагалось, что привод стартует в текстовом режиме, где юзеру предоставляется командная строка. По определенной команде, привод переходит в бинарный режим, когда по каналу уже гонятся полноценные пакеты, с CRC. Но я решил, что хранить переходник неудобно, и реализовал два интерфейса на приводе. Но об этом я уже выше сообщал. Не могу сказать, что это удачное решение.

Далее по Вашему предложенному протоколу.
Подтверждение одним символом слэша '/' будет ли надежным, а если помеха удачная пройдет, что привод по ошибке примет слэш тогда, когда не надо? Или тут уже паранойей я занялся...
Было бы неплохо также предусмотреть редактирование командой строки со стороны привода, вдруг юзер ошибься на 20 символе. Не набивать же строку заново. Либо, если такое возможно, можно взять терминал, где сначала строка вводится и редактируется по мере надобности, а затем уже отправляется по нажатию ENTER в порт. Это я к тому, что Вы предлагаете в одной строке задавать несколько параметров. У меня привод только один может принять в строке, и то напрягает в случае ошибки жать ENTER и снова набирать строку.
Не знаю, насколько я полезные мысли изложил, просьба не пинать, если что)
_Pasha
Цитата(haker_fox @ Feb 19 2009, 17:26) *
Подтверждение одним символом слэша '/' будет ли надежным

Зависит от реализации на МК сервака. Имхо:

строка получена и парсер не ругаеццо -> взвели флаг готовности к выполнению-> отдали эхо -> подождали, если принято нечто, отличное от / (пробелы не в счет) - флаг готовности сбросили и больше никто никуда не идет.


По поводу того, что это должен быть именно "/" - еще непонятно, вдруг деление можно вставить? Тогда надо другой символ.



Цитата(haker_fox @ Feb 19 2009, 17:26) *
предусмотреть редактирование командой строки со стороны привода

А как? Ну введу я backspace и del а дальше что? И еще в этом случае надо посимвольное эхо, что невозможно, т.к. девайсы по определенного момента не знают, кому адресована команда
Rst7
Я тут попробовал покурить, как плагины для своего железа делать к Mach3. Начал курить тут - http://www.machsupport.com/MachCustomizeWi..._device_control

На сколько я понял, у него есть 2 способа управления:
1. Прямое (которое Jogging) - просто двигаться по нужной оси в направлении со скоростью такой-то
2. GCode movement - движение с координатами.
Цитата
struct GMoves
{
int type; // 0 is linear, 1 is cubic
double cx,cy,cz; // center of move for cubics.
double ex,ey,ez,ea,eb,ec;
double sx,sy,sz,sa,sb,sc;
__int64 DDA1[6]; //DDA1's for cubics
__int64 DDA2[6];
__int64 DDA3[6];
double Time;
bool Stop;
};

“type” is a 1 or zero to tell you if this move is part of a line or arc.

Cx,cy,cz are the center corrdinates if this is an arc.

Ex,ey,ez,ea,eb,ec are the end points of this move in machine coordinates.

Sx,sy,syz… are the start points of the move.

Time is the time of the move in ms. These moves will all be 1-64ms long depending on the move. No move will be longer than 64ms.


Я так понимаю, что GCode movement - это его основной режим. И нафлудить он не сможет больше чем раз в миллисекунду. Вот я и думаю - надо в контроллере имплементить понимание таких данных да и всех делов.

Отдельно там идут всякие IO - но тоже вроде небыстро...

Это я все к тому, что должен уметь делать контроллер.

Чуть позже еще покурю, может чего накопаю более конкретного.
_Pasha
Цитата(Rst7 @ Feb 19 2009, 18:21) *
Это я все к тому, что должен уметь делать контроллер.

По-любому если у нас три оси набираются из одноосевых серваков, то между MACH3(кстати есть у меня демка MACH2MILL - она полегче)

и серваками будет именно такой контроллер, чтоб туда гонялось эти 280 байт и по осям оно раскидывало. А теперь прикинуть - до трехосевика на каком нибудь STR750 - рукой подать...
Rst7
Цитата
будет именно такой контроллер, чтоб туда гонялось эти 280 байт и по осям оно раскидывало.


По осям - это да. Я так себе вижу, что принял по UDP пакет, расбросал его в N девайсов, собрал с них информацию и при помощи UDP обратно отправил. А вот курить c,e,s,t - должен уметь сам контроллер. Кстати, а вот DDA - это скорость, ускорение и ускорение ускорения - оно еще и в таком виде умеет задавать работу (или это довесок к c,e,s,t - я пока не вкурил). Тоже, я думаю, было бы неплохо поддержать.

Вообщем, посмотрите, можно ли асилить задание начальных и конечных координат. Это упростит девайс-преобразователь интерфейсов и снизит нагрузку на канал.
slog
Цитата(dpss @ Feb 19 2009, 16:21) *
Небольшое уточнение: софт Бекхофа сделан но основе CoDeSys . Бекхофф купил лицензию на ядро и приспособил под свои задачи. В каждом модуле
находится ASIC ET1100 или ET1200 или маленький Циклон. Через интерфейс физического уровня (Микрел) он подключается к эзернету.

Как бы раздобыть EtherCAT IP core for Altera? Много ли денег за него хотят? Может где-то в и-нете оно уже лежит?
_Pasha
Цитата(Rst7 @ Feb 19 2009, 20:42) *
А вот курить c,e,s,t - должен уметь сам контроллер.


Только ему надо подавать float32 а не double, а то жесть получается smile.gif
Rst7
Цитата
Только ему надо подавать float32 а не double, а то жесть получается


я так думаю, что даже int32.
Огурцов
Цитата(Rst7 @ Feb 19 2009, 14:21) *
Я тут попробовал покурить, как плагины для своего железа делать к Mach3.

Вы пробовали это скомпилить ? У меня неполучилось найти хидеры. При том, что год назад это все в инете свободно лежало. Толи убрали, толи...лыжи. Скажите, где взять, pls, если знаете или найдете. Готов кооперироваться любым способом.
_Pasha
Цитата(Rst7 @ Feb 19 2009, 22:18) *
я так думаю, что даже int32.


bb-offtopic.gif  В AVR-libc заложен китайский double  biggrin.gif
Огурцов
Цитата(slog @ Feb 19 2009, 17:14) *
Как бы раздобыть EtherCAT IP core for Altera? Много ли денег за него хотят? Может где-то в и-нете оно уже лежит?

Так ситуация наверно такая же, как с профибас. Купил чип и все дела.
Rst7
Цитата
В AVR-libc заложен китайский double


Это как?
Прохожий
Цитата(slog @ Feb 19 2009, 15:45) *
Про оптику - это конечно красиво, и у неё много достоинств. Но как-то сложновато.

Ничего не сложновато. И даже не очень дорого. Вот пример.
Нажмите для просмотра прикрепленного файла
А достоинств, в действительности, гораздо больше, чем можно представить себе в начале.
Цитата(slog @ Feb 19 2009, 15:45) *
А EtherCAT не сложнее Sercos, но гораздо красивее.
А вобще, заколебали уже большие производители промэлектроники - каждый изобретает собственный ни с кем не совместимый интерфейс.
Даёшь поголовный переход на CoDeSys и EtherCAT !!! Всё что не совместимо - в мусор!!!

И почему именно CoDeSys. Там, на самом деле, не все так бесплатно как кажется в начале. А может быть это будет лучше?
На самом деле таких систем достаточно большое количество. Хотите примеров? Их есть у меня. Начиная простейшей.
ПМСМ, лучше завести отдельную тему для обсуждения всяких PROFIBUS-ов и EtherCAT-ов.
К стати, по последним данным, PROFIBUS в ближайшем будущем начнет умирать.
SIEMENS готовит ему достойную замену на основе Ethernet.
dpss
Цитата(Прохожий @ Feb 19 2009, 23:23) *
И почему именно CoDeSys. Там, на самом деле, не все так бесплатно как кажется в начале.

Это смотря где покупать :-) Кое где совсем бесплатно.
_Pasha
Цитата(Rst7 @ Feb 19 2009, 17:21) *
Я тут попробовал покурить, как плагины для своего железа делать к Mach3.


Предварительные данные:


1. Чисто сплайн в форме (кстати, zltigo прав насчет трехэтажных выражений)

Код
/* as*(t^3)+bs*(t^2) etc */

volatile double spline,as,bs,cs,ds,tmp;

tmp = 0.001; // остальные тоже с вменяемыми значениями

spline = ds + tmp * (cs + tmp * (bs + as*tmp));


жрет 860 тактов при -O2 на WinAVR-20080512 с дефолтным libc.

Остальные варианты - до  1300 и более тактов. В сад. maniac.gif

Кажется форма записи эта называлась полиномом Горнера.

При длительности сервоцикла  1 мс как бенчмарковой отправной точки я могу отсчитать до 64 точек траектории либо где-то за 3 мс либо на ходу, что вполне возможно, т.к все хозяйство меньше 50 мкс. Теперь появляется здоровый интерес к DDA[]

Вывод: плавучка возможна.

Китайский double - это как китайский ватт. double помещается в 32 бита smile.gif
Rst7
Цитата
Чисто сплайн в форме


Дык может все-же фиксированная точка в формате 16.16? Потому как основная зопа в плавучке это + и -.

Цитата
Кажется форма записи эта называлась полиномом Горнера.


Если быть точным - это схема Горнера для вычисления полинома.
Rst7
Вообщем, если кого интересует, сделал я получение таймстампа в винде с микросекундной дискретностью. Выглядит где-то так (пардон за кривость):
CODE

//---------------------------------------------------------------------------
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <sys\timeb.h>
#pragma hdrstop

//---------------------------------------------------------------------------
static unsigned long long base_m;
static double base_d=0;
static long long ddm=0;

#pragma argsused
double prec_time(void)
{
LARGE_INTEGER counter_b;
LARGE_INTEGER counter_e;
LARGE_INTEGER freq;
unsigned long long m;
struct timeb ct;
double d;

QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&counter_b);
ftime(&ct);
QueryPerformanceCounter(&counter_e);
m=(((unsigned long long)counter_b.QuadPart>>1)+((unsigned long long)counter_e.QuadPart>>1));
//m - новая поправка
d=ct.time*1000.0+ct.millitm; //Собственно время в миллисекундах
if (base_d)
{
long long dm;
double dd=d-base_d;
base_m+=(dd)*((double)freq.QuadPart/1000.0);
dm=m-base_m;
ddm+=dm;
if (dd>0)
{
printf("%d\n",ddm);
if (ddm<0)
base_m-=freq.QuadPart/300000;
else
base_m+=freq.QuadPart/300000;
ddm=0;
}
base_d=d;
return d+((double)dm/((double)freq.QuadPart/1000.0));
}
else
{
base_m=m;
base_d=d;
return d;
}
}


int main(int argc, char* argv[])
{
int i;
struct timeb ct;
double pt=prec_time();

for(i=0;i<10000;i++)
{
double t1;
double t2;
ftime(&ct);
t1=ct.time*1000.0+ct.millitm;
t2=prec_time();
printf("%f - %f = %f, interval = %f\n",t1,t2,t2-t1,t2-pt);
pt=t2;
Sleep(2);
}
return 0;
}
khach
Цитата(Rst7 @ Feb 20 2009, 16:52) *
Вообщем, если кого интересует, сделал я получение таймстампа в винде с микросекундной дискретностью.

Дрыгоножество LPT порта под виндой-давно пройденный этап нафиг никому ненужный, неработающий на ноутбуках (даже на тех, где порт есть).
Для любителя интересен сервоконтроллер, имеющий плугин для Mach3, все остальное- нафиг ненужно. Поскольку Mach3 вываливает в Motion plugin 3 осевое управление и требует наличие круговой интерполяции, то именно это и надо засунуть во внешний контроллер- принимать кадры управления перемещением (в формате Mach3 GMoves), управлять 3 осями, выдавать статус. SDK лежит свободно http://www.machsupport.com/downloads.php В нем есть плугин для контроллера GALIL - вот его и перепахиваем. Интерфейс- любой. Хоть эзернет, хоть USB, или CAN. Кстати, предлагаю забит на AVR и делать на STM32 ARMах - там есть кристаллы где можно выбирать- CAN или USB, причем взаимоисключающе. Для любителя будет USB, для профи-CAN, причем плата и код- практически одинаковый. И ресурсов на интерполяцию хватит.
Rst7
Цитата
Дрыгоножество LPT порта под виндой-давно пройденный этап нафиг никому ненужный, неработающий на ноутбуках (даже на тех, где порт есть).


Причем тут таймстамп к ногодрыжеству?

Цитата
Поскольку Mach3 вываливает в Motion plugin 3 осевое управление


Шестиосевое, шести! Пока принято решение такое: один сервоконтроллер - одна ось.

Цитата
предлагаю забит на AVR


Успеем забить.

Цитата
И ресурсов на интерполяцию хватит.


Хватает и так.
_Pasha
Цитата(Rst7 @ Feb 20 2009, 19:20) *
Шестиосевое, шести!

Бр-р.Тогда я удаляю предыдущий пост.
khach
Цитата(Rst7 @ Feb 20 2009, 18:20) *
Причем тут таймстамп к ногодрыжеству?

Напоминает очень- зафлудить шину управления неизвестно чем, постоянно отрывать процессор на обработку пакетов по шине

Цитата
Шестиосевое, шести! Пока принято решение такое: один сервоконтроллер - одна ось.

Так может все-таки сделать два по 3? И между ними CAN если действительно надо 6 осей. Зато трехосевая интерполяция нормально получиться, если три оси на одном контроллере сидят.

По поводу интерполяции. Есть ли исходники цилиндрической интерполяции с контролем скорости перемещения (динамический разгон и остановка, переход к следующему кадру без торможения)?
Желательно еще и с цифровым ПИД контроллером по всем осям (для использования серв с энкодерами, а не шаговиков). Вот сомневаюсь я что-то что это удасться впихнуть в Атмегу, особенно если она еще и таймстампы будет постоянно расшифровывать.




Цитата(Rst7 @ Feb 19 2009, 16:21) *
1. Прямое (которое Jogging) - просто двигаться по нужной оси в направлении со скоростью такой-то
2. GCode movement - движение с координатами.


Я так понимаю, что GCode movement - это его основной режим. И нафлудить он не сможет больше чем раз в миллисекунду. Вот я и думаю - надо в контроллере имплементить понимание таких данных да и всех делов.

Отдельно там идут всякие IO - но тоже вроде небыстро...

GCode movement - основной, Jogging- настройка, калибровка, люфты определить, ноль найти итд. Флудит он с частотой 10 Гц, по несколько пакетов GMoves. Пакеты желательно принять про запас- тогда можно предсказывать траектрию движения инструмента и не разгоняться- тормозить на каждом кадре.
Огурцов
Осей нужно пять.
_Pasha
Отдаю на корректуру. Iotypes.h

Что надо, кроме раскритиковать: 

-определиться, какие данные сервак должен отдавать

-определиться все-таки, координаты в плавучке или в целых, в смысле, значение шага регистра положения хранится в серваке или в мастере
dpss
Цитата(khach @ Feb 20 2009, 23:27) *
По поводу интерполяции. Есть ли исходники цилиндрической интерполяции с контролем скорости перемещения (динамический разгон и остановка, переход к следующему кадру без торможения)?

Цилиндрическая - это круговая по двум осям + линейная по третьей. Переход без торможения - это так называемый предварительный просмотр кадров. Программа просматривает кадры, находит точки с нулевой скоростью по каждой оси (когда идет остановка или реверс) и с учетом разрешенной скорости и ускорения рассчитывает график скоростей от этих точек. Чем больше кадров может просмотреть вперед ЧПУ, тем оно круче. По английски СNC Look-ahead. Поищите в гугле с этой фразой.
khach
Цитата(dpss @ Feb 20 2009, 23:57) *
Цилиндрическая - это круговая по двум осям + линейная по третьей. Переход без торможения - это так называемый предварительный просмотр кадров. Программа просматривает кадры, находит точки с нулевой скоростью по каждой оси (когда идет остановка или реверс) и с учетом разрешенной скорости и ускорения рассчитывает график скоростей от этих точек. Чем больше кадров может просмотреть вперед ЧПУ, тем оно круче. По английски СNC Look-ahead. Поищите в гугле с этой фразой.

Это понятно. Я ищу реализации в виде исходного кода, которые можно посмотреть и понять и не бегать по граблям при написании своего кода. Пока нашел только LinixCNC http://www.linuxcnc.org/ Исходники доступны в репозитории, но там весьма навороченный низкоуролвневый HAL для работы с различными драйверами моторов и реалтайм линуксовые навороты непонятны. Чтобы его портировать под плату на АРМе без Линуха надо очень много выкидывать. Может кто еще подскажет опенсоурсные проекты контроллеров или вообще полезные ссылки по управлению моторами и интерпретации кода.
_Pasha
Исправил косяк: перенес поля CRC16 и 8 для облегчения низкоуровневых операций с буфером.
dpss
Цитата(khach @ Feb 21 2009, 01:20) *
Может кто еще подскажет опенсоурсные проекты контроллеров или вообще полезные ссылки по управлению моторами и интерпретации кода.

Небольшое обсуждение реализации Look ahead на форуме http://www.forum.gigamesh.ru/viewtopic.php?f=50&t=64
Rst7
Павел, я тут помыслил насчет текстового режима информационного обмена - как-то плохо эхо на RS485 ложится, не кажется?
Rst7
Кстати, об этом:
Код
/*  reduced to 32 bits */
    int32_t     DDA1;            // speed (dS/dt)
    int32_t     DDA2;            // acceleration (d2S/dt)
    int32_t        DDA3;            // accel.derivative (d3S/dt)


В Маче фигурирует int64 в виде fixed point 32.32
_Pasha
Цитата(khach @ Feb 20 2009, 23:27) *
 Есть ли исходники цилиндрической интерполяции

Джентльмены, скажите, плз, что мешает цилиндр.интерполяцию перевести в сплайны по осям?


Цитата(dpss @ Feb 21 2009, 00:57) *
Переход без торможения - это так называемый предварительный просмотр кадров.

Еще один проход интерполятора. Т.е. склейка кадров и, может быть, в рамках одного полинома. Если не выключать оптимизм, в 4 квартале 2009 можно получить вовсе не монстроидальное решение на том же STR750.

Цитата(Rst7 @ Feb 21 2009, 11:39) *
 как-то плохо эхо на RS485 ложится, не кажется?

Что конкретно беспокоит? Пока я в девайсе заложил всегда включенный прием (т.е. для коллизий) и паузу в 3.5 символа - типо-таймаут если недополучили или неправильный строка. Посимвольного эха не будет - это и ежу понятно.

Цитата(Rst7 @ Feb 21 2009, 14:30) *
Кстати, об этом:
Код
/*  reduced to 32 bits */
    int32_t     DDA1;            // speed (dS/dt)
    int32_t     DDA2;            // acceleration (d2S/dt)
    int32_t        DDA3;            // accel.derivative (d3S/dt)


В Маче фигурирует int64 в виде fixed point 32.32

Резать до 16.16 можно и по месту. Тогда для удобства сервостроителей вносим


Код
typedef struct

{
  int32_t integer;
 uint32_t fractional;
}fixpt64;


и меняем этот кусок на


Код
    fixpt64     DDA1;            // speed (dS/dt)
    fixpt64     DDA2;            // acceleration (d2S/dt)
    fixpt64     DDA3;            // accel.derivative (d3S/dt)


Нет возражений ?
ЗЫ движок форума реально достал...
Rst7
Цитата
Что конкретно беспокоит?


Да уже ничего. Мерещилось посимвольное эхо. Сам дурак smile.gif

Цитата
Еще один проход интерполятора. Т.е. склейка кадров и, может быть, в рамках одного полинома. Если не выключать оптимизм, в 4 квартале 2009 можно получить вовсе не монстроидальное решение на том же STR750.


Стоп-стоп. Какие еще монстроидальные решения? На сколько я понял в гинекологии того-же Mach'а, при выставленной где-то галочке он сам будет давать нам склеенные DDA. Склеенные - в смысле без торможений лишних.

Цитата
typedef struct
{
int32_t integer;
uint32_t fractional;
}fixpt64;


А смысл?
Код
typedef long long fixpt64;

да и всех делов.
_Pasha
Цитата(Rst7 @ Feb 21 2009, 15:31) *
Стоп-стоп. Какие еще монстроидальные решения? На сколько я понял в гинекологии того-же Mach'а, при выставленной где-то галочке он сам будет давать нам склеенные DDA. Склеенные - в смысле без торможений лишних.

Тогда это вопрос к ув. khach


Когда-то спросил у одного чела про линуксовые средства. Он мне ответил: "Какой нах линукс?! Мач!". Вопрос отпал smile.gif

И по этому же поводу: ковырять опенсорс надо, но только если хочется сделать что-то свое, т.е. уже где-то глубоко в мозжечке засело глубинное понимание того, что надо делать. А просто копипастить исходники - будет зопа. Все уйдут далеко вперед, а мы будем чужой код прилаживать.

Цитата
А смысл?
Код
typedef long long fixpt64;

да и всех делов.

Предполагается, что этот файл будет для всех один. Можно так, можно эдак. По мне - пусть с явным разделением. Тогда еще и в union обернуть.

Это единственный аргумент. Если в сад - напишите. Будет в сад.
Rst7
Цитата
Предполагается, что этот файл будет для всех один. Можно так, можно эдак. По мне - пусть с явным разделением. Тогда еще и в union обернуть.


Ну и что? Это ж для прошлого века, сейчас все компиляторы хавают long long без вопросов. А то потом вот такие уродцы генетические получаются:
Код
((WTCubic*)&Cubic.Message)->d[axis].dda1.i = (signed long)(dda1[axis] >> 32);
((WTCubic*)&Cubic.Message)->d[axis].dda1.f = (unsigned long)(dda1[axis] & 0xFFFFFFFFuLL);
((WTCubic*)&Cubic.Message)->d[axis].dda2.i = (signed long)(dda2[axis] >> 32);
((WTCubic*)&Cubic.Message)->d[axis].dda2.f = (unsigned long)(dda2[axis] & 0xFFFFFFFFuLL);
((WTCubic*)&Cubic.Message)->d[axis].dda3.i = (signed long)(dda3[axis] >> 32);
((WTCubic*)&Cubic.Message)->d[axis].dda3.f = (unsigned long)(dda3[axis] & 0xFFFFFFFFuLL);


Причем, заметьте, dda1[] объявлен как массив 64хбитных значений. А в WTCubic - криворучье smile.gif
khach
Цитата(_Pasha @ Feb 21 2009, 14:51) *
Тогда это вопрос к ув. khach
Когда-то спросил у одного чела про линуксовые средства. Он мне ответил: "Какой нах линукс?! Мач!". Вопрос отпал smile.gif

Линух в топку (хотя и было такое желание, когда контроллер с Эзернетом рассматривался, но слишком монстрически получалось). LinuxCNC только источник исходников, в котором есть много полезного - например интерполяция (в том числе и по скорости), компенсация люфтов на уровне управления моторами итд. Если бы были исходники Мачевского ЛПТшного дрыгоножества- то конечно бы использовал бы их, не надо было бы возиться с "особенностями реализации".
Сплайн опасен в местах резкого изменения траектории- может нарисовать петлю около точки перелома и соответственно воткнуть фрезу. По скорости - при применении серв не всега получается ехать со скоростью, которую Мач прописывает в пакетах, на тяжелых станках и слабых сервоприводах разгон-остановка затягиваются, надо их в драйвер переносить. При использовании серв бывает приятно вести фрезу с постоянной нагрузкой на шпиндель- обратная связь от датчика тока/мощности на моторе шпинделя. Хотелось бы реализовать.
Да кстати вопрос по интерполяции. Мач может выдать ребования на сферическую инерполяцию или она всегда будет цилиндрической (одна из точек центра интерполяции и начало и конец траектории всегда лежат в одной плоскости по одной из осей) или возможно требование сферической интерполяции?
Вот по этой цитате из мануала следует что Мач может требовать от драйвера циркулярной интерполяции по двум осям и синхронизированной с ней линейной подачи по любой другой оси. Я правильно понял?
Код
10.1.7 Arc Motion
Any pair of the linear axes (XY, YZ, XZ) can be controlled to move in a circular arc in the
plane of that pair of axes. While this is occurring, the third linear axis and the rotational
axes can be controlled to move simultaneously at effectively a constant rate. As in coordinated
linear motion, the motions can be co-ordinated so that acceleration and
deceleration do not affect the path.
If the rotational axes do not move, but the third linear axis does move, the trajectory of the
controlled point is a helix
dpss
Добавлю к предидущему посту. Специализированное оборудование часто требует дополнительных действий или движений при отработки программы. Это сложно а иногда невозможно учесть при генерации NC кода в CAMе. Например проволочный эррозионный станок должен поддерживать зазор между проволокой и деталью , а в случае замыкания отводить проволоку назад по контуру. Машины лазерной, термической или гидроабразивной резки
должны делать зарез вне контура , стеклорезной машине нужно ориентировать рабочий ролик вдоль движения. Без исходников или специализированной библиотеки это не сделать.
Rst7
Цитата
Вот по этой цитате из мануала следует что Мач может требовать от драйвера циркулярной интерполяции по двум осям и синхронизированной с ней линейной подачи по любой другой оси. Я правильно понял?


Судя по исходникам в мачевском SDK все драйверы пользуют исключительно приготовленные самим Мачем коэффициенты для кубического сплайна, которым определяется текущая скорость привода.

Я сейчас (не конкретно сей секунд, а за пару-тройку дней) попробую написать эмулятор сервопривода для Мача, будем смотреть более конкретно, как он себя ведет и чем кормит wink.gif
_Pasha
Цитата(khach @ Feb 21 2009, 16:52) *
Сплайн опасен ...может нарисовать петлю

Если рассуждать логически, то это не косяки сплайна, а недостаточное кол-во элементарных перемещений, т.е. попытка "объять необъятное" одним интерполяционным интервалом. Можно даже ввести дополнительное условие на проверку "опасности" интервала - по знаку второй производной в начале и в конце планируемого движения.
Цитата
По скорости ... надо их в драйвер переносить.

Спасибо! Технологические настройки будут в серваках обязательно, до них можно будет добраться, и копия, очевидно, будет в мастере - без нее никак в некоторых случаях. 
-Пересчет шага/скорости в реальные координаты в плавающем формате
-Ограничения на скорость/ускорение/произв.ускорения.
-Может быть, решится через токовую защиту в виде нормированных параметров. Пока думаю.
Цитата
вести фрезу с постоянной нагрузкой на шпиндель

Штатными средствами - фигушки smile.gif Это будет ужЕ самодеятельной частью протокола, в котором предусмотрены регистры S(координата) V(скорость) M(момент) T(время) 
Если нам удастся утрясти быстрый протокол (с приращениями).

Цитата
Мач может выдать ребования на сферическую инерполяцию или она всегда будет цилиндрической
 
В т.ч на сферическую
Цитата
Я правильно понял?

ДА.

Цитата(dpss @ Feb 21 2009, 19:38) *
Например...  в случае замыкания отводить проволоку назад по контуру.
Это есть внешняя по отношению к основному контуру регулирования обратная связь. Пока не рассматриваем.

Цитата
зарез вне контура... ориентировать рабочий ролик вдоль движения.

В общем случае, мало кто согласится на что-то кроме ручного управления процессом, ввиду его недостаточной формализуемости.
dpss
Цитата(slog @ Feb 19 2009, 20:14) *
Как бы раздобыть EtherCAT IP core for Altera? Много ли денег за него хотят? Может где-то в и-нете оно уже лежит?

Прайс лист на продукцию Бекхофа годовалой давности. Там есть цены на ET1100 , ET1200. При количестве больше 200 цена вполне терпимая.
Дилеры их не продают. Нужно обращаться в сам Бекхоф. (можно в Московское представительство) www.promotechsrl.it/gestione/pdf/fieldbus_0108.csv
dpss
Цитата(dpss @ Feb 22 2009, 11:51) *
Чтобы его портировать под плату на АРМе без Линуха надо очень много выкидывать.

На форуме cnczone.ru пльзователь serq_io говорит что уже вырезал из EMC ядро (интерпретатор, планировщик, интерполятор) и портировал его на ARM7.
_Pasha
Цитата(dpss @ Feb 24 2009, 11:17) *
говорит что уже вырезал из EMC ядро



Стремный софт:

Цитата
EMC2 is precompiled with Ubuntu LTS (long term support) versions for ease of installation and longevity. 
Note: Do Not upgrade Ubuntu from the installed version as it will prevent EMC from working
Огурцов
Цитата(dpss @ Feb 24 2009, 08:17) *
На форуме cnczone.ru пльзователь serq_io говорит что уже вырезал из EMC ядро (интерпретатор, планировщик, интерполятор) и портировал его на ARM7.

Странный форум - не пускает. Регаться надо ? Порт там выложен ?


Кстати, вспомнил. Про стандарты на систему команд - у микрософта оно есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.