streamer_halstreamer

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

streamer_halstreamer

Сообщение nkp »

есть задача - передать в компонент rt данные , и записать их в массив...

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

if (empty == 0) {       //streamer.0.empty 
    if (tt % 2 != 0) { 
        clock = 0;     //streamer.0.clock (streamer.0.clock-mode 2) clock on rising edge
        arr_line[i] = insreamer;  //streamer.0.pin.0
        i++;
    } else {
        clock = 1;
    }

    tt++;
}else {
    i=0;
    tt=0; 
}

inspection0 = arr_line[0];
inspection1 = arr_line[1];
inspection2 = arr_line[2];
inspection3 = arr_line[3];
inspection4 = i;
inspection5 = tt;

}
streamer.0.empty - пин ,показывающий,что очередь пуста(всё считали)
и тогда нам как бы нужно обнулить итераторы (i и tt)
------------
так вот так - не получается((
такое впечатление ,что пин streamer.0.empty "не постоянен" и выполнение проваливается на else,
что естественно приводит к преждевременному обнулению переменных(и получается каша ;) )
если убрать "автоматическое" обнуление - то все работает как надо...
---------------
может есть какой "правильный" способ разложить очередь в массив??
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5182
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: streamer_halstreamer

Сообщение Serg »

При отладки компонентов нужно понимать, что ты не способен отследить (средствами диагностики) срабатывание компонента в каждом сервоцикле. :)

Глубоко в твой код пока не вникал но похоже надо реагировать не просто на значение пина, а на его изменение (фронт или спад)...
Типа:
if (empty == 0 && empty != old_empty)

P.S. в тексте компонента мало информации, опиши логику работы с ним (сигналы на пинах).
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):а на его изменение
всё может быть...
логика конечно говорит по другому:
или очередь ВСЯ считана,или НЕТ))
и пин(как по мне) об этом и должен сигнализировать...
Последний раз редактировалось nkp 12 янв 2018, 15:09, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):P.S. в тексте компонента мало информации, опиши логику работы с ним (сигналы на пинах).

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

loadrt streamer depth=100 cfg=s

setp streamer.0.enable 1
setp streamer.0.clock-mode 2

net kempty kl.0.empty     streamer.0.empty 
net kclock kl.0.clock     streamer.0.clock

net in1 streamer.0.pin.0 kl.0.insreamer 
для примера читает такой файл:

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

58
44
5
22
Последний раз редактировалось nkp 12 янв 2018, 15:06, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

84.jpg (2085 просмотров) <a class='original' href='./download/file.php?id=129068&sid=e00f9009df61159fc7bf30e7c0cebc20&mode=view' target=_blank>Загрузить оригинал (145.36 КБ)</a>
85.jpg (2085 просмотров) <a class='original' href='./download/file.php?id=129069&sid=e00f9009df61159fc7bf30e7c0cebc20&mode=view' target=_blank>Загрузить оригинал (91.43 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5182
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: streamer_halstreamer

Сообщение Serg »

Тажёлый случай... Хотя б направление пинов укажи - непонятно-же ничего! :)
Да и остальной текст не помешает...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):Тажёлый случай... Хотя б направление пинов укажи - непонятно-же ничего
я правильно стрелочки расставлять не умею))
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

могу на словах пояснить стрелочки:
из скрипта питона пишем в файл числа (s32) ...
нам они нужны "в компоненте" kl.comp...
нужно считать их в какой то массив данных,чтоб просто можно было ими оперировать...
для этого в kl.comp организуем сигнал clock (для streamer.0.clock)
streamer по пер.фронту этого сигнала считывает из очереди одно значение ...
записываем его в наш массив arr_line ...
сбрасываем clock в ноль...
------------
так повторяем ,пока есть что считывать (сигнал из streamer.0.empty )
когда все считали - обнуляем итераторы:
else {
i=0;
tt=0;
}
Последний раз редактировалось nkp 12 янв 2018, 15:34, всего редактировалось 1 раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5182
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: streamer_halstreamer

Сообщение Serg »

Сигнал empty откуда берётся?
streamer.0.clock - это IO?

покажи "show pin streamer.0"?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):игнал empty откуда берётся?

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

streamer.N.empty bit output

TRUE when the FIFO N is empty, FALSE when valid data is available.
UAVpilot писал(а):streamer.0.clock - это IO?

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

streamer.N.clock bit input

Clock for data as specified by the clock-mode pin
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):покажи "show pin streamer.0"?
в какой момент? в любой?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

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

Component Pins:
Owner   Type  Dir         Value  Name
    17  bit   IN          FALSE  streamer.0.clock <== kclock
    17  s32   IN              2  streamer.0.clock-mode
    17  s32   OUT             0  streamer.0.curr-depth ==> cdepth
    17  bit   OUT          TRUE  streamer.0.empty ==> kempty
    17  bit   IN           TRUE  streamer.0.enable
    17  s32   OUT             0  streamer.0.pin.0 ==> in1
    17  s32   OUT           490  streamer.0.time
    17  s32   I/O             0  streamer.0.underruns
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5182
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: streamer_halstreamer

Сообщение Serg »

nkp писал(а):17 bit IN FALSE streamer.0.clock <== kclock
А какого тогда ты меняешь его значение в самом компоненте?..
nkp писал(а):17 bit OUT TRUE streamer.0.empty ==> kempty
А вот этот сигнал внутри компонента ты должен менять, а не проверять...

Можешь целиком код показать?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):Можешь целиком код показать?
компонента?
да это (пока) и есть весь код:

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

/* 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   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;

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

static int arr_line[100];

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;
    tt=0; 
}
inspection0 = arr_line[0];
inspection1 = arr_line[1];
inspection2 = arr_line[2];
inspection3 = arr_line[3];
}
пока у нас идет диалог,я его пять раз уже менял ))
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):А какого тогда ты меняешь его значение в самом компоненте?..
так я его в своем же компоненте меняю)
как раз для streamer.0.clock
но может действительно я что то чебучу) (так это ж запросто))
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5182
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: streamer_halstreamer

Сообщение Serg »

Похоже у тебя проблемы с тактированием - у тебя clock меняется не зависимо от приходящих данных...
nkp писал(а):как раз для streamer.0.clock
Так... А streamer и kl - это два разных компонента?..
nkp писал(а):но может действительно я что то чебучу) (так это ж запросто))
Это для тебя запросто, а у других-то в голове твоих мыслей нет... :)

Попробуй чтоль словами описать процедуру взаимодействия с этим компонентом. Какие сигналы на него поступают, в какой момент, как он на них должен реагировать?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

UAVpilot писал(а):Попробуй чтоль словами описать процедуру взаимодействия с этим компонентом. Какие сигналы на него поступают, в какой момент, как он на них должен реагировать?.
так я пытался в #8
=================
halstreamer читает файл текстовый(наши числа) и пишет его в очередь(FIFO)
считывает из FIFO их (данные) уже streamer
(короче - они братья,и работают в паре)
streamer может считывать в 4-х режимах:
сразу все(мне не подходит)
и по сигналу clock(внешнему)
вот я и (попытался) организовал синхронизацию из kl.comp (это уже мой компонент)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: streamer_halstreamer

Сообщение nkp »

а то ,что компонент (streamer) написан аж в 2006-м году не может отражаться
на его работе - ведь тогда лектроны в компьютерах бегали еще медленно? :)
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: streamer_halstreamer

Сообщение Алексс »

Все как-бы должно работать, но нужно убрать обнуление tt, иначе в streamer сбивается синхронизация
и тип tt заменить на unsigned.
PS: и тактировать можно(нужно ?) nonstop
Последний раз редактировалось Алексс 12 янв 2018, 17:09, всего редактировалось 1 раз.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Ответить

Вернуться в «LinuxCNC»