Создание собственных hal компонентов

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »


torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Лицензия на публикацию

У Вас есть право на распространение и/или изменение этого документа в рамках GNU Free Documentation Licence версия 1.3
или любой другой более поздней версии опубликованной Free Software Foundation без неизменяемых разделов,
без передней обложки и одной фразой на задней обложке "Это руководство по LinuxCNC продукт автора torvn77 (Оревин Т.О.).
Если вы найдете его полезным в своей работе,я приглашаю Вас внести свой вклад в его доработку и расширение."
Ознакомится с лицензией можно на сайте GNU на странице "GNU Free Documentation License (GFDL)".
Если вы не найдете там лицензию, вы можете заказать копию в Free Software Foundation, Inc. по адресу:
59 Temple Place, Suite 330 Boston, MA, 02111-1307.

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

2. Введение

Встроенным в LinuxCNC интерпретатором языка лестничной логики не ясно как пользоваться.
Python как интерпретатор по мере усложнения программы будет всё больше тормозить компьютер.
К тому же в нём форматирование кода оказывает влияние на его работу,что так же делает работу с ним не удобной.
А вот программирование на Си,особенно с помощью инструмента препроцессирования файла halcompile становится простым как bash или DOS'овскии Бейсик.

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Типовые способы употребления halcompile:

halcompile [--compile|--preprocess|--document|--view-doc] compfile...
sudo halcompile [--install|--install-doc] compfile...
halcompile --compile --userspace cfile...
sudo halcompile --install --userspace cfile...
sudo halcompile --install --userspace pyfile...

halcompile выполняет много различных функций:
  • Компиляция .comp или .c - файла в .ko файл (т.е. в модуль ядра) HAL компонента реального времени (--compile flag)
  • Компиляция .comp или .c файла в .so файл HAL компонента (реального времени???) пространства пользователя (--compile flag)
  • Компиляция .comp или .c файла в отдельную программу-компонент работающего в обычном,не реалтайм режиме (--install --userspace flag)
  • Преобразование .comp файла в .c файл (--preprocess flag)
  • Конвертация секции документации в .comp файле в .9 справки man в (--document flag)
  • Вывод секции документации в .comp файле на экран (--view-doc flag)
  • Скомпилировать и установить .comp или .c файл в соответствующий каталог для HAL компонентов реального времени (--install flag).
    (Может потребовать права root для записи в системный каталог... )
  • Установить .c и в .py - файлов в соответствующий каталог для HAL userspace компонентов (--install --userspace flag)
    (Может потребовать права root для записи в системный каталог... )
  • Выписка документации .comp файлы в.9 Man файлы в правильном системном каталоге (--install flag)
    (Может потребовать права root для записи в системный каталог... )

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Не заполнено.

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Не заполнено.

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

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

component имя_компонента "Краткое пояснение в одну строку";

description 
"""
Подробная документация с разяснением назначения,конфигурирования и особенностей работы компонента
может занимать несколько строк.
""";
//Автор компонента
author "Автор компонента";
//Лицензия на компонент,доступны... лицензии.
license "GPL";

// Создание пинов компонента
//Формат описания пина
//pin [in|out] [bit|u32|...] имя_пина "Краткое пояснение в одну строку";
// Примеры:
pin in u32 input_pin "Входной пин типа u32";
pin out u32 out_pin "Выходной пин типа u32";

//Создание параметров компонента
//Формат описания параметра
//param [rw|ro] [double|int|bit|float|...] parametr_name = value;
//Пример параметра типа float,значение по умолчанию равно 1.0
param rw float param_1 = 1.0;

// Глобальные переменные,сохраняются между вызовами кода указанного в макросе function(_)
//Формат описания
// variable variable_name;
//Пример создания глобальной переменной типа double
variable double global_variable;

function _;
;;
//Подключение заголовочных файлов
#include "rtapi_math.h"
FUNCTION(_) {
//Задание локальных переменных
Формат:
//макрос_типа_переменной имя_переменной 
//[tapi_u32|...] value_name;
//Пример создания переменной типа rtapi_u32
rtapi_u32 temp_variable;
//Код вашей функции

}

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Компонент счётчик времени time :

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

component time "Time on in Hours, Minutes, Seconds";

description 
"""
Time

When the time.N.start bit goes true the cycle timer resets and starts
to time until time.N.start goes false. If you connect time.N.start to
halui.is-running as a cycle timer it will reset during a pause. See
the example connections below to keep the timer timing during a pause.

Time returns the hours, minutes, and seconds that time.N.start is true.

Sample pyVCP code to display the hours:minutes:seconds.

<pyvcp>
 <hbox>
 <label>
 <text>"Cycle Time"</text>
 <font>("Helvetica",14)</font>
 </label>
 <u32> 
 <halpin>"time-hours"</halpin>
 <font>("Helvetica",14)</font>
 <format>"2d"</format>
 </u32>
 <label>
 <text>":"</text>
 <font>("Helvetica",14)</font>
 </label>
 <u32> 
 <halpin>"time-minutes"</halpin>
 <font>("Helvetica",14)</font>
 <format>"2d"</format>
 </u32>
 <label>
 <text>":"</text>
 <font>("Helvetica",14)</font>
 </label>
 <u32> 
 <halpin>"time-seconds"</halpin>
 <font>("Helvetica",14)</font>
 <format>"2d"</format>
 </u32>
 </hbox>
</pyvcp>

In your post-gui.hal file you might use the following to connect it up

 loadrt time
 loadrt not
 addf time.0 servo-thread
 addf not.0 servo-thread
 net prog-running not.0.in <= halui.program.is-idle
 net cycle-timer time.0.start <= not.0.out
 net cycle-seconds pyvcp.time-seconds <= time.0.seconds
 net cycle-minutes pyvcp.time-minutes <= time.0.minutes
 net cycle-hours pyvcp.time-hours <= time.0.hours

""";
 
author "John Thornton";

license "GPL";

// Input Pins
pin in bit start "Timer On";

// Output Pins
pin out u32 seconds "Seconds";
pin out u32 minutes "Minutes";
pin out u32 hours "Hours";

// Global Variables
variable double totalnsec;
variable int old_start;

function _;

;;

#include "rtapi_math.h"

FUNCTION(_) {
 rtapi_u32 totalseconds;
 if(start &&!old_start) totalnsec = 0;

 if(start){
 totalnsec = totalnsec + period;
 totalseconds = totalnsec * 0.000000001;
 seconds = totalseconds % 60;
	minutes = (totalseconds / 60) % 60;
	hours = (totalseconds / 3600);
	}
	old_start = start;
}

Компонент sum2 вычесляющии сумму смещения(offset) и двух отмаштабированных(gain) пинов:

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

component sum2 "Sum of two inputs (each with a gain) and an offset";
pin in float in0;
pin in float in1;
param rw float gain0 = 1.0;
param rw float gain1 = 1.0;
param rw float offset;
pin out float out "out = in0 * gain0 + in1 * gain1 + offset";
function _;
license "GPL";
;;
FUNCTION(_) {
 out = in0 * gain0 + in1 * gain1 + offset;
}

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Не заполнено.

torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 21 дек 2014, 23:50
Репутация: 1
Страна: Россия
 

  »

Не заполнено.


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