Дані про інструменти зазвичай описуються у файлі таблиці інструментів, який визначається налаштуванням inifile: [EMCIO]TOOL_TABLE=tooltable_filename. Файл таблиці інструментів складається з текстового рядка для кожного доступного інструменту, в якому описуються параметри інструменту, див. Формат таблиці інструментів.
Інтерфейс бази даних інструментів надає альтернативний метод отримання даних про інструменти через окрему програму, яка керує базою даних інструментів.
1. Інтерфейс
1.1. Налаштування INI-файлу
Налаштування INI-файлу дозволяють (необов’язково) роботу програми бази даних інструментів, наданої користувачем:
[EMCIO] DB_PROGRAM = db_program [args]
Якщо його включено, db_program визначає шлях до виконуваного файлу програми, наданого користувачем, яка надає дані інструментів. Можна включити до 10 аргументів, розділених пробілами, та передати їх до db_program під час запуску.
|
Note
|
Налаштування INI-файлу для [EMCIO]TOOL_TABLE ігноруються, якщо вказано db_program. |
|
Note
|
db_program може бути реалізований на будь-якій мові, яка в даний час підтримується в LinuxCNC (наприклад, скрипти BASH, скрипти Python або Tcl, програми C/C++), якщо він відповідає повідомленням інтерфейсу, отриманим на stdin і відповіли на stdout. db_program може управляти даними з плоского файлу, реляційної бази даних (наприклад, SQLite) або інших джерел даних. |
1.2. db_program операція (v2.1)
Коли вказано db_progam, операції виконуються наступним чином:
-
Під час запуску LinuxCNC запускає db_program та підключається до її stdin та stdout.
-
db_program повинен відповісти, написавши однорядкове підтвердження, що складається з рядка версії (наприклад, «v2.1»). Жодні інструменти не будуть доступні, якщо версія не сумісна з версією інтерфейсу бази даних LinuxCNC.
-
Після успішного підтвердження LinuxCNC видає команду «g» (get) для запиту всіх інструментів. db_program повинен відповісти послідовністю відповідей, щоб ідентифікувати кожен доступний інструмент. Формат текстової відповіді ідентичний формату текстового рядка, що використовується в звичайних файлах таблиць інструментів. Остаточна відповідь «FINI» завершує відповідь.
-
Потім db_program переходить у цикл очікування події, щоб отримати команди, які вказують на те, що дані інструменту були змінені LinuxCNC. Зміни даних інструменту включають:
-
a) spindle loading(Tn M6)/unloading(T0 M6)
-
b) зміни параметрів інструменту (наприклад, G10L1Pn)
-
c) заміни інструментів (M61Qn).
-
Коли відбуваються зміни даних інструменту, LinuxCNC надсилає команду до db_program, що складається з ідентифікаційної літери команди, за якою йде повний або скорочений рядок даних інструменту. db_program повинен відповісти, щоб підтвердити отримання. Якщо відповідь містить текст «NAK», на stdout виводиться повідомлення, але виконання продовжується. Повідомлення «NAK» означає відсутність синхронізації між db_program і LinuxCNC — супровідний текст повинен вказувати на причину несправності.
Команди, що видаються для зміни даних інструменту:
-
"p" вводить зміни даних, спричинені G-кодами G10L1, G10L10, G10L11. Рядок даних інструменту включатиме всі елементи текстового рядка таблиці інструментів.
-
"l" spindle_load (TnM6). Рядок даних інструменту містить лише елементи T та P, що визначають відповідний номер інструмента та номер гнізда.
-
"u" розвантаження_шпинделя (T0M6). Рядок даних інструменту містить лише елементи T та P, що ідентифікують відповідний номер інструмента та номер гнізда.
|
Note
|
Коли за допомогою [EMCIO]RANDOM_TOOL_CHANGER=0 (за замовчуванням) задано змінювач інструментів NON_RANDOM, команда spindle_load, що видається для TnM6 (або M61Qn), має вигляд: «l Tn P0» (кишеня 0 є шпинделем). Команда spindle_unload, що видається для T0M6, є u T0 P0. |
|
Note
|
Коли за допомогою [EMCIO]RANDOM_TOOL_CHANGER=1 задано випадковий змінювач інструментів, при кожній заміні інструменту видається пара команд spindle_unload/spindle_load. Пара команд, що видаються для TnM6 (або M61Qn), має вигляд «u Tu Pm», за яким слідує «l Tn P0», де u — це поточний інструмент, який потрібно відправити в кишеню m, а n — це новий інструмент, який потрібно завантажити в шпиндель (кишеня «0»). За угодою, номер інструменту 0 використовується для позначення порожнього інструменту, |
1.3. Застосування
Використання db_program не змінює спосіб роботи LinuxCNC, але забезпечує підтримку нових функцій бази даних для керування інструментами.
Наприклад, програма db_program може вести облік робочого часу всіх інструментів, відстежуючи кожне завантаження/розвантаження інструменту. Тоді верстат може мати три 6-міліметрові кінцеві фрези в кишенях 111, 112 і 113, а програма бази даних запрограмована так, щоб присвоїти номер 110 6-міліметровій кінцевій фрезі з найменшою кількістю годин роботи. Тоді, коли програма LinuxCNC запитує інструмент 110, база даних вказує відповідну кишеню на основі історії використання інструменту.
Зміни даних інструменту, внесені в LinuxCNC (команди «p», «u», «l»), негайно передаються в db_program, який повинен синхронізувати свої вихідні дані. За замовчуванням, запити LinuxCNC на дані інструменту (команди g) виконуються тільки під час запуску. Програма бази даних може постійно оновлювати дані про використання інструменту, тому довготривалі програми LinuxCNC можуть отримати перевагу від оновлення даних інструменту, що надаються db_program. Команда G-коду G10L0 може використовуватися для запиту перезавантаження даних інструменту (команда «g») з програм G-коду або за допомогою MDI. Операція перезавантаження також зазвичай забезпечується графічним інтерфейсом користувача (GUI), що дозволяє запитувати перезавантаження за запитом. Наприклад, програма GUI на Python може використовувати:
#!/usr/bin/env python3 from linuxcnc import command command().load_tool_table()
Крім того, db_program може передавати свої локальні зміни даних для синхронізації з LinuxCNC за допомогою команди інтерфейсу load_tool_table(). Команди, які передають зміни до LinuxCNC, можуть бути відхилені, якщо працює інтерпретатор. Стан інтерпретатора можна перевірити перед видачею команди load_tool_table(). Приклад:
#! /usr/bin/env python3 import linuxcnc s = linuxcnc.stat() s.poll() if s.interp_state == linuxcnc.INTERP_IDLE: linuxcnc.command().load_tool_table() else: # відкласти завантаження, доки інтерфейс не перейде в режим очікування ...
Якщо програма бази даних додає або видаляє інструменти після ініціалізації, необхідно виконати виклик tooldb_tools() з оновленим списком user_tools. Оновлений список інструментів буде використовуватися в наступних командах get або запитах load_tool_table().
|
Note
|
Вилучення номера інструменту слід виконувати лише тоді, коли номер інструменту наразі не завантажено в шпиндель. |
1.3.1. Налагодження змінних середовища
Експорт змінної середовища DB_SHOW дозволяє LinuxCNC виводити (на стандартний вивід) дані інструменту, отримані з db_program, під час запуску та під час наступного перезавантаження даних інструменту.
Експорт змінної середовища DB_DEBUG дозволяє LinuxCNC виводити (на стандартний вивід) додаткову інформацію про налагодження активності інтерфейсу.
1.4. Приклад програми
Приклад db_program (реалізований як скрипт Python) надається разом із прикладами моделювання. Програма демонструє необхідні операції для:
-
підтвердити версію запуску
-
отримання запитів на дані інструменту: g (команда get)
-
отримувати оновлення даних інструменту: p (команда put)
-
отримувати оновлення завантаження інструменту: l (load_spindle
-
отримувати оновлення вивантаження інструменту: u (команда unload_spindle)
1.5. Модуль Python toolbd
У прикладі програми використовується модуль Python («tooldb»), наданий LinuxCNC, який управляє низькорівневими деталями для зв’язку та перевірки версії. Цей модуль використовує функції зворотного виклику, визначені db_program, для відповіді на команду «g» (get) та команди, що вказують на зміни даних інструменту («p», «l», «u»).
Програма db_program використовує модуль tooldb, реалізуючи наступний код Python:
user_tools = list(...) # список доступних номерів інструментів def user_get_tool(toolno): # функція для відповіді на команди 'g' (get) # викликається один раз для кожного toolno в user_tools ... def user_put_tool(toolno,params): # функція для відповіді на команди «p» (put) ... def user_load_spindle(toolno,params): # функція для відповіді на команди «l» (put) ... def user_unload_spindle(toolno,params): # функція для відповіді на команди «u» (put) ... #------------------------------------------------------------ # Початок: from tooldb import tooldb_tools # визначити відомі інструменти from tooldb import tooldb_callbacks # визначити функції from tooldb import tooldb_loop # головний цикл tooldb_tools(user_tools) tooldb_callbacks(user_get_tool, user_put_tool, user_load_spindle, user_unload_spindle, ) tooldb_loop()
|
Note
|
Використання «tooldb» не є обов’язковим — він надається як демонстрація необхідного інтерфейсу та для зручності реалізації програм на основі Python, які взаємодіють із зовнішньою базою даних. |
2. Конфігурації симуляції
Конфігурації моделювання за допомогою графічного інтерфейсу AXIS:
-
configs/sim/axis/db_demo/db_ran.ini (random_toolchanger)
-
configs/sim/axis/db_demo/db_nonran.ini (nonrandom_toolchanger)
Кожна конфігурація симулятора імітує db_program, що реалізує базу даних з 10 інструментами, пронумерованими від 10 до 19.
db_program надається одним скриптом (db.py) та символічними посиланнями на нього для альтернативного використання: db_ran.py та db_nonran.py. За замовчуванням скрипт реалізує функціональність random_toolchanger. Невипадкові функції зміни інструменту замінюються, якщо ім’я посилання містить текст «nonran».
Конфігурації симулятора демонструють використання модуля інтерфейсу Python «tooldb» та реалізують базову базу даних у вигляді плоского файлу, яка відстежує час використання інструментів для декількох інструментів, що мають однаковий діаметр. Правила бази даних підтримують вибір інструменту з найменшим часом роботи.
Конфігурації симулятора використовують основне завдання для моніторингу та реагування на оновлення інструментів, ініційовані зсередини LinuxCNC. Періодичне завдання оновлює час використання інструменту через регулярні проміжки часу. Окремі, паралельні завдання реалізовані як потоки для демонстрації коду, необхідного при ініціюванні змін db_program, та демонстрації методів синхронізації внутрішніх даних інструментів LinuxCNC. Приклади включають:
-
оновлення параметрів інструменту
-
додавання та вилучення номерів інструментів
Блокування взаємного виключення використовується для захисту даних від невідповідностей через умови змагання між оновленнями інструментальних даних LinuxCNC та оновленнями програми бази даних.
2.1. Нотатки
Коли db_program використовується разом із випадковим змінювачем інструментів ([EMCIO]RANDOM_TOOLCHANGER), LinuxCNC підтримує файл («db_spindle.tbl» у каталозі конфігурації), який складається з одного рядка таблиці інструментів, що ідентифікує поточний інструмент у шпинделі.