Компонент для вент. вытяжки

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Компонент для вент. вытяжки

Сообщение daiman444 »

приветствую, коллеги.

запутался при написании компонента.

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

component ventforplasma "Hood for plasma or oxygen cuters";

description 
"""
vent. for plasma or oxygen cuters

""";
 
author "ddd";

license "GPLv2 or greater";

option singleton yes;

// Input Pins
pin in float xpos "axis X pos-feedback";
pin in float ypos "axis Y pos-feedback";

// Output Pins

pin out bit vent1x1 "vent valve 1";
pin out bit vent1x2 "vent valve 2";
pin out bit vent2x1 "vent valve 3";
pin out bit vent2x2 "vent valve 4";
pin out bit vent3x1 "vent valve 5";
pin out bit vent3x2 "vent valve 6";
pin out bit vent4x1 "vent valve 7";
pin out bit vent4x2 "vent valve 8";
pin out bit vent5x1 "vent valve 9";
pin out bit vent5x2 "vent valve 10";
pin out bit vent6x1 "vent valve 11";
pin out bit vent6x2 "vent valve 12";

// Parameters


// Global Variables


function _;

;;

#include "rtapi_math.h"

FUNCTION(_) {
	if (xpos<-0)
	vent1x1 = 1;
	else
	vent1x1 = 0;
}
компонент загружается. если убрать условие if и просто записать "vent1x1 = 1;" то выходящий пин активизируется. но нужно чтобы работало с условием if.
не могу понять что не так и почему не работает условие.

буду признателен за подсказку.
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
ex71
Мастер
Сообщения: 489
Зарегистрирован: 18 май 2019, 13:23
Репутация: 60
Настоящее имя: Андрей
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение ex71 »

Простите за ламерский вопрос, а что эта запись означает?
daiman444 писал(а):if (xpos<-0)
D.L.
Мастер
Сообщения: 416
Зарегистрирован: 25 авг 2018, 10:11
Репутация: 124
Настоящее имя: Дмитрий
Откуда: Киров
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение D.L. »

daiman444 писал(а):if (xpos<-0)
Может if (xpos<=0) ?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5157
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение Serg »

Тоже самое, только на стандартных компонентах. :)

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

loadrt conv_s32_float names=conv.ventpwr
addf conv.ventpwr servo-thread

loadrt wcomp names=win1x,win2x,win3x,win4x,win5x,win6x,win1y,win2y
addf win1x servo-thread
addf win2x servo-thread
addf win3x servo-thread
addf win4x servo-thread
addf win5x servo-thread
addf win6x servo-thread
addf win1y servo-thread
addf win2y servo-thread

loadrt logic names=and.sec1a,and.sec1b,and.sec2a,and.sec2b,and.sec3a,and.sec3b,and.sec4a,and.sec4b,and.sec5a,and.sec5b,and.sec6a,and.sec6b personality=0x103,0x103,0x103,0x103,0x103,0x103,0x103,0x103,0x103,0x103,0x103,0x103
addf and.sec1a servo-thread
addf and.sec1b servo-thread
addf and.sec2a servo-thread
addf and.sec2b servo-thread
addf and.sec3a servo-thread
addf and.sec3b servo-thread
addf and.sec4a servo-thread
addf and.sec4b servo-thread
addf and.sec5a servo-thread
addf and.sec5b servo-thread
addf and.sec6a servo-thread
addf and.sec6b servo-thread

loadrt weighted_sum wsum_sizes=14
addf process_wsums servo-thread

loadrt mux2 names=mux2.vent
addf mux2.vent servo-thread

loadrt mult2 names=vent.pwrscale
addf vent.pwrscale servo-thread

loadrt or2 names=or.venten
addf or.venten servo-thread

loadrt oneshot names=os.vent
addf os.vent servo-thread

setp win1x.min -100
setp win1x.max 1100
net _t.w1x win1x.out => and.sec1a.in-00 and.sec1b.in-00

setp win2x.min 900
setp win2x.max 2100
net _t.w2x win2x.out => and.sec2a.in-00 and.sec2b.in-00

setp win3x.min 1900
setp win3x.max 3100
net _t.w3x win3x.out => and.sec3a.in-00 and.sec3b.in-00

setp win4x.min 2900
setp win4x.max 4100
net _t.w4x win4x.out => and.sec4a.in-00 and.sec4b.in-00

setp win5x.min 3900
setp win5x.max 5100
net _t.w5x win5x.out => and.sec5a.in-00 and.sec5b.in-00

setp win6x.min 4900
setp win6x.max 6100
net _t.w6x win6x.out => and.sec6a.in-00 and.sec6b.in-00

setp win1y.min -100
setp win1y.max 850
net _t.w1y win1y.out => and.sec1a.in-01  and.sec2a.in-01 and.sec3a.in-01 and.sec4a.in-01 and.sec5a.in-01 and.sec6a.in-01

setp win2y.min 650
setp win2y.max 1600
net _t.w2y win2y.out => and.sec1b.in-01  and.sec2b.in-01 and.sec3b.in-01 and.sec4b.in-01 and.sec5b.in-01 and.sec6b.in-01

net x1-pos-cmd => win1x.in win2x.in win3x.in win4x.in win5x.in win6x.in
net y-pos-cmd => win1y.in win2y.in

net vent.enable => and.sec1a.in-02  and.sec2a.in-02 and.sec3a.in-02 and.sec4a.in-02 and.sec5a.in-02 and.sec6a.in-02
net vent.enable => and.sec1b.in-02  and.sec2b.in-02 and.sec3b.in-02 and.sec4b.in-02 and.sec5b.in-02 and.sec6b.in-02

net vent.sec1a <= and.sec1a.and => wsum.0.bit.0.in
net vent.sec1b <= and.sec1b.and => wsum.0.bit.1.in
net vent.sec2a <= and.sec2a.and => wsum.0.bit.2.in
net vent.sec2b <= and.sec2b.and => wsum.0.bit.3.in
net vent.sec3a <= and.sec3a.and => wsum.0.bit.4.in
net vent.sec3b <= and.sec3b.and => wsum.0.bit.5.in
net vent.sec4a <= and.sec4a.and => wsum.0.bit.6.in
net vent.sec4b <= and.sec4b.and => wsum.0.bit.7.in
net vent.sec5a <= and.sec5a.and => wsum.0.bit.8.in
net vent.sec5b <= and.sec5b.and => wsum.0.bit.9.in
net vent.sec6a <= and.sec6a.and => wsum.0.bit.10.in
net vent.sec6b <= and.sec6b.and => wsum.0.bit.11.in
net vent.powers32 <= wsum.0.sum

net wsum.0.weight => wsum.0.bit.0.weight wsum.0.bit.1.weight wsum.0.bit.2.weight wsum.0.bit.3.weight wsum.0.bit.4.weight wsum.0.bit.5.weight
net wsum.0.weight => wsum.0.bit.6.weight wsum.0.bit.7.weight wsum.0.bit.8.weight wsum.0.bit.9.weight wsum.0.bit.10.weight wsum.0.bit.11.weight
sets wsum.0.weight 70
setp wsum.0.bit.12.weight 5
setp wsum.0.bit.13.weight 27

net vent.powers32 => conv.ventpwr.in
net vent.powerm conv.ventpwr.out => mux2.vent.in0
net vent.power <= mux2.vent.out => mux2.vent.in1
net vent.mem  os.vent.out => mux2.vent.sel
setp os.vent.rising 0
setp os.vent.falling 1
setp os.vent.width [PLASMA]VENT_DELAY_OFF

net machine-is-on => wsum.0.bit.12.in

net vent.enable <= or.venten.out => wsum.0.bit.13.in os.vent.in
net IsProgramRunning halui.program.is-running => or.venten.in0 or.venten.in1
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 6973
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2897
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение MX_Master »

Дядя Серёжа, чтобы такое написать самостоятельно, нужен большой опыт работы с HAL. А чтобы отредактировать - опыта нужно не меньше ;)
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

ex71 писал(а):Простите за ламерский вопрос, а что эта запись означает?
daiman444 писал(а):if (xpos<-0)
Это опечатка. Вправльное выражение xpos<0.
У меня по х станок работает в отрицательном направлении, поэтому и меньше 0 должно быть
Я не совсем развернуто задал вопрос видать, поэтому такие ответы. Дополняю для более полного представления задачи: планируется разбить стол плазмореза на 12 секций. К каждой секции подведен возддуховод который отсекается зздвижкой. Для того чтобыы определить какую задвижку сравниваем значение текущее станочное положение с задаными значениями. Примерно так:
если х<0 и х>-750 и у>0 и у<1000 то открываем задвижку 1.
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
ex71
Мастер
Сообщения: 489
Зарегистрирован: 18 май 2019, 13:23
Репутация: 60
Настоящее имя: Андрей
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение ex71 »

Надо начать с разворота оси в нужном направлении. А не заниматься разворотом системы координат в САПР.
Просто отрицательный нуль может вызвать проблемы в разных интерпретаторах. Хотя gcc и пофиг, а вот интерпретатору который отрабатывает скрипты может и нет.
Логика работы понятна и без пояснений. Но явно проблемы с выводом отладочной информации. Выведи текущее значение Х перед условием. Я уверен, что там далеко не текущие координаты.
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

ex71 писал(а):Надо начать с разворота оси в нужном направлении. А не заниматься разворотом системы координат в САПР.
Просто отрицательный нуль может вызвать проблемы в разных интерпретаторах. Хотя gcc и пофиг, а вот интерпретатору который отрабатывает скрипты может и нет.
Логика работы понятна и без пояснений. Но явно проблемы с выводом отладочной информации. Выведи текущее значение Х перед условием. Я уверен, что там далеко не текущие координаты.
Координаты не развернуты, просто хом переехал с левой стороны на правую.

Значение координат для осей ХУ в кастомхале:
net x/ypos halui.axis.00/01.pos-feedback соответственно. Вывод на панель glade показывает как и нужно: станочные координаты.
Остается всего лишь сравнить с задаными границами и вывести 0/1 для соответствующего пина
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5157
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение Serg »

MX_Master писал(а):Дядя Серёжа, чтобы такое написать самостоятельно, нужен большой опыт работы с HAL. А чтобы отредактировать - опыта нужно не меньше ;)
Нет. Достаточно уметь составлять схемки на цифровых логических элементах. Типа таких, как на первой картинке здесь: VisualHAL #1
daiman444 писал(а):планируется разбить стол плазмореза на 12 секций. К каждой секции подведен возддуховод который отсекается зздвижкой. Для того чтобыы определить какую задвижку сравниваем значение текущее станочное положение с задаными значениями. Примерно так:
если х<0 и х>-750 и у>0 и у<1000 то открываем задвижку 1.
Приведённый выше кусок HAL именно от такого плазмореза, тоже на 12 секций (два ряда по 6 секций). Секции открываются с небольшим перекрытием, т.е. следующая секция открывается когда до конца текущей секции остаётся менее 100мм и т.п. При этом соотв. образом меняется мощность вентустановки (аналоговый сигнал 0..10В). При запуске станка может сразу включать вентиляцию на небольшую мощность. После окончания УП выключается не сразу, а с регулируемой задержкой.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 6973
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2897
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение MX_Master »

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

Re: Компонент для вент. вытяжки

Сообщение Serg »

MX_Master писал(а):Аха, достаточно. Особенно, для тех, кто это умеет :)
А чего там уметь-то? Не сложнее электросхемы шкафа.

По тому, что я тут наблюдаю, большинство народу тупо пытается разобраться со всеми этими HAL-заклинаниями даже не пытаясь осознать их общую суть. А вот если втупить, что HAL - это всего лишь язык описания соединений между элементами, то наступает прозрение. :)
Вот тут прям обучающие примеры есть, но мало кому не лень вникнуть в нарисованное и написанное...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

спасибо за информацию по
UAVpilot писал(а):Тоже самое, только на стандартных компонентах.
но для нуба как я это действительно сложно, хоть все компоненты и стандартные.
неужели нельзя через простые условия if решить эту задачу? о включении/выключении вопроса не стоит, оно особо не нужно.

Тем не менее буду изучать предложенное, ведь с дерганиями оси z в компоненте thcud как то разобрался самостоятельно.
MX_Master писал(а):Аха, достаточно. Особенно, для тех, кто это умеет
надеюсь что в нашем с вами городе есть стоящие специалисты, которых днем с огнем не найдешь. они действительно в Алмате на вес золота.
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Аватара пользователя
MX_Master
Мастер
Сообщения: 6973
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2897
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение MX_Master »

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

Re: Компонент для вент. вытяжки

Сообщение Serg »

daiman444 писал(а):неужели нельзя через простые условия if решить эту задачу?
Можно конечно. Просто написание своего собственного компонента - зло, которому стоит "продавать душу" только, когда других вариантов не существует, ибо при очередном обновлении станок может перестать работать, пока не вспомнить, что нужно перекомпилить и свои компоненты.
Вы уже разобрались как писать свои компоненты - написать, то, что показал я гораздо проще. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

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

разбираюсь в общем. еще раз спасибо!
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5157
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение Serg »

daiman444 писал(а):просто я не всегда могу разобраться в том что даже сам нацарапал
Вставляйте в HAL комменты в виде схемы, как я показывал в теме про AG400. :)
Я в таком виде сдаю заказчикам.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

UAVpilot писал(а):Тоже самое, только на стандартных компонентах.
приветствую. нарисовал на бумажке схему и да действительно то что нужно.
пока непонятен и интересует только один вопрос: откуда берется значение для :

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

net x1-pos-cmd => 
net y-pos-cmd => 
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

UAVpilot писал(а):Типа таких, как на первой картинке здесь: VisualHAL #1
очень интересный способ. надо только разобраться с KiCAD: как правильно(!) добавлять компоненты и тд.
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5157
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение Serg »

daiman444 писал(а):пока непонятен и интересует только один вопрос: откуда берется значение для :
net x1-pos-cmd =>
net y-pos-cmd =>
С соотв. пинов axis.N (по Х у меня два привода).
daiman444 писал(а):очень интересный способ. надо только разобраться с KiCAD: как правильно(!) добавлять компоненты и тд.
Там по теме есть подсказки, да и готовые компоненты можно для примера смотреть. Поддерживать не планирую, просто решил попробовать идею...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
daiman444
Опытный
Сообщения: 174
Зарегистрирован: 18 май 2019, 15:24
Репутация: 10
Настоящее имя: Дмитрий
Контактная информация:

Re: Компонент для вент. вытяжки

Сообщение daiman444 »

UAVpilot писал(а):С соотв. пинов axis.N (по Х у меня два привода).
спасибо! я взял с halui.axis.n.pos-commanded.

так же спасибо за подсказку устройства своего hal файла! некоторые идеи я обязательно применю при дальнейшей корректировке своего компонента!

причиной проблем и отказа работать моего компонента была моя не внимательность: в custom.hal я объявил пины координат станка, но не подключил их к своему компоненту((
Следовательно не подтягивались координаты и уловия if else не работали.
исправил это и все заработало!!!!!

ниже фрагмент моего custom.hal с подключением к компоненту:

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

#включаем компонент вентиляции
loadrt ventforplasma

#добавляем компонент в поток для его исполнения:
addf ventforplasma servo-thread

#пины текущих координат станка(можно вывести на панель glade для отладки):
net xpos <= ventforplasma.xpos <= halui.axis.0.pos-commanded
net ypos <= ventforplasma.ypos <= halui.axis.1.pos-commanded

#пины запорных клапанов необходимо подключить к пинам компонента и к 
#выходным пинам парпорта, так же можно вывести на панель glade для отладки:
net vent1x1 ventforplasma.vent1x1
net vent1x2 ventforplasma.vent1x2
net vent2x1 ventforplasma.vent2x1
net vent2x2 ventforplasma.vent2x2
net vent3x1 ventforplasma.vent3x1
net vent3x2 ventforplasma.vent3x2
net vent4x1 ventforplasma.vent4x1
net vent4x2 ventforplasma.vent4x2
net vent5x1 ventforplasma.vent5x1
net vent5x2 ventforplasma.vent5x2
net vent6x1 ventforplasma.vent6x1
net vent6x2 ventforplasma.vent6x2
так же во вложении сам компонент в первой его рабочей редакции.

еще раз спасибо за помощь, коллеги!!!
Вложения
ventforplasma.zip
(757 байт) 139 скачиваний
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Ответить

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