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

Программное обеспечение для управления станками с ЧПУ в реальном времени
Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

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

#1 

Сообщение torvn77 » 20 фев 2015, 03:08


Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

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

#2 

Сообщение torvn77 » 20 фев 2015, 03:11

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

У Вас есть право на распространение и/или изменение этого документа в рамках 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
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Введение

#3 

Сообщение torvn77 » 20 фев 2015, 03:13

2. Введение

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

Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Утилита halcompile и её опции

#4 

Сообщение torvn77 » 20 фев 2015, 03:14

Типовые способы употребления 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
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Установка hal компонента из исходника в виде .comp или .c

#5 

Сообщение torvn77 » 20 фев 2015, 04:44

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

Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Перечень типов данных и заголовочных файлов

#6 

Сообщение torvn77 » 20 фев 2015, 04:46

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

Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Шаблон файла формата .comp

#7 

Сообщение torvn77 » 20 фев 2015, 04:51

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

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
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Практические примеры файлов в формате .comp

#8 

Сообщение torvn77 » 20 фев 2015, 07:18

Компонент счётчик времени 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
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Шаблон файла в формате .c

#9 

Сообщение torvn77 » 20 фев 2015, 07:21

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

Аватара пользователя
torvn77
Начинающий
Сообщения: 75
Зарегистрирован: 22 дек 2014, 01:50
Репутация: 1
Город: Санкт-Петербург
Страна: Россия

Практический пример файла в формате .c

#10 

Сообщение torvn77 » 20 фев 2015, 07:21

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


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

Сейчас на форумах

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей