Страница 1 из 1

Homing по индексу. Сброс сигнала index-enable [РЕШЕНО]

Добавлено: 03 дек 2023, 10:04
kharpost
Постановка задачи такая: есть линейки с индексом, есть плата LinuxCNC MB-1. Требуется сделать хоминг по индексу.
Особенностью платы является наличие входов A и B энкодера, отсутствие входа для индекса Z.

Хочется подключить индекс к свободной ноге и с помощью этой ноги сбрасывать index-enable.

Какой компонент HAL может по входному сигналу сбрасывать index-enable?

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 03 дек 2023, 21:14
alex_sar
готового наверное нет, свой написать нетрудно и недолго, если знаете C
строчек 10-15 получится.

хотя....

а что мешает взять cтандартный encoder, подключить только z и взять с него только index-enable ?

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 04 дек 2023, 13:05
kharpost
alex_sar писал(а): а что мешает взять cтандартный encoder, подключить только z и взять с него только index-enable ?
Не хочется для хранения одной сосиски брать морской контейнер. Да ещё в этом компоненте используется плавающая точка - будет вставать в очередь к сопроцессору.

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 04 дек 2023, 13:20
alex_sar
kharpost писал(а): 04 дек 2023, 13:05
alex_sar писал(а): а что мешает взять cтандартный encoder, подключить только z и взять с него только index-enable ?
Не хочется для хранения одной сосиски брать морской контейнер. Да ещё в этом компоненте используется плавающая точка - будет вставать в очередь к сопроцессору.
Для отладки пойдёт, а так если прям захочется, то написать и правда несложно.

Вот здесь куча примеров
https://github.com/LinuxCNC/linuxcnc/tr ... components

пишете .comp файл, какой нибудь простенький взять как шаблон, например вот этот

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

component myand2 "My Two-input AND gate";
pin in bit in0;
pin in bit in1;
pin out bit out;
function _ nofp;
;;
FUNCTION(_) { out = in0 && in1; }
потом
halcompile --compile --install yourfilename.comp

и всё, у вас получился компонент ничем не хуже стандартного

доки здесь https://linuxcnc.org/docs/html/hal/comp.html

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 04 дек 2023, 21:59
kharpost
alex_sar писал(а): и всё, у вас получился компонент ничем не хуже стандартного
Так просто не получится. Там нужен выход io. Собственно компонент я уже написал. Просто думал, что есть что-то стандартное. Как-то странно получается объекты io есть, а работать с ними нечем.

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 04 дек 2023, 23:04
D.L.
kharpost писал(а): Постановка задачи такая: есть линейки с индексом, есть плата LinuxCNC MB-1. Требуется сделать хоминг по индексу.
Особенностью платы является наличие входов A и B энкодера, отсутствие входа для индекса Z.

Хочется подключить индекс к свободной ноге и с помощью этой ноги сбрасывать index-enable.

Какой компонент HAL может по входному сигналу сбрасывать index-enable?
Нужно обратиться к производителю платы и попросить чтоб собрал прошивку с входами индексов на свободных входах платы.

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 04 дек 2023, 23:22
kharpost
D.L. писал(а): Нужно обратиться к производителю платы и попросить чтоб собрал прошивку с входами индексов на свободных входах платы.
Долго это...

Re: Homing по индексу. Сброс сигнала index-enable

Добавлено: 05 дек 2023, 00:10
kharpost
alex_sar писал(а): и всё, у вас получился компонент ничем не хуже стандартного
Получилось так:

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

component signal_set "Sets io signal";

pin in bit in "Input (see in-invert).";
pin in bit in_invert "If set to True, the rising edge of the input pin triggers the event. If set to False, the falling edge triggers.";
pin in bit out_invert "If set to True, the input pin event sets the output to True. If set to False, sets to False.";
pin io bit out "Output (see out-invert).";

option data _data;

function _ nofp;
license "GPL";
author "Dmitry Kharitonov";
;;

typedef struct {
  int pre_in;
} _data;

FUNCTION(_) {
  int b=0;
  b=in;
  if(data.pre_in != b) {
    data.pre_in = b;
    if(in_invert) b=!b;
    if(b) out=out_invert;
  }
}