Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / Методичка_проектирование МП систем.doc
Скачиваний:
116
Добавлен:
08.03.2016
Размер:
1.92 Mб
Скачать

5.5. Интерфейс программы для пк

Используя знания по курсу «Программные средства СРВ» мы создаем проект в среде Borland C++ Builder6.

Здесь у нас две основные задачи:

  • Создать простой и удобный интерфейс.

  • Написать непосредственно код программы.

При создании интерфейса мы будем использовать следующие компоненты:

  • Компонента Image – картинка, отображающая технологиеский процесс.

  • Компонета LabeledEdit – текстовое поле, для отображения параметров технологического процесса. Мы используем 7 таких компонент для отображения информации о скорости движения проволоки, длине, диаметре, массе, объеме, площади поперечного сечения, числе витков проволоки.

  • Компонента Panel – информационная панель для отображения сообщений оператору. Мы используем 2 такие компоненты.

  • Компонента BitBtn – управляющие кнопки. Кнопка ПУСК для запуска технологического процесса. Кнопка СТОП для остановки технологического процесса. Кнопка ВЫХОД для закрытия программы.

Рис.9.Окно управляющей программы.

5.6. Алгоритм программы для пк

5.7. Программа для пк

//---------------------------------------------------------------------------

#include<vcl.h>//библиотека визуальных компонентов

#include<math.h>//математическая библиотека

#pragmahdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CPort"

#pragma resource "*.dfm"

TForm1 *Form1;//объект форма

floatkol_impuls,D,S,N,L,W,M,V;//переменные – колличество импульсов, //площадь поперечного сечения, число витков, длина проволоки, объем, //масса, скорость соответственно.

floatkol_L=0;//вспомогательная переменная длина проволоки

floatkol_M=0;//вспомогательная переменная масса

floatkol_W=0;//вспомогательная переменная объем

bool era=true;//бит начала

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner) //конструктор формы

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{//обработик события – «создание формы»

Form1->ComPort1->Open();//открытие порта

Form1->ComPort1->Connected=true; //устанавливаем связь

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)

{// обработик события – «разрушения формы»

Form1->ComPort1->ClearBuffer(true,true); //чистим буффер порта

Form1->ComPort1->Connected=false; //разрываем связь с портом

Form1->ComPort1->Close();//закрываем порт

}

//---------------------------------------------------------------------------

void __fastcall TForm1::StartClick(TObject *Sender)

{// обработик события – «нажатие кнопки ПУСК»

if(era)

{

kol_impuls=0; //обнуляем все глобальные переменные

kol_L=0;

kol_M=0;

kol_W=0;

D=0;S=0;N=0;L=0;W=0;M=0;V=0;

Form1->Panel2->Caption="";//убираем текст с панели

Form1->Timer1->Enabled=false; // выключаем таймер

Form1->LabeledEdit1->Text="0.5";//выводим скорость движения //проволоки

Form1->LabeledEdit2->Text="0";//обнуляем все текстовые поля

Form1->LabeledEdit3->Text="0";//

Form1->LabeledEdit4->Text="0";//

Form1->LabeledEdit5->Text="0";//

Form1->LabeledEdit6->Text="0";//

Form1->LabeledEdit7->Text="0";//

}

Form1->Panel2->Caption="";// убираем текст с панели

Form1->ComPort1->TransmitChar('Y'); //отправляем в порт символ Y

Form1->ComPort1->ClearBuffer(true,true); //чистим буффер

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ExitClick(TObject *Sender)

{// обработик события – «нажатие кнопки ВЫХОД»

Form1->Close();//закрытие приложения

}

//---------------------------------------------------------------------------

void __fastcall TForm1::StopClick(TObject *Sender)

{// обработик события – «нажатие кнопки СТОП»

kol_impuls=0; //обнуляем

era=false; //сбрасываем бит начала

Form1->ComPort1->TransmitChar('N'); // отправляем в порт символ N

Form1->ComPort1->ClearBuffer(true,true); // чистим буффер

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)

{ //обработик события – «прием информации по СОМ-порту»

AnsiStringmessage=0; //локальная переменная типа строка

Form1->ComPort1->ReadStr(message,Count); //считываемCount//символов из буфера в переменнуюmessage

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

if(message=="1") // то есть 1 импульс от датчика скорости

{

kol_impuls+=1; //увеличиваем колличество импульсов на1

L+=0.0001; //увелииваем длину проволоки на0.0001

Form1->LabeledEdit5- >Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=0.001; //увеличиваем исло витков на 0.001

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,3);// число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

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

if(message=="10") // то есть 10 импульсов от датчика скорости

{

kol_impuls+=10; //увеличиваем колличество импульсов на10

L+=0.001; //увелииваем длину проволоки на0.001

Form1->LabeledEdit5->Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=0.01; //увеличиваем исло витков на 0.01

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,3);// число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

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

if(message=="100") // то есть 100 импульсов от датчика скорости

{

kol_impuls+=100; //увеличиваем колличество импульсов на100

L+=0.01; //увелииваем длину проволоки на0.01

Form1->LabeledEdit5->Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=0.1; //увеличиваем исло витков на 0.1

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,3);//число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

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

if(message=="1000") // то есть 1000 импульсов от датчика скорости

{

kol_impuls+=1000; //увеличиваем колличество импульсов на1000

L+=0.1; //увелииваем длину проволоки на0.1

Form1->LabeledEdit5->Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=1; //увеличиваем исло витков на 1

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,3);//число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

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

if(message=="10000") // то есть 10000 импульсов от датчика скорости

{

kol_impuls+=10000; //увеличиваем колличество импульсов на10000

L+=1; //увелииваем длину проволоки на1

Form1->LabeledEdit5->Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=10; //увеличиваем исло витков на 10

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,4);//число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

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

if(message=="100000") // то есть100000 импульсов от датчика скорости

{

kol_impuls+=100000; //увеличиваем колличество импульсов на100000

L+=10; //увелииваем длину проволоки на10

Form1->LabeledEdit5->Text=FloatToStrF(L+kol_L,ffFixed,12,4); //длина

N+=100; //увеличиваем исло витков на 100

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

W=S*L; // считаем объем

M=W*7850; //считаем массу

Form1->LabeledEdit4->Text=FloatToStrF(N,ffFixed,12,4);//число витков

Form1->LabeledEdit3->Text=FloatToStrF((W+kol_W),ffFixed,12,4); //объем

Form1->LabeledEdit6->Text=FloatToStrF((M+kol_M),ffFixed,12,4); //масса

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

if(L>=100)//если намотано 100 метров провода то

{

kol_L+=L;//увеличиваем суммарную длину на L

kol_W+=W;//увеличиваем суммарный объем на W

kol_M+=M;//увеличиваем суммарную массу на M

L=0;//обнуляем текущую длину

M=0;//обнуляем текущую массу

W=0;//обнуляем текущий объем

Form1->ComPort1->TransmitChar('L');//отправляем в порт символL

Form1->Timer1->Enabled=false;//выключаем таймер

Form1->Panel1->Caption="100 метров провода";//выводим текст на //информационную панель

}

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

if(message=="0.0001") //то есть 0.0001 метра от толщиномера

{

D+=0.0001;//увеличиваем диаметр на 0.0001

Form1->LabeledEdit2->Text=FloatToStrF(D*1000,ffFixed,12,1);//диамет

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

kol_M+=M; // увеличиваем суммарную массу на M

kol_W+=W; // увеличиваем суммарный объем на W

kol_L+=L; // увеличиваем суммарную длину на L

M=0; // обнуляем текущую массу

W=0; // обнуляем текущий объем

L=0; // обнуляем текущую длину

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10);//площадь

}

if(message=="-0.0001")//то есть -0.0001 метра от толщиномера

{

D-=0.0001; уменьшаем диаметр на 0.0001

Form1->LabeledEdit2->Text=FloatToStrF(D*1000,ffFixed,12,1);//диамет

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

kol_M+=M; // увеличиваем суммарную массу на M

kol_W+=W; // увеличиваем суммарный объем на W

kol_L+=L; // увеличиваем суммарную длину на L

M=0; // обнуляем текущую массу

W=0; // обнуляем текущий объем

L=0; // обнуляем текущую длину

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

if(message=="0.001")//то есть 0.001 метра от толщиномера

{

D+=0.001; увеличиваем диаметр на 0.001

Form1->LabeledEdit2->Text=FloatToStrF(D*1000,ffFixed,12,1);//диамет

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

kol_M+=M; // увеличиваем суммарную массу на M

kol_W+=W; // увеличиваем суммарный объем на W

kol_L+=L; // увеличиваем суммарную длину на L

M=0; // обнуляем текущую массу

W=0; // обнуляем текущий объем

L=0; // обнуляем текущую длину

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

if(message=="-0.001")//то есть -0.001 метра от толщиномера

{

D-=0.001; уменьшаем диаметр на 0.001

Form1->LabeledEdit2->Text=FloatToStrF(D*1000,ffFixed,12,1);//диамет

S=(M_PI*D*D)/4; //считаем площадь поперечного сечения

kol_M+=M; // увеличиваем суммарную массу на M

kol_W+=W; // увеличиваем суммарный объем на W

kol_L+=L; // увеличиваем суммарную длину на L

M=0; // обнуляем текущую массу

W=0; // обнуляем текущий объем

L=0; // обнуляем текущую длину

Form1->LabeledEdit7->Text=FloatToStrF(S,ffFixed,12,10); //площадь

}

if((M+kol_M)>=500)//если на катушке 500 кг проволоки

{

kol_impuls=0;//обнуляем все переменные

D=0;S=0;N=0;L=0;W=0;M=0;V=0;

kol_L=0;

kol_W=0;

kol_M=0;

Form1->LabeledEdit1->Text="0";//очищаем все текстовые поля

Form1->LabeledEdit2->Text="0";

Form1->LabeledEdit3->Text="0";

Form1->LabeledEdit4->Text="0";

Form1->LabeledEdit5->Text="0";

Form1->LabeledEdit6->Text="0";

Form1->LabeledEdit7->Text="0";

Form1->Panel2->Caption="На катушке 500 кг проволоки";// выводим //текст на информационную панель

Form1->ComPort1->TransmitChar('M');// отправляем в порт символ М

}

Form1->Timer1->Enabled=true;//включаем таймер

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{// обработик события – «по таймеру»

Form1->Panel1->Caption="";//чистим информационную панель

}

//---------------------------------------------------------------------------