close

Вход

Забыли?

вход по аккаунту

?

kursach(6)

код для вставкиСкачать
Міністерство освіти та науки україни
Донецький національний технічний університет
Кафедра АТ
Курсова робота
з "Алгоритмичних мов і программуванню"
Виконав:
Ст. гр. ТКС-05а
Орехов О. О.
Перевірив:
Яремко І. М.
Донецьк, 2006
Завдання на курсову роботу.№24
У цеху знаходиться 8 станків з програмним керуванням. Кожний станок може виконувати 5 програм обробки. Всього всі станки цеху виконують 10 видів обробки. Для кожного виду обробки відомий час обробки, який однаковий для всіх станків. У цех надходять заготовки, які необхідно обробити за кількома видами програм, кожна заготовка має свій номер та коефіцієнт, який впливає на час обробки. Відображати номера заготовок, які очікують обробку, номера заготовок, які знаходяться на станках та на яких станках, час, який залишився до закінчення обробки. Перевіряти які станки можуть виконувати необхідну операцію. Відображати список оброблених деталей.
Реферат
Курсова робота: 19 сторінок, 7 рисунків, 1 додаток.
Ціль роботи: створення робочої моделі цеху, що складається з восьми станків з програмним керуванням, а також можливість керування виробництвом у цеху.
У данній курсовій роботі створюється та описується модель цеху. Організовується можливість керуючого здійснювати контроль за обробкою деталей на станках, керуванням процессу виробництва. Керуючий має можливість отримувати такі данні:
- номера деталей, які очікують обробки.
- номера деталей, які обробляються.
- час до закінчення обробки кожної деталі.
- данні про доступність программ обробки.
У даній курсовій роботі здійснена постановка завдання (аналіз станка-об'єкта, описано функціонування цеху, складена математична модель), обрана оптимальна мова програмування (С++), розроблені типи, необхідні для функціонування цеху, описаний інтерфейс користувача, складені детальні блок-схеми алгоритмів програми, зроблено опис програми та наведено лістинг програми.
ЦЕХ, СТАНОК, ДЕТАЛЬ, ОБРОБКА, КЛАС, ІНТЕРФЕЙС.
Зміст
Введення5
1. Постановка завдання6
2. Вибір та обгрунтування мови програмування8
3. Розробка типів. Явища, що підлягають типізації9
4. Блок-схеми алгоритмів й опис роботи програми10
5. Опис інтерфейсу користувача12
Висновок13
Додаток (лістинг программи)14
Введення.
Завдання автоматизації та роль програмних засобів у рішенні цих завдань.
Автоматизація - системне охоплення автоматизацією керування технологічними й організаційними процесами різних шаблів виробничої й господарської діяльності. Автоматизація не виключає участі людини у виконанні складних функцій керування, які важко піддаються автоматизації.
Серед основних завдань автоматизації можна пиділити наступні: прискорення науково-технічного прогресу, збільшення номенклатури продукції, підвищення вимог до її якості, ускладнення виробничих зв'язків між різними ланками народного господарства, ріст масштабів і темпів розвитку виробництва в різних галузях.
Програмні засоби відіграють величезну роль у виконанні даних завдань. Серед основних функцій програмних засобів можна виділити: здійснюють збір інформації, передачу, зберігання інформації, допомагають у складанні й обліку документації, підготовці та ухваленні рішень, здійснюють автоматизацію проектно-конструкторських та інших управлінських робіт. Застосовують в основному для автоматизації розв'язування складних функцій керування.
Правильне впровадження автоматизації на основі різних програмних засобів веде до значного поліпшення якості керування у всіх ланках народного господарства, скороченню управлінського апарата та підвищенню ефективності його діяльності.
Для того,щоб якнайкраще відчути та зрозуміти завдання автоматизації - у даній курсовій роботі, ми маємо можливість, за допомогою програмних засобів, створити справжню модель цеху зі станками з програмним керуванням. За допомогою програми можна отримувати інформацію про стан устаткування - час обробки деталей, які заготовки обробляються, яке устаткування тощо.
1. Постановка завдання.
Завдання даної курсової роботи складається в розробці системи об'єктів - станків, що зводиться до створення моделі одного об'єкта. Ця програма є навчальним макетом керування станками. Модель являє собою цех з восьми об'єктів-станків, кожний з яких пронумерований. На станках відображаються:
а) номер деталі, які у данний момент обробляються;
б) номера деталей, які стоять на черзі.
в) час необхідний для обробки кожної деталі.
г) поточний час оброблюваної деталі.
Керування станками відбувається за допомогою меню користувача.
Видно, що кожен станок маютє свої параметри: можливі програми обробки, список деталей тощо. Тому їх краще задати окремими типами. І, звичайно ж, необхідно розробити тип - "станок".
Отже, визначимо, які задачі постають перед нами при реалізації програми: 1)нам необхідно, щоб користувач міг спостерігати за ходом обробки деталі - значить всі станки повинні працювати одночасно;
2)тому що керування здійснюється з клавіатури, то програма постійно повинна перевіряти, чи булв вибраний пункт меню, а після цього викликати для кожного станку поточний режим, який визначається перемінними select (пункт меню) і tab (виділений станок); 3)при виклику пункту меню встановлення деталі необхідно запам'ятати номер деталі, программи за якими вона повинна оброблюватися та коефіцієнт обробки.
4)без участі користувача (в режимі реального часу) програма повинна відображати поточний час обробки деталі, тому постійно необхідно слідкувати за часом початку обробки деталі та теперішнім часом.
5)після закінчення обробки деталі, необхідно, щоб станок почав обробляти наступну деталь, а оброблену відображав у списку оброблених деталей.
5)для спрощення роботи зі станком необхідно створити окремі функції керування станком: функції встановлення деталі, зупинки тощо.
2. Вибір та обгрунтування мови програмування.
Для даної курсової роботи ми скористаємося мовою С++. Обгрунтуванням для такого вибору є: С++ - лаконічна мова, вона може забезпечити ефективне керування апаратними засобами та дозволяє створювати компактні, швидко процюючі програми. Крім того, у мові С++ закладені принципи об'єктно-орієнтованого програмування (ООП). На відміну від процедурного програмування інших, менш ефективних мов (наприклад Pascal), де головна увага приділяється алгоритмам, в ООП основний акцент робиться на дані. При використанні ООП проблему вирішують не за допомогою процедурного підходу закладеного у мові, а пристосовують мову для вирішення цієї проблеми. Ідея полягає в створенні таких форм даних, які сприяли б специфіці завдання. Специфікацією, що описує подібну унікальну форму даних, у мові С++ є клас, а конкретною структурою даних, створеною відповідно до цієї специфіки, - об'єкт.
Наприклад, якщо нам забажається у даній курсовій зробити клас-деталь, то можна описувати загальні для всіх деталей будь-яких цехів властивості (номер, список програм обробки, коєфіцієнт обробки), тоді як об'єкт представляється окрема деталь зі своїми властивостями. У загальному випадку клас визначає, які дані будуть представляти об'єкт та які операції будуть вионуватися над цими даними. Якщо нам потрібно три деталі, програма створить три об'єкти типу деталь, шість станків - шість об"єктів типу станок, тощо. Об'єктно орієнтований підхід до розробки полягає в тому, що спочатку розробляються класи, що точно представляють ті речі, з якими має справу програми. Після цього, використовуючи об'єкти класів, можна розроблювати саму програму. Такий процес програмування називається "програмуваням униз". Розробка корисного і надійного класу є важким завданням. Однак мова С++ надає гарні умови в розробці, що значно полегшує завдання програміста.
3. Розробка типів. Явища, які підлягають типізації. У даній курсовій роботі розроблено два класи: клас tool (що визначає кожний станок), клас det (що визначає деталі).
Клас det зберігає набір програм для обробки деталі (int *process), коефіцієнт обробки (float k), час до завершення обробки (int left_time) та загальний час обробки (int all_time).
Визначимо методи даного класу:
1. void set(float tk,int tnum, int* tpro, int tn) - встановлює, або змінює початкові дані про деталь.
2. void left_time_add(int n) - функція додавання пройденого часу.
3. Конструктор det() - встановлює нульові параметри часу та стану.
4. Деструктор ~det() - видаляє виділену память.
Клас tool зберігає список деталей, час до закінчення обробки всіх деталей, список доступних программ, статус активності (det *d; int all_time; int *av_process; int nonstop;).
Визначимо методи даного класу:
1. Конструктор tool();
2. Деструктор ~tool() - видаляє виділену пам'ять;
3. void start_det(); - початок (або продовження після зупинки) обробки деталі;
4. void calc_time(); - підрахунок часу
5. void stop() - зупинка станка. Після її визову функція calc_time() час не рахує;
6. void show(point p) - малювання зображення станка та вивід даних;
7. void save(char*) - збереження даних у файл.
8. int set_det(float k, int ndet, int *proc, int nproc) - встановлення нової деталі на станок;
9. void start_det() - старт нової деталі.
10. void next_det() - старт наступної деталі.
Рис 1. Конструктор
tool();
Рис 2. Блок-схема calc_time()
6. Блок-схеми алгоритмів й опис роботи програми.
Рис. 3 - Блок-схема set_det()
Рис. 4 - Блок-схема
Main
5. Опис інтерфейсу користувача
Інтерфейс користувача представлений у вигляді чотирьох пунктів меню, за допомогою яких дуже просто здійснюється керування цехом:
* Set_det - встановити деталь
* Start\stop - зупинка-старт виділеного станка.
* Save - збереження поточних даних про стан цеху.
* Exit - вихід з програми.
Виділення станка виконується клавішою tab на клавіатурі.
При виборі пункту Set_det потрібно з клавіатури ввести, спочатку коєфіціенть обробки, а потім вибрати необхідні номера програм обробки деталей.
Вихід з программи - клавіша Escape.
Висновок.
У даній курсовій роботі був здійснений аналіз математичної моделі цеху, описане функціонування станків з програмним керуванням, розроблені методи та типи даних, які потрібні для здійснення роботи програми. В узгодженні з завданням, створюється й описується цех, здійснюється можливість користувача керувати кожним станком із клавіатури і спостерігати за його роботою. Користувач може встановлювати деталі на кожнен станок, а також зупиняти обробку деталі. Ця програма може використовуватись як навчальний макет роботи станків з програмним керуванням. Додаток. Лістинг програми
/************** det.cpp **************
* Класс: ДЕТАЛЬ. *
* Автор: ст. гр. ТКС-05а Орехов. *
* Для курсового по ООП. *
****************************************/
#define DET_CPP
const int timings[]={200,300,60,10,10,400,300,600,300,400};
class det{
int *process;
int n_process;
float k;
int num, s;
int left_time, all_time;
public:
det(){ s=0; dt=0; };
~det();
float get_k(){ return k; };
int get_num(){ return num; };
int* get_all_process(){ return process; };
void set(float tk,int tnum, int* tpro, int tn);
int get_all_time(){ return all_time; };
int get_left_time(){ return left_time; };
void left_time_add(int n){ left_time-=dt; };
int get_n_proc(){ return n_process; };
struct time start;
int dt;
};
det::~det(){
if(s==1) delete(process);
}
void det::set(float tk, int tnum, int* tpro, int tn){
k=fabs(tk);
num=abs(tnum);
n_process=tn;
process=new int[tn];
all_time=0;
for(int i=0; i<tn; i++){ process[i]=tpro[i];
all_time+=timings[process[i]]*k;
}
left_time=all_time;
s=1;
}
/************** tool.cpp *************
* Класс: СТАНОК. *
* Автор: ст. гр. ТКС-05а Орехов. *
* Для курсового по ООП. *
****************************************/
#define TOOL_CPP
#ifndef DET_CPP
#include "det.cpp"
#endif
#define ALL_PROC 5
#define ALL_P 10
struct point{int x, y;};
class tool{
det *d;
int current_time, all_time;
int *av_process;
int num;
int det_col, act_det;
int nonstop;
public:
tool();
~tool();
int set_det(float k, int ndet, int *proc, int nproc);
int *get_done(){ return done; }
int get_done_col(){ return done_col; }
void next_det();
void start_det(){ gettime(&d[act_det].start); };
void calc_time();
void stop();
void show(point p);
void save(char*);
void load(ifstream&);
void set_num(int n){num=n;};
int sel;
int *done;
int done_col;
};
tool::tool(){
av_process=new int[ALL_PROC];
done=new int[20];
d=new det[10];
det_col=0; act_det=0;
sel=0;
nonstop=1;
done_col=0;
}
tool::~tool(){
delete(av_process);
delete(d);
delete(done);
}
void tool::stop(){
nonstop=(nonstop==1?0:1);
}
int tool::set_det(float k, int ndet, int *proc, int nproc){
int f=0;
for(int i=0; i<nproc; i++)
for(int j=0; j<ALL_PROC; j++)
if(proc[i]==av_process[j]) f++;
if(f==nproc && det_col<10){
d[det_col].set(k, ndet, proc, nproc);
if(det_col==0) start_det();
det_col++;
}
else return -1;
return 0;
}
void tool::next_det(){
done[done_col]=d[act_det].get_num();
done_col++;
act_det++;
start_det();
if(act_det>det_col) { act_det=0; det_col=0; }
}
void tool::calc_time(){
struct time t;
int tt, tn;
gettime(&t);
all_time=0;
tt=t.ti_min*60+t.ti_sec;
tn=d[act_det].start.ti_min*60+d[act_det].start.ti_sec;
if(nonstop==1) d[act_det].dt=tt-tn;
d[act_det].left_time_add(nonstop);
if(d[act_det].get_left_time()<0 && det_col>0) next_det();
for(int i=act_det; i<det_col; i++)
all_time+=d[i].get_left_time();
start_det();
}
void tool::show(point p){
calc_time();
char *s;
if(sel==1) setcolor(RED);
else setcolor(WHITE);
rectangle(p.x, p.y, p.x+99, p.y+99);
setfillstyle(1, BLACK);
bar(p.x+1, p.y+1, p.x+98, p.y+98);
moveto(p.x, p.y);
for(int i=0; i<ALL_PROC; i++){
itoa(av_process[i], s, 10);
outtext(s);
outtext(" ");
}
int sec, min, tem;
for(i=act_det; i<det_col; i++){
moveto(p.x, p.y+(i+1-act_det)*10);
itoa(d[i].get_num(), s, 10);
outtext(s); outtext(" ");
tem=d[i].get_left_time();
min=tem/60;
sec=tem-min*60;
itoa(min, s, 10);
outtext(s); outtext(":");
itoa(sec, s, 10);
outtext(s); outtext(" ");
}
moveto(p.x, p.y+90);
tem=all_time;
min=tem/60;
sec=tem-min*60;
itoa(min, s, 10);
outtext(s); outtext(":");
itoa(sec, s, 10);
outtext(s); outtext(" ");
};
void tool::save(char *path){
ofstream f;
struct time t;
gettime(&t);
int tem=all_time;
int min=tem/60;
int sec=tem-min*60;
f.open(path, ios::app);
f << (int)t.ti_hour << ":" << (int)t.ti_min << ":" << (int)t.ti_sec << " - ";
f << "Stanok #" << num << " (" << min << ":" << sec << "): " << endl;
for(int i=act_det; i<det_col; i++){
tem=d[i].get_all_time();
min=tem/60;
sec=tem-min*60;
f << d[i].get_num() << " (" << min << ":" << sec << "): ";
for(int j=0; j<d[i].get_n_proc(); j++)
f << d[i].get_all_process()[j] << " ";
f<<endl;
}
f<<endl;
if(num==N-1) f <<"-----------------------------------"<<endl;
f.close();
}
void tool::load(ifstream &f){
for(int i=0; i<ALL_PROC; i++) f >> av_process[i];
}
/************** main.cpp **************
* Главній модуль. *
* Автор: ст. гр. ТКС-05а Орехов. *
* Для курсового по ООП. *
****************************************/
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
#include <dos.h>
#include <conio.h>
#include <graphics.h>
#include <string.h>
#include <fstream.h>
#define ESC 27
#define TAB 9
#define ENTER 13
#define UP 72
#define DOWN 80
#define BACK 8
#define N 8
#define OUTPATH "output\\log.txt"
#define INPATH "output\\in.txt"
#include "tool.cpp"
#define DRPATH "output\\"
float input(point p){
char s[20], t[]={-37,-37,-37,-37,-37,-37,-37,-37,-37};
int i=0; s[i]='\0';
char c=getch();
while(c!=ENTER && c!=ESC){
if(c!=BACK){
s[i]=c;
s[i+1]=-37;
s[i+2]='\0';
i++;
}
else {i--; s[i]=-37;
s[i+1]='\0';
}
setcolor(BLACK);
outtextxy(p.x, p.y, t);
setcolor(GREEN);
outtextxy(p.x, p.y, s);
c=getch();
}
setcolor(WHITE);
s[i]='\0';
if(c==ESC) return -1;
else return atof(s);
}
int input(point p, int *h){
char t[]={-37,-37,-37,-37,-37,-37,-37,-37,-37}, s[1];
int l[ALL_P], k=0;
for(int i=0; i<ALL_P; i++) l[i]=0;
char c; i=0;
do{
if(c<='9' && c>='0'){
l[c-'0']=(l[c-'0']==0?1:0);
}
setcolor(BLACK);
outtextxy(p.x, p.y, t);
for(i=0; i<ALL_P; i++){
if(l[i]==0) setcolor(WHITE);
else setcolor(RED);
itoa(i, s, 10);
outtextxy(p.x+i*10, p.y, s);
}
c=getch();
}while(c!=ENTER && c!=ESC);
for(i=0; i<ALL_P; i++)
if(l[i]==1){ h[k]=i; k++; }
if(c==ESC) return -1;
else return k;
}
void main(){
tool tools[N];
ifstream f;
f.open(INPATH);
for(int j=0; j<N; j++){ tools[j].load(f); }
f.close();
char c;
point p;
int select=0, tab=0, n_det=0, *don;
tools[0].sel=1;
randomize();
char items[4][20], s[20]; int nitems=4;
strcpy(items[0], "Set_Det");
strcpy(items[1], "Start/Stop");
strcpy(items[2], "Save");
strcpy(items[3], "Exit");
int grDriver=DETECT, grMode, grError;
initgraph(&grDriver, &grMode, DRPATH);
while(c!=ESC){
setfillstyle(1, 0);
p.x=50;
p.y=300;
bar(p.x, p.y, p.x+600, p.y+60);
for(j=0; j<nitems; j++){
if(j==select) setcolor(RED);
else setcolor(WHITE);
outtextxy(p.x, j*10+p.y, items[j]);
}
int i=0;
while(!kbhit()){
for(i=0; i<N; i++){
p.x=(i<=N/2?i*100+20:(i-N/2-1)*100+20);
p.y=(i<=N/2?20:200);
tools[i].set_num(i);
tools[i].show(p);
}
gotoxy(1,25);
for(int g=0; g<N; g++){
if(tools[g].done_col>0){
for(int o=0; o<=tools[g].done_col; o++){
cout << tools[g].done[o] << " ";
}
}
}
delay(100);
}
c=getch();
p.x=50;
p.y=300;
switch(c){
case TAB: { tools[tab].sel=0;
tab=(tab==N-1?0:tab+1);
tools[tab].sel=1;
break;
}
case DOWN: { select=(select==nitems-1?0:select+1); break; }
case UP: { select=(select==0?nitems-1:select-1); break; }
case ENTER: {
switch(select){
case 0: {
setcolor(WHITE);
float k;
setfillstyle(1, 0);
bar(p.x, p.y, p.x+200, p.y+100);
outtextxy(p.x, p.y, "Vvedite k: ");
p.x+=100;
if((k=input(p))!=-1){
int proc[10], nproc=0;
p.y+=10;
p.x-=100;
outtextxy(p.x, p.y, "Kak obrabativat': ");
p.x+=150;
if((nproc=input(p, proc)!=-1)){
p.x-=150;
p.y+=10;
itoa(n_det, s, 10);
strcat(s, " - nomer detali");
outtextxy(p.x, p.y, s);
getch();
if(tools[tab].set_det(k, n_det, proc, nproc)==0) n_det++;
else {
p.y+=10;
outtextxy(p.x, p.y, "Stanok ne imeet takih vozmozhnostej!!!");
getch();
}
}
}
break;}
case 1: { tools[tab].stop(); break; }
case 2: { for(int i=0; i<N; i++) tools[i].save(OUTPATH); break; }
case 3: { closegraph(); exit(1); }
}
}
}
}
closegraph();
}
4
Документ
Категория
Рефераты
Просмотров
21
Размер файла
154 Кб
Теги
kursach
1/--страниц
Пожаловаться на содержимое документа