Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Разработка программы для ПК




 

МК после запуска испытательного стенда должен находится в режиме ожидания команды от ПК. По команде с ПК он должен начать поиск резонансной частоты виброподвеса, запись значений амплитуд датчика ускорения в оперативную память и определение максимальной амплитуды датчика ускорения. После этого должна начаться передача данных в ПК. Для этого нужно написать программу для ПК, которая будет взаимодействовать с микрокнтроллером. Программа для ПК должна выполнять следующие действия:

- посылать команду микроконтроллеру, для того чтобы он начал настройку виброподвеса на резонансную частоту

- принять данные от микроконтроллера

-обработать данные и вывести в виде графика зависимости амплитуды напряжения датчика ускорения от частоты.

 

 

Рис.3.7. Блок-схема программы для ПК

 

 
 

Программа написана в среде программирования Delphi 7, блок-схема

программы приведена на рис. 3.7. На рис. 3.8 изображена блок – схема подпрограммы обработчика событий Button1.Click.

 

 

 
 

 

 


При запуске программы возникает событие ОnCreate, при этом загружается его обработчик FormCreate. В результате запуска программы происходит настройка последовательного порта com1, устанавливается следующие параметры:

- скорость 9,6 кб/с;

- контроля четности нет;

- количество стоп – битов – один;

- длина байта 8 бит;

- максимальное время, допустимое между двумя последовательными символами 100 мс;

После этого настройки прекращаются.

При нажатии кнопки пуск, загружается обработчик событий Button1.Click. При этом происходит очистка буфера, после устанавливается маска событий, которая будет отслеживать появление символов в порту. Начальное и конечное значение частоты, а также шаг изменения частоты заносятся в редакторы Edit1, Edit2 и Edit3. Затем происходит отправка кодового символа в микроконтроллер, после чего программа переходит в ожидание прихода данных от микроконтроллера. После прихода данных функция waitcommevent передает управление основной программе, после чего происходит считывание данных из порта. Далее начинается цикл, число итераций которого равняется количеству точек исследуемой зависимости. За одну итерацию происходит построение одной точки.

После окончания измерения всех точек исследуемой характеристики, происходит выход из подпрограммы Button1Click.

При закрытии приложения возбуждается событие OnClose, обработчиком которого является процедура FormClose. Данная подпрограмма выполняет одно действие – закрытие COM-порта.

Далее приведен листинг программы.

 

//Обработчик события OnCreate

 

procedure TForm1.FormCreate(Sender: TObject);

begin

port:=createfile('COM1', GENERIC_READ or

GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); // открытие порта

 

Buildcommdcb ('baud=9600 parity=N data=8 stop=1 ', dcb_);

setcommstate(port, dcb_); // установка настроек порта

getcommtimeouts(port, CommTimeouts_); // установка максимального

CommTimeouts_.ReadIntervalTimeout:=100;//времени между считываемыми

setcommtimeouts(port, CommTimeouts_); // символами из порта

SetupComm(port, 200, 128); //установка размера буфера

end;

//Обработчик события, Button1Click

procedure TForm1.Button1Click(Sender: TObject);

var

Fx,Ay:real; //определение переменных

tabl1: array [1..2,1..200] of real; //массив для хранения значений частоты и

// амплитуды напряжения

nach,con,shag: real; // начальное, конечное значение и шаг

count,i: word; //число точек на графике

ev: dword; //маска событий

buf1: array [1..200] of byte; // массив для чтения из порта

dac: byte; //отправляемый символ

 

begin

purgecomm(port, PURGE_TXABORT or PURGE_RXABORT

or PURGE_TXCLEAR or PURGE_RXCLEAR); //очистка буфера

 

setcommmask(port, EV_RXCHAR); //установка ожидания события, в

//данном случае получение символов

 

fillchar(tabl1,sizeof(tabl1),0); //задание массива для заполнения

//данными

series1.Clear; //удаление графика

nach:=strtofloat(edit1.Text); //начальное значение частоты con:=strtofloat(edit2.Text); //конечное значение частоты

shag:=strtofloat(edit3.Text); //шаг изменения частоты

count:=round((nach-con)/shag); //число точек на графике

dac:= 10; //задание кодового числа

writeFile(port, dac, 1, num, nil); // запись кодового числа в порт

waitcommevent(port, ev, nil); //ожидание получения символов

ReadFile(port, buf1, 200, num, nil); //чтение данных из порта

 

for i:=1 to 131 do

begin

 

tabl1[1,i]:=nach+i*shag; // заполнение массива данными

tabl1[2,i]:=buf1[i]; // из порта и присвоение

Fx:=tabl1[1,i]; // значений соответствующих

Ay:=tabl1[2,i]; // амплитуде напряжения и частоте

series1.AddXY(Fx,Ay,'',clblack); // построение графика

end;

end;

 

//Обработчик события On OnClose

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

closehandle(port); // закрытие порта

end;

 

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 64; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты