КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Разработка программы для ПК
МК после запуска испытательного стенда должен находится в режиме ожидания команды от ПК. По команде с ПК он должен начать поиск резонансной частоты виброподвеса, запись значений амплитуд датчика ускорения в оперативную память и определение максимальной амплитуды датчика ускорения. После этого должна начаться передача данных в ПК. Для этого нужно написать программу для ПК, которая будет взаимодействовать с микрокнтроллером. Программа для ПК должна выполнять следующие действия: - посылать команду микроконтроллеру, для того чтобы он начал настройку виброподвеса на резонансную частоту - принять данные от микроконтроллера -обработать данные и вывести в виде графика зависимости амплитуды напряжения датчика ускорения от частоты.
Рис.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;
|