streamer_halstreamer

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

Re: streamer_halstreamer

Сообщение nkp » 12 янв 2018, 17:09

сейчас попробую...
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Re: streamer_halstreamer

Сообщение nkp » 12 янв 2018, 17:15

Алексс писал(а):Все как-бы должно работать, но нужно убрать обнуление tt, иначе в streamer сбивается синхронизация
и тип tt заменить на unsigned.

маг ?? :shock:
:good:
четыре раза перезалил очередь - работает как надо!
надеюсь и 444 раза будет так же))
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Re: streamer_halstreamer

Сообщение nkp » 12 янв 2018, 17:26

пока дух ритчи тут витает:
а можно ли размерность массива задать "снаружи" - пином??
вот как бы с наскоку не дает...
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Re: streamer_halstreamer

Сообщение Алексс » 12 янв 2018, 17:40

перепиши код на с (примеры в hal/components) и можно крутить вертеть как хочешь.
хотя вот примерный сценарий для попробовать:
Код: Выделить всёРазвернуть
/* sudo halcompile --install kl.comp */
component kl;

pin out  s32  inspection0;
pin out  s32  inspection1;
pin out  s32  inspection2;
pin out  s32  inspection3;
                         
pin in  s32 insreamer ;    //streamer.0.pin.0
pin in  u32 arr_len;   

pin in   bit empty ;        //streamer.0.empty
pin out  bit clock ;       //streamer.0.clock

pin in  s32 pin_len ;        // arr len

variable int  i = 0;
variable int  tt = 0;

int *arr_line = 0;
unsigned arr_len_old = 0;
// статик не нужно юзать - в случае двух и более компонентов будет засада

function _;
license "GPL";
;;
FUNCTION(_) {

if(!arr_line) {
  arr_line = (int *)hal_malloc(arr_len * sizeof(streamer_t));
}

if (empty == 0) {       //streamer.0.empty
    if (tt % 2 != 0) {
        clock = 0;                //streamer.0.clock (streamer.0.clock-mode 2)
        arr_line[i] = insreamer;  //streamer.0.pin.0
        i++;
    } else {
        clock = 1;
    }
    tt++;
} else {
    i=0;
if(arr_line != arr_line_old) {
// realloc
// todo release pointer
  arr_line = (int *)hal_malloc(arr_len * sizeof(streamer_t));
  all_line_old = arr_line;
}

}
inspection0 = arr_line[0];
inspection1 = arr_line[1];
inspection2 = arr_line[2];
inspection3 = arr_line[3];
}


нетестировано :)
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
 
Сообщения: 2209
Зарегистрирован: 20 июл 2012, 15:49
Откуда: Прага
Репутация: 264
Заслуга: IQ32
Медальки:
Настоящее имя: Алексей

Re: streamer_halstreamer

Сообщение nkp » 12 янв 2018, 17:51

это не "расширение" размера массива при каждой (новой) надобности?
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Re: streamer_halstreamer

Сообщение UAVpilot » 12 янв 2018, 18:13

Алексс писал(а):иначе в streamer сбивается синхронизация

синхронизацию надо вообще делать независимую от сервоцикла, а то могут возникать "чудеса на ровном месте", например в зависимости от порядка addf.
Т.е. "щелкать" clock'ом надо тогда, когда готов получить очередную порцию данных.
Например при передаче надо сначала выставить на выход данные и только потом взвести clock. Перед сменой данных надо сначала "опустить" clock...
При приёме надо сначала дождаться взведеня clock и только потом читать данные.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 15670
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3834
Медальки:
Настоящее имя: Сергей

Re: streamer_halstreamer

Сообщение nkp » 12 янв 2018, 21:25

UAVpilot писал(а):синхронизацию надо вообще делать независимую от сервоцикла, а то могут возникать "чудеса на ровном месте", например в зависимости от порядка addf.


в данном случае - работает стандартный компонент емс...
он по любому "привязан к сервоциклу,ибо его все переменные(пины) не могут обновиться вне сервоцикла...
------
а синхронизация...
так она тут условная - получаем новую порцию по срабатыванию пина(пин clock)
опять же - этот пин обновляется только в сервоцикле...
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Re: streamer_halstreamer

Сообщение Алексс » 12 янв 2018, 21:42

nkp писал(а):это не "расширение" размера массива при каждой (новой) надобности?

По сути да. Если это не нужно, то необходимо обрабатывать входящие параметры в компоненте.
К стати, после компиляции компоненты в упрощенном стиле (comp) можно найти нормальный сишный исходник. Я както это делал, но не помню если halcomp это позволяет прямо или пришлось пошарить в tmp директориях.
Может быть полезно.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
 
Сообщения: 2209
Зарегистрирован: 20 июл 2012, 15:49
Откуда: Прага
Репутация: 264
Заслуга: IQ32
Медальки:
Настоящее имя: Алексей

Re: streamer_halstreamer

Сообщение Алексс » 12 янв 2018, 21:56

UAVpilot писал(а):
Алексс писал(а):в зависимости от порядка addf.

Вполне возможно что так оно и есть.
Думаю идеально бы было иметь общий сигнал когда передатчик выставляет его в 1 - есть данные а приемник сбрасывает в 0 - прочитано.

Тогда бы не было зависимости на порядке вызова компонент. Но это только в случае 1-1.
Имхо
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
 
Сообщения: 2209
Зарегистрирован: 20 июл 2012, 15:49
Откуда: Прага
Репутация: 264
Заслуга: IQ32
Медальки:
Настоящее имя: Алексей

Re: streamer_halstreamer

Сообщение UAVpilot » 12 янв 2018, 23:04

nkp писал(а):в данном случае - работает стандартный компонент емс...

Я про твой код: у тебя clock меняется с 0 на 1 в каждом чётном сервоцикле, и с 1 на 0 в каждом нечётном - зависимости от готовности данных никакой.

nkp писал(а):а синхронизация...
так она тут условная - получаем новую порцию по срабатыванию пина(пин clock)
опять же - этот пин обновляется только в сервоцикле...

Например когда сигналы передаются в обе стороны, clock от А к В, а данные от В к А (addf в алфавитном порядке), то изменения clock дойдут от А к В в пределах одного и того-же сервоцикла, а вот данные от В А увидит только в следующем... В твоём случае А уже изменит состояние clock на противоположное.

Алексс писал(а):Думаю идеально бы было иметь общий сигнал когда передатчик выставляет его в 1 - есть данные а приемник сбрасывает в 0 - прочитано.

Или делать в компоненте две функции read и write, read помещать в начало сервоцикла, а write в конец. Для примера см. hostmot2.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 15670
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3834
Медальки:
Настоящее имя: Сергей

Re: streamer_halstreamer

Сообщение nkp » 13 янв 2018, 00:29

да ,если поменять очередность вызова функций,то работа хромает:
"пропускает" первую итерацию,потом "догоняет"...
--------
но это не исключительный случай в емс,
где функции требуется располагать в определенном порядке...
nkp
Мастер
 
Сообщения: 7250
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1184
Медальки:

Пред.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: aleks0703, alex1816, alex3310, Bender, Bing [Bot], evgeni70, Евгений Токарь, frezeryga, Google [Bot], Google Adsense [Bot], iMaks-RS, jb_arch, Kotanaway, Lafayette, machete, Majestic-12 [Bot], megagad, MGG, MX_Master, nik1, Q-starь, Redmn, ReverS, Sanya34, sazn86, solo, UAVpilot, Uda4LIVEc, Udjin, Yandex [bot], zman88, копол, Фукс, Дмитрий м

Поделиться

Reputation System ©'