Автор работы: Пользователь скрыл имя, 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
if(state.current_task_time.
state.current_task_time.
state.current_task_time.
}
}
Листинг файла «Logger.cpp»
#include "stdafx.h"
#include <string>
#include "MicroWaveDlg.h"
#include "Dispatcher.h"
void Dispatcher::put_log(const CString& str)
{
parent->m_Log += str;
parent->m_LogWnd.SetRedraw(
parent->UpdateData(false);
parent->m_LogWnd.LineScroll(
parent->m_LogWnd.SetRedraw(
parent->m_LogWnd.Invalidate();
}
void Dispatcher::log_enter(int automata, int state, int event)
{
CTime time = CTime::GetCurrentTime();
CString t((LPCTSTR)time.Format("%H:%M:
CString str;
str.Format(" { A%d: в состоянии %d запущен с событием e%d\r\n", automata, state,
event);
put_log(t + str);
}
void Dispatcher::log_exit(int automata, int state, int event)
{
CTime time = CTime::GetCurrentTime();
CString t((LPCTSTR)time.Format("%H:%M:
CString str;
str.Format(" } A%d: завершил обработку события e%d в состоянии %d\r\n", automata,
event, state);
put_log(t + str);
}
void Dispatcher::log_trans(int automata, int old_state, int new_state)
{
CTime time = CTime::GetCurrentTime();
CString t((LPCTSTR)time.Format("%H:%M:
CString str;
str.Format(" T A%d: перешел из состояния %d в состояние %d\r\n", automata,
old_state, new_state);
put_log(t + str);
}
void Dispatcher::log_input(int x, bool result, const char* descr)
{
CTime time = CTime::GetCurrentTime();
CString t((LPCTSTR)time.Format("%H:%M:
CString str;
str.Format(" > x%d: - %s - вернул %d\r\n", x, descr, result);
put_log(t + str);
}
void Dispatcher::log_output(int z, const char *descr, bool has_arg, bool arg)
{
CTime time = CTime::GetCurrentTime();
CString t((LPCTSTR)time.Format("%H:%M:
CString str;
if(has_arg) {
str.Format(" * z%d_%d. %s\r\n", z, arg, descr);
} else {
str.Format(" * z%d. %s\r\n", z, descr);
}
put_log(t + str);
}
Листинг файла «Automata.h»
// Automata.h: interface for the Automata class.
//
//////////////////////////////
#if !defined(AFX_AUTOMATA_H__
#define AFX_AUTOMATA_H__39EFE032_7B8A_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class Dispatcher;
class Automata
{
protected:
int number;
int state;
Dispatcher *dispatcher;
protected:
virtual void state_changed() = 0;
virtual void handle_state(const int e) = 0;
virtual void nested_automatas(const int e) = 0;
public:
int get_state();
void wake(const int event);
Automata(Dispatcher * d);
virtual ~Automata();
};
#endif // !defined(AFX_AUTOMATA_H__
Листинг файла «Automata.cpp»
// Automata.cpp: implementation of the Automata class.
//
//////////////////////////////
#include "stdafx.h"
#include "MicroWave.h"
#include "Dispatcher.h"
#include "Automata.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////
// Construction/Destruction
//////////////////////////////
Automata::Automata(Dispatcher *d) : dispatcher(d), state(0)
{
}
Automata::~Automata()
{
}
void Automata::wake(const int event)
{
int old_state = state;
dispatcher->log_enter(number, state, event);
nested_automatas(event);
handle_state(event);
if(state != old_state) {
dispatcher->log_trans(number, old_state, state);
state_changed();
}
dispatcher->log_exit(number, state, event);
}
int Automata::get_state()
{
return state;
}
Листинг файла «A0.h»
// A0.h: interface for the A0 class.
//
//////////////////////////////
#if !defined(AFX_A0_H__7ABC4FC7_
#define AFX_A0_H__7ABC4FC7_F4F8_4520_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Automata.h"
class A0 : public Automata
{
public:
A0(Dispatcher *d);
virtual ~A0();
protected:
void handle_state(const int e);
void state_changed();
void nested_automatas(const int e);
};
#endif // !defined(AFX_A0_H__7ABC4FC7_
Листинг файла «A0.cpp»
// A0.cpp: implementation of the A0 class.
//
//////////////////////////////
#include "stdafx.h"
#include "A0.h"
#include "Dispatcher.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////
// Construction/Destruction
//////////////////////////////
A0::A0(Dispatcher *d) : Automata(d)
{
number = 0;
}
A0::~A0()
{
}
void A0::nested_automatas(const int e)
{
switch(state) {
case 0:
dispatcher->A[1]->wake(e);
break;
case 1:
dispatcher->A[1]->wake(e);
break;
}
}
void A0::handle_state(const int e)
{
bool _x4, _x5;
switch(state) {
case 0:
if(e == 10) {
dispatcher->z23(1);
} else if(e == 12) {
dispatcher->z23(0);
} else if (dispatcher->A[1]->get_state() == 4) {
state = 1;
} else if (dispatcher->A[1]->get_state() == 0) {
dispatcher->A[4]->wake(15);
}
break;
case 1:
_x5 = dispatcher->x5();
_x4 = dispatcher->x4();
if((dispatcher->A[1]->get_stat
state = 0;
dispatcher->z23(0);
dispatcher->z24(0);
dispatcher->z28(0);
} else if ((dispatcher->A[1]->get_state(
state = 0;
dispatcher->z24(0);
dispatcher->z28(0);
} else if (e == 16 && _x5 && !_x4) {
state = 0;
dispatcher->z31();
dispatcher->z23(0);
dispatcher->z24(0);
dispatcher->z28(0);
dispatcher->A[1]->wake(17);
dispatcher->A[4]->wake(15);
} else if ((e == 16) && _x5 && _x4) {
dispatcher->z30();
dispatcher->z29();
} else if ((e == 16) && !_x5) {
dispatcher->z31();
dispatcher->z29();
}
break;
}
}
void A0::state_changed()
{
switch(state) {
case 0:
dispatcher->A[1]->wake(0);
break;
case 1:
dispatcher->A[1]->wake(0);
dispatcher->z23(1);
dispatcher->z24(1);
dispatcher->z28(1);
dispatcher->z29();
break;
}
}
Листинг файла «A1.h»
// A1.h: interface for the A1 class.
//
//////////////////////////////
#if !defined(AFX_A1_H__FA3EB6DD_
#define AFX_A1_H__FA3EB6DD_B0A0_448F_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Automata.h"
class A1 : public Automata
{
protected:
void handle_state(const int e);
void nested_automatas(const int e);
void state_changed();
public:
A1(Dispatcher *d);
virtual ~A1();
};
#endif // !defined(AFX_A1_H__FA3EB6DD_
Листинг файла «A1.cpp»
// A1.cpp: implementation of the A1 class.
//
//////////////////////////////
#include "stdafx.h"
#include "Dispatcher.h"
#include "A1.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////
// Construction/Destruction
//////////////////////////////
A1::A1(Dispatcher *d) : Automata(d)
{
number = 1;
}
A1::~A1()
{
}
void A1::nested_automatas(const int e) {
switch(state) {
case 0:
dispatcher->A[2]->wake(e);
dispatcher->A[3]->wake(e);
break;
case 1:
dispatcher->A[2]->wake(e);
break;
case 2:
dispatcher->A[3]->wake(e);
break;
case 3:
break;
case 4:
break;
}
}
void A1::handle_state(const int e){
bool _x4;
switch(state) {
case 0:
if(e == 1 || e == 7) {
state = 2;
} else if(e == 6) {
state = 1;
} else if ((dispatcher->A[3]->get_state(
state = 4;
}
break;
case 1:
if(dispatcher->A[2]->get_
state = 0;
}
break;
case 2:
_x4 = dispatcher->x4();
if((dispatcher->A[3]->get_
state = 4;
} else if((dispatcher->A[3]->get_
state = 0;
}
break;
case 3:
if(e == 8) {
state = 0;
dispatcher->z10();
} else if ((e == 9) && dispatcher->x3()) {
state = 4;
}
break;
case 4:
if(e == 9) {
dispatcher->z32();
dispatcher->z29();
} else if (e == 17) {
state = 0;
} else if (e == 8|| e == 10) {
state = 3;
}
break;
}
}
void A1::state_changed()
{
switch(state) {
case 0:
dispatcher->A[2]->wake(0);
dispatcher->A[3]->wake(0);
break;
case 1:
dispatcher->A[2]->wake(0);
break;
case 2:
dispatcher->A[3]->wake(0);
break;
case 3:
break;
case 4:
break;
}
}
Листинг файла «A2.h»
// A2.h: interface for the A2 class.
//
//////////////////////////////
#if !defined(AFX_A2_H__839CF12F_
#define AFX_A2_H__839CF12F_227E_4056_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Automata.h"
class A2 : public Automata
{
protected:
void handle_state(const int e);
void nested_automatas(const int e) {};
void state_changed();
public:
A2(Dispatcher *d);
virtual ~A2();
};
#endif // !defined(AFX_A2_H__839CF12F_
Листинг файла «A2.cpp»
// A2.cpp: implementation of the A2 class.
//
//////////////////////////////
#include "stdafx.h"
Информация о работе Разработка цифрового автомата, управляющего работой микроволновой печи