Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Проведем сравнительную оценку разработанных алгоритмов.

Поиск

На рисунке 31 представлен алгоритм работы лабораторной установки для обнаружения «сгустка» неоднородности жидкости.

 

Рисунок 31 - Алгоритм функционирования лабораторной установки

 

На первом этапе устанавливается нуль, и настраиваются допустимые отклонения – это делается на панели «Настройки контроллера» с помощью параметра «Контроль сигнала» (см., например, рисунок 10). На втором этапе «Аварийная задержка (1 с)» задается время срабатывания аварии, в данном случае 1 с (100 выборок сигнала). На третьем этапе при k<100, например k=99, аварии не происходит, устройство работает без изменений (рабочий режим). При k>100 происходит авария (устройство реагирует на большие выбросы). На четвертом этапе «Сброс после аварии (0,5 с)» задается время, по истечении которого устройство автоматически переключается в рабочий режим, в данном случае 0,5 с (50 выборок сигнала), после чего происходит новый цикл (возвращаемся на первый этап).

На рисунке 32 представлен вариант разработанного алгоритма автоматического устранения влияния аварийного выброса, описанный в предыдущем отчете.

 

Рисунок 32 – Вариант алгоритма автоматического устранения влияния аварийного

выброса

 

Алгоритм состоит из трех частей: процесса инициализации, распознавания формы кривой и процесса аварии. Первый этап – это этап подготовки программы к работе. Второй этап – это распознавание формы сигнала оптической плотности. Он предполагает два пути решения: распознавание кривой по соотношению с эталонами аварии в виде форм сигналов оптической плотности, и распознавание с использованием относительного описания. Второе решение понадобится в дальнейшей работе над проектом, при рассмотрении более сложных форм кривых. Третий этап – это непосредственная работа уже над выявленным типом кривой.

Таким образом, эти два алгоритма близки по ряду выполняемых функций. Во-первых, оба они начинаются с одинаковой настройки: установления нуля и вычисление допустимого отклонения (во втором алгоритме это блок «процесс инициализации»). Во-вторых, критерий начала аварии в обоих случаях - превышение значения оптической плотности.

Однако заметим, что эти два алгоритма во многом и отличаются. Во-первых, в первом алгоритме рассматриваются только 2 критерия (время и плотность), а во втором алгоритме – 3 (время, плотность и площадь). Во-вторых, включение/выключение режима аварии происходит по-разному. В первом алгоритме включение происходит каждый раз, когда счетчик превышения становится равным 100, а выключение – каждый раз после истечения «сброса после аварии (0,5 с). А во втором алгоритме включение/выключение происходит единственный раз за всю аварию. В-третьих, во втором алгоритме предусмотрено распознавание формы кривой для более эффективной работы программы, а в первом его нет.

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

 

Описание типов данных

Для программной реализации разработанного алгоритма введем понятие динамического списка:

Определение. Динамическим списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом.

Из определения следует, что каждый элемент списка содержит поле данных (Data) (оно может иметь сложную структуру) и поле ссылки на следующий элемент (Next). Поле ссылки последнего элемента должно содержать пустой указатель (Nil).

Схематически это выглядит так (рисунок 33):

Рисунок 33 - Схема динамического списка

 

В данной работе используем структуру «список списков»:

 

pelem=^elem; {список состояния}

elem=record

number:real;

next:pelem;

end;

pmas=^mas; {список списков состояния}

mas=record

arr:pelem;

nextmas:pmas;

end;

 

Описание переменных

Для разработки программы введем следующие переменные и константы:

- положение равновесия естественных колебаний оптической плотности;

- амплитуда естественных колебаний оптической плотности;

- интервал времени, за который грязевое пятно доходит до заслонки;

L0 – длина начального участка определенного периода времени (заведомо не может быть аварии);

L – длина рабочего участка;

- переменная, показывающая номер измерения отсчета сигнала;

- текущее значение оптической плотности в момент времени, соответствующее измерению отсчета номер i;

- текущее значение времени в момент времени, соответствующее измерению отсчета номер i;

- минимальная величина времени, соответствующая длительности потока загрязняющего вещества, проходящего через трубу (для 1, 2, 3 случаев);

- максимальная величина времени, соответствующая длительности потока загрязняющего вещества, проходящего через трубу (для 1, 2, 3 случаев);

- длительность последнего (текущего) скачка оптической плотности;

- длительность одного прошедшего скачка (для , где - число прошедших скачков);

- минимальное значение длительности одного скачка для 2, 3 случаев соответственно.

На рисунке 34 представлен алгоритм, составленный после проведения сравнительной характеристики двух алгоритмов.

 

Рисунок 34 - Общий алгоритм функционирования установки контроля оптической плотности водных сред

 

Выходные данные

 

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

Notcrashlength – длина безаварийного промежутка;

Crash – начало аварии;

Open – открытие заслонки для сброса грязевого пятна;

Crashlength – длина аварийного промежутка;

Notcrash – окончание аварии;

Close – закрытие заслонки.

Все указанные данные выводятся на экран после отработки программы, измеряются в условных единицах i. Далее при усовершенствовании программы несложно будет связать данную переменную с параметром времени.

Разработанная программа апробирована на тестовых задачах при проведении лабораторного эксперимента на установке. На рисунке 35 приведен пример изменения оптической плотности аварийной ситуации.

 

Рисунок 35 - График аварийной ситуации

Программа, отработав полностью, выводит результат, представленный на рисунке 36.

 

Рисунок 36 - Результат обработки данных

 

Дословно он обозначает: длина безаварийного промежутка 229 измерений, на 230 измерении начинается авария и на 235 измерении открывается заслонка автоматического сброса. На 286 измерении авария заканчивается и начинается вновь безаварийный промежуток, заслонка закрывается на 291 измерении. Длина аварийного промежутка 56 измерений. Таким образом, разработанная программа позволяет обнаруживать аварийный сгусток для первого типа аварии, описанного в отчете по третьему этапу темы.

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

 

uses crt;

const

P_0=0;

delta_P=30;

delta_T=5;

 

type

pelem=^elem;

elem=record

number:real;

next:pelem;

end;

pmas=^mas;

mas=record

arr:pelem;

nextmas:pmas;

end;

var

firstnotcrash,firstcrash:pmas;

notcrash,crash:pmas;

notcrash1,crash1:pelem;

f:text;

i,crashlength,notcrashlength:integer; P_i:real;

fl:boolean;

 

procedure stackinitnotcrash;

begin

new(firstnotcrash);

new(notcrash);

new(notcrash1);

firstnotcrash^.nextmas:=notcrash;

notcrash^.nextmas:=notcrash;

end;

 

procedure stackinitcrash;

begin

new(firstcrash);

new(crash);

new(crash1);

firstcrash^.nextmas:=crash;

crash^.nextmas:=crash;

end;

 

procedure pushnotcrash(v:pelem);

var t:pmas;

begin

new(t);

t^.arr:=v;

t^.nextmas:=firstnotcrash^.nextmas;

firstnotcrash^.nextmas:=t;

end;

 

procedure pushcrash(v:pelem);

var t:pmas;

begin

new(t);

t^.arr:=v;

t^.nextmas:=firstcrash^.nextmas;

firstcrash^.nextmas:=t;

end;

 

procedure pushnotcrash1(v:real);

var t:pelem;

begin

new(t);

t^.number:=v;

t^.next:=notcrash1^.next;

notcrash1^.next:=t;

end;

 

procedure pushcrash1(v:real);

var t:pelem;

begin

new(t);

t^.number:=v;

t^.next:=crash1^.next;

crash1^.next:=t;

end;

procedure start(var fl:boolean);

begin

if fl=false then begin

fl:=true;

writeln('notcrashlength=',notcrashlength);

crashlength:=1;

write('crash');

writeln(' i=',i);

end

else crashlength:=crashlength+1;

 

if crashlength=delta_T+1 then begin

write('open');

writeln(' i=',i);

end;

end;

 

procedure finish(var fl:boolean);

begin

if fl=true then begin

fl:=false;

writeln('crashlength=',crashlength);

notcrashlength:=1;

write('notcrash');

writeln(' i=',i);

end

else notcrashlength:=notcrashlength+1;

 

if (notcrashlength=delta_T+1) and (i<>delta_T+1) then begin

write('close');

writeln(' i=',i);

end;

end;

 

begin

clrscr;

fl:=false;

i:=0;

stackinitcrash;

stackinitnotcrash;

assign(f,'D:\p1.txt');

reset(f);

while not eof(f) do begin

read(f,P_i);

i:=i+1;

if P_i<(delta_P+P_0) then begin

finish(fl);

pushnotcrash1(P_i);

pushnotcrash(notcrash1);

end

else begin

start(fl);

pushcrash1(P_i);

pushcrash(crash1);

end;

end;

close(f);

readkey;

end.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 138; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.92.5 (0.009 с.)