Вимірювання розходу рідини з використанням рівняння Бернуллі1. Запустіть середовище програмування Eclipse. Створіть новий Java проект з назвою LR_5. 2. Створіть новий клас з назвою Zavdannja5_1. 3. Наберіть наступний програмний код та ознайомтесь зі скелетною схемою аплета: import java.awt.*; import java.applet.*; //скелетна схема(скелет) апплета public class AppletSceletPrezent extends Applet { // викликається першим public void init() { // ініціалізація } // викликається другим // також викликається після перезапуску аплета public void start() { // початок або продовження виконання } // викликається коли аплет зупинений public void stop() { // призупиняє виконання } // викликається коли аплет завершується // це останній виконуваний метод public void destroy() { // виконує завершуючі дії } // викликається коли вікно аплета повинно бути перемальовано public void paint(Graphics g) { // другий показ вмістимого вікна } } 4. Наступна програма демонструє встановлення кольору тексту та фону: import java.awt.*; import java.applet.*; public class AppletSample extends Applet { String sms; public void init() { setBackground(Color. black); setForeground(Color. red); sms = "метод init() -> "; } public void start() { sms += "метод start() -> "; } public void paint(Graphics g) { sms += " метод paint()."; g.drawString(sms, 10, 30); } } 5. Кожний раз коли необхідно обновити інформацію відображену у вікні,то викликається метод repaint(). Приклад застосування цього методу наведений нижче: import java.awt.*; import java.applet.*; public class Zagolovok extends Applet implements Runnable { String sms = "Бігаючий рядок..."; Thread t = null; int state; boolean stopFlag; public void init() { setBackground(Color. black); setForeground(Color. red); } public void start() { t = new Thread(this); stopFlag = false; t.start(); } public void run() { char ch; for (;;) { try { repaint(); Thread. sleep (100); ch = sms.charAt(0); sms = sms.substring(1, sms.length()); sms += ch; if (stopFlag) break; } catch (InterruptedException e) { } } } public void stop() { stopFlag = true; t = null; } public void paint(Graphics g) { g.drawString(sms, 10, 30); } } 6. Крім відображення інформації в своєму вікні, апплет може також виводити повідомлення у вікні стану браузера або програми перегляду апплетів (appletviewer), яка виконує його. Для цього необхідно викликати метод showStatus() та вказати в якості аргумента рядок відображення: . . . public void paint(Graphics g) { g.drawString(sms, 10, 30); showStatus("Вікно статусу в якому виведено повідомлення"); } . . . 7. Java дозволяє завантажувати в аплет дані із каталогу, який містить HTML-файл, що завантажив аплет(getDocumentBase()) і каталогу з якого був завантажений class-файл аплету (getCodeBase()). Ці методи повертають вказані каталоги у вигляді URL-об’єктів. Наступний програмний код демонструє використання цих методів: import java.awt.*; import java.applet.*; import java.net.URL;
public class Base extends Applet { public void paint(Graphics g) { String message; URL url = getCodeBase();// одержати базу коду message = "Code base: " + url.toString(); g.drawString(message, 10, 20); url = getDocumentBase();// одержати базу документу message = "Document base: " + url.toString(); g.drawString(message, 10, 40);
} } 8. Інколи виникає необхідність оброблення подій миші(натискування, переміщення і т.д.). Для цього в Java передбачені інтерфейси MouseListener та MouseMotionListener. Наступний приклад представляє цей процес: import java.applet.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener;
public class MouseEvents extends Applet implements MouseListener, MouseMotionListener { String msg = ""; int mouseX = 0, mouseY = 0;// координати маніпулятора "миш"
public void init() { addMouseListener(this);// регістрація себе як блоку прослуховування // mouse-подій addMouseMotionListener(this);// регістрація себе як блоку // прослуховування MouseMotion-подій }
// Обробка перетягування миші public void mouseDragged(MouseEvent me) { mouseX = me.getX(); mouseY = me.getY(); msg = "*"; showStatus("Dragging mouse at " + mouseX + ", " + mouseY); repaint();
}
// Обробка переміщення миші public void mouseMoved(MouseEvent me) { showStatus("moving mouse at " + me.getX() + ", " + me.getY()); }
public void paint(Graphics g) { g.drawString(msg, mouseX, mouseY); }
// Обробка кліку миші public void mouseClicked(MouseEvent me) { mouseX = 0; mouseY = 10; msg = "Mouse clicked."; repaint();
}
// Обробка вводу миші в області вікна public void mouseEntered(MouseEvent me) { // збереження координат mouseX = 0; mouseY = 10; msg = "Mouse entered."; repaint(); }
public void mouseExited(MouseEvent me) { mouseX = 0; mouseY = 10; msg = "Mouse exited."; repaint(); }
// Обробка натискання кнопки public void mousePressed(MouseEvent me) { mouseX = me.getX(); mouseY = me.getY(); msg = "Down"; repaint();
}
// Обробка вивільнення кнопки public void mouseReleased(MouseEvent me) { mouseX = me.getX(); mouseY = me.getY(); msg = "Up"; repaint();
} } 9. Щоб обробляти події з клавіатури, використовується така сама архітектури, що і в попередньому прикладі з подіями миші. Єдиною різницею є те, що необхідно використовувати інтерфейс KeyListener. Коли клавіша натиснута, то генерується подія KEY_PRESSED, а це приводить до запиту оброблювача подій KeyPressed(). Коли клавіша відпускається, то генерується подія KEY_RELEASED і виконується оброблювач KeyReleased(). Якщо натискуванням клавіші згенерований символ, то посилається повідомлення про подію KEY_TYPED і викликається оброблювач KeyTyped(). Таким чином кожний раз коли користувач натискає клавішу, то генерується як мінімум дві і часто і три події. Наступний програмний код демонструє ввід з клавіатури. Він відображає у вікні аплет-символи клавіш і показує стан натиску/відпуску кожної клавіші у вікні стану: import java.applet.*; import java.awt.*; import java.awt.event.*; public class SimpleKey extends Applet implements KeyListener { String msg = ""; int X = 10, Y = 20; public void init() { addKeyListener((KeyListener) this); requestFocus(); } public void paint(Graphics g) { g.drawString(msg, X, Y); } public void keyPressed(KeyEvent ke) { showStatus("Key Down"); } public void keyReleased(KeyEvent ke) { showStatus("Key Up"); } public void keyTyped(KeyEvent ke) { msg += ke.getKeyChar(); repaint(); } } 10. Якщо потрібно обробити спеціальні клавіші типу клавіш переміщення курсору або функціональних клавіш необхідно звернутись до них в оброблювачі KeyPressed(). Вони недоступні через KeyTyped(). Наступний аплет виводить ім’я декількох спеціальних клавіш: import java.applet.*; import java.awt.*; import java.awt.event.*; public class KeyEvents extends Applet implements KeyListener { String msg = ""; int X = 10, Y = 20; public void init() { addKeyListener((KeyListener) this); requestFocus(); } public void paint(Graphics g) { g.drawString(msg, X, Y); } public void keyPressed(KeyEvent ke) { showStatus("Key Down"); int key = ke.getKeyCode(); switch (key) { case KeyEvent. VK_F1: msg += "Клавіша F1\n"; break; case KeyEvent. VK_F2: msg += "Клавіша F2\n"; break; case KeyEvent. VK_F3: msg += "Клавіша F3\n"; break; case KeyEvent. VK_F4: msg += "Клавіша F4\n"; break; case KeyEvent. VK_F5: msg += "Клавіша F5\n"; break; case KeyEvent. VK_F6: msg += "Клавіша F6\n"; break; case KeyEvent. VK_LEFT: msg += "Клавіша <-\n"; break; case KeyEvent. VK_RIGHT: msg += "Клавіша ->\n"; break; case KeyEvent. VK_PAGE_UP: msg += "Клавіша PAGE UP\n"; break; } repaint(); } public void keyReleased(KeyEvent ke) { showStatus("Key Up"); } public void keyTyped(KeyEvent ke) { msg += ke.getKeyChar(); repaint(); } }
11. Результати виконання лабораторної роботи 6 збережіть у звіт та зробіть відповідні висновки.
Контрольні запитання 1. Що таке аплет? 2. Які основні методи при роботі з аплетами ви знаєте? 3. Який метод використовують для того, щоб обновити інформацію відображену у вікні? Вимірювання розходу рідини з використанням рівняння Бернуллі Мета роботи. Ознайомитись з принципами вимірювання розходу рідини за допомогою реометру, що працює використовуючи модель загального гідродинамічного напору на основі рівняння Бернуллі. Сучасний розвиток будь-якої технології вимагає забезпечення переміщення технологічних рідин і газів по трубопроводах. Для контролю цього транспортного процесу необхідно отримувати інформацію про дійсний розхід речовини на різних ділянках трубопроводів. Вимірювання цієї величини часто здійснюється спеціальними приладами – витратомірами, що працюють із використанням закону (рівняння) Бернуллі, найважливішим висновком з якого є незмінність енергетичних характеристик потоку рідини вздовж всієї довжини його переміщення. Використання дроселюючи пристроїв (вузьких отворів, які встановлюють на шляху переміщення рідини) і вимірювання різниці тисків перед і після дроселю дозволяє досить точно виміряти розхід речовини. В рамках виконання даної роботи ми ознайомимось з принципом роботи такого пристрою. Без урахування внутрішніх втрат енергії на подолання тертя рівняння Бернуллі можна записати у виді У цьому рівнянні Zi - геометричний (нівелірний) напір, який відображає потенційну енергію рідини у точці вимірювання у гравітаційному полі Землі; Pi/ - статичний напір, зумовлений вагою рідини; Wi2/2g - динамічний або швидкісний напір, зумовлений кінетичною енергією руху рідини. Перші два члени об’єднують у гідростатичний напір, другий тоді можна назвати гідродинамічним. З рівняння Бернуллі випливає, що сума гідростатичного і гідродинамічного напру – величина незмінна. Тобто, частина одного напору може перетворюватись у інший. На цьому принципі заснована робота витратомірів із змінним перепадом тиску. Основний елемент таких пристроїв – дросельна перегородка з отвором, яка монтується в трубі на шляху потоку рідини або газу. При проходженні потоку через таку перегородку збільшується швидкість, а отже й динамічний напір. При цьому відповідно зменшується значення статичного напору. Різниця між статичними напорами до і після дроселя фіксується за допомогою диференціального манометра, один вивід якого приєднується до дроселюючого пристрою, а інший – після нього. Проградуювавши диференційний манометр для різних розходів рідини, можна надалі вимірювати їх по перепаду рівнів у колінах диференційного манометру.
ОПИС ЛАБОРАТОРНОЇ УСТАНОВКИ Принципова схема лабораторної установки наведена на рисунку. Рисунок. Схема лабораторної установки для градуювання
Основним апаратом установки є лабораторний реометр (1), що являє собою капіляр, кінці якого приєднані до диференціального манометра. Реометр (1) за допомогою триходового крана (2) зв’язаний або з атмосферою, або з аспіратором (3), який слугує для вимірювання кількості газу, що пройшов через реометр за певний час. Аспіратор має зливний відвід із запірним краном (4). Аспіратор з’єднаний з манометром (5), один вивід якого відкритий на атмосферу. Рідина з аспіратора зливається в мірний об’єм (6). Вода в аспіратор подається з міської мережі через запірний кран (7). Джерело потоку газу – повітродувка (8). Надлишок повітря викидається в атмосферу через відвід із запірним краном (9). Основний зміст роботи полягає в тому, щоб проградуювати диференційний манометр таким чином, щоб перепад рівнів у ньому можна було використовувати для вимірювання розходу повітря, яке подається з аспіратора.
ХІД ВИКОНАННЯ ЕКСПЕРИМЕНТУ 1. Підготувати установку до роботи. Для цього відкрити на атмосферу кран (2) з боку аспіратора (3); обережно відкрити кран (7); повільно заповнити аспіратор водою. Далі відкривають кран (2) на атмосферу, але вже з боку реометра (1). 2. При відкритих на атмосферу кранах (2) і (9) вмикають повітродувку (8). 3. Поступово прикриваючи кран (9), подати певний потік повітря через реометр (1), що фіксується за висотою стовпа рідини h1 у манометрі. 4. За допомогою триходового крану (2) з'єднують реометр з аспіратором (вихід в атмосферу перекритий!). Майже одночасно відкривають зливний кран (4) і встановлюють таку швидкість витікання води, за якої різниця рівнів у манометрі (5) (h5) була би близька до нуля. Це означає, що газ поступає в аспіратор при атмосферному тиску. Після цього за допомогою лінійки вимірюють перепад рівнів у реометрі (h1). Паралельно визначають час заповнення водою з аспіратора мірного об’єму (6) (за секундоміром). Об’єм води, що має набратись у мірний посуд (6) V6 задається викладачем (0,5, чи 1 л). Перед початком виміру замінюють посуд (6) із рідиною, що витекла з аспіратора в період підготовки системи, на незаповнений посуд (6). 5. Вимірювання за пунктом 4 (для кожного значення h1) повторюють 3-5 разів (за вказівкою викладача), оцінюють відтворюваність результатів; знаходять середні значення h1сер та . 6. 3’єднати кран (2) із боку реометра (1) з атмосферою та завдання пп. 3-5 повторити 6-8 разів для різних висот h1 (за всією шкалою реометра (1). 7. Одержані експериментальні дані заносять у таблицю. Таблиця
ОБРОБКА РЕЗУЛЬТАТІВ ЕКСПЕРИМЕНТУ 1. Виходячи з даних вимірювань розрахувати об’ємну витрату і занести результат у таблицю. 2. Побудувати графік функцій = f(h1сер) і та пояснити їх характер. 3. Побудувати калібрувальну криву реометра в координатах = f(h1сер). Пояснити, як користуватися цією кривою в практичній роботі. 4. На основі калібрувальної кривої побудувати шкалу реометра для заданого капіляра. Витрату газу на шкалі навести в л/хв. Ціну поділки шкали дати через 0,1 або 0,01 л/хв (залежно від діаметра капіляру). КОНТРОЛЬНІ ЗАПИТАННЯ 1. Рівняння Ейлера, Бернулі та нерозривності потоку (з виведенням). 2. Основні способи вимірювання витрати газу й рідини та їх характеристика. 3. Гідравлічні опори, їх походження та характеристика. 4. Способи створення напору під час переміщення газів і рідин. 5. Основні типи насосів і компресорів (будова та принцип дії). 6. Вимірювання витрати рідини та газу за допомогою приладів постійного перепаду (ротаметри, п’єзометри). ЛІТЕРАТУРА 1. Касаткин А.Г. Основные процессы и аппараты химической технологии. - М.: Химия, 1971. - С. 49 - 53, 56 - 64, 87 - 94, 136 - 137, 144 - 147, 151 - 153. 2. Солтис М., Закордонський В. Теоретичні основи процесів хімічної технології: Навч. посібник. Львів: ЛНУ, 2002. С.132-160. 3. Гончаров А.І., Середа І. П. Хімічна, технологія: Київ: Вища школа, 1979. Частина І. С. 78-84, С.88-95.
Лабораторна робота 2 (Теоретично-розрахункова робота)
|