Разработка цифрового автомата, управляющего работой микроволновой печи

Автор работы: Пользователь скрыл имя, 15 Мая 2014 в 08:59, курсовая работа

Краткое описание

Для алгоритмизации и программирования задач логического управления применяются различные подходы и технологии. В данной работе для задачи такого рода была использована SWITCH-технология, предложенная А. А. Шалыто [1] и развитая им совместно с Н. И. Туккелем [2].
В данной работе совместно применяются объектно-ориентированное и автоматное программирование, что названо “объектно-ориентированным программированием с явным выделением состояний” [2]. Целью работы является разработка имитатора микроволновой печи на основе SWITCH-технологии.

Содержание

Введение....................................................................................................................................3
1. Постановка задачи................................................................................................................4
2. Диаграмма классов ...............................................................................................................5
3. Класс CMicroWaveDlg.......................................................................................................9
3.1. Словесное описание.......................................................................................................9
3.2. Краткое описание методов ............................................................................................9
4. Класс Dispatcher..............................................................................................................10
4.1. Словесное описание......................................................................................................10
4.2 Краткое описание методов ............................................................................................10
5. Класс Automata..................................................................................................................11
5.1. Словесное описание.......................................................................................................11
5.2. Краткое описание методов ............................................................................................11
6. Автоматный класс A0...........................................................................................................11
6.1. Словесное описание.......................................................................................................11
6.2. Автомат «Менеджер заданий» (А0) ............................................................................12
6.2.1. Словесное описание..............................................................................................12
6.2.2. Схема связей..........................................................................................................12
6.2.3. Граф переходов......................................................................................................13
7. Автоматный класс A1.........................................................................................................13
7.1. Словесное описание.....................................................................................................13
7.2. Автомат «Обработка нажатий клавиш» (A1)..............................................................13
7.2.1. Словесное описание..............................................................................................13
7.2.2. Схема связей..........................................................................................................14
7.2.3. Граф переходов......................................................................................................15
8. Автоматный класс А2.........................................................................................................15
8.1. Словесное описание.....................................................................................................15
8.2. Автомат «Установка часов» (A2)................................................................................15
8.2.1. Словесное описание..............................................................................................15
8.2.2. Схема связей автомата..........................................................................................16
8.3.3. Граф переходов......................................................................................................17
9. Автоматный класс A3.........................................................................................................17
9.1. Словесное описание.....................................................................................................17
9.2. Автомат «Программирование заданий» (A3) .............................................................17
9.2.1. Словесное описание..............................................................................................17
9.2.2. Схема связей..........................................................................................................18
9.2.3. Граф переходов......................................................................................................19
10. Автоматный класс A4.......................................................................................................20
10.1. Словесное описание...................................................................................................20
10.2. Автомат «Часы» (A4).................................................................................................20
10.2.1. Словесное описание............................................................................................20
10.2.2. Схема связей........................................................................................................20
11.2.3.Граф переходов...................................................................................................21
Выводы....................................................................................................................................22
Литература..............................................................................................................................23
Приложение 1. Пример протокола работы программы.........................................................24
Приложение 2. Листинг программы......................................................................................30

Прикрепленные файлы: 1 файл

Курсовая_Теория автоматов.doc

— 817.50 Кб (Скачать документ)

18:28:12 }  A1: завершил обработку  события e7 в состоянии 2

18:28:12 }  A0: завершил обработку  события e7 в состоянии 0

18:28:14 {  A0: в состоянии 0 запущен с событием e11

18:28:14 {  A1: в состоянии 2 запущен с событием e11

18:28:14 {  A3: в состоянии 2 запущен с событием e11

18:28:14 T  A3: перешел из состояния 2 в состояние 3

18:28:14 *  z4. Показать выбранное  время выполнения задания.

18:28:14 *  z15_0. Отменить таймаут  выбора мощности.

18:28:14 }  A3: завершил обработку  события e11 в состоянии 3

18:28:14 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:14 }  A1: завершил обработку  события e11 в состоянии 2

18:28:14 }  A0: завершил обработку  события e11 в состоянии 0

18:28:14 {  A0: в состоянии 0 запущен с событием e5

18:28:14 {  A1: в состоянии 2 запущен с событием e5

18:28:14 {  A3: в состоянии 3 запущен с событием e5

18:28:14 >  x1: - выбранное  время выполнения задания равно 0? - вернул 1

18:28:14 *  z8. Добавить к  выбранному времени выполнения  задания 10 с

18:28:14 *  z4. Показать выбранное  время выполнения задания.

18:28:14 }  A3: завершил обработку события e5 в состоянии 3

18:28:14 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:14 }  A1: завершил обработку  события e5 в состоянии 2

18:28:14 }  A0: завершил обработку  события e5 в состоянии 0

18:28:17 {  A0: в состоянии 0 запущен с событием e9

18:28:17 {  A1: в состоянии 2 запущен с событием e9

18:28:17 {  A3: в состоянии 3 запущен с событием e9

18:28:17 >  x1: - выбранное  время выполнения задания равно 0? - вернул 0

18:28:17 >  x3: - дверь закрыта? - вернул 1

18:28:17 *  z9. Добавить задание в очередь.

18:28:17 T  A3: перешел из  состояния 3 в состояние 0

18:28:17 }  A3: завершил обработку  события e9 в состоянии 0

18:28:17 >  x4: - есть еще  задания в очереди? - вернул 1

18:28:17 T  A1: перешел из  состояния 2 в состояние 4

18:28:17 }  A1: завершил обработку события e9 в состоянии 4

18:28:17 T  A0: перешел из  состояния 0 в состояние 1

18:28:17 {  A1: в состоянии 4 запущен с событием e0

18:28:17 }  A1: завершил обработку  события e0 в состоянии 4

18:28:17 *  z23_1. Включить лампу.

18:28:18 *  z24_1. Начать выполнение заданий.

18:28:18 *  z28_1. Запустить ежесекундный  таймер выполнения задания.

18:28:18 *  z29. Показать сколько  времени до конца задания.

18:28:18 }  A0: завершил обработку  события e9 в состоянии 1

18:28:19 {  A0: в состоянии 1 запущен с событием e16

18:28:19 {  A1: в состоянии 4 запущен с событием e16

18:28:19 }  A1: завершил обработку  события e16 в состоянии 4

18:28:19 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:19 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:19 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:19 *  z29. Показать сколько  времени до конца задания.

18:28:19 }  A0: завершил обработку  события e16 в состоянии 1

18:28:20 {  A0: в состоянии 1 запущен с событием e16

18:28:20 {  A1: в состоянии 4 запущен с событием e16

18:28:20 }  A1: завершил обработку  события e16 в состоянии 4

18:28:20 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:20 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:20 *  z31. Уменьшить время  до конца задания на одну секунду.

18:28:20 *  z29. Показать сколько  времени до конца задания.

18:28:20 }  A0: завершил обработку  события e16 в состоянии 1

18:28:21 {  A0: в состоянии 1 запущен с событием e16

18:28:21 {  A1: в состоянии 4 запущен с событием e16

18:28:21 }  A1: завершил обработку  события e16 в состоянии 4

18:28:21 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:21 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:21 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:21 *  z29. Показать сколько времени до конца задания.

18:28:21 }  A0: завершил обработку  события e16 в состоянии 1

18:28:22 {  A0: в состоянии 1 запущен с событием e16

18:28:22 {  A1: в состоянии 4 запущен с событием e16

18:28:22 }  A1: завершил обработку  события e16 в состоянии 4

18:28:22 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:22 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:22 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:22 *  z29. Показать сколько  времени до конца задания.

18:28:22 }  A0: завершил обработку  события e16 в состоянии 1

18:28:23 {  A0: в состоянии 1 запущен с событием e16

18:28:23 {  A1: в состоянии 4 запущен с событием e16

18:28:23 }  A1: завершил обработку  события e16 в состоянии 4

18:28:23 >  x4: - до конца задания одна секунда? - вернул 0

18:28:23 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:23 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:23 *  z29. Показать сколько  времени до конца задания.

18:28:23 }  A0: завершил обработку события e16 в состоянии 1

18:28:24 {  A0: в состоянии 1 запущен с событием e16

18:28:24 {  A1: в состоянии 4 запущен с событием e16

18:28:24 }  A1: завершил обработку  события e16 в состоянии 4

18:28:24 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:24 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:24 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:24 *  z29. Показать сколько  времени до конца задания.

18:28:24 }  A0: завершил обработку  события e16 в состоянии 1

18:28:25 {  A0: в состоянии 1 запущен с событием e16

18:28:25 {  A1: в состоянии 4 запущен с событием e16

18:28:25 }  A1: завершил обработку  события e16 в состоянии 4

18:28:25 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:25 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:25 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:25 *  z29. Показать сколько  времени до конца задания.

18:28:25 }  A0: завершил обработку  события e16 в состоянии 1

18:28:26 {  A0: в состоянии 1 запущен с событием e16

18:28:26 {  A1: в состоянии 4 запущен с событием e16

18:28:26 }  A1: завершил обработку  события e16 в состоянии 4

18:28:26 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:26 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:26 *  z31. Уменьшить время до конца задания на одну секунду.

18:28:26 *  z29. Показать сколько  времени до конца задания.

18:28:26 }  A0: завершил обработку  события e16 в состоянии 1

18:28:27 {  A0: в состоянии 1 запущен с событием e16

18:28:27 {  A1: в состоянии 4 запущен с событием e16

18:28:27 }  A1: завершил обработку  события e16 в состоянии 4

18:28:27 >  x4: - до конца  задания одна секунда? - вернул 0

18:28:27 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:27 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:27 *  z29. Показать сколько  времени до конца задания.

18:28:27 }  A0: завершил обработку  события e16 в состоянии 1

18:28:28 {  A0: в состоянии 1 запущен с событием e16

18:28:28 {  A1: в состоянии 4 запущен с событием e16

18:28:28 }  A1: завершил обработку события e16 в состоянии 4

18:28:28 >  x4: - до конца  задания одна секунда? - вернул 1

18:28:28 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:28 *  z31. Уменьшить время  до конца задания на одну  секунду.

18:28:28 *  z23_0. Выключить лампу.

18:28:28 *  z24_0. Прекратить  выполнение заданий.

18:28:28 *  z28_0. Приостановить  ежесекундный таймер выполнения  задания.

18:28:28 {  A1: в состоянии 4 запущен с событием e12

18:28:28 T  A1: перешел из  состояния 4 в состояние 0

18:28:28 {  A2: в состоянии 0 запущен с событием e0

18:28:28 }  A2: завершил обработку  события e0 в состоянии 0

18:28:28 {  A3: в состоянии 0 запущен с событием e0

18:28:28 }  A3: завершил обработку  события e0 в состоянии 0

18:28:28 }  A1: завершил обработку события e12 в состоянии 0

18:28:28 {  A4: в состоянии 0 запущен с событием e15

18:28:28 *  z26_0. Показать, что  часы не установлены.

18:28:28 }  A4: завершил обработку  события e15 в состоянии 0

18:28:28 T  A0: перешел из  состояния 1 в состояние 0

18:28:28 {  A1: в состоянии 0 запущен с событием e0

18:28:28 {  A2: в состоянии 0 запущен с событием e0

18:28:28 }  A2: завершил обработку  события e0 в состоянии 0

18:28:28 {  A3: в состоянии 0 запущен с событием e0

18:28:28 }  A3: завершил обработку  события e0 в состоянии 0

18:28:28 >  x4: - есть еще  задания в очереди? - вернул 0

18:28:28 }  A1: завершил обработку  события e0 в состоянии 0

18:28:28 }  A0: завершил обработку  события e16 в состоянии 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 2. Листинг программы

В листинг включены лишь файлы, имеющие отношение к автоматам, а файлы,

сгенерированные автоматически средой Microsoft Visual C++, не приведены.

 

Листинг файла «Dispatcher.h»

// Dispatcher.h: interface for the Dispatcher class.

//

//////////////////////////////////////////////////////////////////////

 

#if !defined(AFX_DISPATCHER_H__9EE2FCAE_AC4C_4705_8653_F58E1B950E3E__INCLUDED_)

#define AFX_DISPATCHER_H__9EE2FCAE_AC4C_4705_8653_F58E1B950E3E__INCLUDED_

 

#include <windows.h>

#include <vector>

#include <deque>

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

class Automata;

class CMicroWaveDlg;

 

struct Time {

int hours;

int minutes;

int seconds;

};

 

struct Task_time {

int minutes;

int seconds;

};

 

struct Task {

Task(Task_time t, int p) : time(t), power(p) {}

Task_time time;

int power;

};

 

struct State

{

int current_power;

int current_mass;

bool clock_mode;

Time current_time;

Time choosed_time;

 

Task_time current_task_time;

Task_time choosed_task_time;

 

static const bool CLOCK_MODE_24H;

static const bool CLOCK_MODE_12H;

 

std::deque<Task> task_queue;

};

 

class Dispatcher

{

private:

State state;

CMicroWaveDlg *parent;

void put_log(const CString&);

public:

 

Dispatcher(CMicroWaveDlg *);

 

virtual ~Dispatcher();

void log_enter(int automata, int state, int event);

void log_trans(int automata, int old_state, int new_state);

void log_exit(int automata, int state, int event);

void log_input(int x, bool result, const char *descr);

void log_output(int z, const char *descr, bool has_arg = false, bool arg = false);

 

std::vector<Automata *> A;

 

// input variables

bool x1();

bool x2();

bool x3();

bool x4();

bool x5();

 

// output actions

void z1();

void z2();

void z3();

void z4();

void z5();

void z6();

void z7();

void z8();

void z9();

void z10();

void z11();

void z12();

void z13();

void z14();

void z15(bool);

void z16(bool);

void z17(bool);

void z18();

void z19();

void z20();

void z21();

void z22();

void z23(bool);

void z24(bool);

void z25();

void z26(bool);

void z27();

void z28(bool);

void z29();

void z30();

void z31();

void z32();

};

 

#endif // !defined(AFX_DISPATCHER_H__9EE2FCAE_AC4C_4705_8653_F58E1B950E3E__INCLUDED_)

 

 

Листинг файла «Dispatcher.cpp»

// Dispatcher.cpp: implementation of the Dispatcher class.

//

//////////////////////////////////////////////////////////////////////

 

#include "stdafx.h"

#include "MicroWaveDlg.h"

#include "Dispatcher.h"

#include "A0.h"

#include "A1.h"

#include "A2.h"

#include "A3.h"

#include "A4.h"

 

#ifdef _DEBUG

#undef THIS_FILE

Информация о работе Разработка цифрового автомата, управляющего работой микроволновой печи