Прикладні динамічні бібліотеки для системи Компас-3D

Підстава для створення системи Компас-3D. Характеристика розробленого програмного забезпечення. Призначення і характеристики систем автоматизації конструкторської документації. Дослідження методів створення динамічних бібліотек в середовищі Delphi.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 22.10.2012
Размер файла 3,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Опис

author

WideString

Ім'я автора документа

drawMode

Integer

Тип відображення моделі (каркас, без невидимих ліній, невидимі лінії тонкі, півтонове)

fileName

WideString

Ім'я файлу документа моделі

hideAllAxis

WordBool

Приховати показати конструктивні осі

hideAllPlace

WordBool

Приховати показати початки координат

hideAllPlanes

WordBool

Приховати/показати площини

hideAllSketches

WordBool

Приховати показати ескізи

hideAllSurfaces

WordBool

Приховати показати поверхні

hideAllThreads

WordBool

Приховати показати зображення різьблення

invisibleMode

WordBool

Режим редагування документа (видимий або невидимий)

perspective

WordBool

Ознака відображення перспективної проекції

reference

Integer

Покажчик документа (деталі або збірки)

shadedWireframe

WordBool

Півтонове зображення з каркасом моделі

Методи цього інтерфейсу дозволяють програмно управляти тривимірним документом, як збіркою і її компонентами, так і окремою деталлю. Звернемо увагу: саме управляти самим документом, але не виконувати в ньому тривимірні операції. Методи, які можуть стати в нагоді нам при програмуванні модулів, що підключаються, наведені в таблиці 3.3.

Таблиця 3.3 Методи інтерфейсу ksDocument3D

Метод

Опис

Close

Дозволяє закрити документ

Create

Дає можливість створити порожній документ (деталь або збірку)

CreatePartFromFile

Дозволяє створити деталь в збірці

CrealePartInAssembly

Повертає покажчик на інтерфейс деталі, що створюється в збірці

DeleteObject

Дозволяє видалити тривимірний об'єкт (деталь, операцію, об'єкт допоміжної геометрії, сполучення і ін.)

EntityCollection

Дає можливість одержати покажчик на масив елементів, вибраних в документі (наприклад, операції або компонентів збірки для їх копіювання по масиву)

GetObjParam

Дозволяє прочитати параметри об'єкту в структуру даних (по певному типу параметрів)

ksSetObjParam

Дозволяє встановити параметри об'єкту в структуру даних (по певному типу параметрів)

GetObjectType

Дає можливість одержати тип тривимірного об'єкту

GetPart

Дуже важливий метод, що повертає покажчик на інтерфейс компоненту (деталі або підзбірки) в збірці

IsActive

Дає можливість перевірити, чи активний документ

IsDetail

Повертає TRUE, якщо тривимірний документ є деталлю

Open

Дозволяє запустити редагування документа-моделі

PartCollection

Повертає покажчик на інтерфейс динамічного масиву

Найважливішим з перерахованих таблиці 3.3 методів є GetPart. Вхідним параметром цієї функції є цілочисельна змінна type_, яка визначає, інтерфейс якого саме компоненту збірки повертати. Дана змінна має декілька зумовлених значень (констант):

· plnPlace_Part (дорівнює -4) - метод повертає покажчик на компонент, який знаходиться в режимі контекстного редагування (тобто редагування «на місці»);

· pNew_Part (-3) - створює в моделі новий компонент і повертає покажчик на нього;

· pEdit_Part (-2) - повертає покажчик на редагований компонент (за допомогою бібліотеки);

· pTop_Part (-1) - верхній компонент, до складу якого входить або новий, або редагований, або вказаний компонент;

· вся решта значень (від 0 і вище) відповідає номеру компоненту в дереві побудови, тобто повертається покажчик на існуючий в збірці компонент.

Метод ksDocument3D.GetPart повертає покажчик на інтерфейс деталі або компоненту збірки - ksPart. Властивості і методи цього інтерфейсу (частина з яких приведена таблиці 3.4 і таблиці 3.5) управляють станом компонентів збірки, вони майже повністю дублюють команди контекстного меню і панелі властивостей, доступні користувачу при роботі з тим або іншим компонентом.

Таблиця 3.4 Властивості інтерфейсу ksPart

Властивість

Тип даних

Опис

excluded

WordBool

Визначає, виключений чи ні компонент з розрахунку (з дерева побудови)

fileName

WideString

Ім'я файлу, з якого вставлений компонент

fixedComponent

WordBool

Визначає, чи є компонент зафіксованим

hidden

WorbBool

Задає видимість компоненту (прихований чи ні)

name

WideString

Ім'я компоненту в дереві побудов

standardComponent

WordBool

Визначає, чи є даний компонент стандартним (тобто бібліотечним елементом)

Як бачимо, всі ці методи лише управляють станом компоненту (задають видимість, розміщення, визначають, чи запущено редагування компоненту), але не дають можливість нічого створювати (виконувати операції).

3.3.3 Інтерфейс елементу моделі ksEntity

Для програмної реалізації всіх тривимірних операцій, які користувачі виконують в тривимірних документах системи Компас-3D, в API реалізований єдиний інтерфейс ksEntity - інтерфейс елементу моделі. Цей інтерфейс можна одержати за допомогою методу ksPart.NewEntity, якому необхідно передати тип створюваного елементу. Типів елементів в системі, як і в API системи, велику множину. Кожному з них відповідає своя цілочисельна константа і свій власний інтерфейс параметрів. Саме за допомогою настройок (властивостей і методів) цих інтерфейсів і створюються будь-які можливі об'єкти в деталях і складках КОМПАС-3D. Деякі константи з описом типу елементу і інтерфейсу, до якого вони відносяться, приведені таблиці 3.6.

Таблиця 3.5 Методи інтерфейсу ksPart

Метод

Опис

BeginEdit

Дозволяє запустити режим редагування компоненту

ColorParam

Дає можливість одержати покажчик на інтерфейс параметрів кольору і візуальних властивостей компоненту

EndEdit

Закриває режим редагування компоненту «на місці»

EntityCollection

Формує динамічний масив тривимірних об'єктів і повертає покажчик на його інтерфейс (наприклад, операцій для копіювання по масиву)

GetDefaultEntity

Повертає покажчик на інтерфейс об'єкту, що створюється системою в тривимірному документі за умовчанням. Таких об'єктів всього чотири: початок координат і три ортогональні площини

GetPart

Дозволяє одержати покажчик на інтерфейс компоненту

GetPlacement

Дає можливість одержати покажчик на інтерфейс місцеположення компоненту в збірці

SetPlacement

Дозволяє встановити нове положення компоненту в збірці

IsDetail

Дозволяє перевірити, чи є компонент деталлю

NewEntity

Найбільш використовуваний метод: створює інтерфейс нового тривимірного об'єкту і повертає покажчик на нього

Таблиця 3.6 Типи об'єктів тривимірного документа

Ідентифікатор

Числове значення

Опис

Інтерфейс параметрів

o3d_planeXOY

1

Площина XOY

ksPlaneParam

o3d planeXOZ

2

Площина XOZ

ksPlaneParam

o3d_planeYOZ

3

Площина YOZ

ksPlaneParam

Члени даних інтерфейсу ksEntity відповідають властивостям тривимірних елементів моделі.

Серед методів найбільш важливими є три наступних:

· Create - створює тривимірну операцію або об'єкт допоміжної геометрії по заданих настройках;

· ColorParam - повертає покажчик на інтерфейс настройок кольору і оптичних властивостей елементу;

· GetDefinition - одержує покажчик на інтерфейс параметрів об'єкту певного типа (параметри даного тривимірного елементу). Саме за допомогою цього методу можна одержати покажчик на будь-який інтерфейс.

Таким чином, створення якої-небудь тривимірної операції призначеною для користувача програмою зводиться до такої послідовності кроків.

1. Ініціалізація головного інтерфейсу додатку API - KompasObject. Він ініціалізувався один раз для всього сеансу роботи програми.

2. Ініціалізація інтерфейсу тривимірного документу ksDocument3D, з подальшим створенням нового документа або отриманням покажчика на активний документ.

3. Створення компоненту і отримання на нього покажчика (інтерфейс ksPart). Для збірки це може бути готовий компонент, компонент, вставлений з файлу або створений «на місці». Для деталі необхідно одержати покажчик на компонент типу pTop_Part.

4. Створення за допомогою методу ksPart.NewEntity інтерфейсу потрібної нам операції. При цьому в метод передається відповідний ідентифікатор (наприклад, для витискування - o3d_bossExtrusion).

5. Отримання за допомогою методу ksEntity.GetDefinition покажчика на інтерфейс параметрів конкретної операції (для витискування цим інтерфейсом є ksBossExtrusionDefinition). Настройка цих параметрів необхідним користувачу образом.

6. Створення операції за допомогою методу ksEntity.Create.

3.3.4 Інші інтерфейси IPI Компас

Окрім перерахованих, в API системи КОМПАС існує ще велика безліч різних інтерфейсів, що відповідають за той або інший аспект роботи з програмою. Невелика їх частина описана таблиці 3.7.

компас динамічний бібліотека delphi

Таблиця 3.7 Деякі додаткові інтерфейси API Компас

Інтерфейс

Опис

ksPartCollection

Інтерфейс масиву компонентів збірки

ksMacro3DDefinition

Інтерфейс тривимірного макрооб'єкту

ksMateConstraintCollection

Інтерфейс набору сполучень збірки

ksMateConstraint

Інтерфейс структури параметрів сполучення

ksMathematic2D

Інтерфейс математичних функцій в графічному документі

ILibHPObject

Інтерфейс для роботи з характерними точками графічного елементу

ksDynamicArray

Інтерфейс динамічного масиву параметрів

ksPhantom

Інтерфейс фантомного відображення

ksEntityCollection

Інтерфейс масиву об'єктів моделі

4. Опис функціональних можливостей та програмної реалізації прикладної бібліотеки

4.1 Функціональне призначення та технологічні особливості розробки

Існує величезна кількість деталей і вузлів, подібних по своїй геометрії і таких, що відрізняються лише своїми параметрами - розмірами.

Для спрощення і прискорення розробки креслень, що містять типові і стандартизовані деталі дуже зручно застосовувати готові параметричні бібліотеки.

Прикладна бібліотека може бути створена в одному із стандартних середовищ програмування для Windows з використанням функцій спеціального комплекту розробки додатків Компас-Майстер. По своїй архітектурі бібліотека є стандартним модулем Windows, що динамічно підключається. За умовчанням файли бібліотек мають розширення *.dll або *.rtw.

Компас-3D не накладає ніяких обмежень на розмір і складність функцій бібліотек, а швидкість виконання бібліотечних функцій залежить в основному від характеристик комп'ютера. Після підключення бібліотеки до системи користувач вибирає потрібну функцію з її каталогу і запускає на виконання.

Система динамічних бібліотек, що призначена для автоматизації конструкторської діяльності, була створена за допомогою середовища прискореної розробки програмного забезпечення Delphi з використанням функцій API-інтерфейсу системи Компас-3D.

Завданням виконання дипломної роботи є розробка елементу САПР, що створює при мінімальній кількості початкових даних 3D-модель зубчатого колеса (як прямозубого, так і косозубого).

Розроблена прикладна динамічна бібліотека реалізована у вигляді файлу Gears3D.rtw. Дані про ряд модулів зубчастих коліс, що відповідають ГОСТ 9563-60 зберігаються у зовнішньому файлі бази даних - gears.mdb.

4.2 Розробка логіко-функціональної схеми роботи користувача з бібліотекою та схеми взаємодії бібліотеки з системою

На рис. 4.1 наведена логіко-функціональна схема роботи користувача з бібліотекою.

Рис. 4.1 Логіко-функціональна схема роботи користувача з бібліотекою

Розглянемо схему взаємодії розробленої бібліотеки з системою Компас-3D.

Рис. 4.2 Схема взаємодії бібліотеки з системою

4.3 Конструктивні особливості побудови зубчатих коліс

Рух від однієї ланки механізму до іншої передається за допомогою різних деталей, сукупність яких називається передачею. Одним з основних видів передач є зубчата передача. Зубчата передача між паралельними валами здійснюється циліндровими зубчатими колесами із зовнішнім або внутрішнім зачепленням зубів.

Зубчатими колесами називають деталі, які служать для передачі обертального руху від одного валу до іншого. У зачепленні двох зубчатих коліс одне з коліс називається шестернею. Шестерня - це зубчате колесо передачі з меншим числом зубів.

Основним елементом зубчатих коліс є зубці, а основним параметром зубчатих коліс є модуль. Модуль - це довжина діаметру ділильного кола, що доводиться на один зуб колеса. Стандартом встановлений ряд чисел модулів (ГОСТ 9563-60).

При виборі величини модуля перший ряд віддається перевазі другому. В результаті розрахунку зубчатої передачі конструктор визначає основні параметри коліс: модуль m, число зубців z і ширина зубчатого вінця Lm, по яких розраховуються усі інші розміри зубчатих колес (таблиця 4.1).

Рис. 4.3 Зображення зубчатого колеса

Таблиця 4.1 Розрахунок геометричних параметрів зубчатого колеса

Позначення

Найменування

Величина і залежність

z

Число зубців

m

Модуль

m= p/=d/z

d

Ділильний діаметр колеса

d=m*z=(p/)*z

p

Шаг зубців

p=m*

da

Діаметр виступів зубців

da=m*(z+2)

df

Діаметр впадин

df=m*(z-2,5)

1

Товщина обода

1=(2,5..4)*m

2

Товщина диска, що сполучає маточину з ободом

2=(3..3,5)*m

Dv

Діаметр отвору під вал

Dv=Lm/1,4

Dm

Діаметр маточини

Dm=Dv*1,8

h

Висота зуба

h = 2,25*m = da-df

ha

Висота головки зуба

ha = m

hf

Висота ніжки зуба

hf = 1,25*m

do

Діаметр отворів в диску

do=(df-2*1+Dm)/2

4.4 Опис інтерфейсу користувача бібліотеки

Для того, щоб підключити в системі Компас-3D розроблену прикладну бібліотеку, необхідно обрати в меню підпункт „Сервис - Менеджер библиотек”. У вікні „Менеджер библиотек” (рис. 4.4) обрати в контекстному меню „Добавить описание - прикладной библиотеки”.

Рис. 4.4 Меню підключення прикладної бібліотеки

Після цього на екрані з'явиться вікно, в якому необхідно вказати шлях до файлу бібліотеки - gears3D.rtw.

Рис. 4.5 Вікно „Добавить библиотеку”

Після завантаження бібліотеки її назва з'явиться в переліку доступних бібліотек системи Компас-3D.

Рис. 4.6 Пункт меню для виклику бібліотеки

Після того, як ми виберемо відповідний пункт, на екрані з'явиться діалогове вікно бібліотеки.

Рис. 4.7 Діалогове вікно бібліотеки

Для побудови моделі користувачеві необхідно ввести наступні початкові дані:

· модуль;

· кількість зубців;

· ширину зубчатого вінця;

· кут нахилу зубів колеса.

При цьому значення модуля обирається із стандартного ряду згідно ГОСТ 9563-60. Усі ці дані зберігаються у зовнішньому файлі бази даних формату mdb. Якщо ми натиснемо кнопку „ГОСТ”, на екрані з'явиться вікно (рис. 4.8), в якому ми зможемо продивитися або відредагувати ряд значень.

Рис. 4.8 Вікно редагування значень модулів

Оскільки модулі першого ряду слід використовувати в пріоритетному порядку система передбачає фільтрацію значень модулів згідно обраного ряду.

Після введення усіх необхідних даних (при цьому передбачений захист від некоректного вводу) необхідно натиснути кнопку „Построение”. Якщо користувач бібліотеки не введе усіх необхідних початкових даних, він отримає відповідне повідомлення.

Рис. 4.9 Повідомлення системи про некоректний ввід значення модулю

Рис. 4.10 Повідомлення системи про некоректний ввід кількості зубців

Далі система автоматично створює новий документ-деталь та відбувається програмна побудова моделі згідно обраним параметрам.

Рис. 4.11 Загальний вигляд створеної моделі

Після цього користувач може зберегти отриману модель та використовувати її у подальшому проектуванні.

4.5 Програмна реалізація бібліотеки

Дані про ряд модулів зубчастих коліс, що відповідають ГОСТ зберігаються у зовнішньому файлі бази даних - gears.mdb. При цьому повинен зберігатися в каталозі Program Files\ASCON\KOMPAS-3D V10\Bin. Файл бази даних містить лише одну таблицю, структура полів якої наведена на рис. 4.12.

Для доступу до бази даних була використана технологія ADO (компоненти ADOConnection та ADOTable).

Рис. 4.12 Структура полів таблиці, що зберігає дані про значення модулів

Перед початком створення бібліотеки необхідно пов'язати цей файл з бібліотеками типів Компас, щоб можна було користуватися інтерфейсами API. Виконаємо команду Project - Import Type Library, потім із списку Import Type Library вікна, що з'явилося (рис. 4.13), виберемо пункт Kompas6API5 (Version 1.0). При цьому в текстовому полі під списком повинен відобразитися шлях до файлу бібліотек типів Компас. Вибравши вказаний пункт, натиснемо кнопку Create Unit.

Якщо в списку Import Type Library немає необхідного пункту, ми можемо додати його уручну, натиснувши кнопку Add і відшукавши файл kAPI5.TLB (він знаходиться в каталозі Bin директорії, в якій встановлений Компас).

За декілька секунд Delphi згенерує PAS-файл з ім'ям Kompas6API5-TLB, який матиме опис всіх інтерфейсів API 5. Змінимо заголовок скомпільованого модуля (автоматично доданого в проект бібліотеки), з Kompas6API5-TLB на ksTLB і збережемо проект. Після цього закриємо вікно, в якому був відкритий файл Kompas6API5-TLB.pas, у редакторі коду Delphi і змінимо ім'я файлу на ksTLB.pas. Згенерований файл Kompas6API5-TLB.pas з інтерфейсами розміщується в каталозі Imports директорії, в якій встановлений Delphi, наприклад C:\Program Files\Borland\Delphi7\Imports.

Скопіюємо перейменований файл в каталог FirstLib\dcu нашого проекту.

Рис. 4.13 Підключення бібліотеки типів Компас до Delphi

При компіляції прикладної бібліотеки будуть використані безліч різних файлів з описами інтерфейсів, констант та ін. У принципі, вони можуть бути розміщені де завгодно (при цьому в розділі uses слід було б задавати кожен шлях явно), але для зручності роботи з проектом будемо зберігати їх в каталозі dcu, де вже знаходиться файл ksTLB.pas. Де б всі ці файли не знаходилися, в Delphi необхідно вказати шлях до них. Для цього виконаємо команду Project - Options, після чого на вкладці Directories/Conditionals вікна настройок проекту (рис. 4.14), що відкрилося, задамо шляхи до файлів проекту:

· Output directory - шлях, по якому Delphi зберігатиме скомпільований файл прикладної бібліотеки;

· Unit output directory і Search path - повний шлях до каталогу dcu. По цих шляхах система шукатиме необхідні файли бібліотек Компаса, а також зберігати скомпільовані DCU-файли.

Рис. 4.14 Завдання шляхів до файлів проекту прикладної бібліотеки

Розглянемо лістинг створеної нами динамічної прикладної бібліотеки.

library Gears3D;

uses SysUtils, Classes, ksTLB, ksAuto, Forms, BuildUnit in 'BuildUnit.pas' {GearsForm};

{$E rtw}

{$R *.res}

var kompas : KompasObject;

function LibraryName: PChar; pascal;

begin Result := 'Gears3D '; // привласнення ім'я бібліотеці

end;

function LibraryId: integer; pascal;

begin Result := 100; // привласнення ідентифікатору

end;

Оскільки взаємодію з користувачем планується здійснювати за допомогою діалогового вікна, в проект необхідно додати діалогову форму.

Після створення форми необхідно забезпечити її вивід у вікні Компас. Для виведення діалогового вікна бібліотеки потрібно зробити наступне.

1. Одержати дескриптор головного вікна Компас.

2. Заборонити доступ користувачу до головного вікна програми.

3. Створити об'єкт діалогового вікна і вивести його на екран в модальному режимі.

4. Після закриття користувачем вікна бібліотеки знищити вікно і повернути управління головним вікном Компас користувачу.

5. Обнулити дескриптор додатку.

Реалізувати цю послідовність дій краще всього в процедурі точки входу в бібліотеку.

procedure LibraryEntry(command: WORD); pascal;

var GearsForm : TGearsForm;

begin kompas := KompasObject(CreateKompasObject); if (kompas = nil) then exit; //одержуємо дескриптор головного вікна КОМПАС Application.Handle := kompas.ksGetHWindow; // забороняємо доступ до головного вікна kompas.ksEnableTaskAccess(0); // створюємо об'єкт діалогового вікна GearsForm := TGearsForm.Create(Application); GearsForm.ks := kompas; // виводимо діалог на екран GearsForm.ShowModal; // видаляємо об'єкт GearsForm.Free; // повертаємо доступ до вікна kompas.ksEnableTaskAccess(1); Application.Handle := 0; kompas := nil;

end;

Для того, щоб RTW-бібліотека, написана на Delphi, могла взаємодіяти з Компас, в ній обов'язково повинні бути присутніми як мінімум три функції:

LibraryEntry - точка входу в бібліотеку;

LibraryName - повертає ім'я бібліотеки, що відображається в менеджері бібліотек;

LibraryId - повертає ідентифікатор бібліотеки (пізніше його можна використовувати при роботі з самою бібліотекою, для підключення списку меню її команд та ін.).

Всі ці функції обов'язково повинні бути експортними, тобто що експортуються з даної DLL, щоб система КОМПАС могла їх бачити і викликати. З цієї причини їх обов'язково потрібно винести в розділ exports прикладної бібліотеки.

exports LibraryName name 'LIBRARYNAME', LibraryId name 'LIBRARYID', LibraryEntry name 'LIBRARYENTRY';

begin

end.

Розглянемо процес побудови діалогової форми бібліотеки. Для кнопки „Отмена” маємо наступну процедуру.

procedure TGearsForm.Button2Click(Sender: TObject);

begin if CloseQuery then Close;

end;

Процедура обробки натиснення кнопки „Построение” набагато складніше. Умовно її можна розділити на три частини.

1. Розрахунок геометричних параметрів зубчатого колеса за введеними початковими даними.

2. Створення порожнього документа Компас-Деталь.

3. Власне побудова моделі зубчатого колеса.

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

1. Спочатку програмно в площині XOY створюється ескіз, що містить контур половини перетину колеса (рис. 4.15). На підставі цього ескізу виконується операція обертання, що формує заготівку зубчатого колеса.

Рис. 4.15 Ескіз базової операції обертання колеса

2. Далі в площині YOZ будується другий ескіз з чотирма колами, над якими виконується операція вирізування в два напрями. Таким чином, ми одержимо отвори в диску.

Рис. 4.16 Ескіз отворів диску

3. Наступним кроком є виконання вирізу між зубами у вінці колеса. Цей спосіб полягає в побудові вирізу за допомогою операції „Вырезать по сечениям”. При цьому в моделі колеса будується ряд ескізів-перетинів, площини яких віддалені від бічної поверхні колеса на величину l = i · b / (nс - 1) (де b - ширина колеса, nс - кількість перетинів або ескізів, i - порядковий номер ескіза).

Рис. 4.17 Побудова допоміжних площин

Для нашої бібліотеки досить буде трьох ескізів: по два на торцевих площинах колеса і один посередині - на площині YOZ. Це означає, що бібліотека повинна буде побудувати дві допоміжні площини, видалені в обидві сторони від площини YOZ на половину ширини вінця зубчатого колеса.

У кожній з трьох площин (двох допоміжних і ортогональної YOZ) буде створене зображення ескізу вирізу між зубами, повернене щодо вертикальної осі на кут = 2 · l · tg / dк, де - кут нахилу лінії зуба, dк - ділильний діаметр зубчатого колеса. Для першої площини замість l необхідно підставити 0, для другої (YOZ) - b/2, для третьої - b.

Рис. 4.18 Ескіз вирізу між зубами

4. У завершенні створюється вісь на перетині площин XOZ і XOY. Щодо цієї осі формується масив по концентричній сітці вирізів між зубами колеса.

Кількість копій встановлюється рівною кількості зубів колеса.

procedure TGearsForm.Button1Click(Sender: TObject);

var ...

begin Hide;

// приховуємо діалогове вікно // прочитуємо параметри, введені користувачем у вікні module := StrToFloat(Edit1.Text); // модуль - обираємо із списку, сформованого на основі ряду ГОСТ z := StrToInt(Edit2.Text); // кількість зубців Lm := StrToFloat(Edit3.Text); // ширина зубчатого вінця beta := StrToFloat(Edit4.Text); // кут нахилу зубів колеса // далі обчислюємо необхідні для побудови параметри Dv := round(Lm/1.4); // діаметр отвору під вал b_k := Lm; // ширина маточини и ширина колеса Dm := 1.8*Dv; // діаметр маточини c := round(0.35*b_k); // товщина диска, що сполучає маточину з ободом delta0 := round(2.5*module/cos(DegToRad(beta))); // товщина обода d_k := module*z;

// ділильний діаметр колеса d_ak := d_k+2*module;

// діаметр виступів d_fk := d_k-2.5*module;

// діаметр впадин Dotv := (d_fk - 2*delta0 + Dm)/2; // діаметр отворів в диску doc3 := ksDocument3D(ks.Document3D()); // одержуємо покажчик на інтерфейс тривимірного документа

// створюємо документ (параметр false означає, що документ у видимому режимі, параметр true - що створюється документ-деталь) if doc3.Create(false, true) then

begin

// заповнюємо параметри документа

doc3.author := 'Удовиченко Евгений';

doc3.comment := 'Зубчатое колесо';

doc3.drawMode := 3;

doc3.perspective := true;

doc3.UpdateDocumentParam();

end else exit;

// перевіряємо, як пройшла ініціалізація if (doc3 = nil) then

begin

ks.ksMessage('Не удалось создать документ!');

exit;

end; iPart := ksPart(doc3.GetPart(pNew_Part)); // одержуємо покажчик на інтерфейс деталі if (iPart <> nil) then begin // інтерфейси ортогональних площин PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeXOY)); PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ)); PlaneYOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ)); // інтерфейс ескіза (половина контура перетину колеса) iSketchEntity := ksEntity(iPart.NewEntity(o3d_sketch)); if (iSketchEntity <> nil) then begin

// інтерфейс параметрів ескізу iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition); if (iSketchDef <> nil) then begin if (PlaneXOY <> nil) then begin

// встановлюємо площину, на якій створюється ескіз iSketchDef.SetPlane(PlaneXOY); iSketchEntity.Create;

// запускаємо процес редагування ескізу, doc - покажчик на інтерфейс ksDocument2D doc := ksDocument2D(iSketchDef.BeginEdit); if (doc <> nil) then begin doc.ksLineSeg(-Lm/2, 0, Lm/2, 0, 3);

doc.ksLineSeg(Lm/2, Dv/2, -Lm/2, Dv/2, 1); r := doc.ksLineSeg(-Lm/2, Dv/2, -Lm/2, Dm/2-0.5*module, 1); doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksArcByAngle(-Lm/2+0.5*module, Dm/2-0.5*module, 0.5*module, 180, 90, -1, 1); doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksLineSeg(-Lm/2+0.5*module, Dm/2, -c/2-0.5*module, Dm/2, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksArcByAngle(-c/2-0.5*module, Dm/2+0.5*module, 0.5*module, 270, 0, 1, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksLineSeg(-c/2, Dm/2+0.5*module, -c/2, d_fk/2-delta0-0.5*module, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1'); r := doc.ksArcByAngle(-c/2-0.5*module, d_fk/2-delta0-0.5*module, 0.5*module, 0, 90, 1, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksLineSeg(-c/2-0.5*module, d_fk/2-delta0, -b_k/2+0.5*module, d_fk/2-delta0, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksArcByAngle(-b_k/2+0.5*module, d_fk/2-delta0+0.5*module, 0.5*module, 270, 180, -1, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksLineSeg(-b_k/2, d_fk/2-delta0+0.5*module, -b_k/2, d_ak/2-module, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

r := doc.ksLineSeg(-b_k/2, d_ak/2-module, -b_k/2+module, d_ak/2, 1);

doc.ksSymmetryObj(r, 0, 0, 0, 100, '1');

doc.ksLineSeg(-b_k/2+module, d_ak/2, b_k/2-module, d_ak/2, 1); end; iSketchDef.EndEdit; end; end; end; // інтерфейс базової операції обертання iBaseRotatedEntity := ksEntity(iPart.NewEntity(o3d_baseRotated)); // інтерфейс параметрів кольору і візуальних властивостей Color := ksColorParam(iBaseRotatedEntity.ColorParam); Color.specularity := 0.8; Color.shininess := 1; if (iBaseRotatedEntity <> nil) then begin

// інтерфейс параметрів обертання iBaseRotatedDef :=

ksBaseRotatedDefinition(iBaseRotatedEntity.GetDefinition); if (iBaseRotatedDef <> nil) then begin

// настройка параметрів обертання iBaseRotatedDef.SetThinParam(false, dtNormal, 1, 1); iBaseRotatedDef.SetSideParam(true, 360); iBaseRotatedDef.toroidShapeType := false; iBaseRotatedDef.SetSketch(iSketchEntity);

// створюємо операцію обертання

// результат - заготівка зубчатого колеса iBaseRotatedEntity.Create;

end; end; // інтерфейс ескізу (отвори в диску) iSketch1Entity := ksEntity(iPart.NewEntity( o3d_sketch )); if (iSketch1Entity <> nil) then begin iSketch1Def := ksSketchDefinition(iSketch1Entity.GetDefinition); if (iSketch1Def <> nil) then begin if (PlaneYOZ <> nil) then begin

// розміщуємо ескіз на площині YOZ iSketch1Def.SetPlane(PlaneYOZ); iSketch1Entity.Create; doc := ksDocument2D(iSketch1Def.BeginEdit); if (doc <> nil) then begin

// зображення в ескізі - 4 кола створюються викликом методу ksCircle doc.ksCircle(0, Dotv/2, 0.4*(d_fk/2-delta0-Dm/2), 1); doc.ksCircle(0, -Dotv/2, 0.4*(d_fk/2-delta0-Dm/2), 1); doc.ksCircle(Dotv/2, 0, 0.4*(d_fk/2-delta0-Dm/2), 1); doc.ksCircle(-Dotv/2, 0, 0.4*(d_fk/2-delta0-Dm/2), 1); end; iSketch1Def.EndEdit; end; end; end; // інтерфейс операції „Вырезать выдавливанием” iCutExtrusion := ksEntity(iPart.NewEntity(o3d_cutExtrusion)); if (iCutExtrusion <> nil) then begin

// інтерфейс параметрів вирізування iCutExtrusionDef :=

ksCutExtrusionDefinition(iCutExtrusion.GetDefinition); if (iCutExtrusionDef <> nil) then begin

// настройка параметрів iCutExtrusionDef.SetSketch(iSketch1Entity);

// напрям iCutExtrusionDef.directionType := dtBoth;

// величина вирізування по кожному з напрямів iCutExtrusionDef.SetSideParam(true, etBlind, c/2, 0 , false); iCutExtrusionDef.SetSideParam(false, etBlind, c/2, 0 , false); iCutExtrusionDef.SetThinParam(false, 0, 0, 0);

// створюємо отвори в диску iCutExtrusion.Create; end; end; // інтерфейс зміщеної площини iOffsetPlaneEntity := ksEntity(iPart.NewEntity(o3d_planeOffset)); if (iOffsetPlaneEntity <> nil) then begin

// інтерфейс параметрів зміщеної площини iOffsetPlaneDef :=

ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition); if (iOffsetPlaneDef <> nil) then begin

// величина, базова площина і інші параметри зсуву iOffsetPlaneDef.Offset := b_k/2; iOffsetPlaneDef.SetPlane(PlaneYOZ); iOffsetPlaneDef.direction := false;

// робимо площину прихованою iOffsetPlaneEntity.Hidden := true;

// створюємо допоміжну площину iOffsetPlaneEntity.Create; end; end; // ескіз першого вирізу між зубами iSketch2Entity := ksEntity(iPart.NewEntity(o3d_sketch)); if (iSketch2Entity <> nil) then begin iSketch2Def := ksSketchDefinition(iSketch2Entity.GetDefinition); if (iSketch2Def <> nil) then begin

// базова площина - допоміжна iOffsetPlaneEntity iSketch2Def.SetPlane(iOffsetPlaneEntity); iSketch2Entity.Create; doc := ksDocument2D(iSketch2Def.BeginEdit); alfa1 := 360/z; doc.ksMtr(0, 0, 90, 1, 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(0)), - (d_ak/2+0.1)*cos(DegToRad(0)), -d_k/2*sin(DegToRad(alfa1/8)), -d_k/2*cos(DegToRad(alfa1/8)), -d_fk/2*sin(DegToRad(alfa1/4)), -d_fk/2*cos(DegToRad(alfa1/4)), 1); doc.ksArcByPoint(0, 0, d_fk/2, -d_fk/2*sin(DegToRad(alfa1/4)),

-d_fk/2*cos(DegToRad(alfa1/4)), -d_fk/2*sin(DegToRad(alfa1/2)), -d_fk/2*cos(DegToRad(alfa1/2)), -1, 1); doc.ksArcBy3Points(-d_fk/2*sin(DegToRad(alfa1/2)), -d_fk/2*cos(DegToRad(alfa1/2)), -d_k/2*sin(DegToRad(0.625*alfa1)), -

d_k/2*cos(DegToRad(0.625*alfa1)), -(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1)), -

(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1)), 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1)), -

(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1)), -(d_ak/2+2)*sin(DegToRad(0.375*alfa1)), -

(d_ak/2+2)*cos(DegToRad(0.375*alfa1)), -(d_ak/2+0.1)*sin(DegToRad(0)), -(d_ak/2+0.1)*cos(DegToRad(0)), 1); doc.ksDeleteMtr; iSketch2Def.EndEdit; end; end; // інтерфейс другого ескізу вирізу між зубами iSketch3Entity := ksEntity(iPart.NewEntity(o3d_sketch)); if (iSketch3Entity <> nil) then begin iSketch3Def := ksSketchDefinition(iSketch3Entity.GetDefinition); if (iSketch3Def <> nil) then begin // будуємо на площині YOZ iSketch3Def.SetPlane(PlaneYOZ); iSketch3Entity.Create; doc := ksDocument2D(iSketch3Def.BeginEdit); alfa2 := -RadToDeg(b_k*tan(DegToRad(beta))/d_k); doc.ksMtr(0, 0, 90, 1, 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(alfa2)), -d_k/2*sin(DegToRad(alfa1/8+alfa2)), -d_k/2*cos(DegToRad(alfa1/8+alfa2)), -d_fk/2*sin(DegToRad(alfa1/4+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/4+alfa2)), 1); doc.ksArcByPoint(0, 0, d_fk/2, -d_fk/2*sin(DegToRad(alfa1/4+alfa2)),

-d_fk/2*cos(DegToRad(alfa1/4+alfa2)), -d_fk/2*sin(DegToRad(alfa1/2+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/2+alfa2)), -1, 1); doc.ksArcBy3Points(-d_fk/2*sin(DegToRad(alfa1/2+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/2+alfa2)), -d_k/2*sin(DegToRad(0.625*alfa1+alfa2)), -

d_k/2*cos(DegToRad(0.625*alfa1+alfa2)), -(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1+alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1+alfa2)), 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1+alfa2)), -(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1+alfa2)), -(d_ak/2+2)*sin(DegToRad(0.375*alfa1+alfa2)), -

(d_ak/2+2)*cos(DegToRad(0.375*alfa1+alfa2)), -(d_ak/2+0.1)*sin(DegToRad(alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(alfa2)), 1); doc.ksDeleteMtr; iSketch3Def.EndEdit; end; end; // друга зміщена площина iOffsetPlane1Entity := ksEntity(iPart.NewEntity(o3d_planeOffset)); if (iOffsetPlane1Entity <> nil) then begin iOffsetPlane1Def :=

ksPlaneOffsetDefinition(iOffsetPlane1Entity.GetDefinition); if (iOffsetPlane1Def <> nil) then begin

// величина зсуву та ж iOffsetPlane1Def.Offset := b_k/2;

// напрям протилежний iOffsetPlane1Def.direction := true; iOffsetPlane1Def.SetPlane(PlaneYOZ);

// робимо площину прихованою iOffsetPlane1Entity.Hidden := true;

// створюємо зміщену площину iOffsetPlane1Entity.Create; end; end; // третій ескіз вирізу між зубами iSketch4Entity := ksEntity(iPart.NewEntity(o3d_sketch)); if (iSketch4Entity <> nil) then begin iSketch4Def := ksSketchDefinition(iSketch4Entity.GetDefinition); if (iSketch4Def <> nil) then begin

// базова площина - тільки що створена зміщена iSketch4Def.SetPlane(iOffsetPlane1Entity); iSketch4Entity.Create; doc := ksDocument2D(iSketch4Def.BeginEdit); alfa2 := -RadToDeg(2*b_k*tan(DegToRad(beta))/d_k); doc.ksMtr(0, 0, 90, 1, 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(alfa2)), -d_k/2*sin(DegToRad(alfa1/8+alfa2)), -d_k/2*cos(DegToRad(alfa1/8+alfa2)), -d_fk/2*sin(DegToRad(alfa1/4+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/4+alfa2)), 1); doc.ksArcByPoint(0, 0, d_fk/2, -d_fk/2*sin(DegToRad(alfa1/4+alfa2)), -d_fk/2*cos(DegToRad(alfa1/4+alfa2)), -d_fk/2*sin(DegToRad(alfa1/2+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/2+alfa2)), -1, 1); doc.ksArcBy3Points(-d_fk/2*sin(DegToRad(alfa1/2+alfa2)), -

d_fk/2*cos(DegToRad(alfa1/2+alfa2)), -d_k/2*sin(DegToRad(0.625*alfa1+alfa2)), -

d_k/2*cos(DegToRad(0.625*alfa1+alfa2)), -(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1+alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1+alfa2)), 1); doc.ksArcBy3Points(-(d_ak/2+0.1)*sin(DegToRad(0.75*alfa1+alfa2)), -(d_ak/2+0.1)*cos(DegToRad(0.75*alfa1+alfa2)), -(d_ak/2+2)*sin(DegToRad(0.375*alfa1+alfa2)), -

(d_ak/2+2)*cos(DegToRad(0.375*alfa1+alfa2)), -(d_ak/2+0.1)*sin(DegToRad(alfa2)), -

(d_ak/2+0.1)*cos(DegToRad(alfa2)), 1); doc.ksDeleteMtr; iSketch4Def.EndEdit; end; end; iCutLoftEntity := ksEntity(iPart.NewEntity(o3d_cutLoft)); if (iCutLoftEntity <> nil) then begin // інтерфейс параметрів операції „По сечениям” iCutLoftDef := ksCutLoftDefinition(iCutLoftEntity.GetDefinition); if (iCutLoftDef <> nil) then begin

// інтерфейс масиву ksEntityCollection // колекції ескізів для вирізування по перетинах Collect := ksEntityCollection(iCutLoftDef.Sketchs); // додавання ескізів в колекцію Collect.Add(iSketch2Entity); Collect.Add(iSketch3Entity); Collect.Add(iSketch4Entity); // створюємо операцію по перетинах // результат - перший виріз між зубами у вінці колеса iCutLoftEntity.Create; end; end; // інтерфейс допоміжної осі на перетині двох площин iAxis := ksEntity(iPart.NewEntity(o3d_axis2Planes)); if (iAxis <> nil) then begin // інтерфейс параметрів допоміжної осі на перетині площин iAxis2PlDef := ksAxis2PlanesDefinition(iAxis.GetDefinition); if (iAxis2PlDef <> nil) then begin // задаємо площини iAxis2PlDef.SetPlane(1, PlaneXOZ); iAxis2PlDef.SetPlane(2, PlaneXOY); // робимо вісь невидимою iAxis.hidden := true; // створюємо допоміжну вісь iAxis.Create; end; end; // інтерфейс операції Масив по концентричній сітці iCircularCopy := ksEntity(iPart.NewEntity(o3d_circularCopy)); if (iCircularCopy <> nil) then begin

// інтерфейс параметрів операції копіювання по масиву iCirCopyDef :=

ksCircularCopyDefinition(iCircularCopy.GetDefinition); if (iCirCopyDef <> nil) then begin // колекція операцій для копіювання Collect1 := ksEntityCollection(iCirCopyDef.GetOperationArray); // операція всього лише одна - вирізування зуба Collect1.Add(iCutLoftEntity); // кількість копій рівна числу зубів iCirCopyDef.count2 := z; iCirCopyDef.factor2 := true; // вісь копіювання iCirCopyDef.SetAxis(iAxis); // створюємо концентричний масив iCircularCopy.Create; end; end; end; Close;

end;

Розглянемо процедури, за допомогою яких був створений інтерфейс користувача бібліотеки. При появі форми відбувається формування списку модулів згідно обраного ряду (за замовченням це перший).

procedure TGearsForm.FormShow(Sender: TObject);

begin RadioGroup1Click(Sender);

end;

Процедура вибору номера ряду.

procedure TGearsForm.RadioGroup1Click(Sender: TObject);

begin if RadioGroup1.ItemIndex=0 then // якщо обраний перший ряд ADOTable1.Filter:='ryad=1' // встановлюємо значення фільтру else ADOTable1.Filter:='ryad=2' ; ADOTable1.Filtered:=true; // фільтр включений ADOTable1.First; // перехід на перший запис edit1.Clear; // очищення списку while not ADOTable1.Eof do // перебираємо усі записи таблиці begin edit1.Items.Add(floattostr(ADOTable1modul.AsFloat)); // додаємо значення модулю до списку ADOTable1.Next; // перехід на наступний запис end;

end;

З а допомогою цієї процедури був реалізований контроль за коректністю вводу даних.

procedure TGearsForm.Edit2KeyPress(Sender: TObject; var Key: Char);

begin if not (key in ['0'..'9',#8,'.']) then key:=#0;

end;

Наступна процедура дозволяє перейти в режим редагування бази даних.

procedure TGearsForm.BitBtn1Click(Sender: TObject);

begin panel2.Visible:=false; panel1.Visible:=true; ADOTable1.Filtered:=false;// відключаємо фільтрацію

end;

Процедура, яка повертає вікно в режим вводу початкових даних моделі.

procedure TGearsForm.BitBtn2Click(Sender: TObject);

begin panel1.Visible:=false; panel2.Visible:=true; RadioGroup1Click(Sender); // оновлюємо список

end;

За допомогою наступних фрагментів коду здійснюється вивід повідомлень для користувача у разі некоректного вводу вхідних даних.

if edit1.Text='' then

// якщо не обрано значення модулю begin ShowMessage('Выберите из списка значение модуля!'); exit; end;

// якщо не введена кількість зубців if edit2.Text='' then begin ShowMessage('Введите число зубьев!'); exit; end;

5. Економічне обґрунтування доцільності розробки програмного продукту

Метою дипломної роботи є дослідження можливостей створення прикладних динамічних бібліотек для системи Компас-3D в середовищі Delphi з використанням функцій API-інтерфейсу. Результатом виконання дипломної роботи є розробка елементу САПР, що створює по мінімальній кількості початкових даних 3D-модель зубчатого колеса.

Економічна доцільність розробки полягає в економії витрат порівняно з придбанням комерційних програмних продуктів, здатних виконувати аналогічні функції.

В ході розробки програмного продукту було використане програмне забезпечення Turbo Delphi 2006 Explorer, яке є безкоштовним.

Визначення витрат на створення програмного продукту

Оскільки середа розробки є безкоштовною, витрати на створення програмного продукту складаються з витрат по оплаті праці розробника програми і витрат по оплаті машинного часу при відладці програми:

Зспп=Ззпспп +Змвспп

де: Зспп - витрати на створення програмного продукту; Ззпспп - витрати на оплату праці розробника програми; Змвспп - витрати на оплату машинного часу.

Витрати на оплату праці розробника програми (Ззпспп) визначаються шляхом множення трудомісткості створення програмного продукту на середню годинну оплату програміста (з урахуванням коефіцієнта відрахувань на соціальні потреби):

Ззпспп=t*Tчас

Розрахунок трудомісткості створення програмного продукту

Трудомісткість розробки програмного продукту можна визначити таким чином:

t= to+ tа+ tб+ tп+ tд+ tвід,

де:

to - витрати праці на підготовку опису завдання;

tа - витрати праці на розробку алгоритму рішення задачі;

tб - витрати праці на розробку блок-схеми алгоритму рішення задачі;

tп - витрати праці на складання програми по готовій блок-схемі;

tд - витрати праці на підготовку документації завдання;

tвід - витрати праці на відладку програми на ЕОМ при комплексній відладці завдання.

Складові витрат можна виразити через умовне число операторів Q. У нашому випадку число операторів у відлагодженій програмі Q=2500.

Розрахунок витрат праці на підготовку опису завдань

Оцінити витрати праці на підготовку опису завдання не можливо, оскільки це пов'язано з творчим характером роботи, натомість оцінимо витрати праці на вивчення опису завдання з урахуванням уточнення опису і кваліфікації програміста:

to= Q*B/(75…85*K),

де:

B - коефіцієнт збільшення витрат праці унаслідок недостатнього опису завдання, уточнень і деякої недоробки, B=1,2…5;

K - коефіцієнт кваліфікації розробника, для тих, що працюють до 2 років K=0.8;

Коефіцієнт В приймаємо рівним 3.

Таким чином отримаємо:

to= 2500*3/(78*0,8) = 120,19 (люд-год).

Розрахунок витрат праці на розробку алгоритму

Витрати праці на розробку алгоритму рішення задачі:

tа = Q/(60…75*K)

tа = 2500/(70*0,8)=44,64 (люд-год).

Розрахунок витрат праці на розробку блок-схеми Витрати праці на розробку блок-схеми алгоритму рішення задачі обчислимо таким чином:

tб= Q/(60…75*K)

tб = 2500/(71*0,8)=44,01 (люд-год).

Розрахунок витрат праці на складання програми Витрати праці на складання програми по готовій блок-схемі обчислимо таким чином:

tп= Q/(60…75*K)

tп = 2500/(72*0,8)=43,40 (люд-год).

Розрахунок витрат праці на відладку програми Витрати праці на відладку програми на ЕОМ при комплексній відладці завдання:

tвід=1.5* tAвід,

де tAвід - витрати праці на відладку програми на ЕОМ при автономній відладці одного завдання;

tAвід= Q/(40…50*K)

tAвід = 2500/(48*0,8)=65,10 (люд-год).

Звідси tвід=1,5*65,10=97,65 (люд-год).

Розрахунок витрат праці на підготовку документації

Витрати праці на підготовку документації по завданню визначаються:

tд= tдр+ tдо,

де:

tдр - витрати праці на підготовку матеріалів в рукопису;

tдо - витрати на редагування, друк і оформлення документації;

tдр= Q/(150…200*K)

tдр = 2500/(180*0,8) = 17,36 (люд-год)

tдо=0,75*tдр

tдо =0,75*17,36=13,02 (люд-год)

Звідси:

tд=17,36+13,02=30,38 (люд-год).

Отже, загальну трудомісткість розробки програмного продукту можна розрахувати:

t= to+ tа+ tб+ tп+ tд+ tвід,

t = 120,19 +44,64 +44,01+43,40 +30,38 +97,65 = 380,27 (люд-год).

Розрахунок середньої зарплати програміста Середня зарплата програміста в сучасних ринкових умовах може варіюватися в широкому діапазоні. Для розрахунку візьмемо середню годинну оплату праці програміста - розробника елементів САПР, яка складає Тчас=18 грн/година. Це означає, що вартість розробки буде становитиму 6 844,86 грн.

Витрати на оплату праці програміста складаються із зарплати програміста і нарахувань на соціальні потреби.

Єдине соціальне нарахування становить 36,77%.

Тобто 6 844,86 грн*36,77%= 2516,86 грн.

Звідси витрати на оплату праці програміста складають:

Ззпспп= 6 844,86+2 516,86 = 9361,72 грн.

Витрати на оплату машинного час

Витрати на оплату машинного часу при відладці програми визначаються шляхом множення фактичного часу відладки програми на ціну машино-години орендного часу: Змвспп =Счас* tеом,

де: Счас - ціна машино-години, грн/год; tеом - фактичний час відладки програми на ЕОМ.

Розрахунок фактичного часу відладки Фактичний час відладки обчислимо за формулою:

tеом = tп + tдо + tвід ;

tеом = 43,40 +13,02+97,65 = 154,07 години

Розрахунок ціни машино-години

Ціну машино-години знайдемо по формулі:

Сгод = Зеом/Теом,

де:

Зеом - повні витрати на експлуатацію ЕОМ на протязі року;

Теом - дійсний річний фонд часу ЕОМ, год/рік.

Розрахунок річного фонду часу роботи ПЕОМ

Загальна кількість днів в році - 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,9302 грн., інтенсивність використання машини А=0,98.

Тоді розрахункове значення витрат на електроенергію:

Зел = 0,22 * 1852* 0,9302* 0,98 = 371,42 грн.

Розрахунок витрат на поточний ремонт Витрати на поточний і профілактичний ремонт приймаються рівними 5% від вартості ЕОМ:

Зпр = 0.05* Сбал

Зпр = 0,05* 5500 = 275 грн.

Розрахунок витрат на допоміжні матеріали Витрати на матеріали, необхідні для забезпечення нормальної роботи ПЕОМ, складають близько 1 % від вартості ЕОМ:

Звм =0,01* 5500 =55 грн.

Інші витрати по експлуатації ПЕОМ

Інші непрямі витрати, пов'язані з експлуатацією ПЕОМ, складаються з вартості послуг сторонніх організацій і складають 5% від вартості ЕОМ:

Зпр = 0.05* 5500 =275 грн.

Річні витрати на заробітну плату обслуговуючого персоналу

Витрати на заробітну плату обслуговуючого персоналу складаються з основної заробітної плати, додаткової і відрахувань на заробітну плату:

Ззп = Зоснзп +Здодзп +Звідзп.

Основна заробітна плата визначається, виходячи із загальної чисельності тих, що працюють в штаті:

Зоснзп =12 *?Зіокл,

де: Зіокл - тарифна ставка і-го працівника в місяць, грн; 12 - кількість місяців.

У штат обслуговуючого персоналу повинні входити інженер-електронщик з місячним окладом 2000 грн. і електрослюсар з окладом 1800 грн. Тоді, враховуючи, що даний персонал обслуговує 20 машин, маємо витрати на основну заробітну плату обслуговуючого персоналу, які складуть:

Зоснзп = 12*(2000+1800)/20=2280 грн.

Додаткова заробітна плата складає 60 % від основної заробітної плати:

Здодзп = 0,6 *2280 = 1368 грн.

Відрахування на соціальні потреби складають 37,6% від суми додаткової і основної заробітних плат:

Звідзп = 0,376*(2280 + 1368) = 1371,65 грн.

Тоді річні витрати на заробітну плату обслуговуючого персоналу складуть:

Ззп = 2280 + 1368 +1371,65 = 5019,65 грн.

Повні витрати на експлуатацію ЕОМ в перебігу року складуть:

Зеом = 5019,65 +1375+371,42+55+275+275 = 7 371,07 грн.

Тоді ціна машино-години часу, що орендується, складе

Сгод = 7 371,07 /1852 = 3,98 грн.

А витрати на оплату машинного часу складуть:

Змвспп =Сгод*tеом

Змвспп = 3,98 * 154,07= 613,19 грн.

Розрахунок економічного ефекту

Зспп=Ззпспп +Змвспп

Зспп =9361,72+ 613,19 = 9 974,91 грн.

Тобто собівартість програмного продукту 9 974,91 грн.

А зараз визначимо ціну програмного продукту:

Ц = Зспп + Р,

Где Ц - ціна програмного продукту;

Р - 15% від витрат на створення програмного продукту.

Ц = 9 974,91+ 1496,24 = 11 471,15 грн.

Ціна розробки програмного продукту дорівнює 11 471,15 грн.

Розробка прикладних конструкторських бібліотек звичайно виконується згідно замовленню підприємства на основі індивідуального підходу. Але типові конструкторські бібліотеки можуть бути впроваджені на будь-якому підприємстві відповідної галузі, тобто тиражовані.

Аналіз аналогічних розробок, що здатні виконувати схожі функції та мають вартість біля 5 000 руб дозволяє зробити висновок, що розроблене програмне забезпечення за умови тиражування обійдеться значно дешевше, ніж аналоги.

Якщо буде реалізовано 50 копій розробленого програмного продукту, економічний прибуток становитиме:

ЕК = 5 000 * 0,245 * 50 - 11 471,15 = 49 778,85 грн.,

де 0,245 - курс російського рубля Національного банку України.

6. Охорона праці

Охорона праці - це система законодавчих актів, соціально-економічних, організаційних і лікувально-профілактичних заходів і засобів, що забезпечують безпеку, збереження здоров'я і працездатності людини в процесі праці.


Подобные документы

  • Підстава для створення, найменування та область застосування програмного забезпечення. Дослідження теоретичних аспектів процесу проектування систем автоматизації розробки конструкторської документації. Інструкція по інсталяції програмного продукту.

    дипломная работа [2,5 M], добавлен 26.10.2012

  • Призначення і основні характеристики систем автоматизації конструкторської документації. Основні методи створення графічних зображень і геометричних об’єктів. Методи побудови та візуалізація тривимірних об’єктів. Опис інтерфейсу користувача системи.

    дипломная работа [1,7 M], добавлен 26.10.2012

  • Приклади рішень від провідних компаній-розробників, що працюють у сфері автоматизації роботи з документами. Основні можливості систем електронного документообігу. Вибір програмного забезпечення для створення програмного продукту. Опис програмної системи.

    курсовая работа [45,8 K], добавлен 06.06.2011

  • Характеристика розробленого програмного забезпечення. Мета й призначення, загальні вимоги до розробки. Інтелектуальні системи, засновані на знаннях. Проблемні області та їхні властивості. Характеристики середовища Delphi та об`єктно-орієнтованої мови.

    дипломная работа [1,4 M], добавлен 22.10.2012

  • Розробка гнучкої довідкової системи, яка дозволяє наочно проілюструвати можливості управління додатками MS Office за допомогою програм, створених у середовищі Delphi. Система базується на використанні технології COM і об'єктних моделей MS Word і MS Excel.

    дипломная работа [2,5 M], добавлен 25.10.2012

  • Delphi як візуальне середовище розробки програмного забезпечення. Створення автоматизованої системи відстеження дзвінків з мобільних телефонів працівниками правоохоронних органів. Основи технології ACTIVEX DATA OBJECTS. Функціональні можливості системи.

    дипломная работа [5,0 M], добавлен 26.10.2012

  • Особливості редактора принципових схем системи Protel 99. Основні недоліки та переваги системи. Проблема правильного виведення схем на друк. Розробка та редагування бібліотек елементів принципових схем. Перегляд існуючої бібліотеки та створення нової.

    контрольная работа [902,1 K], добавлен 20.06.2010

  • Історія створення и основні характеристики системи SWIFT, напрямки її діяльності та ефективність. Структура SWIFT, основні відділи та їх функції. Принципи створення автоматичних інформаційних систем. Призначення і можливості системи "клієнт-банк".

    контрольная работа [30,5 K], добавлен 26.07.2009

  • Характеристика програмного забезпеченнягалузь його використання, вимоги до розробки та її джерела, мета та призначення. Структура й основні принципи побудови систем автоматизації конструкторської документації. Технології параметричного моделювання.

    дипломная работа [2,3 M], добавлен 26.10.2012

  • Обґрунтування вибору автоматизованої системи для створення конструкторської документації. Проектування 3D моделі і креслення деталі в системі SolidWorks. Розробка API програми. Призначення деталі "прес-форма". Розробка керуючої програми для устаткування.

    курсовая работа [3,3 M], добавлен 16.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.