суббота, 16 января 2016 г.

Решение задачи по робототехнике

Написать программу, состоящую из 3-х потоков, которая управляет движением робота: 1-ый поток управляет таймером, 2-ой управляет прямым движением, записывая шаги в 1-ый список, 3-ий - обратным движением, записывая шаги во 2-ой список. В программе задается время движения в прямом и обратном движении и отслеживается с помощью таймера. Применить в программе механизмы синхронизации с помощью mutex, добавив переменную в mutex. Синхронизирующим событием будет изменение направления движения.

1-ый поток (управление таймером). Алгоритм написания 1-ой программы:
  1. Для начала необходимо создать переменные: deltat, time1, time2, mutex, t21. 
  2. Вначале программы следует поставить перезапуск таймера, чтобы при каждом запуске программы таймер начинал работать с 0.
  3. Далее deltat приравниваем единице, time1 и time2 присаиваем первоначальное значение таймера, mutex присваиваем 0. 
  4. Открываем цикл "Всегда". Внутри цикла time2  присваиваем значение таймера, т.е. данной переменной присваиваем следующие показания таймера. Переменной  t21 присваиваем разность переменных time2 и time1. 
  5. Далее внутри цикла "Всегда" открываем цикл с условием "Если  t21 > deltat", т.е. сравниваем  значение t21 и deltat. Далее time1 присваиваем значение time2, т.е. time1 присваиваем новое значение. Данный цикл позволяет отмерять шаги робота.
  6. Далее внутри цикла "Если  t21 > deltat" открываем цикл "Если  mutex=1", то mutex присваиваем значение 0 или (Если  mutex=0mutex присваиваем значение 1. Когда mutex присваиваем значение 0, робот движется вперед, когда mutex присваиваем значение 1, робот движется назад.

2-ой поток (управление прямым движением). Алгоритм написания 2-ой программы: 
  1. Создаем список "Вперед". В него будут записываться шаги робота при движении вперед.
  2. Создаем переменную х. Она будет служить счетчиком, записывающим шаги робота в список. 
  3. Программа начинается с функции "Удалить все из Вперед": перед каждым запуском программы список "Вперед" очищается.
  4. х присваиваем значение 0.
  5. Открываем цикл "Всегда". В него ставим условие "Если mutex=0", то пишем функции "мотор в сюда": робот поедет вперед; "включить мотор на 0.2 сек": робот проедет вперед 0.2 сек; "добавить х к Вперед": шаг записываем  в список "Вперед"; "изменить х на 1"; счетчик (шаг) увеличиваем на единицу.
  6. Таким образом, при mutex = 0, робот движется вперед.  

3-ий поток (управление обратным движением). Алгоритм написания аналогичен со 2-ой программой.

Комментариев нет:

Отправить комментарий