- •Проектирование микропроцессорных систем на базе учебного стенда sdk 1.1
- •Введение
- •1. Описание компонентов мп системы.
- •Микропроцессорный стенд sdk - 1.1.
- •Микроконтроллер aDuC812
- •Плис max3064
- •Дискретные входы-выходы
- •Аналоговые входы-выходы
- •Инструкция по работе с программой
- •Обзор основных свойств, методов, событий компоненты ComPort
- •4. Датчики
- •5. Пример 1
- •Расчет параметров технологического процесса
- •5.2. Описание функций для работы с sdk 1.1
- •5.3. Алгоритм программы для sdk
- •5.4. Программа для sdk
- •5.5. Интерфейс программы для пк
- •5.6. Алгоритм программы для пк
- •5.7. Программа для пк
- •6. Пример 2
- •6.1. Алгоритм работы системы
- •6.2. Имитация датчиков
- •6.3. Расчет параметров технологического процесса
- •6.4. Программа для работы микропроцессорного контроллера на языке Ассемблер
- •6.5. Программа для работы цап и ацп на языке c
- •6.6. Программа для персонального компьютера на языке с в среде c-Builder
- •6.7. Интерфейс программы для пк
- •7. Графическая часть
- •Sdk 1.1
- •5.2. Описание функций для работы с sdk 1.1 …………………... 21
- •5.4. Программа для sdk ………………………………………….. 35
- •5.5. Интерфейс программы для пк ………………………………. 41
- •5.6. Алгоритм программы для пк ………………………………... 43
6.6. Программа для персонального компьютера на языке с в среде c-Builder
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit_Rylon.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma link "CPortCtl"
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString DATA;
int N=0,b,n=0,n1=0;
// N - текущее количество витков
// b - 1 виток набран
// n - количество импульсов
// n1 - количество импульсов
float R,V,h,w,a,r=0,c;
// R - радиус рулона
// V - скорость движения полосы
// h - толщина полосы
// w - угловая скорость рулона
// a содержит требуемое количество витков
// r - текущий радиус рулона
// c - радиус моталки
char d;
// d - переменная для хранения принятых данных
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->ComPort1->Open(); // открыли СОМ - порт
Form1->ComPort1->Connected=true;
Form1->Edit1->Text="Стан к пуску готов";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
c=StrToFloat(Form1->LabeledEdit7->Text);
Form1->ComPort1->TransmitChar(1); // отправка сигнала "ПУСК"
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) // прием данных
{
Form1->ComPort1->ReadStr(DATA,1);
d =(char)(DATA[1]);
Form1->ComPort1->ClearBuffer(true,true);
b=0;
switch((char)d) // обработка принятых данных
{
case 'A': // 6 ИМПУЛЬСОВ
{n=n+6;
if (n==600)
{N=N+1;
b=b+1;
Form1->ComPort1->TransmitChar(2); // отправка сигнала "1 виток"
Form1->ComPort1->ClearBuffer(true,true);
n=0;}
else N=N;
break;};
case 'B': // 60 ИМПУЛЬСОВ
{n1=n1+60;
if (n1==600)
{N=N+1;
b=b+1;
Form1->ComPort1->TransmitChar(2); // отправка сигнала "1 виток"
Form1->ComPort1->ClearBuffer(true,true);
n1=0;}
else N=N;
break;};
case 'C': // 600 ИМПУЛЬСОВ
{N=N+1;
b=b+1;
Form1->ComPort1->TransmitChar(2); // отправка сигнала "1 виток"
Form1->ComPort1->ClearBuffer(true,true);
break;};
case 'D': // 6000 ИМПУЛЬСОВ
{N=N+10;
b=b+1;
Form1->ComPort1->TransmitChar(2); // отправка сигнала "1 виток"
Form1->ComPort1->ClearBuffer(true,true);
break;};
case 'E': // 60000 ИМПУЛЬСОВ
{N=N+100;
b=b+1;
Form1->ComPort1->TransmitChar(2); // отправка сигнала "1 виток"
Form1->ComPort1->ClearBuffer(true,true);
break;};
case 'F': // ТОЛЩИНА ПОЛОСЫ
{Form1->LabeledEdit4->Text="0,45";
break;};
case 'G': // ТОЛЩИНА ПОЛОСЫ
{Form1->LabeledEdit4->Text="0,475";
break;};
case 'H': // ТОЛЩИНА ПОЛОСЫ
{Form1->LabeledEdit4->Text="0,5" ;
break;};
case 'I': // ТОЛЩИНА ПОЛОСЫ
{Form1->LabeledEdit4->Text="0,525";
break;};
case 'J': // ТОЛЩИНА ПОЛОСЫ
{Form1->LabeledEdit4->Text="0,55";
break;};
case 'K': // ПУСК
{Form1->LabeledEdit2->Text="10";
Form1->LabeledEdit4->Text="0,5";
Form1->Edit1->Text="";
Form1->Timer1->Enabled=True; // включаем таймер 1
break;};
case 'L': // СТОП
{Form1->Timer1->Enabled = false; // выключаем таймер 1
Form1->LabeledEdit2->Text="0";
Form1->Edit1->Text="Стан остановлен!";
break;};
case 'M': // РУЛОН НАБРАН
{N=0;
Form1->LabeledEdit6->Text=FloatToStr(N);
Form1->Timer2->Enabled=True; // включаем таймер 2
break;};
case 'N': // ЗАПУСК
{Form1->Timer1->Enabled = True; // включаем таймер 1
Form1->LabeledEdit2->Text="10";
Form1->Edit1->Text="";
break;};
};
a=StrToFloat(Form1->LabeledEdit3->Text);
Form1->LabeledEdit6->Text=FloatToStr(N);
h = StrToFloat(Form1->LabeledEdit4->Text);
V = StrToFloat(Form1->LabeledEdit2->Text);
r = StrToFloat(Form1->LabeledEdit7->Text);
R = r + b*h;
w = (V/R)*9,554;
Form1->LabeledEdit7->Text=FloatToStrF(R,ffFixed,9,4);
Form1->LabeledEdit5->Text=FloatToStrF(w,ffFixed,6,4);
if (N==a) // если рулон набран
{Form1->Edit1->Text="Рулон набран!";
Form1->Timer1->Enabled=False;
Form1->LabeledEdit2->Text="0";
Form1->LabeledEdit4->Text="0,5";
Form1->LabeledEdit7->Text=FloatToStr(c);
Form1->ComPort1->TransmitChar(3);
Form1->ComPort1->ClearBuffer(true,true);}
else N=N;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender) // СТОП
{
Form1->BitBtn2->Visible = False;
Form1->BitBtn4->Visible = True;
Form1->ComPort1->TransmitChar(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn4Click(TObject *Sender) // ЗАПУСК
{
Form1->BitBtn2->Visible = True;
Form1->BitBtn4->Visible = False;
Form1->ComPort1->TransmitChar(4);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender) // ЗАКРЫТИЕ ФОРМЫ
{
Form1->ComPort1->ClearBuffer(true,true);
Form1->ComPort1->Connected=false;
Form1->ComPort1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender) // ВЫХОД
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender) // АНИМАЦИЯ
{
Timer1->Tag++;
if (fmod(Timer1->Tag,30)==0){Image1->Visible=false;Image2->Visible=false;
Image3->Visible=false;Image4->Visible=false;
Image5->Visible=false;Image6->Visible=false;
Image7->Visible=false;Image8->Visible=false;
Image9->Visible=false;Image10->Visible=false;
Image11->Visible=false;Image12->Visible=false;
Image13->Visible=false;Image14->Visible=false;
Image15->Visible=false;Image16->Visible=false;
Image17->Visible=false;Image18->Visible=false;
Image19->Visible=false;Image20->Visible=false;
Image21->Visible=false;Image22->Visible=false;
Image23->Visible=false;Image24->Visible=false;
Image25->Visible=true;Image26->Visible=false;}
else if (fmod(Timer1->Tag,30)==1){Image1->Visible=false;Image2->Visible=false;
Image3->Visible=false;Image4->Visible=false;
Image5->Visible=false;Image6->Visible=false;
Image7->Visible=false;Image8->Visible=false;
Image9->Visible=false;Image10->Visible=false;
Image11->Visible=false;Image12->Visible=false;
Image13->Visible=false;Image14->Visible=false;
Image15->Visible=false;Image16->Visible=false;
Image17->Visible=false;Image18->Visible=false;
Image19->Visible=false;Image20->Visible=false;
Image21->Visible=false;Image22->Visible=false;
Image23->Visible=false;Image24->Visible=false;
Image25->Visible=false;Image26->Visible=true;}