Система дистанційного контролю геометричних параметрів об'єктів
Механічні пристрої вимірювання. Рішення на базі лазерних трекерів. Фізичні основи оптичних систем контролю. Технологія DirectShow та її призначення. Розробка схеми інформаційних потоків та функціональної схеми роботи системи дистанційного контролю.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 22.10.2012 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
проводиться установка графа фільтрів.
Дуже важливим методом є
function UpdateGraph : HResult;
який служить для оновлення графа фільтрів і викликається при різних змінах станів класу. Він будує ту частину графа фільтрів, яка відповідає за відображення відео-файлу. Якщо використовується OverlayMixer, то встановлюється ексклюзивний повноекранний режим за допомогою інтерфейсу IDDrawExclModeVideo. В процесі цього з'єднання проводиться перевірка, чи не використовується фільтр декодера Line21, оскільки Overlay Mixer не може бути сполучений Line21 Decoder2. А потім проводиться з'єднання VMR'а з Overlay Mixer'ом (знов створеним, у разі потреби).
3.5 Захоплення, інтерфейси і пристрої
Захоплення відео
Термін "захоплення відео" позначає можливість системи записувати відео дані, одержані від різних джерел, використовуючи API підсистеми DirectShow. Під пристроями захоплення зображення розуміються не тільки камери (web-камери, IP-камери і т.п.), але і TV-тюнери, різні відео-реєстратори і т.п. Захоплюване відео зображення може бути записано на диск або переглянуто в режимі реального часу.
Велика кількість нових пристроїв захоплення зображення використовують Модель Драйверів Windows (Windows Driver Model - WDM). Дана архітектура включає набір апаратно-незалежних драйверів, званих драйверами класу, і набір апаратно-залежних міні-драйверів, які поставляє виробник устаткування. Міні-драйвера реалізують в собі всю специфічну для пристрою функціональність.
Граф фільтрів DirectShow представляє будь-який пристрій захоплення WDM як Фільтр Захоплення WDM (WDM Capture Filter). Даний фільтр настроюється залежно від характеристик драйвера.
Деякі старі пристрої захоплення відео все ще використовують драйвера Відео для Windows (Video for Windows - VFW). Не дивлячись на те, що дані драйвера вже застаріли, в підсистемі DirectShow є спеціальний фільтр (VFW Capture), що забезпечує роботу з даним драйвером.
Захоплення аудіо
Використовуючи підсистему DirectShow, ми можемо розробляти програми, в яких використовується можливість запису звуку.
Запис звуку може здійснюватися з мікрофону, програвача, або іншого пристрою, підключеного до звукової плати комп'ютера. До основних причин, для чого все це потрібне, можна сміливо віднести наступні:
запис звуку для дублювання відео потоку;
переклад аналогового аудіо потоку в цифровий формат;
передача звуку по мережі.
Підсистема DirectShow дозволяє записувати звук з різних аналогових пристроїв, підключених до звукової плати за допомогою фільтру захоплення аудіо (AudioCaptureFilter).
Цей фільтр використовує API Microsoft® PlatformSDKwaveInXXX для управління всіма пристроями, чиї драйвера підтримують це API. Кожна звукова плата представлена окремими екземплярами даного фільтру.
Фільтр захоплення звуку представляє кожен вхід на звуковій платі, будь то мікрофон або MIDI-вхід, як вхідний контакт (InputPin). Програма може використовувати даний контакт для дозволу або заборони введення, для настройки частот, положення на панорамі і т.д. Можливості управління залежать від драйвера. Для повного використання всіх можливостей звукової плати може навіть знадобитися документація виготівника карти.
Інтерфейси
Граф фільтрів, який виконує захоплення аудіо або відео, називається графом захоплення (capturegraph). Даний граф має складнішу структуру, ніж звичайний граф відтворення. Для спрощення побудови графа захоплення додатком, підсистема DirectShow надає спеціальний об'єкт, що іменується будівником графа захоплення (CaptureGraphBuilder).
Об'єкт представлений інтерфейсом ICaptureGraphBuilder2, що містить методи побудови і управління графом захоплення.
Загальну схему взаємодії графів захоплення і відтворення в додатку можна представити таким чином.
Схема взаємодії графів захоплення і відтворення в програмі
Інтерфейс ICaptureGraphBuilder2содержит наступні методи:
SetFiltergraph - установка графа фільтрів для використання;
GetFiltergraph - отримання використовуваного зараз графа;
SetOutputFileName - створюємо файл для запису даних з графа;
FindInterface - пошук інтерфейсу в графі, починаючи з вказаного фільтру;
RenderStream - побудова графа захоплення;
ControlStream - установка часу старту і зупинки для різних потоків даних;
AllocCapFile - попередня установка потрібного розміру файлу для запису даних;
CopyCaptureFile - копіювання перевірених мультимедіа-даних з файлу захоплення;
FindPin- пошук певного контакту у фільтрі, або перевірка відповідності контакту вказаному критерію.
Для роботи нам буде досить всього чотирьох методів даного інтерфейсу.
Установка графа фільтрів для використання:
function SetFiltergraph(pfg: IGraphBuilder): HResult; stdcall;
pfg - покажчик на об'єкт графа з интерфейсомIGraphBuilder.
Побудова графа захоплення:
function RenderStream(
pCategory
pType: PGUID;
pSource: IUnknown;
pfCompressor
pfRenderer: IBaseFilter): HResult; stdcall;
pCategory - покажчик на унікальний ідентифікатор, що визначає категорію контакту. Може приймати нульове значення для використання контакту незалежно від категорії. Ми використовуватимемо наступні значення:
PIN_CATEGORY_CAPTURE - захоплення даних;
PIN_CATEGORY_PREVIEW - попередній перегляд;
pType- покажчик на унікальний ідентифікатор, задаючий тип вихідних даних, або нульове значення для використання будь-якого контакту, незалежно від категорії.
Ідентифікатор формату даних може приймати одне з наступних значень:
MEDIATYPE_AnalogAudio- аналогове аудіо;
MEDIATYPE_AnalogVideo- аналогове відео;
MEDIATYPE_Audio- аудіо;
MEDIATYPE_AUXLine21Data- використовується для закритих заголовків;
MEDIATYPE_File - файл (застарілий);
MEDIATYPE_Interleaved- що чергує аудіо і відео. Використовується для цифрового відео (DigitalVideo- DV);
MEDIATYPE_LMRT- застарілий формат (не використовується);
MEDIATYPE_Midi- формат MIDI;
MEDIATYPE_MPEG2_PES - пакети MPEG-2 PES;
MEDIATYPE_MPEG2_SECTION - данні секції MPEG-2;
MEDIATYPE_ScriptCommand- дані у вигляді сценарію. Використовується в закритих заголовках;
MEDIATYPE_Stream - потік даних без часових міток;
MEDIATYPE_Text- текст;
MEDIATYPE_Timecode- дані розбиті по кадрах. У підсистемі DirectShow немає фільтрів, що підтримують даний формат;
MEDIATYPE_URL_STREAM- застарілий формат (не використовується);
MEDIATYPE_Video - відео;
pSource- покажчик на стартовий фільтр в ланцюзі графа або на вихідний контакт;
pfCompressor - фільтр стиснення. Може приймати нульове значення;
pfRenderer- фільтр-приймач, такий як фільтр відтворення або мультиплексор. Може приймати нульове значення.
Створення файлу для запису даних з графа:
function SetOutputFileName
const pType: TGUID;
lpstrFile: PWCHAR;
out ppf: IBaseFilter;
out ppSink: IFileSinkFilter): HResult; stdcall;
pType- покажчик на унікальний ідентифікатор, що визначає підтип вихідні мультимедіа даних або ідентифікатор класу мультиплексора або фільтру запису даних у файл. Якщо ми хочемо задати підтип мультимедіа даних, то повинні використовувати одне з наступних значень:
MEDIASUBTYPE_Avi- дані у форматі AVI;
MEDIASUBTYPE_Asf - дані у форматі ASF;
lpstrFile- ім'я файлу;
ppf - адреса покажчика, куди буде переданий інтерфейс мультиплексора;
ppSink- адреса покажчика, куди буде переданий інтерфейс запису даних у файл IFileSinkFilter. Може приймати нульове значення.
Пошук інтерфейсу в графі, починаючи з вказаного фільтру:
function FindInterface(
pCategory
pType: PGUID;
pf: IBaseFilter;
const riid: TGUID;
out ppint): HResult; stdcall;
pCategory - покажчик на унікальний ідентифікатор, що визначає критерій пошуку;
pType - покажчик на унікальний ідентифікатор, задаючий тип вихідних даних;
pf - фільтр, з якого починається пошук;
riid - ідентифікатор шуканого інтерфейсу;
ppin t- адреса змінної, в яку і буде записаний шуканий інтерфейс.
Ще один інтерфейс, який нами буде використаний - це інтерфейс управління мультиплексором IConfigAviMux. Його методи:
SetMasterStream- установка основного потоку для синхронізації з іншими потоками у файлі;
GetMasterStream- отримання основного потоку;
SetOutputCompatibilityIndex- установка індексу формату AVI-файлу;
GetOutputCompatibilityIndex- отримання індексу формату AVI-файлу.
З методів даного інтерфейсу нам буде потрібно всього один - SetMasterStream. При одночасному захопленні відео даних і аудіо потоку ми виставлятимемо як основний потік звукової:
function SetMasterStream(iStream: Longint): HResult; stdcall;
iStream - індекс потоку або -1 за відсутності основного потоку. Потоки нумеруються з нуля.
Для управління властивостями фільтрів і контактів нами використовуватимуться наступні інтерфейси:
IAMStreamConfig- інтерфейс управління форматом даних вихідного потоку;
ISpecifyPropertyPages- інтерфейс управління сторінками властивостей.
Інтерфейс IAMStreamConfig виступає як допоміжний для отримання об'єкту з інтерфейсом ISpecifyPropertyPages. Інтерфейс управління сторінками властивостей ISpecifyPropertyPages має всього один метод - метод отримання сторінок властивостей:
function GetPages(out pages: TCAGUID): HResult; stdcall;
pages - покажчик на елемент структури TCAGUID, яку заповнює оператор. Для заповнення поля pElems даної структури буде викликаний метод CoTaskMemAllocи, в кінці роботи, пам'ять повинна бути звільнена викликом CoTaskMemFree.
Перелік пристроїв певного класу
Ми описали декілька необхідних для роботи інтерфейсів, але дотепер не обговорювали способи отримання власне самого пристрою захоплення. Для роботи із списком пристроїв нам буде потрібно наступні інтерфейси:
IMoniker - інтерфейс дозволяє одержати покажчик на об'єкт, що ідентифікується щоб дістати доступ до сховища властивостей об'єкту;
IEnumMoniker - використовується для переліку монікерів;
ICreateDevEnum - інтерфейс потрібен для створення об'єкту переліку вказаної категорії пристроїв;
IPropertyBag - надає доступ до колекції властивостей об'єкту.
Розглянемо докладніше перераховані інтерфейси.
Насамперед ми повинні створити об'єкт з інтерфейсом ICreateDevEnumдля переліку вказаної категорії пристроїв, що містить всього один метод:
function CreateClassEnumerator(
const clsidDeviceClass: TGUID;
out ppEnumMoniker: IEnumMoniker;
dwFlags: DWORD): HResult; stdcall;
clsidDeviceClass- ідентифікатор класу категорії пристроїв;
ppEnumMoniker- адреса змінної, яка одержить інтерфейс переліку монікерів IEnumMoniker;
dwFlags- бітова комбінація прапорів, задаючих режим роботи даного методу:
CDEF_DEVMON_CMGR_DEVICE - перелік аудіо і відео кодеків, що використовують менеджер стиснення аудіо (AudioCompressionManager - ACM) або менеджер стиснення відео (VideoCompressionManager - VCM);
CDEF_DEVMON_DMO - перелік об'єктів
DMO (DirectX Media Objects);
CDEF_DEVMON_FILTER - перелік власних фільтрів DirectShow;
CDEF_DEVMON_PNP_DEVICE - перелік пристроїв Plug-and-Play.
При нульовому значенні будуть перераховані всі фільтри, які потрапляють у вказану категорію.
Потім, за допомогою інтерфейсу IEnumMonikerмы організуємо цикл перебору всіх монікерів. Потрібен нам для цього метод IEnumMoniker.Next:
function Next(
celt: Longint;
out elt;
pceltFetched: PLongint): HResult; stdcall;
celt- число повернених монікерів;
elt- змінна, в яку буде занесене посилання на моникер;
pceltFetched- після закінчення роботи методу дана змінна міститиме реальну кількість монікерів.
У інтерфейсі IMoniker, що дозволяє дістати доступ до об'єкту або сховища властивостей, нам цікаві всього два методи. Це метод отримання інтерфейсу сховища:
function BindToStorage(
const bc: IBindCtx;
const mkToLeft: IMoniker;
const iid: TIID;
out vObj): HResult; stdcall;
bc - покажчик на інтерфейс IBindCtx. У нашому випадку NIL;
mkToLeft - якщо використовується складений монікер, то значенням буде монікер, що стоїть зліва від поточного монікеру. У нашому випадку NIL;
iid- унікальний ідентифікатор запрошуваного інтерфейсу, покажчик на який буде занесений в vObj;
vObj- адреса покажчика, в який буде занесений шуканий інтерфейс.
Метод отримання потрібного нам інтерфейсу об'єкту, що ідентифікується монікером:
function BindToObject(
const bc: IBindCtx;
const mkToLeft: IMoniker;
const iidResult: TIID;
out vResult): HResult; stdcall;
bc - покажчик на інтерфейс IBindCtx. У нашому випадку NIL;
mkToLeft - якщо використовується складений монікер, то значенням буде моникер, що стоїть зліва від поточного монікеру. У нашому випадку NIL;
iidResult- посилання на ідентифікатор інтерфейсу, який ми бажаємо одержати для зв'язку з об'єктом, монікером, що ідентифікується;
vResult- адреса покажчика, в який буде занесений шуканий інтерфейс.
3.6 Сторінки властивостей та алгоритми роботи з пристроями
Перш ніж почати запис звуку або зображення, було б непогано налаштувати ряд параметрів для поліпшення їх якості, або навпаки, зменшити якість з метою економії місця на диску.
Доступ до сторінок властивостей фільтрів можна одержати, використовуючи спеціальний інтерфейс ISpecifyPropertyPages, який був описаний вище. А відображається сторінка властивостей у вигляді модального діалогу методом OleCreatePropertyFrame з бібліотеки COM:
function OleCreatePropertyFrame(
hwndOwner: HWnd;
x,y: Integer;
lpszCaption: POleStr;
cObjects: Integer;
pObjects: Pointer;
cPages: Integer;
pPageCLSIDs: Pointer;
lcid: TLCID;
dwReserved: Longint;
pvReserved: Pointer): HResult; stdcall;
hwndOwner- дескриптор батьківського вікна для сторінки властивостей;
x - зарезервовано;
y - зарезервовано;
lpszCaption - рядок, який буде використаний в заголовку сторінки властивостей;
cObjects - кількість покажчиків на об'єкти, які будуть передані в параметрі pObjects;
pObjects- масив покажчиків IUnknown на об'єкти, для яких повинна бути викликана сторінка властивостей;
cPages - кількість сторінок властивостей, визначених в pPageCLSIDs;
pPageCLSIDs - масив розміру cPages, що містить ідентифікатори класу (CLSID) для кожної сторінки властивостей;
lcid - ідентифікатор поточних локальних установок;
dwReserved - зарезервовано, повинне бути нульовим;
pvReserved - зарезервовано, повинне бути нульовим.
Не кожен фільтр має сторінку властивостей. Перевірити це досить просто - потрібно лише спробувати одержати інтерфейс ISpecifyPropertyPagesдля фільтру:
Result := Filter.QueryInterface(ISpecifyPropertyPages, PropertyPages);
Також для деяких фільтрів ми можемо набудувати формати вихідних потоків даних, одержавши інтерфейс IAMStreamConfig, про який так само було сказано вище.
Тепер прийшов час розповісти про послідовність дій при роботі з пристроями захоплення зображення і звуку. Було розказано про інтерфейси, про стиснення потоків даних і настройки фільтрів окремо. Тепер же давайте складемо зразковий план наших дій:
1. Створюємо об'єкт для побудови графа фільтрів:
Result := CoCreateInstance(CLSID_FilterGraph, NIL
CLSCTX_INPROC_SERVER, IID_IGraphBuilder, FGraphBuilder);
2. Створюємо об'єкт для побудови графа захоплення:
Result := CoCreateInstance(CLSID_CaptureGraphBuilder2, NIL
CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2,
FCaptureGraphBuilder);
3. Задаємо граф фільтрів для використання в побудові графа захоплення:
Result := FCaptureGraphBuilder.SetFiltergraph(FGraphBuilder);
4. Одержуємо фільтри захоплення і стиснення виходячи з їх імен:
FVideoCaptureFilter := EnumerateDevices(CLSID_VideoInputDeviceCategory,
VideoCaptureDeviceName, NIL, TRUE);
FAudioCaptureFilter := EnumerateDevices(CLSID_AudioInputDeviceCategory,
AudioCaptureDeviceName, NIL, TRUE);
FVideoCompressFilter := EnumerateDevices(CLSID_VideoCompressorCategory,
VideoCompressDeviceName, NIL, TRUE);
FAudioCompressFilter := EnumerateDevices(CLSID_AudioCompressorCategory,
AudioCompressDeviceName, NIL, TRUE);
5. Додаємо одержані фільтри в граф:
// Додаємо фільтр захоплення відео в граф
if FVideoCaptureFilter <> NIL then
begin
FGraphBuilder.AddFilter(FVideoCaptureFilter, 'VideoCaptureFilter');
end;
// Додаємо фільтр захоплення звуку в граф
if FAudioCaptureFilter <> NIL then
begin
FGraphBuilder.AddFilter(FAudioCaptureFilter, 'AudioCaptureFilter');
end;
// Додаємо фільтр стиснення відео в граф
if FVideoCompressFilter <> NIL then
begin
FGraphBuilder.AddFilter(FVideoCompressFilter, 'VideoCompressFilter');
end;
// Додаємо фільтр стиснення звуку в граф
if FAudioCompressFilter <> NIL then
begin
FGraphBuilder.AddFilter(FAudioCompressFilter, 'AudioCompressFilter');
end;
6. Будуємо граф захоплення залежно від прапорів захоплення і попереднього перегляду, задаємо формат вихідних даних:
Result := FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW,
@MEDIATYPE_Video, FVideoCaptureFilter, NIL, NIL);
Result := FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW,
@MEDIATYPE_Audio, FAudioCaptureFilter, NIL, NIL);
Result := FCaptureGraphBuilder.SetOutputFileName(MEDIASUBTYPE_Avi,
PWideChar(FCaptureFileName), FMux, FSink);
Result := FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_CAPTURE,
@MEDIATYPE_Video, FVideoCaptureFilter, FVideoCompressFilter, FMux);
Result := FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_CAPTURE,
@MEDIATYPE_Audio, FAudioCaptureFilter, FAudioCompressFilter, FMux);
7. Запускаємо графа захоплення:
Result := FMediaControl.Run();
8. Звільняємо виділену пам'ять.
4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ
4.1 Загальна характеристика та коло задач, що вирішує проектована система
Метою даної дипломної роботи є створення програмного забезпечення для оптичної системи контролю геометричних параметрів. Як датчик вимірювання використовується матриця web-камери, підключеної до персонального комп'ютера оператора. Система призначена для безконтактного контролю зміни геометрії спостережуваного об'єкту.
Для роботи системи необхідно: персональний комп'ютер на базі Intel процесору з частотою не менше 2,4 ГГц, з ОЗУ рівним 512Мб, з SVGA - відеоадаптером і монітором 17 дюймів; web-камера; USB-кабель, що з'єднує ПЕОМ з web-камерою.
Програма розроблена в середовищі Delphi з використанням пакету компонентів DSPack, який призначений для захоплення і обробки відео-потоків. DSPack являє собою набір компонентів для написання додатків з використанням DirectShow на Boralnd Delphi.
На рис. 4.1 наведена схема інформаційних потоків системи. Зображення спостережуваного об'єкту проектується за допомогою об'єктиву на світлочутливу CCD-матрицю відеокамери. З відеокамери сигнал поступає в комп'ютер через стандартний USB-порт.
Для зв'язку відеокамери з розробленим програмним забезпеченням на комп'ютері встановлений драйвер відеокамери, який перетворить сигнали відеокамери в стандартний відеопотік. Далі програма захоплює один кадр відеопотоку і обробляє його, з виведенням кінцевого результату вимірювання на екран монітора.
4.2 Розробка схеми інформаційних потоків та логіко-функціональної схеми роботи системи
Рис. 4.1 - Схема інформаційних потоків системи
На рис. 4.2 наведена логіко-функціональна схема роботи системи
Рис. 4.2 - Логіко-функціональна схема роботи системи
4.3 Розробка алгоритмів та опис програмної реалізації
Розглянемо фрагменти програмного коду, за допомогою якого була реалізована система. Наступна процедура призначена для формування списку пристроїв, що підключені до комп'ютеру.
procedure AssignListToComboBox (ComboBox: TComboBox; List: String; Index: integer);
begin
ComboBox.Items.Text := List;
if (ComboBox.Items.Count > 0) and (Index >= 0) then begin
ComboBox.ItemIndex := Index;
end;
end;
При створені форми, що відповідає настройці пристрою, задаємо наступні початкові параметри.
procedure TDemoForm.FormCreate(Sender: TObject);
begin
FullyCreated := False; // ознака підключення по відеопотоку
cmbVideoDevices.Items.Text := VideoDevices; // формуємо список пристроїв, що підключені до комп'ютера
cmbVideoDevices.ItemIndex := 0; // за замовченням обраний перший пункт списку
VideoGrabber.Display_AutoSize := true; // автоматичне визначення розміру екрана відображення
VideoGrabber.AutoRefreshPreview := true; // попередній перегляд почнеться автоматично при зміні параметрів пристрою
// настройка параметрів прозорості відеокадру
FPickupTransparentColor_MustGetRGBPixel := false;
FPickupTransparentColor_LastRGBPixelValueAtMousePosition := -1;
FPickupTransparentColor_MouseXVideoPosition := 0;
FPickupTransparentColor_MouseYVideoPosition := 0;
// автоматичне визначення розміру
FStartupWidth := Width;
FStartupHeight := Height;
end;
Процедура, що відбувається при натисненні кнопки „Старт”.
procedure TDemoForm.BitBtn1Click(Sender: TObject);
begin
VideoGrabber.Visible := chkVisible.Checked; // вмикаємо перемикач, що відповідає за відображення екрану
VideoGrabber.OnVideoDeviceSelected := VideoDeviceSelected; // викликаємо процедуру вибору пристрою
VideoGrabber.OnFrameCaptureCompleted := OnFrameCaptureCompleted; // викликаємо процедуру захвату зображення
VideoGrabber.OnResizeVideo := OnResizeVideo; // викликаємо процедуру зміни розміру зображення
VideoGrabber.VideoDevice := cmbVideoDevices.ItemIndex;
// задаємо положення екрану на формі
VideoGrabber.Left := 50;
VideoGrabber.Top := 120;
VideoGrabber.Parent := Self;
VideoGrabber.StartPreview; // початок відображення
FullyCreated := True; // ознака того, що відображення почалося
end;
end;
Процедура, що відбувається при виборі пристрою - джерела зображення.
procedure TDemoForm.VideoDeviceSelected (Sender: TObject);
begin
calibr.imgCapturedFrame.Picture.Assign (nil); // передаємо захоплене зображення в компонент типу Image на формі контролю параметрів
cmbVideoSizes.Clear; // очищуємо список доступних для обраного пристрою розмірів зображень
cmbVideoSizes.Items.Text := VideoGrabber.VideoSizes; // формуємо список розмірів
cmbVideoSizes.ItemIndex := VideoGrabber.VideoSize;
end;
Процедура, що відбувається при захоплені зображення.
procedure TDemoForm.OnFrameCaptureCompleted(Sender: TObject;
FrameBitmap: TBitmap; BitmapWidth, BitmapHeight: Integer;
FrameNumber: Cardinal; FrameTime: Int64; DestType: TFrameCaptureDest;
FileName: String; Success: Boolean; FrameId: Integer);
var
AlternateOption: Boolean;
begin
calibr.imgCapturedFrame.AutoSize := true; // автоматична зміна розміру комонента, що відображає захоплене зображення
AlternateOption := False;
if not AlternateOption then begin // при безпосередньому перетворенні в растрове зображення засобами ЦПУ calibr.imgCapturedFrame.Picture.Bitmap.Handle := FrameBitmap.Handle;
FrameBitmap.ReleaseHandle;
end
else begin // створення копії відеокадру через буфер обміну
calibr.imgCapturedFrame.Picture.Assign (FrameBitmap);
end;
end;
Процедура вибору пристрою із сформованого списку.
procedure TDemoForm.cmbVideoDevicesChange(Sender: TObject);
begin
if FullyCreated then begin
VideoGrabber.VideoDevice :=cmbVideoDevices.ItemIndex;
end;
end;
Процедура вибору зі списку розміру зображення.
procedure TDemoForm.cmbVideoSizesChange(Sender: TObject);
begin
if FullyCreated then begin
VideoGrabber.VideoSize :=cmbVideoSizes.ItemIndex;
end;
end;
Процедура, що відбувається при закритті форми.
procedure TDemoForm.FormDestroy(Sender: TObject);
var
TempVideoGrabber: TVideoGrabber;
begin
if FullyCreated then begin // якщо процес захоплення відеопотоку запущений
TempVideoGrabber := VideoGrabber;
VideoGrabber := nil; FullyCreated := False;
TempVideoGrabber.Free; // звільняємо змінну
end;
end;
Процедура, за допомогою якої відбувається масштабування зображення.
procedure TDemoForm.tbrZoomChange(Sender: TObject);
begin
VideoGrabber.ZoomCoeff := tbrZoom.Position;
end;
Зсув зображення в горизонтальному напрямку.
procedure TDemoForm.tbrZoomXChange(Sender: TObject);
begin
VideoGrabber.ZoomXCenter := tbrZoomX.Position;
end;
Зсув зображення в вертикальному напрямку.
procedure TDemoForm.tbrZoomYChange(Sender: TObject);
begin
VideoGrabber.ZoomYCenter := tbrZoomY.Position;
end;
Настройка параметрів пристрою відбувається за допомогою виклику стандартного діалогу операційної системи. Зовнішній вид вікна зумовлений встановленими драйверами пристроїв.
procedure TDemoForm.BitBtn3Click(Sender: TObject);
begin
VideoGrabber.ShowDialog (dlg_VideoDevice);
end;
Аналогічним чином відбувається настройка параметрів відеопотоку.
procedure TDemoForm.BitBtn2Click(Sender: TObject);
begin
VideoGrabber.ShowDialog (dlg_StreamConfig);
end;
Далі розглянемо більш детально процес обробки захопленого відеокадру. На рис. 4.3 наведений фрагмент алгоритму процедури.
Рис. 4.3 - Алгоритм знаходження верхньої та нижньої границі зображення
Обробка зображення відбувається при спрацьовуванні таймера, інтервал якого відповідає часовому проміжку між спостереженнями
procedure TDemoForm.Timer1Timer(Sender: TObject);
var i:integer;
x:array[0..1200]of longint; // масив кодів кольорів пікселя в форматі RGB
r,g,b:integer;
n_g,v_g:integer; // координати верхньої та нижньої границі
flag:boolean; // ознака того, що верхня границя не знайдена
a:array[0..1200] of longint; // масив кольорів пікселей зображення
begin
if FullyCreated then begin
VideoGrabber.CaptureFrameTo (fc_TBitmap, ''); // передача захопленого відеокадру в компонент Image
if pusk then // якщо процес спостереження запущений
begin
schet:=schet+1; // лічильник спостережень
t:=t+Timer1.Interval; // часовий інтервал спостереження
t_izm[schet]:=t; // запам'ятовуємо часовий інтервал в масиві
with Calibr do
begin
for i:=0 to imgCapturedFrame.Height-1 do // перебираємо в циклі пікселі зображення
begin
a[i]:=ColorToRGB(imgCapturedFrame.Canvas.Pixels[imgCapturedFrame.Width div 2,i]); // заносимо код кольору в масив, перетворюючи колір в палітру RGB
x[i]:= GetRValue(a[i]); // виділяємо червоний канал
if i=0 then // якщо перший рядок
begin
r:=x[i]; // початкове значення - колір фону
end;
if (abs(x[i]-r)>porog) and (flag=false) then // знайдена верхня границя зображення
begin
v_g:=i; // координати верхньої границі зображення
flag:=true; // ознака того, що верхня границя знайдена
r:=x[i] // запам'ятовуємо колір зображення
end;
if (abs(x[i]-r)>porog) and (flag=true) then// знайдена нижня границя зображення
begin
begin n_g:=i; // координати нижньої границі зображення
break; // вихід із циклу
end;
end;
with imgCapturedFrame do // виводимо лінії границі об'єкту
begin
// побудова верхньої границі
Canvas.Pen.Color:=clRed; // встановлюємо колір лінії
Canvas.Pen.Style:=psSolid; // стиль лінії
Canvas.Pen.Width:=2; // товщина лінії
Canvas.MoveTo(0,n_g);
Canvas.LineTo(imgCapturedFrame.Width-1,n_g); // будуємо лінію по заданих координатах
// побудова нижньої границі
Canvas.Pen.Color:=clRed;
Canvas.Pen.Style:=psSolid;
Canvas.Pen.Width:=2;
Canvas.MoveTo(0,v_g);
Canvas.LineTo(imgCapturedFrame.Width-1,v_g);
end;
d[schet]:=abs(n_g-v_g)/m; // визначення довжини в міліметрах
Memo1.Lines.Add('Время t='+inttostr(t_izm[schet])+' ' +'Расстояние d='+ floattostrf(d[schet],fffixed,5,2)); // вивід спостережуваних параметрів на екран
calibr.Label5.Caption:=timetostr(time-t_pusk); // відображення таймеру процесу спостереження
// побудова графіку зміни параметрів
Calibr.Chart1.BottomAxis.Automatic:=false; // відключення автоматичного формування максимальних та мінімальних значень
if schet<=30 then // якщо номер спостереження, менший ніж 30
begin
// встановлюємо максимальне та мінімальне значення
Calibr.Chart1.BottomAxis.Maximum:=30 ;
Calibr.Chart1.BottomAxis.Minimum:=0;
end
else
begin // інакше відбувається зсув осі Х
Calibr.Chart1.BottomAxis.Maximum:=schet;
Calibr.Chart1.BottomAxis.Minimum:=schet-30;
end;
calibr.Series1.AddXY(round(t_izm[schet]/1000),d[schet],'',clBlack);
DecodeTime(time,hour,min,sec,msec); // побудова лінії графіку
try
Memo1.Lines.SaveToFile(s); // збереження даних в лог-файлі
except
end;
end; end;
end;end;
Настройка параметрів повзунків, що відповідають за масштабування та зсув зображення відбувається за допомогою наступних процедур.
Встановлення максимальних та мінімальних значень.
procedure TDemoForm.VideoGrabberGraphBuilt(Sender: TObject);
begin
tbrZoomX.Min := - (VideoGrabber.VideoWidth div 2);
tbrZoomX.Max := VideoGrabber.VideoWidth div 2;
tbrZoomY.Min := - (VideoGrabber.VideoHeight div 2);
tbrZoomY.Max := VideoGrabber.VideoHeight div 2;
end;
Встановлення висоти, ширини та положення на екрані.
procedure TDemoForm.VideoGrabberResize(Sender: TObject);
begin
tbrZoomX.Width:=VideoGrabber.Width;
tbrZoomY.Height:=VideoGrabber.Height;
tbrZoomX.Top:=VideoGrabber.Top+VideoGrabber.Height+15;
end;
Далі розглянемо процедури модулю, що відповідає формі контролю параметрів. Процедура первинного знаходження границь об'єкту.
procedure TCalibr.BitBtn3Click(Sender: TObject);
var i:integer;
x,y,z:array[0..1200]of longint;
r,g,b:integer;
n_g,v_g:integer;
flag:boolean;
a:array[0..1200] of longint;
begin
BitBtn3.Enabled:=false;
flag:=false;
DemoForm.Timer1.Enabled:=false; // відключаємо таймер
porog:=strtoint(cxTextEdit2.Text); // визначаємо поріг ( різницю між кодом кольору фона та зображення)
for i:=0 to imgCapturedFrame.Height-1 do // перебираємо в циклі пікселі зображення
begin
a[i]:=ColorToRGB(imgCapturedFrame.Canvas.Pixels[imgCapturedFrame.Width div 2,i]); // заносимо код кольору в масив, перетворюючи колір в палітру RGB
x[i]:= GetRValue(a[i]); // виділяємо червоний канал
if i=0 then // якщо перший рядок
begin
r:=x[i]; // початкове значення - колір фону
end;
if (abs(x[i]-r)>porog) and (flag=false) then // знайдена верхня границя зображення
begin
v_g:=i; // координати верхньої границі зображення
flag:=true; // ознака того, що верхня границя знайдена
r:=x[i] // запам'ятовуємо колір зображення
end;
if (abs(x[i]-r)>porog) and (flag=true) then// знайдена нижня границя зображення
begin
begin n_g:=i; // координати нижньої границі зображення
break; // вихід із циклу
end;
end;
with imgCapturedFrame do // виводимо лінії границі об'єкту
begin
// побудова верхньої границі
Canvas.Pen.Color:=clRed; // встановлюємо колір лінії
Canvas.Pen.Style:=psSolid; // стиль лінії
Canvas.Pen.Width:=2; // товщина лінії
Canvas.MoveTo(0,n_g);
Canvas.LineTo(imgCapturedFrame.Width-1,n_g); // будуємо лінію по заданих координатах
// побудова нижньої границі
Canvas.Pen.Color:=clRed;
Canvas.Pen.Style:=psSolid;
Canvas.Pen.Width:=2;
Canvas.MoveTo(0,v_g);
Canvas.LineTo(imgCapturedFrame.Width-1,v_g);
end;
d_et_pic:=abs(n_g-v_g); // визначення довжини еталону в пікселях
end;
Процедура знаходження коефіцієнту масштабування має наступний вигляд.
procedure TCalibr.BitBtn1Click(Sender: TObject);
begin
d_et_mm:= strtoint(cxTextEdit1.Text); // довжина еталону в міліметрах
m:=d_et_pic/d_et_mm; // знаходження коефіцієнту
Label3.Caption:='m='+floattostrf(m,fffixed,5,2); // вивід значення на екран
Label3.Visible:=true;
BitBtn2.Enabled:=true;
BitBtn4.Enabled:=true;
end;
Процедура запуску системи контролю.
procedure TCalibr.BitBtn2Click(Sender: TObject);
begin
pusk:=time; // ознака того, що процес запущений
DemoForm.Timer1.Interval:=integer(cxSpinEdit1.Value); // встановлення інтервалу таймера
DemoForm.Timer1.Enabled:=true; // таймер активний
Memo1.Clear;
Memo1.Lines.Add('Дата: '+datetostr(date)+', '+ 'Время: '+timetostr(time)) ; //вивід заголовку - дати та часу початку спостереження
DecodeTime(time,hour,min,sec,msec); // отримаємо системний час
DecodeDate(date,year,month,day); // отримуємо системну дату
// формування назви лог-файлу на основі дати та часу початку спостереження
s:=ExtractFilePath(Application.ExeName)+'log'+inttostr(year)+'_'+inttostr(month)+'_'+inttostr(day)+'_'+inttostr(hour)+'_'+inttostr(min)+'_'+inttostr(sec)+'.txt';
Label5.Visible:=true;
Chart1.LeftAxis.Automatic:=false;
Chart1.LeftAxis.Maximum:=d_et_mm*1.5;
Chart1.LeftAxis.Minimum:=0;
Series1.Clear; // очищення графіку
end;
Процедура зупинки процесу спостереження
procedure TCalibr.BitBtn4Click(Sender: TObject);
begin
DemoForm.Timer1.Enabled:=false; // зупинка таймеру
schet:=0; // кількість спостережень
BitBtn3.Enabled:=True;
pusk:=false; // ознака того, що процес не активний
end;
4.4 Інтерфейс користувача системи
Після запуску системи необхідно провести настройку зображення. Для цього необхідно вибрати пункт меню Дії - Настройка зображення (рис. 4.4).
Рис. 4.4 - Вікно настройки зображення
На екрані з'явиться наступне вікно (рис. 4.5).
Рис. 4.5 - Вікно настройки зображення
Вибираємо із списку той пристрій, який використовуватимемо і натискаємо кнопку Старт. Далі необхідно вибрати розмір одержуваного зображення (список формується автоматично на основі даних, що одержуються від драйвера пристрою).
Рис. 4.6 - Вибір розміру зображення
Система також дозволяє настроювати параметри зображення, такі як яскравість, контрастність, відтінок, насиченість та інші. (рис. 4.7). Для цього треба натиснути кнопку Настройка параметрів пристрою.
Рис. 4.7 - Вікно властивостей обраного пристрою
Також є можливість налаштувати формат відеопотоку, основним параметром якого є частота кадрів (рис. 4.8).
Рис. 4.8 - Вікно завдання параметрів формату відеопотоку
Також ми можемо збільшити масштаб зображення, відрегулювати його положення по вертикальній і горизонтальній осі. Перемикач «У весь екран» дозволяє переглянути зображення у повноекранному режимі.
Після того, як всі настройки зображення були проведені, вибираємо в меню пункт меню «Контроль параметрів». Тут ми визначаємо частоту зняття параметрів в мілісекундах (ри.4.9).
Рис. 4.9 - Вікно завдання параметрів формату відеопотоку
Після натиснення кнопки «Знайти межі об'єкту» вони будуть виділені на зображенні червоним кольором. Далі проведемо калібрування. Введемо розмір еталонного зображення в міліметрах і натиснемо кнопку Застосувати. При цьому буде обчислений коефіцієнт масштабування. Також необхідно задати поріг, що є граничною різницею між фоном та зображенням об'єкту (рис. 4.10).
Рис. 4.10 - Процес калібровки
Після введення параметрів стає активною кнопка «Запуск системи контролю». У текстовому вікні відображається час в мілісекундах з початку запуску системи та значення контрольованого параметра (рис. 4.11). При цьому дані записуються в текстовий лог-файл, назва якого генерується на основі поточної дати і часу запуску системи контролю.
Рис. 4.11 - Відображення параметрів, що контролюються
У правій частині вікна ми бачимо графік, який дозволяє візуально представити процес зміни геометричних параметрів в часі (рис. 4.12). Також відображається таймер часу виконання процесу. Якщо натиснути кнопку Зупинити спостереження (рис. 4.10), процес завершується.
Рис. 4.12 - Графічне відображення параметрів, що контролюються
5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ
Метою даної дипломної роботи є створення оптичної системи дистанційного контролю геометричних параметрів об'єктів на базі web-камери. Система призначена для вимірювання поздовжніх розмірів виробів в технологічних лініях. В якості датчика вимірювання використовується CCD матриця web-камери, що підключена до персонального комп'ютера.
В ході розробки програмного продукту було використане програмне забезпечення Turbo Delphi 2006 Explorer, яке є безкоштовним. Таким чином, загальна вартість системи складається з витрат на розробку програмного забезпечення та вартості устаткування.
Визначення витрат на створення програмного продукту
Оскільки середа розробки є безкоштовною, витрати на створення програмного продукту складаються з витрат по оплаті праці розробника програми і витрат по оплаті машинного часу при відладці програми:
Зспп=Ззпспп +Змвспп
де
Зспп - витрати на створення програмного продукту;
Ззпспп - витрати на оплату праці розробника програми;
Змвспп - витрати на оплату машинного часу.
Витрати на оплату праці розробника програми (Ззпспп) визначаються шляхом множення трудомісткості створення програмного продукту на середню годинну оплату програміста (з урахуванням коефіцієнта відрахувань на соціальні потреби):
Ззпспп=t*Tчас
Розрахунок трудомісткості створення програмного продукту.
Трудомісткість розробки програмного продукту можна визначити таким чином:
t= to+ tа+ tб+ tп+ tд+ tот,
де
to - витрати праці на підготовку опису завдання;
tа - витрати праці на розробку алгоритму рішення задачі;
tб - витрати праці на розробку блок-схеми алгоритму рішення задачі;
tп - витрати праці на складання програми по готовій блок-схемі;
tд - витрати праці на підготовку документації завдання;
tот - витрати праці на відладку програми на ЕОМ при комплексній відладці завдання.
Складові витрат можна виразити через умовне число операторів Q. У нашому випадку число операторів у відлагодженій програмі Q=1300.
Розрахунок витрат праці на підготовку опису завдань.
Оцінити витрати праці на підготовку опису завдання не можливо, оскільки це пов'язано з творчим характером роботи, натомість оцінимо витрати праці на вивчення опису завдання з урахуванням уточнення опису і кваліфікації програміста:
to= Q*B/(75…85*K),
де:
B - коефіцієнт збільшення витрат праці унаслідок недостатнього опису завдання, уточнень і деякої недоробки, B=1,2…5;
K - коефіцієнт кваліфікації розробника, для тих, що працюють до 2 років K=0.8;
Коефіцієнт В приймаємо рівним 3.
Таким чином отримаємо:
to= 1300*3/(78*0,8) = 62.5 (люд-год).
Розрахунок витрат праці на розробку алгоритму.
Витрати праці на розробку алгоритму рішення задачі:
tа = Q/(60…75*K)
tа = 1300/(70*0,8)=23.21 (люд-год).
Розрахунок витрат праці на розробку блок-схеми.
Витрати праці на розробку блок-схеми алгоритму рішення задачі обчислимо таким чином:
tб= Q/(60…75*K)
tб = 1300/(65*0,8)=25(люд-год).
Розрахунок витрат праці на складання програми.
Витрати праці на складання програми по готовій блок-схемі обчислимо таким чином:
tп= Q/(60…75*K)
tп = 1300/(72*0,8)=22.57 (люд-год).
Розрахунок витрат праці на відладку програми.
Витрати праці на відладку програми на ЕОМ при комплексній відладці завдання:
tот=1.5* tAот,
де tAот - витрати праці на відладку програми на ЕОМ при автономній відладці одного завдання;
tAот= Q/(40…50*K)
tAот = 1300/(45*0,8)=36.11 (люд-год)
Звідси tот=1.5*36.11=54.17 (люд-год).
Розрахунок витрат праці на підготовку документації.
Витрати праці на підготовку документації по завданню визначаються:
tд= tдр+ tдо,
де
tдр - витрати праці на підготовку матеріалів в рукопису;
tдо - витрати на редагування, друк і оформлення документації;
tдр= Q/(150…200*K)
tдр = 1300/(180*0,8) = 9.03 (люд-год)
tдо=0.75*tдр
tдо =0.75*9.03=6,77 (люд-год)
Звідси
tд=9.03+6.77 =15.8 (люд-год).
Отже, загальну трудомісткість розробки програмного продукту можна розрахувати:
t= to+ tа+ tб+ tп+ tд+ tот,
t = 62.5+23.21+25+22.57+15.8+54.17 = 203.25 (люд-год).
Розрахунок середньої зарплати програміста.
Середня зарплата програміста в сучасних ринкових умовах може варіюватися в широкому діапазоні. Для розрахунку візьмемо середню годинну оплату праці програміста, яка складає Тчас=10 грн/година. Це означає, що вартість розробки буде становитиму 2032.5 грн.
Витрати на оплату праці програміста складаються із зарплати програміста і нарахувань на соціальні потреби.
Єдине соціальне нарахування становить 37,2%.
Тобто 2032.5грн*37,2%=756.09 грн
Звідси витрати на оплату праці програміста складають:
Ззпспп= 2032.5+756.09 = 2788.59 грн.
Витрати на оплату машинного часу.
Витрати на оплату машинного часу при відладці програми визначаються шляхом множення фактичного часу відладки програми на ціну машино-години орендного часу:
Змвспп =Счас*tЕОМ,
де
Счас - ціна машино-години, грн/год;
tЕОМ - фактичний час відладки програми на ЕОМ;
Розрахунок фактичного часу відладки.
Фактичний час відладки обчислимо за формулою:
дистанційний контроль лазерний трекер
tеом = tп + tдо + tот;
tеом =22.57 +6.77 +54.17 = 83.51 години
Розрахунок ціни машино-години.
Сгод = Зеом/Теом,
де
Зеом - повні витрати на експлуатацію ЕОМ на протязі року;
Теом - дійсний річний фонд часу ЕОМ, год/рік.
Розрахунок річного фонду часу роботи ПЕОМ.
Загальна кількість днів в році - 365. Число святкових і вихідних днів - 114(10 святкових і 52*2- вихідні).
Час простою в профілактичних роботах визначається як щотижнева профілактика по 3 години.
Разом річний фонд робочого часу ПЕОМ складає:
Теом = 8*(365-114)-52*3=1852 год.
Розрахунок повних витрат на експлуатацію ЕОМ.
Повні витрати на експлуатацію можна визначити по формулі:
Зеом = (Ззп+ Зам+ ЗЕЛ+ Здм+ Зпр+ Зін),
де:
Ззп - річні витрати на заробітну плату обслуговуючого персоналу, грн/рік;
Зам - річні витрати на амортизацію, грн/рік;
ЗЕЛ - річні витрати на електроенергію, споживану ЕОМ, грн/рік;
Здм - річні витрати на допоміжні матеріали, грн/рік;
Зпр - витрати на поточний ремонт комп'ютера, грн/рік;
Зін - річні витрати на інші і накладні витрати, грн/рік.
Амортизаційні відрахування.
Річні амортизаційні відрахування визначаються по формулі:
Зам=Сбал*Нам,
де: Сбал - балансова вартість комп'ютера, грн/шт.;
Нам - норма амортизації, %;
Нам =25%.
Балансова вартість ПЕОМ включає відпускну ціну, витрати на транспортування, монтаж устаткування і його відладку:
Сбал = Срин +Зуст ;
де:
Срин - ринкова вартість комп'ютеру, грн/шт.,
Зуст - витрати на доставку і установку комп'ютера, грн/шт;
Комп'ютер, на якому велася робота, був придбаний за ціною Срин =5000 грн, витрати на установку і наладку склали приблизно 10% від вартості комп'ютера.
Зуст = 10%* Срин
Зуст =0.1*5000=500 грн.
Звідси, Сбал = 5000 +500 =5500 грн./шт.,
а Зам=5500*0.25= 1375 грн/год.
Розрахунок витрат на електроенергію.
Вартість електроенергії, споживаної за рік, визначається по формулі:
Зел = Реом * Теом * Сел * А,
де:
Реом - сумарна потужність ЕОМ,
Теом - дійсний річний фонд часу ЕОМ, год/рік;
Сел - вартість 1кВт*год електроенергії;
А - коефіцієнт інтенсивного використання потужності машини.
Згідно технічному паспорту ЕОМ Реом =0.22 кВт, вартість 1кВт*год електроенергії для споживачів Сел =0.2436 грн., інтенсивність використання машини А=0.98.
Тоді розрахункове значення витрат на електроенергію:
Зел = 0.22 * 1852* 0.2436* 0.30 = 29.78 грн.
Розрахунок витрат на поточний ремонт.
Витрати на поточний і профілактичний ремонт приймаються рівними 5% від вартості ЕОМ:
Зтр = 0.05* Сбал
Зтр = 0.05* 5500 = 275 грн.
Розрахунок витрат на допоміжні матеріали.
Витрати на матеріали, необхідні для забезпечення нормальної роботи ПЕОМ, складають близько 1 % від вартості ЕОМ:
Звм =0.01* 5500 =55 грн.
Інші витрати по експлуатації ПЕОМ.
Інші непрямі витрати, пов'язані з експлуатацією ПЕОМ, складаються з вартості послуг сторонніх організацій і складають 5% від вартості ЕОМ:
Зпр = 0.05* 5500 =275 грн.
Річні витрати на заробітну плату обслуговуючого персоналу.
Витрати на заробітну плату обслуговуючого персоналу складаються з основної заробітної плати, додаткової і відрахувань на заробітну плату:
Ззп = Зоснзп +Здопзп +Зотчзп.
Основна заробітна плата визначається, виходячи із загальної чисельності тих, що працюють в штаті:
Зоснзп =12 *?Зіокл,
де:
Зіокл - тарифна ставка і-го працівника в місяць, грн;
12 - кількість місяців.
У штат обслуговуючого персоналу повинні входити інженер-електронщик з місячним окладом 1800 грн. і електрослюсар з окладом 1500 грн. Тоді, враховуючи, що даний персонал обслуговує 20 машин, маємо витрати на основну заробітну плату обслуговуючого персоналу, які складуть:
Зоснзп = 12*(1800+1500)/20=1980 грн.
Додаткова заробітна плата складає 60 % від основної заробітної плати:
Здопзп = 0.6 *1980 = 1188 грн.
Відрахування на соціальні потреби складають 37.2% від суми додатковою і основною заробітних плат:
Зотчзп = 0,372*(1980+1188) = 1178.49 грн.
Тоді річні витрати на заробітну плату обслуговуючого персоналу складуть:
Ззп = 1980 +1188 +1178.49 = 4346.49 грн.
Повні витрати на експлуатацію ЕОМ в перебігу року складуть:
Зеом = 4346.49 + 1375+ 29.78 + 55 + 275+ 275= 6081.27 грн.
Тоді ціна машино-години часу, що орендується, складе
Сгод = 6081,27 /1852 = 3.28 грн.
А витрати на оплату машинного часу складуть:
Змвспп =Сгод*tеом
Змвспп = 3.28 * 83.51= 273.91 грн.
Розрахунок вартості устаткування
Для роботи системи необхідно: персональний комп'ютер на базі Intel процесору з частотою не менше 2,4 ГГц, з ОЗУ рівним 512Мб, з SVGA - відеоадаптером і монітором 17 дюймів; web-камера; USB-кабель, що з'єднує ПЕОМ з web-камерою.
Таблиця 5.1 - Вартість устаткування
№п/п |
Найменування |
Марка |
К-ть |
Ціна, грн. |
Сума, грн. |
|
1 |
ЕОМ (зі встановленою операційною системою Windows XP) |
1 |
3700,15 |
3700,15 |
||
2 |
Джерело безперебійного живлення |
APC Back-Bk500 EI |
1 |
343,00 |
343,00 |
|
3 |
WEB камера |
A4 PK-835- MJ |
1 |
120,00 |
120,00 |
|
4 |
Кабель USB Alan |
AL-AM/Bm4-10 (AM/miniB 4pin) |
100 |
19,00 |
1900 |
|
Разом: |
6063,15 |
Вартість устаткування збільшується на вартість транспортування - 10% і вартість монтажа - 15%. Разом вартість устаткування складе:
СЗАГ = 6063.15+606.32+909.47=7578.94 (грн.)
Розрахунок економічного ефекту.
Зспп=Ззпспп +Змвспп+ СЗАГ
Зспп =2788.59+ 273.91+7578.94 = 10641.44 грн.
Тобто собівартість створеного продукту 10641.44 грн.
А зараз визначимо ціну розробки:
Ц = Зспп + Р,
Де Ц - ціна розробки;
Р - 15% від витрат на розробку системи.
Ц = 10641.44 + 1596.216= 12237.656 грн.
Ціна розробки дорівнює 12237.656 грн.
В порівнянні з іншим вимірювальним обладнанням, яке виконують аналогічні функції, розроблена система обійдеться значно дешевше, ніж аналоги.
Наприклад, ціна оптичного координатографа виробництва «Фрайбергер прецизионс-механик-ГмбХ», Німеччина при точності вимірювань в 100 мкм складає близько 10000$. Неавтоматизований оптичний координатограф «Ecartometr» (Німеччина) при точності 100 мкм і діапазоні переміщень 25мм пропонується за 6500 $.
Економія від використання однієї розробленої системи представлятиме:
ЕК = $6500 * 8.0- 12237.65 = 39762.35грн.
8,0 - курс долара Національного банку України.
6. ОХОРОНА ПРАЦІ
Охорона праці - це система правових, соціально-економічних, організаційно-технічних, санітарно-гігієнічних і лікувально-профілактичних заходів та засобів, спрямованих на збереження життя, здоров'я і працездатності людини у процесі трудової діяльності.
Роботодавець - власник підприємства, установи, організації або уповноважений ним орган, незалежно від форм власності, виду діяльності, господарювання, і фізична особа, яка використовує найману працю.
Працівник - особа, яка працює на підприємстві, в організації, установі та виконує обов'язки або функції згідно з трудовим договором (контрактом).
Підвищена увага до проблем у всіх середовищах перебування пояснюється цілим поруч факторів. Одним з основних напрямків забезпечення безпеки людини, крім екологічних аспектів і різкого росту ймовірності нещасних випадків у побуті, залишається профілактика виробничого травматизму. Найважливішими причинами, що визначають необхідність удосконалювання сформованої системи забезпечення ОТ на виробництві, є зміна змісту праці й умов його виконання, що, у свою чергу позначається на характері виробничого травматизму.
Закон України «Про охорону праці». Даний Закон визначає основні положення щодо реалізації конституційного права працівників на охорону їхнього життя й здоров'я в процесі трудової діяльності, на належні, безпечні й здорові умови праці, регулює при участі відповідних органів державної влади відносини між роботодавцем і працівником з питань безпеки, гігієни праці й виробничого середовища й установлює єдиний порядок організації охорони праці в Україні.
Законодавство про охорону праці складається з даного Закону, Кодексу законів про працю України, Закону України «Законодавство про охорону праці» складається з цього Закону, Кодексу законів про працю України, Закону України «Про загальнообов'язкове державне соціальне страхування від нещасного випадку на виробництві та професійного захворювання, які спричинили втрату працездатності» та прийнятих відповідно до них нормативно-правових актів. Якщо міжнародним договором, згода на важливість якого надана Верховною Радою України, установлені інші норми, чим ті, які передбачені законодавством України про охорону праці, застосовуються норми міжнародного договору.
Правовою основою діяльності в галузі пожежної безпеки є Конституція, цей Закон та інші законі України, ухвалені Верховною Радою України, укази й розпорядження Президента України, декрети, ухвали та розпорядження Кабінету Міністрів рішення органів виконавчої влади, місцевого та регіонального самоврядування прийняті в межах їх компетенції .
6.1 Аналіз шкідливих та небезпечних факторів
Якщо мова йде про небезпеку для людини, то це явища, процеси, об'єкти, властивості, здатні за певних умов завдавати шкоди здоров'ю чи життю людини або системам, що забезпечують життєдіяльність людей.
Одна з найважливіших задач охорони праці - забезпечення безпеки працюючих, тобто забезпечення такого стану умов праці, при якому виключено дію на працюючих небезпечних і шкідливих виробничих чинників.
Шкідливі та небезпечні фактори класифікують відповідно до ДЕРЖСТАНДАРТУ 12.0.003-74 по природі дії на наступні групи:
фізичні;
психофізичні.
Перші дві включають вплив, який надається виробничою технікою й робітничим середовищем. Психофізіологічні фактори характеризують зміни стану людини під впливом ваги й напруженості праці. Включення їх у систему факторів виробничої небезпеки обумовлене тим, що надмірні трудові навантаження в підсумку можуть також привести до захворювань.
Фізичні небезпечні й шкідливі виробничі фактори підрозділяються на наступні:
підвищений рівень шуму на робочому місці;
відсутність або недолік природного світла;
недостатня освітленість робочої зони;
мікроклімат (підвищена або знижена рухливість повітря);
Психофізичні небезпечні й шкідливі виробничі фактори по характеру дії підрозділяються:
фізичні перевантаження (статичні й динамічні);
нервово-психічні перевантаження (розумова напруга й перенапруга, монотонність праці, емоційні перевантаження, стомлення, емоційний стрес, емоційне перевантаження).
Той самий небезпечний і шкідливий виробничий фактор за природою своєї дії може ставитися одночасно до різних груп, перерахованих вище.
Практика показує, що планування робочого місця повинна задовольняти вимогам зручності виконуваних робіт, економії енергії й часу оператора, раціонального використання виробничих площ і зручності обслуговування пристроїв ЕОМ. При плануванні робочого місця необхідно враховувати зручність розташування дисплеїв, принтерів, пульта ЕОМ, а також зони досяжності рук оператора. Ці зони, установлені на підставі антропометричних даних тіла людини, дають можливість раціонально розмістити комп'ютер, його клавіатуру та дисплей.
Правильне освітлення робочого місця оператора полегшує його працю, знижує стомлення, підвищує продуктивність праці, знижує небезпеку виробничого травматизму. Освітлення може бути природним і штучним. Природне освітлення створюється у виробничих приміщеннях через віконні та інші засклені прорізи, штучне - світильниками. Штучне освітлення в приміщеннях варто здійснювати у вигляді комбінованої системи освітлення з використанням люмінесцентних джерел світла у світильниках загального призначення.
Важливим фактором є мікроклімат робочої зони, особливо температура, вологість та рухливість повітря. Людина постійно перебуває в процесі теплової взаємодії з навколишнім середовищем. Дослідження показують, що висока температура в сполученні з високою вологістю повітря дуже впливає на працездатність оператора. Збільшується час реакції оператора ЕОМ, порушується координація рухів, різко збільшується число помилкових дій. Висока температура на робочому місці оператора негативно впливає на психологічні функції: знижується увага, зменшується обсяг оперативної пам'яті, знижується здатність до асоціацій.
Подобные документы
Розподілена обробка та розподілені бази даних, їх внутрішня структура та принцип функціонування. Порядок і технологія рішення задач оперативного контролю в умовах роботи та на базі сучасних автоматизованих інформаційних систем, оцінка ефективності.
контрольная работа [746,0 K], добавлен 18.02.2015Розробка навчального курсу в системі дистанційного навчання Moodle для спеціальності "Гнучкі комп'ютеризовані системи та робототехніка". Складання логіко-функціональної схеми роботи програмного забезпечення: структура, функціональні модулі, інтерфейс.
дипломная работа [3,2 M], добавлен 22.10.2012Технології організації безпечного доступу на об’єкт. Принцип роботи мережевої системи контролю доступу. Технологія сканування відбитків пальців. Опис базових параметрів біометричного обладнання. Елементи ідентифікації в сучасних системах доступу.
дипломная работа [4,9 M], добавлен 27.01.2012Основні функціональні можливості програми для забезпечення комп'ютерної системи дистанційного управління приладами. Функція пульта дистанційного керування мартфонів. Реалізація пультів дистанційного управління на основі апаратно-програмного комплексу.
дипломная работа [1,7 M], добавлен 09.07.2015Дослідження теоретичних аспектів проектування автоматизованих систем тестування знань. Розробка програми, яка призначена для забезпечення автоматизації процесу формування тестів та всього процесу контролю знань у дистанційній навчальній системі.
дипломная работа [2,1 M], добавлен 26.10.2012Поняття й головні способи персоніфікації користувача. Основи біометричної ідентифікації. Технологія зняття відбитків пальців, типи капілярних візерунків. Дослідження існуючих засобів контролю доступу на основі біометричних даних, їх недоліки та переваги.
курсовая работа [4,7 M], добавлен 30.01.2012Розробка елементів інформаційної системи для контролю експлуатації автотранспорту. Розробка програмного забезпечення в середовищі програмування Delphi з використанням пакету компонентів DevelopmentExpress та сервера баз даних під керуванням FireBird 2.1.
дипломная работа [4,3 M], добавлен 24.10.2012Підстава для розробки, призначення та галузь застосування. Огляд і аналіз інформаційних джерел. Розробка структурної схеми системи. Приклади систем реєстрації сердечного ритму. Відмінні особливості програми "Міокард-Холтер". Алгоритм роботи системи.
дипломная работа [1,1 M], добавлен 01.07.2013Особливості та переваги проведення тестувань в мережі інтернет з метою дистанційного навчання чи оцінювання знань. Створення web-сайту з розширеними можливостями та системи дистанційного тестування. Реляційна схема бази даних конструктора тестів.
дипломная работа [2,1 M], добавлен 25.11.2012Загальні відомості про дистанційне навчання. Класифікація та характеристика соціальних сервісів. Історія соціальних мереж, технологія та статистика. Удосконалення дистанційного навчання у веб-центрі. Полегшення роботи при написанні звітів, відеоуроки.
курсовая работа [2,1 M], добавлен 15.04.2013