Використання цифрових автоматів у проектуванні навчальних систем

Автор: Пользователь скрыл имя, 15 Декабря 2011 в 15:14, курсовая работа

Описание работы

Метою даної курсової роботи є допомога у вивчені системного програмування студентами. Надати студентові змогу наглядно побачити системне програмування пристроїв, об’єктів, які існують фізично, але в рамках навчальної програми не можуть використовуватись. Тому студентові надається можливість програмувати та керувати пристроями у так званих програмах-симуляторах.

Содержание

ВСТУП 3
РОЗДІЛ І. ОСНОВНІ ПОНЯТТЯ ТА СИНТЕЗ ЦИФРОВИХ АВТОМАТІВ 5
1.1 Класифікація Цифрових автоматів 5
1.1.1Акцептори і розпізнавачі. 5
1.1.2 Перетворювачі (Трансдруктори) 6
1.1.3 Детермінованість 7
1.2 Математична модель СА 8
1.3 Синтез цифрових автоматів 9
1.3.1 Формалізація завдання 10
1.3.2 Кодування станів 11
1.3.3 Синтез комбінаційної схеми 11
РОЗДІЛ ІІ. РОЗРОБКА ТА СИНТЕЗ ЦА ДЛЯ РЕАЛІЗАЦІЇ ПРОГРАМИ-СИМУЛЯТОРА КЕРУВАННЯ РОБОТОМ 12
2.1 Постановка задачі та вибір методів її реалізації 12
2.2 Синтез ЦА для керування роботом 12
2.3 Реалізація прграми-симулятора 16
2.3.1 Вибір методів та засобів для реалізації програми 16
ВИСНОВКИ 26
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 27

Работа содержит 1 файл

Курсовой_ф.doc

— 201.50 Кб (Скачать)

Останнім етапом є безпосередньо синтез комбінаційних  схем автомата: одна

з них  керує переходами автомата, друга – вихідними сигналами. Для цього складається таблиця, яка зв’язує між собою поточний стан, наступний стан, вхідні сигнали, керуючі сигнали та вихідні сигнали автомата. Далі за допомогою складеної таблиці можна побудувати логічні функції для всіх виходів комбінаційної схеми автомата. Далі за допомогою законів алгебри логіки, методу мінімізуючих карт Карно та інших, спростити логічні функції[3].  

РОЗДІЛ  ІІ. РОЗРОБКА ТА СИНТЕЗ ЦА ДЛЯ РЕАЛІЗАЦІЇ ПРОГРАМИ-СИМУЛЯТОРА КЕРУВАННЯ РОБОТОМ

Завданням для даної курсової роботи є розробка навчальної програми для вивчення системного програмування под. Windows на основі керування об’єктом за допомогою програми-симулятора.

В якості об’єкта в даній роботі запропонований робот, який пересувається по заданому полю та виконує ряд нескладних команд, які йому надсилає користувач. Керування здійснюється за допомогою програми-клієнта, яка надсилає повідомлення програмі-симулятору робота, яка в свою чергу наглядно демонструє зміну станів робота у результаті реагування на вхідні сигнали[8]. 

2.1 Постановка  задачі та вибір методів її реалізації

Створити  програму-симулятор керування роботом. Для цього розробити схему  ЦА для керування роботом. На вхід даного автомату подаються команди  керування роботом, а на виході ЦА мають бути різні стани в яких перебуває робот у результаті виконання команд.

Очевидно, що схема не може бути комбінаційною, тому що на один і той же вхідний  сигнал (команду) вона реагує по різному: дивиться вгору, вниз, завантажений і т.д. Все залежить від того, в якому стані схема була до подачі сигналу(команди). Тому для побудови такої схеми необхідно синтезувати цифровий автомат, який має пам’ять.

2.2 Синтез  ЦА для керування роботом

1 етап  – формування списку вхідних  сигналів Х та вихідних Y. В нашому випадку вхідними будуть так звані команди керування роботом: зробити один крок вперед, повернути вліво, повернути вправо, завантажити предмет, розвантажити. Формально дані сигнали можна записати так:

Х (вперед, вліво, вправо, завантажити, розвантажити).

Вихідними сигналами нашого ЦА є стани нашого автомата, а саме стани в яких може перебувати робот: дивитися вгору і бути порожнім, дивитися вгору і бути завантаженим, дивитися вниз і бути порожнім, дивитися вниз і бути завантаженим і т.д. Таким чином формально вихідні сигнали можна записати так: Y(вперед_зав., назад_зав., вліво_зав., вправо_зав., вперед_розв., назад_розв., вліво_розв., вправо_розв.)

Оскільки  працювати з вхідними та вихідними  сигналами записаними цілими словами  чи словосполученнями не зручно то поставимо їм у відповідність скорочення, які й будемо надалі використовувати.

В –  вперед, Л – вліво, П – вправо, З – завантажити, Р – розвантажити, таким чином маємо:  Х(В, Л, П, З, Р); ВЗ – вперед завантажений, НЗ –  назад завантажений, ЛЗ – вліво завантажений, ПЗ – вправо завантажений, аналогічно ВР, НР, ЛР, ПР, таким чином маємо

Y(ВЗ, НЗ, ЛЗ, ПЗ, ВР, НР, ЛР, ПР).

2 етап  – визначення необхідного числа  станів. Наш автомат може перебувати, як і робот у 8-ми різних незалежних станах, а саме: дивитися вгору і бути порожнім, дивитися вгору і бути завантаженим, дивитися вниз і бути порожнім, дивитися вниз і бути завантаженим і т.д. Інших станів бути не може за умовами задачі. Позначимо ці стани Z0, Z1, Z2, Z3, Z4, Z5, Z6, Z7.

3 етап – побудова графа автомата, та таблиці переходів автомата. Вихідні сигнали ВЗ,НЗ, ЛЗ, ПЗ, ВР, НР, ЛР, ПР однозначно пов’язані зі станами автомату Z0, Z1, Z2, Z3, Z4, Z5, Z6, Z7. Граф представляє символічне відображення словесного опису автомата визначеного завданням. В даному випадку це означає, що при зміні вхідного сигналу на інший автомат змінює свій стан на той в який повинен перейти робот при виконані даної команди. Щоб не ускладнювати задачу будемо вважати що одна команда вперед пересуває нашого робота на одну клітинку в той бік в який він дивиться, команда вліво повертає нашого робота навколо своєї осі на 90° проти годинникової стрілки, команда вправо – повертає нашого робота на 90° за годинниковою стрілкою, команда розвантажити залишає на місці нашого робота вантаж (предмет), не рухаючи при цьому самого робота, команда завантажити – завантажує предмет за умови що в тій клітинці де знаходиться робот знаходиться й вантаж і теж не рухає робота. На рис.4 показано граф, який демонструє всі існуючі стани автомату  та переходи з одного стану в інший. Переходи, які не змінюють стану автомату на графі не показані, але їх наявність мається на увазі. 

 
 

 

 
 

Рис.4 Граф переходів автомата

Крім  графового використовують табличне представлення функціонування автомата (табл.1). 

Таблиця 1

Вхідні

Сигнали

Стани
Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7
В Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7
Л Z2 Z3 Z1 Z0 Z6 Z7 Z5 Z4
П Z3 Z2 Z0 Z1 Z7 Z6 Z4 Z5
З ¤ ¤ ¤ ¤ Z0 Z1 Z2 Z3
Р Z4 Z5 Z6 Z7 ¤ ¤ ¤ ¤
 

Порожні клітинки в таблиці свідчать про те, що в деяких станах за умовою задачі деякі вхідні команди ігноруються, так як їх виконання неможливе у поточному стані. Наприклад: не можна у стані Z0 (дивитися вгору і бути завантаженим) – завантажитись, чи у стані Z4 – ще раз розвантажитись.

Кодування станів. В нашому випадку вихідні коди автомата є також його станами нашого автомата, вони всі незалежні та різні, тому найпростіше їх закодувати у порядку зростання двійкових номерів. Таке кодування буде зручним для використання його у програмі, оскільки використаний метод керування роботом через системні повідомлення передбачає передачу двох параметрів записаних однобайтними двійковими числами.

Таблиця 2

Стан Код
Z0 000
Z1 001
Z2 010
Z3 011
Z4 100
Z5 101
Z6 110
Z7 111

2.3 Реалізація  програми-симулятора

Для реалізації програми використовуємо програмне  середовище Delphi.

Так, як дане  середовище є досить простим  для використання і в той самий  час його можливостей досить для  реалізації даного проекту.

2.3.1 Вибір  методів та засобів для реалізації програми

Програма-симулятор  складається з трьох частин: програми-керування, програми яка візуально показує  поточний стан автомату та безпосередньо  програми-симулятора робота. Всі дані програми зв’язуються між собою  за допомогою так званих системних повідомлень Windows. Існує цілий ряд функцій API Windows, які працюють з вікнами – всі вони неявно використовують різні повідомлення Windows. Але взаємодію наших програмних додатків можливо організувати і явним способом через повідомлення Windows.

      Додатки Windows складаються з множини об’єктів, які взаємодіють один з одним, обмінюючись повідомленнями (messages). Джерелом цих повідомлень можуть бути: користувач, оперуючий клавіатурою і мишою, середовище Windows, посилаюче повідомлення додаткам, інші додатки, які обмінюються повідомленнями з нашим і на останнє наша програма посилаюча повідомлення своїм компонентам.

 Більшість повідомлень Delphi обробляє саме, а тому нам достатньо використовувати обробники стандартних повідомлень компонентів.  Якщо ж стандартними повідомленнями не можна вирішити задачу розробник може використовувати власні повідомлення, власноруч їх відправляючи та опрацьовуючи. В Windows API існує цілий ряд функцій дозволяючи відправлення повідомлень. В роботі використана одна з них а саме: function SendMessage(hWnd: HWnd; Msg, wParam: word; lParam: longInt): LongInt;

Параметр  hWnd – дескриптор вікна, якому передається повідомлення. Параметр Msg визначає повідомлення, яке передається. Параметри wParam і lParam містять в нашому випадку корисну інформацію, а саме код команди (вхідні параметри для нашого автомата).

Дескриптор  вікна, якому треба передати повідомлення можна визначити за допомогою  функції FindWindows якій передаються два параметри: клас вікна та назва вікна, а функція повертає дескриптор даного вікна [4]. В моїй програмі дана функція має наступний вигляд: FindWindow('Tform1','Робот'); а сама функція SendMessage записується так: sendmessage (FindWindow ('Tform1','Робот'), WM_User,3,3); де WM_User – ідентифікатор мого повідомлення, а параметри 3, 3 – коди команд.

Код програми, яка посилає різні повідомлення, тобто різні команди:

procedure Tclient.BitBtn1Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,1,1);

end; 

procedure Tclient.BitBtn2Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,2,2);

sendmessage(FindWindow('Tform1','Робот'),WM_User,2,2);

sendmessage(FindWindow('Tform1','Робот'),WM_User,1,1);

end; 

procedure Tclient.BitBtn3Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,2,2);

end; 

procedure Tclient.BitBtn4Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,3,3);

end; 

procedure Tclient.BitBtn5Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,4,4);

end; 

procedure Tclient.BitBtn6Click(Sender: TObject);

begin

sendmessage(FindWindow('Tform1','Робот'),WM_User,5,5);

end; 

Обробка повідомлень. В усіх віконних компонентах  існують обробники повідомлень  Windows за замовчуванням. Але для власного повідомлення слід використовувати і власний обробник. Тому достатньо самому написати функцію обробник повідомлення яка має наступний вигляд:

Procedure <ім’я процедури> (var <параметр>: <тип параметру> ); message <повідомлення>; Тут <тип параметру> - це тип структури параметрів повідомлення. Зазвичай ім’я цього типу відповідає імені обробленого повідомлення з додаванням префіксу Т. Після ключового слова message записується тип повідомлення[4].

Информация о работе Використання цифрових автоматів у проектуванні навчальних систем