Автор работы: Пользователь скрыл имя, 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
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__
#define AFX_DISPATCHER_H__9EE2FCAE_
#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__
Листинг файла «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
Информация о работе Разработка цифрового автомата, управляющего работой микроволновой печи