алібрування; потік MainCicle передає координати поточної точки (Xt, Yt) і швидкості по обох осях (Vt_x, Vt_y).
5. Розробка ПЗ РВ
Розробку ПО РВ можна розділити на два етапи:
1. Розробка інтерфейсу оператора (головний потік).
2. Розробка другого потоку, який безпосередньо пов'язаний з процесом управління.
Обмін даними між потоками і між самими завданнями відбувається з використанням глобальних змінних, для зручності всі глобальні змінні створюються у файлі variable.c, який підключається у всіх інших модулях. Цей файл містить наступні змінні:
Xc, Yc - координати цільової точки;
Xt, Yt - координати поточного положення вихідної ланки;
vihod_0X, vihod_0Y - змінні, що вказують чи був зроблений вихід в 0 за відповідними осях. Якщо вихід в 0 був зроблений, то цим змінні присвоюється значення 1, в іншому випадку - 0.
Vt_x, Vt_y- поточні значення швидкостей по обох осях.
Ssh_x, Ssh_y, a_x, a_y, Vmax_x, Vmax_y - параметри двіженія._x- індекс поточного кроку в головному масиві
Vm_step_x - номер кроку, відповідний максимальної швидкості.
vihod_0X_cmd, vihod_0Y_cmd - змінні, що вказують чи була оператором введена команда виходу в 0._x - масив, що містить характеристики руху на кожному кроці. Він має наступну структуру:
uint64_t dt_ms - інтервал часу між імпульсами в мс;
uint64_t dt - інтервал часу між імпульсами в тактах процесора;
V - швидкість.
Ttormoz_ms, Ttormoz - час спрацьовування гальма в мс і в тактах.
Також тут визначено константи, що встановлюють фазні сигнали для крокового двигуна.
const unsigned short int phases_signals_x [4]={0x08, 0x02, 0x04,0x01} - сигнали для двигуна, підключеного до перших чотирьом виходів.
Розглянемо модулі головного потоку. Вони являють собою обробники, яких або подій.
Специфікація цих модулів представлена ??в таблиці 4.1. Розглянемо докладніше кожен модуль.
1. Модуль createMain. Ця функція викликається при натисканні на кнопку Start. Тут створюється другий потік MainCicle і створюється мьютекс для синхронізації обох потоків.
2. Модуль ending Викликається при натисканні на кнопку Stop. Зупиняє цикл виконання завдань, присвоївши змінної work значення 0.
. Модуль init. Викликається при натисканні на кнопку Inicializate. Заповнює змінні a_x, Ssh_x, Vmax_x, a_y, Ssh_y, Vmax_y значеннями, введеними оператором.
. Модуль GotoX. Викликається при натисканні на кнопку Goto_0X. У обробнику цієї події змінної vihod_0X_cmd присвоюється значення 1
. Модуль GotoY. Викликається при натисканні на кнопку Goto_0Y. У обробнику цієї події змінної vihod_0Y_cmd присвоюється значення 1
. Модуль Openfile. Відкриває файл з командами і записує його вміст в змінну program, яка представляє собою покажчик на рядок.
. Модуль Start.Разрешает завданню ProgControl почати виконання команд оператора.
. Модуль Stop.Останавлівает виконання команд оператора.
Тепер розглянемо розробку другої - основного потоку, який безпосередньо виконує завдання управління рухом.
Розробка велася за методикою/1 /, згідно з якою кожна задача, що має структуру станів програмується як окрема Cи-функція. Для обміну даними між завданнями використовуються глобальні змінні. Якщо є необхідність настроювання деякої задачі, т.е виконання будь яких дій, що стосуються цієї задачі до початку або після закінчення їй роботи, для цього завдання програмуються функції ініціалізації і закінчення роботи. Всі функції і дані, що відносяться до задачі, поміщаються в c-файл. У відповідному заголовному h-файлі оголошуються функції і змінні, використовувані в інших частинах програми. Специфікація модулів СРВ представлена ??в таблиці 4.1. Листинги програмного коду функцій основного процесу наведені в додатку А.
Для того щоб використовувати менше машинного часу в процесі виконання руху, ми прийшли до рішення: розрахувати характеристики руху на етапі ініціалізації і занести їх в певний масив, тим самим в основному циклі для управління ШД ми будемо звертатися до даного масиву.
Головна функція c-програми складається з трьох секцій:
1. Секція ініціалізації, в якій викликаються функції ініціалізації тих завдань, для яких вони передбачені. Серед таких функцій: