Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SPbGLTU_SimInTech_2020

.pdf
Скачиваний:
36
Добавлен:
03.12.2024
Размер:
10.45 Mб
Скачать

Целью данной лабораторной работы является:

1.Разработать модель заполнения и осушения цистерны произвольной формы.

2.Предусмотреть совместную работу модели цистерны и запорной арматуры.

3.Использовать язык программирования SimInTech при описании моделей.

4.Разработать алгоритм заполнения цистерны до заданного

уровня.

5.Исследовать работу модели системы.

Для решения поставленной задачи надо построить ряд моделей, которые должны взаимодействовать между собой. В проекте должны быть модели клапанов для залива и слива, для которых можно воспользоваться уже разработанными ранее моделями.

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

3.1. Разработка модели заполнения и осушения цистерны

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

слива.

 

Одним

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

рия цистерны

будет описываться как совокупность площадей сечений,

заданных на разных уровнях. Это позволяет представить всю цистерну как состоящую из ряда секций. При этом каждая из них обладает собственной динамикой процессов, характерных именно для этой секции (рис.

3.1).

31

Рис. 3.1. Разделение объема на секции.

В качестве примера этого подхода, на рис.3.1 представлено разбиение общего объема на четыре секции, каждая из которых характеризуется площадью внутреннего сечения объема на соответствующем ей уровне.

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

На первом этапе особое внимание уделяется собственно модели цистерны и динамике происходящих в ней процессов. Поэтому исходная схема имеет простейший вид, который сохранен в файле tank_1.prt и представлен на рис. 3.2.

Рис. 3.2. Исходная схема для исследования модели цистерны.

При этом исходные данные и параметры, которые частично заимствованы из рис. 3.1, и которые используются в математической модели цистерны, задаются на вкладке «Скрипт» этого же проекта (рис. 3.3).

Рис. 3.3. Исходные данные и параметры математической модели.

32

Отличительная черта схемы, приведенной на рис. 3.2, от рассмотренных ранее схем состоит в том, что она содержит блок «Язык программирования» из закладки "Динамические". Он предназначен для создания блоков, которые выполняют сложные операции, включая операции над матрицами, векторами и т.д. Диалоговое окно этого блока — текстовый редактор алгоритмов, в котором можно записать математическую модель на встроенном языке программирования (рис. 3.4)

Рис. 3.4. Окно текстового редактора алгоритмов.

Именно этой возможностью мы и воспользуемся для реализации математической модели динамики перемещения жидкости в цистерне. Сначала щелчком правой клавиши мыши надо вызвать контекстное меню, выбрать "Свойства объекта" и на вкладке "Общие" в строке "Имя объекта" в поле "Значение" набрать "Tank", нажать "Применить" и "Ок". Затем выполним двойной клик на блоке, откроется окно редактора алгоритмов, куда введем следующий код:

{Определение входных и выходных переменных}

input rate, ValveOutOpen; output Level, v;

{Определение секции бака по заданной высоте} function Section_onH(H_level)

for (i = n-1, 1,-1) begin

if (H_level < h[i+1]) then Section_onH = i ; end; end;

{Определение секции бака по заданному объему} function Section_onV(Volume)

Vtemp = Vtotal

for (i = n-1, 1,-1) begin

if (Volume < Vtemp) then Section_onV = i ; Vtemp = Vtemp — Vsection[i];

end; end;

{Вычисление объема по заданной высоте} function Volume_onH(h_m)

33

L = Section_onH(h_m);

if (L=1) then V0=0 else V0 = Vsum[L-1]; Volume_onH = V0+Vsection[L]*(h_m—h[L])/(h[L+1]-

h[L]); end;

{Вычисление высоты по заданному объему}

function Hight_onV(Volume)

L = Section_onV(Volume);

if (L=1) then V0=0 else V0 = Vsum[L-1];

h0 = h[L];

Hight_onV = h0 + (Volume—V0)*(h[L+1]— h0)/Vsection[L]; end;

{-----Секция начальной инициализации -----------} var Vsection[n-1], Vtotal, Vsum[n-1];

Initialization g = 9.81;

// Определение объемов отдельных секций бака for (i = 1, n-1)

begin

Vsection[i] = (h[i+1]-h[i])*(s[i]+s[i+1])/2; Vtotal = Vtotal + Vsection[i];

Vsum[i] = Vtotal;

end; end;

{-----Код основной программы -----------} init v = Volume_onH(h_init); Level = Hight_onV(v)

dh = (Level-h_out); if dh < 0 then dh = 0;

outrate = sqrt(2*g*dh)*s_out*ValveOutOpen;

{Расчет изменения объема воды в баке и уровня} d_rate = rate - outrate;

v' = d_rate;

Для проверки работы модели выполним ряд операций по заполнению и осушению цистерны. Подключим к ней входной поток интенсивностью, например, 0.25 куб.м/с. Наблюдаем динамику изменение объ-

34

ема и уровня жидкости в цистерне (рис. 3.5). Затем отключаем входной поток и открываем сливной клапан (рис. 3.6)

Рис. 3.5. Увеличение объема и уровня жидкости в цистерне.

Рис. 3.6. Уменьшение объема и уровня жидкости в цистерне.

Обратим внимание на то, что осушение выполнено, но не до нуля. Этот уровень задан параметром h_out — высотой слива, а скорость истекания определяет s_out — сечение слива.

3.2. Разработка алгоритма управления заполнением и осушением цистерны

После того, как была доказана работоспособность математической модели цистерн и с учетом того, что уже имеются отлаженные для работы функциональные блоки клапанов, можно перейти к построению общей модели системы управления заполнением и осушением цистерн (рис. 3.7).

35

Рис. 3.7. Модель системы управления клапанами по заливу и сливу цистерн.

Вэтой модели использованы несколько новых блоков: "Операция БОЛЬШЕ" и "Операция МЕНЬШЕ" из вкладки "Логические", "Импульс" и "Импульс по фронту" из вкладки "Задержки и импульсы", "RS-триггер с приоритетом по сбросу" из вкладки "Триггеры", "Сравнивающее устройство" из вкладки "Операторы", "Релейное с зоной нечувствительности" из вкладки "Нелинейные", "Ключ ручной управляемый" из вкладки "Ключи".

Вэтой системе объект — цистерна (модель бака на рис.3.7), исполнительными устройствами являются клапаны залива и слива, а задающее устройство — это задатчик требуемого уровня и кнопка без фиксации на залив/слив до этого уровня. Внутренняя структура субмодели "Модель бака" представлена на рис. 3.8, ее можно скопировать из предыдущего проекта tank_1.prt и модифицировать, скрипт блока Язык программирования остается без изменений.

Клапан залива управляет подключением внешнего потока, а клапан слива открывает поток в сливной трубе цистерны. Оба управляющих клапана — это возвратные клапаны, схема их внутренних субмоделей представлена на рис. 2.10, на которые сигнал подается только для открытия клапана. Его закрытие происходит самопроизвольно при снятии сигнала управления.

В схеме реализован простейший алгоритм формирования управляющего сигнала на клапан на основе отклонения текущего уровня от

36

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

Рис. 3.8. Субмодель Модель бака проекта tank_2_level.prt.

Во избежание существенного перелива по сравнению с заданным уровнем система позволяет устанавливать зоны нечувствительности на формирование управляющего сигнала. Это является необходимым условием для работоспособности такого типа алгоритмов. Выбор величины зоны нечувствительности существенно зависит как от скорости перемещения клапана, так и от производительности подключаемого им потока. Сначала для блоков "Релейное с зоной нечувствительности" вызовем из контекстного меню окно "Свойства объекта" и установим в нем зоны нечувствительности реле в соответствии с рис. 3.9.

Рис. 3.9. Свойства верхнего (слева) и нижнего (справа) блоков реле.

В рассматриваемом ниже примере скорость перемещения клапана как на открытие, так и на закрытие составляет 5 сек, а входной поток

37

— 0.25 куб.м/сек. Начальный уровень в цистерне определяет параметр модели h_init = 2 м, что соответствует объему в 4 куб.м.

Впроцессе исследования модели выполнялось как повышение, так

ипонижение уровня жидкости в цистерне. С этой целью изменялись параметры блока задания объема (блок "Константа" слева от "Сравнивающее устройство"), и кратковременно нажимался ключ (ручной управляемый) подачи управления. На рис. 3.10 приведены результаты по подливу жидкости в цистерну до трех метров (свойство "Значение" блока "Константа" равно 3), а затем полному сливу жидкости из цистерны (свойство "Значение" блока "Константа" равно 0).

Отметим также, что на нижнем графике рис. 3.10 приводятся соотношения объема (красный) и уровня (синий) в цистерне в процессе этого эксперимента.

Проведем еще один эксперимент по влиянию зоны нечувствительности на точность отработки задания. С этой целью сделаем зону нечувствительности равной 0 при заливе до верхней границы, т.е. до 5 метров (надо поменять в окне свойств реле значения 0.2 на 0 − см. рис 3.9, а значение блока "Константа" установить "5").

Из рисунка 3.11а) виден явный перелив в цистерне от заданного уровня. Попробуем ввести зону нечувствительности. Путем подбора выяснилось, что неплохой результат дает зона в 0.4 м (рис. 3.11б) − в окне свойств реле (рис. 3.9) значения нижних границ меняем с 0.2 на 0.4. Но с этой зоной нечувствительности не очень хороший результат будет при подливе до 3 метров (рис. 3.12а).

Значительно лучше будет результат, если зона нечувствительности составит 0.2 метра (рис. 3.12б). Но если снова повторить эксперимент для 5 метров, то перелив составит почти 0.5 метра. Эти эксперименты показывают зависимость точности отработки не только от характеристик работы клапана, но и от геометрии цистерны.

38

Рис. 3.10. Результаты эксперимента с моделью.

Чтобы избавиться от этого недостатка следует принять во внимание тот факт, что если объем жидкости в цистерне изменяется пропорционально входному потоку, то изменение уровня носит явно нелинейный характер, определяемый геометрией цистерны. Это приводит к выводу, что более предпочтительным является подход к управлению заливкой цистерны не по уровню, а по объему. Этот подход следует применять даже в случае отсутствия датчиков объема и наличия только дискретных датчиков конечного уровня, при этом значения этих датчиков должны быть пересчитаны в соответствующий объем.

39

Рис. 3.11. Подлив до 5 метров при зоне нечувствительности, равной 0 и 0.4 метра.

Рис. 3.12. Подлив до 3 метров при зоне нечувствительности, равной 0.4 и 0.2 метра.

Для дальнейшей работы сохраним файл исходной модели под именем tank_2_level.prt, скопируем его в новый файл tank_2_volume.prt, в котором сделаем минимальные изменения в схеме модели (рис. 3.13).

Задав зону нечувствительности на сигнал управления заливом цистерны в 0.625 куб. м, проведем моделирование процесса залива для разных значений объемов. Эти значения надо выбрать так, чтобы они соответствовали секциям цистерны с разной геометрией профиля.

40