Страница 16 из 25

Re: Оживление 16А20Ф3!

Добавлено: 13 авг 2016, 12:30
Leo_1943
Распаковать не дает, пишет "Тип архива не поддерживается".

Re: Оживление 16А20Ф3!

Добавлено: 13 авг 2016, 12:45
nkp
эти архиваторы должны быть в системе:
lincurve.c.tar
(10 КБ) 282 скачивания
lincurve.c.gz
(2.29 КБ) 939 скачиваний
зы

чтоб распаковывать rar архивы в линукс:
sudo apt-get install unrar
или
sudo apt-get install unrar-free
pps
на крайний ;) случай - содержимое файла:

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

/* Autogenerated by ../bin/halcompile on Sat Jun 18 10:37:26 2016 -- do not edit */
#include "rtapi.h"
#ifdef RTAPI
#include "rtapi_app.h"
#endif
#include "rtapi_string.h"
#include "rtapi_errno.h"
#include "hal.h"
#include "rtapi_math64.h"

static int comp_id;

#ifdef MODULE_INFO
MODULE_INFO(linuxcnc, "component:lincurve:one-dimensional lookup table");
MODULE_INFO(linuxcnc, "descr:This component can be used to map any floating-point input to a\nfloating-point output. Typical uses would include linearisation of\nthermocouples, defining PID gains that vary with external factors or to\nsubstitute for any mathematical function where absolute accuracy is not\nrequired.\n\nThe component can be thought of as a 2-dimensional graph of points in (x,y)\nspace joined by straight lines. The input value is located on the x axis,\nfollowed up until it touches the line, and the output of the component is set\nto the corresponding y-value.\n\nThe (x,y) points are defined by the x-val-NN and y-val-NN parameters which need\nto be set in the HAL file using \"setp\" commands.\n\nThe maximum number if (x,y) points supported is 16.\n\nFor input values less than the x-val-00 breakpoint the y-val-00 is returned. \nFor x greater than the largest x-val-NN the yval corresponding to x-max is\nreturned (ie, no extrapolation is performed.)\n\nSample usage: loadrt lincurve count=3 personality=4,4,4 \nfor a set of three 4-element graphs.\n ");
MODULE_INFO(linuxcnc, "param:x-val-##:float:(16, 'personality'):rw:axis breakpoints:None:None");
MODULE_INFO(linuxcnc, "param:y-val-##:float:(16, 'personality'):rw:output values to be interpolated:None:None");
MODULE_INFO(linuxcnc, "pin:in_:float:0:in:The input value:None:None");
MODULE_INFO(linuxcnc, "pin:out_:float:0:out:The output value:None:None");
MODULE_INFO(linuxcnc, "pin:out-io:float:0:io:The output value, compatible with PID gains:None:None");
MODULE_INFO(linuxcnc, "author:Andy Pugh");
MODULE_INFO(linuxcnc, "license:GPL");
MODULE_INFO(linuxcnc, "funct:_:1:");
MODULE_LICENSE("GPL");
#endif // MODULE_INFO


struct __comp_state {
    struct __comp_state *_next;
    int _personality;
    hal_float_t *in_;
    hal_float_t *out_;
    hal_float_t *out_io;
    hal_float_t x_val[16];
    hal_float_t y_val[16];
    unsigned i;

};
struct __comp_state *__comp_first_inst=0, *__comp_last_inst=0;

static void _(struct __comp_state *__comp_inst, long period);
static int __comp_get_data_size(void);
static int extra_setup(struct __comp_state *__comp_inst, char *prefix, long extra_arg);
#undef TRUE
#define TRUE (1)
#undef FALSE
#define FALSE (0)
#undef true
#define true (1)
#undef false
#define false (0)

static int export(char *prefix, long extra_arg, long personality) {
    char buf[HAL_NAME_LEN + 1];
    int r = 0;
    int j = 0;
    int sz = sizeof(struct __comp_state) + __comp_get_data_size();
    struct __comp_state *inst = hal_malloc(sz);
    memset(inst, 0, sz);
    inst->_personality = personality;
    r = extra_setup(inst, prefix, extra_arg);
    if(r != 0) return r;
    personality = inst->_personality;
    r = hal_pin_float_newf(HAL_IN, &(inst->in_), comp_id,
        "%s.in", prefix);
    if(r != 0) return r;
    r = hal_pin_float_newf(HAL_OUT, &(inst->out_), comp_id,
        "%s.out", prefix);
    if(r != 0) return r;
    r = hal_pin_float_newf(HAL_IO, &(inst->out_io), comp_id,
        "%s.out-io", prefix);
    if(r != 0) return r;
    for(j=0; j < personality; j++) {
        r = hal_param_float_newf(HAL_RW, &(inst->x_val[j]), comp_id,
            "%s.x-val-%02d", prefix, j);
        if(r != 0) return r;
    }
    for(j=0; j < personality; j++) {
        r = hal_param_float_newf(HAL_RW, &(inst->y_val[j]), comp_id,
            "%s.y-val-%02d", prefix, j);
        if(r != 0) return r;
    }
    inst->i = 0.0;
    rtapi_snprintf(buf, sizeof(buf), "%s", prefix);
    r = hal_export_funct(buf, (void(*)(void *inst, long))_, inst, 1, 0, comp_id);
    if(r != 0) return r;
    if(__comp_last_inst) __comp_last_inst->_next = inst;
    __comp_last_inst = inst;
    if(!__comp_first_inst) __comp_first_inst = inst;
    return 0;
}
static int default_count=1, count=0;
char *names[16] = {0,};
RTAPI_MP_INT(count, "number of lincurve");
RTAPI_MP_ARRAY_STRING(names, 16, "names of lincurve");
static int personality[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
RTAPI_MP_ARRAY_INT(personality, 16, "personality of each lincurve");
int rtapi_app_main(void) {
    int r = 0;
    int i;
    comp_id = hal_init("lincurve");
    if(comp_id < 0) return comp_id;
    if(count && names[0]) {
        rtapi_print_msg(RTAPI_MSG_ERR,"count= and names= are mutually exclusive\n");
        return -EINVAL;
    }
    if(!count && !names[0]) count = default_count;
    if(count) {
        for(i=0; i<count; i++) {
            char buf[HAL_NAME_LEN + 1];
            rtapi_snprintf(buf, sizeof(buf), "lincurve.%d", i);
            r = export(buf, i, personality[i%16]);
            if(r != 0) break;
       }
    } else {
        int max_names = sizeof(names)/sizeof(names[0]);
        for(i=0; (i < max_names) && names[i]; i++) {
            if (strlen(names[i]) < 1) {
                rtapi_print_msg(RTAPI_MSG_ERR, "names[%d] is invalid (empty string)\n", i);
                r = -EINVAL;
                break;
            }
            r = export(names[i], i, personality[i%16]);
            if(r != 0) break;
       }
    }
    if(r) {
        hal_exit(comp_id);
    } else {
        hal_ready(comp_id);
    }
    return r;
}

void rtapi_app_exit(void) {
    hal_exit(comp_id);
}

#undef FUNCTION
#define FUNCTION(name) static void name(struct __comp_state *__comp_inst, long period)
#undef EXTRA_SETUP
#define EXTRA_SETUP() static int extra_setup(struct __comp_state *__comp_inst, char *prefix, long extra_arg)
#undef EXTRA_CLEANUP
#define EXTRA_CLEANUP() static void extra_cleanup(void)
#undef fperiod
#define fperiod (period * 1e-9)
#undef in_
#define in_ (0+*__comp_inst->in_)
#undef out_
#define out_ (*__comp_inst->out_)
#undef out_io
#define out_io (*__comp_inst->out_io)
#undef x_val
#define x_val(i) (__comp_inst->x_val[i])
#undef y_val
#define y_val(i) (__comp_inst->y_val[i])
#undef i
#define i (__comp_inst->i)
#undef personality
#define personality (__comp_inst->_personality)


#line 43 "hal/components/lincurve.comp"

FUNCTION(_){
    double f, x;
    x = in_;
    if (x >= x_val(personality-1)) {
        out_ = y_val(personality-1);
        out_io = out_;
        return;
    }
    if (x <= x_val(0)) {
        out_ = y_val(0);
        out_io = out_;
        return;
    }
    while (x > x_val(i+1)) { i++;}
    while (x < (x_val(i))) { i--;}
    
    f = (x - x_val(i))/(x_val(i+1)-x_val(i));
    out_ = y_val(i) + f * (y_val(i+1) - y_val(i));
    out_io = out_;
}

EXTRA_SETUP(){
	if (personality > 16) personality = 16;
	if (personality < 2) personality = 2;
	return 0;
}

static int __comp_get_data_size(void) { return 0; }

Re: Оживление 16А20Ф3!

Добавлено: 13 авг 2016, 12:51
Leo_1943
Распаковал и...

sss@sss-desktop:~$ sudo comp --install lincurve.c
[sudo] password for sss:
make KBUILD_EXTRA_SYMBOLS=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-2.6.32-122-rtai SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-122-rtai'
CC [M] /tmp/tmpU8j5_4/lincurve.o
/tmp/tmpU8j5_4/lincurve.c:9:26: error: rtapi_math64.h: Нет такого файла или каталога
make[2]: *** [/tmp/tmpU8j5_4/lincurve.o] Ошибка 1
make[1]: *** [_module_/tmp/tmpU8j5_4] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-122-rtai'
make: *** [modules] Ошибка 2
sss@sss-desktop:~$

Re: Оживление 16А20Ф3!

Добавлено: 13 авг 2016, 13:05
nkp
Leo_1943 писал(а):c:9:26: error: rtapi_math64.h: Нет такого файла или каталога
тут уж звиняйте :)
в 2.5 наверно еще нет файла rtapi_math64.h
rtapi_math64.h.tar
(10 КБ) 246 скачиваний
либо обновлять емс, либо попробовать подсунуть этот файл в папку
/usr/include/linuxcnc/
(под рутом)
распаковать архив rtapi_math64.h.tar
в терминале:
sudo nautilus
в открывшемся окне открыть папку /usr/include/linuxcnc/
и положить туда файл rtapi_math64.h
-------------
мало шансов ,что заработает , но все же...

Re: Оживление 16А20Ф3!

Добавлено: 13 авг 2016, 13:19
Leo_1943
После всех рекомендаций...
не заработало

sss@sss-desktop:~$ sudo comp --install lincurve.c
[sudo] password for sss:
make KBUILD_EXTRA_SYMBOLS=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-2.6.32-122-rtai SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-122-rtai'
CC [M] /tmp/tmpOoDPPW/lincurve.o
In file included from /tmp/tmpOoDPPW/lincurve.c:9:
/usr/include/linuxcnc/rtapi_math64.h:21:26: error: rtapi_stdint.h: Нет такого файла или каталога
make[2]: *** [/tmp/tmpOoDPPW/lincurve.o] Ошибка 1
make[1]: *** [_module_/tmp/tmpOoDPPW] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-122-rtai'
make: *** [modules] Ошибка 2
sss@sss-desktop:~$


Буду переставлять на более высокую версию

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 19:48
Leo_1943
Всем доброго дня!
Была такая тема,не нашёл.

Суть: умер Тахо на двигателе, но помню- можно выход месы аналоговый завести вместо Тахо.

Напомнить пожалуйста где искать, или новую тему заряжать?

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 20:10
nkp

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 20:13
Duhas
Какой движек? у меня лежит пара болгар на опыты, тахо мне не нужны с них... правда в какой они состоянии тоже вопрос.

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 21:11
N1X
Регулирование ухудшится... А чистка коллектора родного Тахо не помогла? Или сопротивление на ламелях скачет?

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 21:21
Leo_1943
N1X писал(а):Регулирование ухудшится... А чистка коллектора родного Тахо не помогла? Или сопротивление на ламелях скачет?
Умер вашпе, сопротивление бесконечность.

Re: Оживление 16А20Ф3!

Добавлено: 05 окт 2016, 21:32
N1X
Просто спрошу, чтобы исключить недоразумение: сопротивление между ламелями коллектора, или на выходе?

Re: Оживление 16А20Ф3!

Добавлено: 10 окт 2016, 09:08
Leo_1943
Между ламелями. Уже запустил через Месу, все замечательно. Можно и без Тахо работать.

Re: Оживление 16А20Ф3!

Добавлено: 10 окт 2016, 09:15
N1X
Никаких проблем не вылезло? По идее же задержка в цепи ОС увеличилась...

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 04:53
Leo_1943
На доли секунды, я не заметил.

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 06:38
N1X
Главное, что привод не заметил )
Полезный опыт!

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 11:36
agt
Leo_1943 писал(а):На доли секунды, я не заметил.
Извините что вмешиваюсь.Хотел бы пообщаться об модернизации 16А20. Купили осевые привода GD35 (по вашей рекомендации).Уже две недели пытаюсь их как-то привязать на Размеровские двигатели. Первая проблема на приводе нет понятия сигнала ON (разблокировка,работа),можно только с пуском вперёд или назад.Во вторых нелинейная характеристика Uвх (+-10В) и вых частоты.На Uзад. меньше 0,2 вольта почти не реагирует ,потом обороты очень резко возрастают .Хотелось бы как нибудь проконсультироваться .Судя по фото вы как-то сумели привязать GD100, а они ещё тупее ,судя по описанию.

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 16:01
Leo_1943
Есть сигнал ON, даете к примеру вперёд, остальное сделает полярность задания. Можно сделать сигнал Готовность.Почитайте внимательно параметры, я неделю назад два таких же взамен Размера поставил. Ровно три дня от начала до детали.

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 21:06
agt
Если даю вперед ,то он и едет вперед, если назад -то назад .Измерительной системе это не нравиться ,выбивает по рассогласованию.Но основная проблема ни в этом.Главное он не едет на маленьких подачах .Режим Р00.00-3 (векторное с датчиком) и ещё на входе AI3 всегда торчит 0,1В если смотреть Р17.21.Пробовал смещать ЦАПом ЧПУ и параметром Р05.43 все равно получается не симметричное задание .Подозреваю что у меня просто неисправные привода ( 4 КВт ) .Кстати третий привод для шпинделя (11 КВт ) ведет себя нормально.Буду признателен если поможете подбором параметров.

Re: Оживление 16А20Ф3!

Добавлено: 11 окт 2016, 21:45
Leo_1943
Какое ЧПУ? У меня до включения слежения показания 0.4, 0.7 по Х и Z соответственно. После включения слежения, и приводов все около нуля- без движения. ЧПУ не выбивает на ходах до 10 м/мин. С параметрами дистанционно тяжело помочь. Во-первых как подключен энкодер? Количество меток? И т.п.?

Re: Оживление 16А20Ф3!

Добавлено: 12 окт 2016, 06:07
agt
ЧПУ -FMS 3000. Энкодеры взади двигателя ЛИР 0,5 ПИ 2500 с одной меткой.В принципе я добился чтобы при 0 рассогл. привод стоял. Но даю маховиком задание по 0,01-привод начинает импульсно дергаться где-то от 0,07 .Потом от 0,1 вроде нормально двигается , а больше 0,25 он уже едет с подачей примерно 400 мм/мин.Привязать измерительную при таких характеристиках практически невозможно.Пробовал параметрами привода (Ki,Kd)пусковая частота -0,частота останова 0.Различные варианты пуска и останова двигателя - становиться только хуже.