Автоматизация проектирования диафрагм в устройствах измерения расхода жидкостей и газов

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

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

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

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

Определим сопротивление горизонтального проводника связи:

,

где - удельное электрическое сопротивление грунта, равное 300 (для Тулы: 2 климатическая зона, тип грунта - суглинок, размещение - горизонтальное).

.

Результирующее сопротивление группового искусственного заземлитетя определим по формуле:

,

где - коэффициент использования горизонтальных электродов.

Из расчета соотношения расстояния между электродами (а=6м) к их длине (l=3м), равного a/l=2 и размещения электродов по контуру здания выбираем из таблицы коэффициентов использования горизонтальных электродов =0,48.

Критерий правильности расчета заключается в соблюдении неравенства:

.

Как видим, условие выполняется (7,566 < 10), следовательно параметры заземлителей были выбраны верно.

9.3.7 Пожарная безопасность

При проектировании здания необходимо соблюдать мероприятия пожарной профилактики, руководствуясь при этом СНиП 2.01.02-85 «Противопожарные нормы проектирования зданий и сооружений», в котором изложены основные требования к огнестойкости зданий и сооружений, противопожарным преградам, эвакуации людей из здания. Пожарная безопасность обеспечивается соответствующим устройством и эксплуатацией оборудования, зданий и сооружений. При этом необходимо предусмотреть методы и средства пожаротушения.

Для выбора мер пожаротушения определяют категорию здания по взрывоопасности и по степени огнестойкости.

Рассматриваемое в данном проекте рабочее помещение по взрывопожарной и пожарной опасности в соответствии с СНиП 2.09.02-85 «Производственные здания» относится к категории помещений Д.

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

К числу факторов, которые могут вызвать пожар, следует отнести:

· ненадежную работу электронных блоков, из которых состоит ПЭВМ, при отклонении реальных условий эксплуатации от заданных;

· пробой изоляции;

· короткое замыкание;

· нарушение правил пожарной безопасности.

Средства пожаротушения подразделяют на первичные, стационарные и передвижные (пожарные автомобили).

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

К первичным средствам пожаротушения на рабочем месте с ПК относят следующие виды углекислотных огнетушителей: ручные - ОУ-2А, ОУ-5, ОУ-8 и передвижные - ОУ - 25, ОУ - 80, ОУ - 400. Их используют для тушения загораний электрических установок, работающих под напряжением до 1000 В.

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

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

В зависимости от того, какой из параметров газовоздушной среды вызывает срабатывание пожарного извещателя, они бывают; тепловые, световые, дымовые, комбинированные, ультразвуковые.

В рассматриваемом случае следует использовать тепловые или дымовые извещатели.

Рисунок 9.5 - схема размещения извещателей

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

В соответствии со СНиП II-2-80 число эвакуационных выходов из зданий, помещений и с каждого этажа зданий определяется расчётом, но должно быть не менее двух. Ширина участков путей эвакуации должна быть не меньше 1м, а дверей на путях эвакуации - не менее 0,8 м.

План пожарной эвакуации рассматриваемого здания предоставлен на рисунке ниже. Стрелками указаны пути эвакуации. Крестиком помечена комната, где оператор ПЭВМ использует разработанный программный продукт.

Размещено на http://www.allbest.ru/

Рисунок 10.6 - план эвакуации

Должен проводиться противопожарный инструктаж всех сотрудников в момент принятия их на работу. Проведение противопожарных инструктажей должно фиксироваться в специальном журнале.

9.3.8 Охрана окружающей среды

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

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

Загрязнение - привнесение в какую-либо среду новых не характерных для неё веществ или превышение естественного среднемноголетнего уровня концентрации этих агентов в среде. Непосредственными объектами загрязнения служат атмосфера, вода, почва. Косвенными объектами загрязнения (жертвами загрязнения) оказываются растения, животные, микроорганизмы, человек.

Различают следующие виды загрязнений:

§ Биологическое -- загрязнителем являются не свойственные экосистеме организмы;

§ Микробиологическое;

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

§ Химическое -- загрязнителем являются вредные химические соединения;

§ Физическое;

§ Тепловое -- излишний нагрев среды;

§ Шумовое;

§ Электромагнитное;

§ Радиоактивное -- превышение естественного радиоактивного фона;

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

Заключение

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

Организация производственного помещения: размер кабинета составляет 7х5х3 м, объем и площадь помещения соответствует санитарным нормам.

Микроклимат: воздухообмен в помещении может обеспечить настенный кондиционер мощностью 600, кратность воздухообмена = 5.

Освещение: для обеспечения нормальных условий работы оператора ПК, в соответствии с нормативными требованиями, необходимо установить 8 светильников ЛДЦ-80 с лампами мощностью 80Вт.

Шум: расчет уровня шума показал, что достаточно применение звукопоглощающей облицовки стен и вентиляторов типа SILENT для снижения уровня шума до допустимого.

Эргономика организации рабочего места и режима труда: приведены схемы посадки человека за рабочим местом, регламенты перерывов при работе на ЭВМ.

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

Электоробезопасность: в качестве защиты от поражения электрическим током применяется защитное заземление и зануление. Для организации группового искусственного заземлителя применяются металлические трубы длиной 3 м и диаметром 0,03 м на глубине 0,8 м.

Пожарная безопасность: в качестве первичных средств пожаротушения применяем следующие виды углекислотных огнетушителей: ручные - ОУ-2А, ОУ-5, ОУ-8 и передвижные - ОУ - 25, ОУ - 80, ОУ - 400. Приведены схема размещения извещателей и план эвакуации.

Библиографический список:

1. ГОСТ 8.586.1--2014 «Измерение расхода и количества жидкостей и газов с помощью стандартных сужающих устройств» Часть 1 Принцип метода измерений и общие требования

2. ГОСТ 8.586.2-2014 «Измерение расхода и количества жидкостей и газов с помощью стандартных сужающих устройств» Часть 2 Диафрагмы. Технические требования

3. РД 50-411-83 «Методические указания. Расход жидкостей и газов. Методичка выполнения измерений с помощью специальных сужающих устройств»

4. СанПиН 2.2.2./2.4.1340-03 "Гигиенические требования к персональным электронно-вычислительным машинам и организации работы"

5. ГОСТ 12.01.005-88 «Общие санитарно-гигиенические требования к воздуху санитарной рабочей зоны»

6. ГОСТ 12.1.003-83 «Шум. Общие требования безопасности»

7. СНиП 2.01.02-85 «Противопожарные нормы проектирования зданий и сооружений»

8. СНиП 31-03-2001 «Производственные здания»

9. СанПин 2.2.2.542-96 «Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работ»

10. СНиП 23-05-95 «Естественное и искусственное освещение»

11. Андронов И.В. Измерение расхода жидкостей и газов. -- М.: Энергоиздат, 1981. -- 88 с

12. Кулаков М.В. Технологические измерения и приборы для химических производств. - М.:Машиностроение.-1983.

13. Типовые нормы времени на программирование задач для ЭВМ. - М.: Экономика, 2013.

14. Методические указания по выполнению КР (ККР) по курсу “Организация и планирование производства” / А.В. Огнянович. - Тула: ТулГУ, 2011. - 20с.

Приложение 1

Шероховатость внутренней поверхности трубопроводов

Значения эквивалентной шероховатости Rш, среднеарифметического отклонения профиля шероховатости Ra и относительной расширенной неопределенности

Вид труб и материал

Состояние поверхности стенки ИТ и условия эксплуатации

Значения

Rш·103, м

Ra·103, м

Цельнотянутые трубы из латуни, меди, алюминия, пластмассы

Технически гладкая, без отложений

0,03

0,01

100

Стеклянные

Чистая

0,01

0,003

100

Трубы из нержавеющей стали

Новая

0,03

0,01

100

Цельнотянутые стальные:

- холоднотянутые

0,03

0,01

100

- горячетянутые

Новая

0,10

0,03

100

- прокатные

0,10

0,03

100

Цельносварные стальные:

- прямошовные

Новая

0,10

0,03

100

- со спиральным швом

0,10

0,03

100

Стальные трубы

С незначительным налетом ржавчины

0,15

0,045

33

Ржавая

0,25

0,08

20

Покрытая накипью

1,25

0,375

60

Сильно покрытая накипью

2

0,6

100

Битумизированная, новая

0,04

0,0125

20

Битумизированная, бывшая в эксплуатации

0,15

0,045

33

Оцинкованная

0,13

0,04

100

Чугун

Новая, не бывшая в эксплуатации

0,25

0,08

100

Приложение 2

Значения постоянных коэффициентов a0, a1, a2 и границы области применения формулы (5.21)

Марка стали

Значения постоянных коэффициентов

Границы области применения формулы (21)

a0

a1

a2

min

max

35Л

10,260

14,000

0

-40

700

45Л

11,600

0

0

-40

100

20ХМЛ

9,830

18,812

-14,191

-40

600

12Х18Н9ТЛ

16,466

5,360

3,000

-40

700

15К, 20К

10,800

10,000

0

-40

600

22К

9,142

34,340

-43,526

-40

400

16ГС

9,903

20,561

-15,675

-40

600

09Г2С

10,680

12,000

0

-40

500

10

10,800

9,000

-4,200

-200

700

15

11,100

7,900

-3,900

-200

700

20

11,100

7,700

-3,400

-200

700

30,35

10,200

10,400

-5,600

-200

700

40,45

10,821

17,872

-10,986

-40

700

10Г2

9,940

22,667

0

-40

400

38ХА

12,345

5,433

5,360

-40

600

40Х

10,819

15,487

-9,280

-40

700

15ХМ

11,448

12,638

-7,137

-200

700

30ХМ, 30ХМА

10,720

14,667

0

-200

500

12Х1МФ

10,000

9,600

-6,000

-200

700

25X1МФ

10,235

18,640

-13,000

-40

600

25Х2М1Ф

12,020

8,000

0

-40

600

15Х5М

10,100

2,700

0

-200

700

18Х2Н4МА

11,065

11,224

-5,381

-40

600

38ХН3МФА

11,446

9,574

-4,945

-40

700

08X13

9,971

9,095

-4,115

-40

800

12X13

9,557

11,067

-5,000

-40

800

20X13

9,520

11,333

0

-40

600

30X13

9,642

9,600

-4,472

-40

800

110Х14Г14Н4Т

15,220

13,000

0

-40

900

08X18Н10

15,325

11,250

0

-40

500

12X18Н9Т

15,600

8,300

-6,500

-200

700

12Х18Н10Т, 12Х18Н12Т

16,206

6,571

0

-40

900

08Х18Н10Т

15,470

10,500

0

-40

700

08Х22Н6Т

6,400

60,000

0

-40

300

37Х12Н8Г8МФБ

15,800

0

0

-40

100

31Х19Н9МВБТ

16,216

6,400

0

-40

1000

06ХН28МДТ

9,153

30,944

-26,478

-40

600

20Л

11,660

9,000

0

-40

700

25Л

10,750

12,500

0

-40

500

Приложение 3

Текст программы

main

unit main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, calc, unit_db, redactor_db, Menus, strutils, ufuncs,

LDefin2D, ksConstTLB, ksAuto, ksTLB, ComObj, OleCtrls;

procedure dbquery(s: string);

type

TForm1 = class(TForm)

LabeledEdit1: TLabeledEdit;

LabeledEdit2: TLabeledEdit;

LabeledEdit3: TLabeledEdit;

LabeledEdit4: TLabeledEdit;

LabeledEdit5: TLabeledEdit;

LabeledEdit6: TLabeledEdit;

ComboBox1: TComboBox;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

ComboBox2: TComboBox;

ComboBox3: TComboBox;

Label1: TLabel;

Label2: TLabel;

LabeledEdit7: TLabeledEdit;

Button1: TButton;

ComboBox4: TComboBox;

Label4: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

GroupBox4: TGroupBox;

Memo1: TMemo;

Label3: TLabel;

GroupBox5: TGroupBox;

N14: TMenuItem;

Button2: TButton;

GroupBox3: TGroupBox;

Label8: TLabel;

ComboBox5: TComboBox;

Button3: TButton;

Button4: TButton;

SaveDialog1: TSaveDialog;

procedure ComboBox1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure ComboBox4Change(Sender: TObject);

procedure ComboBox3Change(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

dm: Tdm;

diaf: Tdiaf;

diaf_p: t_diafragma;

Kompas: KompasObject;

doc: ksDocument2D;

doc_pars: t_list;

//red: TForm2;

implementation

{$R *.dfm}

procedure TForm1.Button4Click(Sender: TObject);

begin

if Kompas = nil then

begin

Kompas := KompasObject( CreateOleObject('Kompas.Application.5') );

if Kompas <> nil then

Kompas.Visible := true;

end;

with doc_pars do

begin

developer:=ed_developer.Text;

material:=ed_material.Text;

org:=ed_org.Text;

code:=edit3.text;

name:='Диафграгма коническая';

format:=4;

direction:=false;

end;

with diaf_p do

begin

d:=diaf.dcy;

dm:=diaf.d;

f:=diaf.F;

j:=diaf.J;

e:=diaf.el;

em:=diaf.E;

kon:=true;

end;

WorkDocument(doc_pars,diaf);

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

dbquery('select * from stuff where name='+#39+ComboBox1.Text+#39);

diaf.r:=dm.Query1.FieldByName('R').AsFloat;

diaf.m:=dm.Query1.FieldByName('M').AsFloat;

end;

procedure TForm1.ComboBox2Change(Sender: TObject);

var i: word;

s: string;

begin

dbquery('select sostoyanie from it where vid=(select id from vid where vid.vid='+#39+ComboBox2.Text+#39+')');

ComboBox3.Clear;

with dm do

repeat

with Query2 do

begin

Close;

SQL.Text:='select sost from sostoyanie where id='+Query1.FieldByName('sostoyanie').AsString;

ExecSQL;

open;

Query1.Next;

first;

i:=0;

repeat

ComboBox3.Items.Add(FieldByName('sost').AsString);

inc(i);

next;

until eof or (i>100);

end;

until Query1.Eof or (i>100);

end;

procedure TForm1.ComboBox3Change(Sender: TObject);

begin

dbquery('select * from IT where vid=( select id from vid where vid='+#39+ComboBox2.Text+#39+

')and sostoyanie=(select id from sostoyanie where sost='+#39+ComboBox3.Text+#39')');

diaf.Ra:=dm.Query1.FieldByName('Ra*1000, м').AsFloat;

end;

procedure TForm1.ComboBox4Change(Sender: TObject);

begin

dbquery('select * from steels where steel='+#39+ComboBox4.Text+#39);

diaf.a0:=dm.Query1.FieldByName('a0').AsFloat;

diaf.a1:=dm.Query1.FieldByName('a1').AsFloat;

diaf.a2:=dm.Query1.FieldByName('a2').AsFloat;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

dm:= Tdm.create(nil);

diaf:= Tdiaf.Create;

with dm do

begin

zapolnit_from_db(tbl1,ComboBox1,'Name');

zapolnit_from_db(tbl2,ComboBox4,'Steel');

zapolnit_from_db(tbl4,ComboBox2,'Vid');

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

with diaf do

begin

try

qmin:=StrToFloat(LabeledEdit1.Text);

qmax:=StrToFloat(LabeledEdit2.Text);

pper:=StrToFloat(LabeledEdit3.Text);

p:=StrToFloat(LabeledEdit4.Text);

t:=StrToFloat(LabeledEdit5.Text);

D:=StrTofloat(LabeledEdit6.Text);

k:=StrToFloat(LabeledEdit7.Text)

except

ShowMessage('проверьте правильность ввода данных');

end;

calcd;

Memo1.Lines.Clear;

Memo1.Lines.Add(FloatToStr(dcy));

end;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

form2.openeditor('2');

Form2.Caption:='Материалы';

end;

procedure TForm1.N12Click(Sender: TObject);

begin

form2.openeditor('1');

Form2.Caption:='Среды';

end;

procedure TForm1.N13Click(Sender: TObject);

begin

form2.openeditor('3');

Form2.Caption:='Вид труб и состояние ИТ';

end;

procedure dbquery(s: string);

begin

with dm do begin

with Query1 do

begin

Close;

SQL.Text:=s;

ExecSQL;

open;

first;

end;

end;

end;

end.

calc

unit calc;

interface

uses Math, dialogs;

type

Tdiaf = class

b,qmin,qmax,p,pper,r,m,t,k,Ra,d20,dcy,a0,a1,a2,D,qnom,pnom: real;

gaz:boolean;

el,E,F,J:real;

{b-относительный диаметр отверстия СУ

, qmin,qmax-массовый расход мин и макс, Remax,Remin-число Рейнольдса, Ra-среднеарифм. отклонение профиля шероховатости,

p-давление реды, per-перепад давления на СУ, r-плотность среды, m-вязкость среды,

k-показатель адиабаты, t-температура среды, D-диаметр тркбопровода

a0,a1,a2-постоянные коэффициенты

d20-диаметр при 20 градусах, dcy-диаметр су при рабочей температуре

el-длина цилиндрической части,E-толщина,F-угол входа,J-глубина скоса}

constructor create;

function calcRemaxmin(qmaxmin:real ):real;//расчет максимального/минимального числа рейнольдса

function calcRe(b:real):real;//расчет нижней и верхней границы числа рейнольдса

function calcA:real;//расчет вспомoгательной величины А

function calcC:real;//расчет коэффициента истечения С

function calcE:real;//расчет коэффициента скорости входа Е

function calcEps:real;//расчет коэффициента расширения Ерs

function calcK:real;//поправочный коэффициент, учитывающий шероховатость внутренней поверхности ИТ

function calcB(b:real):real;//расчет вспомoгательной величины B

function calcAlfa(t:real):real;//температурный коэффициент линейного расширения материала

function calcBeta(c,pper,epsilo:real):real; // расчет значения относительного диаметра

function calcEpsilo(beta,psr:real):real; //расчет поправочного множителя

function calcRevn(beta,betan,betav,renbl,revbl:real):real;// расчет границ числа рейнольдса для кон диаф

procedure calcd;//расчет внутреннего диаметра диафрагмы

procedure calccondiaf;//расчет с кон входом иафрагмы

end;

implementation

constructor Tdiaf.create;

var i:byte;

const mas:array [0..9] of real=

(1,1.25,1.6,2.0,2.5,3.2,4.0,5.0,6.3,8.0);

begin

while qmax<=mas[i] do

begin

qnom:=mas[i]*10;

inc(i);

end;

while pper<=mas[i] do

begin

pnom:=mas[i]*10;

inc(i);

end;

end;

//расчет с кон входом диафрагмы

function Tdiaf.calcRevn(beta,betan,betav,renbl,revbl:real):real;

begin

calcRevn:=(revbl-renbl)*beta/(betav-betan)+(betav*renbl-betan*revbl)/(betav-betan);

end;

function Tdiaf.calcBeta(c,pper,epsilo:real):real;

var betaalfa:real;

begin

BetaAlfa:=c/epsilo*sqrt(pper);

if (betaalfa>=0.00734) and (betaalfa<=0.07) then

calcBeta:=1.3658*betaalfa-0.5679*sqr(betaalfa);

if (betaalfa>=0.07) and (betaalfa<=0.2081) then

calcBeta:=1.3658*betaalfa-0.2912*sqr(betaalfa)-2.2345*power(betaalfa,3);

end;

function Tdiaf.calcEpsilo(beta,psr:real):real;

begin

calcEpsilo:=0.25+0.75*power( ( power(1-psr,2/k)*k/(k-1)* (1-(power(1-psr,(k-1)/k))

/psr*(1-sqr(beta))/(1-sqr(beta)*power(1-psr,2/k)) ) ) ,0.5)

end;

procedure Tdiaf.calccondiaf;

var c,psr,remax,remin,rev,ren,betaalfa,beta,beta1,beta2,beta3,epsilo1,epsilo2,epsilo3:real;

cl,ka,kb,kg,fo:real;

i:byte;

sovpalo,nesovpalo:boolean;

const mas:array [0..4,0..2] of real=

(

(0.01,40,20000),

(0.04,40,40000),

(0.09,60,50000),

(0.16,120,50000),

(0.25,260,50000)

);

mas1:array[0..25,0..2] of real=

(

(0.1,45,12),(0.12,45,11.8),(0.14,45,11.7),(0.16,45,11.6),(0.18,45,11.5),

(0.2,45,11.4),(0.22,44.8,11.2),(0.24,44.5,11.1),(0.26,44.1,10.9),

(0.28,43.6,10.8),(0.3,43,10.7),(0.32,42.2,10.3),(0.34,41.6,10.4),

(0.36,40.8,10.3),(0.38,40,10.2),(0.4,39.1,10),(0.41,38.6,10),(0.42,38.1,9.9),

(0.43,37.5,9.8),(0.44,36.9,9.8),(0.45,36.1,9.7),(0.46,35.4,9.6),

(0.47,34.4,9.6),(0.48,33.3,9.4),(0.49,32.2,9.3),(0.5,31.2,9.2)

);

begin

c:=4*qnom/sqr(D)*sqrt(2*r)*pi;

betaalfa:=c/sqrt(pnom);

if (betaalfa>=0.00734) and (betaalfa<=0.07) then

Beta:=1.3658*betaalfa-0.5679*sqr(betaalfa);

if (betaalfa>=0.07) and (betaalfa<=0.2081) then

Beta:=1.3658*betaalfa-0.2912*sqr(betaalfa)-2.2345*power(betaalfa,3);

beta:=trunc(beta*100)/100;

//вычисление верхней и нижней границы

sovpalo:=false;

nesovpalo:=false;

repeat

inc(i);

if beta=mas[i,0] then sovpalo:=true

else nesovpalo:=true;

until sovpalo;

if sovpalo then

begin

rev:=mas[i,1];

ren:=mas[i,2];

end;

if nesovpalo then

begin

rev:= calcRevn(beta,mas[i,0],mas[i+1,0],mas[i,2],mas[i+1,2]);

ren:=calcRevn(beta,mas[i,0],mas[i+1,0],mas[i,1],mas[i+1,1]);

end;

// Remax:=calcRemaxmin(qmax);

Remin:=calcRemaxmin(qmin);

if not ((remax<=rev) and (remin>=ren)) then

begin

ShowMessage('Расчет при заданных исходных данных невозможен');

exit;

end

else

if gaz then

begin

if not(pnom/p<0.5) then

begin

ShowMessage('Расчет при заданных исходных данных невозможен');

exit;

end

else

psr:=pnom*sqr((qmax+qmin)/2)/p/sqr(qnom);

epsilo1:=calcEpsilo(beta,psr);

beta1:=calcBeta(c,pnom,epsilo1);

epsilo2:=calcEpsilo(beta1,psr);

beta2:=calcBeta(c,pnom,epsilo2);

if epsilo2-epsilo1<=0.001 then

b:=beta2

else

epsilo3:=calcEpsilo(beta2,psr);

beta3:=calcBeta(c,pnom,epsilo3);

b:=trunc(beta3*100)/100;

end

else

if r<=1000 then fo:=2.068*exp(-r/500)-0.259

else fo:=0.02;

ka:=2*(1-fo*k/(k-1))*fo-(1-sqr(beta))*sqr(pper/p-fo);

kb:=4*fo*(fo*k/(k-1)-1)+2*(1-sqr(beta)*(1-fo)*(pper/p-Fo));

kg:=2*fo*(1-fo*k/(k-1))-(1-sqr(beta))*sqr(1-fo);

cl:=2*ka/(sqrt(sqr(kb)-4*ka*kg)-kb);

if not(pper/p<=1-cl) then

begin

ShowMessage('kjdsnfksdjn');

exit;

end

else b:=beta;

d20:=D*sqrt(b)/calcAlfa(20);

dcy:=round(d20*calcAlfa(t));

el:=0.021*dcy;

i:=0;

while b=mas1[i,0] do

begin

J:=dcy/mas[i,2];

F:=mas[i,1];

inc(i);

end;

E:=el+J;

end;

//расчет стандартной диафрагмы

function Tdiaf.calcAlfa(t:real):real;

begin

calcAlfa:=0.000001*(a0+a1*((t+273)/1000)+a2*sqr(((t+273)/1000)))

end;

function Tdiaf.calcRemaxmin(qmaxmin:real):real;

begin

calcRemaxmin:=4*qmaxmin/pi*D*m;

end;

function Tdiaf.calcRe(b:real):real;

begin

calcRe:=170000*sqr(b)*D;

end;

function Tdiaf.calcA:real;

begin

calcA:=calcRemaxmin(qmax)*m/D*sqrt(2*p*pper);

end;

function Tdiaf.calcC:real;

var m1,m2,a,l:real;

begin

a:=power(19000*b/calcRemaxmin(qmax),0.8);

l:=0.0254/D;

m1:=2*l/(1-b);

if D<0.07112 then m2:=0.011*(0.75-b)*(2.8-D/0.0254)

else m2:=0;

calcC:=0.5961+0.026*sqr(b)-0.216*sqr(b)+0.000521*power(1000000*b/calcRemaxmin(qmax),0.7)+(0.0188+0.0036*a)*power(b,3.5)*power(1000000/calcRemaxmin(qmax),0.3)+

(0.043+0.08*exp(-10*l)-0.123*exp(-7*l))*(1-0.11*a)*power(b,4)/(1-power(b,4))-0.031*(m1-0.8*power(m1,1.1))*power(b,1.3)+m2;

end;

function Tdiaf.calcE:real;

begin

calcE:=1/sqrt(1-power(b,4));

end;

function Tdiaf.calceps:real;

begin

calceps:=1-(0.351+0.256*power(b,4)+0.93*power(b,8))*(1-power(1-pper/p,1/k));

end;

function Tdiaf.calcK:real;

const mat:array [0..11,0..2] of real =

(

(8.87,6.7307,-10.244),

(-3.7114,-5.5844,5.7094),

(0.41841,0/732485,0.76477),

(0,0,0),

(27.23,-25.928,1.7622),

(-11.458,12.426,-3.8765),

(1.6117,-2.09397,1.05567),

(-0.07567,0.106143,-0.076764),

(16.5416,322.594,-92.029),

(-6.60709,-132.2,37.935),

(0.88147,17.795,-5.185),

(-0.039226,-0.799765,0.23583)

);

var a01,a11,a21,Ramax,Ramin,l1,l2:real;i:byte;

begin

a01:=0;

a11:=0;

a21:=0;

for I:=0 to 11 do

begin

if (calcRemaxmin(qmax)>10000) and (calcRemaxmin(qmax)<=100000) then

begin

a01:=a01+mat[i,0]*power(log10(calcRemaxmin(qmax)),i);

a11:=a11+mat[i,1]*power(log10(calcRemaxmin(qmax)),i);

a21:=a21+mat[i,2]*power(log10(calcRemaxmin(qmax)),i);

if i=3 then break;

end;

if (calcRemaxmin(qmax)>100000) and (calcRemaxmin(qmax)<=3000000) then

begin

a01:=a01+mat[i+4,0]*power(log10(calcRemaxmin(qmax)),i);

a11:=a11+mat[i+4,1]*power(log10(calcRemaxmin(qmax)),i);

a21:=a21+mat[i+4,2]*power(log10(calcRemaxmin(qmax)),i);

if i+4=7 then break;

end;

if (calcRemaxmin(qmax)>3000000) and (calcRemaxmin(qmax)<=100000000) then

begin

a01:=a01+mat[i+8,0]*power(log10(calcRemaxmin(qmax)),i);

a11:=a11+mat[i+8,1]*power(log10(calcRemaxmin(qmax,)),i);

a21:=a21+mat[i+8,2]*power(log10(calcRemaxmin(qmax)),i);

if i+8=11 then break;

end;

end;

if calcRemaxmin(qmax)<=10000 then Ramax:=(0.718866*power(b,-3.887)+0.364)/10000*D;

if (calcRemaxmin(qmax)>10000) and (b<0.65) then Ramax:=(a01*power(b,a11)+a21)/10000*D;

if (calcRemaxmin(qmax)>10000) and (b>=0.65) then Ramax:=(a01*power(0.65,a11)+a21)/10000*D;

if b<0.65 then Ramin:=(7.1592-12.387*b-(2.0118-3.469*b)*log10(calcRemaxmin(qmax))+(0.1382-0.23762*b)*power(log10(calcRemaxmin(qmax)),2))/10000*D;

if b>=0.65 then Ramin:=(-0.892353+0.24308*log10(calcRemaxmin(qmax))-0.0162562*power(log10(calcRemaxmin(qmax)),2))/10000*D;

if (Ra<=Ramax) and (Ra>=Ramin) then calcK:=1

else

begin

l1:=power(1.74-2*log10(2*pi*Ra/D-37.36*log10(0.26954*pi*Ra/D-5.035/calcRemaxmin(qmax)*log10(0.26954*pi*Ra/D+3.3333*5.035/calcRemaxmin(qmax)))),-2);

if Ra>Ramax then

l2:=power(1.74-2*log10(2*pi*Ramax/D-37.36*log10(0.26954*pi*Ramax/D-5.035/calcRemaxmin(qmax)*log10(0.26954*pi*Ramax/D+3.3333*5.035/calcRemaxmin(qmax)))),-2);

if Ra<Ramin then

l2:=power(1.74-2*log10(2*pi*Ramin/D-37.36*log10(0.26954*pi*Ramin/D-5.035/calcRemaxmin(qmax)*log10(0.26954*pi*Ra/D+3.3333*5.035/calcRemaxmin(qmax)))),-2);

calcK:=1+5.22*power(b,3.5)*(l1-l2);

end;

end;

function Tdiaf.calcB(b:real):real;

begin

if gaz then

calcB:=calcE*calcC*calcK*sqr(b)*calcEps

else

calcB:=calcE*calcC*calcK*sqr(b);

end;

procedure Tdiaf.calcd;

var Remax,Remin,Rev,Ren,B,B1,B2,sigma,sigma1,sigma2,bv,bn:real; g:byte;

begin

bv:=0.75;

bn:=0.1;

g:=0;

Remax:=calcRemaxmin(qmax);

Remin:=calcRemaxmin(qmin);

Ren:=calcRe(0.1);

Rev:=calcRe(0.75);

if not ((Rev>=Remax) and (Ren<=Remin)) then

showmessage('Расчет при заданных исходных данных невозможен')

else

begin

B1:=calcB(0.75);

B2:=calcB(0.1);

sigma1:=(B1-calcA)-calcA;

sigma2:=(B2-calcA)-calcA;

end;

if ((sigma1>0) and (sigma2>0)) or ((sigma1<0) and (sigma2<0)) then

showmessage('Расчет при заданных исходных данных невозможен')

else

begin

repeat

begin

b:=(bv+bn)/2;

B:=calcB(b);

sigma:=(B-calcA)/calcA;

if sigma<0.00005 then break

else

begin

g:=g+1;

if B<calcA then bn:=b else bv:=b;

end;

end;

until g>255;

end;

if not ((5000<=Remin) and (calcRe(b)>=Remax)) then

showmessage('Расчет при заданных исходных данных невозможен')

else begin

d20:=b*D/(1+calcAlfa(20)*(t-20));

dcy:=d20*(1+calcAlfa(t)*(t-20));

end;

end;

end.

db

unit unit_db;

interface

uses

SysUtils, Classes, DB, DBTables, forms, StdCtrls;

type

Tdm = class(TDataModule)

ds1: TDataSource;

tbl1: TTable;

db_gen: TDatabase;

ses: TSession;

ds2: TDataSource;

tbl2: TTable;

ds3: TDataSource;

tbl3: TTable;

tbl4: TTable;

tbl5: TTable;

ds4: TDataSource;

ds5: TDataSource;

vidmat: TQuery;

it: TQuery;

sostit: TQuery;

itId: TAutoIncField;

itR1000: TFloatField;

itRa1000: TFloatField;

vidmatId: TAutoIncField;

vidmatVid: TStringField;

sostitId: TAutoIncField;

sostitSost: TStringField;

itvvid: TStringField;

itvsost: TStringField;

Query1: TQuery;

itVid: TIntegerField;

itSostoyanie: TIntegerField;

Query2: TQuery;

procedure DataModuleCreate(Sender: TObject);

procedure DataModuleDestroy(Sender: TObject);

procedure activatedb;

procedure deactivatedb;

procedure create_tables;

procedure zapolnit_from_db(tbl:Ttable; ComboBox: TComboBox;stolbec:string);

procedure redactor_db(tbl:Ttable);

private

{ Private declarations }

public

{ Public declarations }

end;

const

DBAlias = 'nata';

implementation

uses DateUtils;

{$R *.dfm}

procedure Tdm.DataModuleCreate(Sender: TObject);

var dir: shortstring;

begin

WITH ses DO

BEGIN

dir:=ExtractFilePath(Application.ExeName)+'db';

NetFiledir:= dir;

PrivateDir:= dir;

Active := True;

IF (IsAlias(DBAlias)) THEN deletealias(dbalias);

ConfigMode := [cfmPersistent];

AddStandardAlias(DBAlias,dir,'PARADOX');

SaveConfigFile;

END;

create_tables;

activatedb;

with vidmat do begin Prepare; Open; end;

with sostit do begin Prepare; Open; end;

with it do begin Prepare; Open; end;

end;

procedure tdm.activatedb;

begin

ses.Active:=true;

db_gen.AliasName:= DBAlias;

db_gen.Connected := True;

tbl1.Active:=true;

tbl2.Active:=true;

tbl3.Active:=true;

tbl4.Active:=true;

tbl5.Active:=true;

end;

procedure tdm.deactivatedb;

begin

ses.Active:=false;

db_gen.Connected := false;

tbl1.Active:=false;

tbl2.Active:=false;

tbl3.Active:=false;

tbl4.Active:=false;

tbl5.Active:=false;

end;

procedure Tdm.DataModuleDestroy(Sender: TObject);

begin

deactivatedb;

WITH db_gen DO

IF Connected THEN

BEGIN

CloseDataSets;

Connected:=FALSE

END;

WITH ses DO

IF Active THEN

Close

end;

procedure tdm.create_tables;

begin

if not tbl1.Exists then

tbl1.CreateTable;

end;

procedure Tdm.zapolnit_from_db(tbl:Ttable; ComboBox: TComboBox;stolbec:string);

begin

tbl.FindFirst;

ComboBox.Clear;

repeat

ComboBox.Items.Add(tbl.FieldByName(stolbec).AsString);

tbl.Next;

until tbl.Eof;

end;

end.

Redactor_db

unit redactor_db;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, unit_db;

type

TForm2 = class(TForm)

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

procedure openeditor(table: string);

procedure DBNavigator1Enter(Sender: TObject;table: string);

private

{ Private declarations }

public

{ Public declarations }

end;

arr= array of string;

p_arr= ^arr;

var

Form2: TForm2;

CONST

mas1:array [0..2] of string=('Вещество','Плотность','Вязкость');

mas2:array [0..3] of string=('Сталь','a0','a1','a2');

mas3:array [0..3] of string=('Вид труб и материал','Состояние поверхности стенки ИТ и условия эксплуатации',

'Эквивалентная шероховатость Rш*1000, м',

'Среднеарифметическое отклонение профиля шероховатости Ra*1000, м');

implementation

uses main;

{$R *.dfm}

procedure copyarray(_from: array of string; var _to: arr);

var i:byte;

begin

setlength(_to, length(_from));

for I := 0 to length(_from) - 1 do

_to[i]:=_from[i];

end;

procedure tform2.openeditor(table: string);

var i: byte;

title: arr;

begin

if table='1' then

begin

dbgrid1.DataSource:=dm.ds1;

dbNAVIGATOR1.DataSource:=dm.ds1;

copyarray(mas1,title);

end

else

begin

if table='2' then begin

dbgrid1.DataSource:=dm.ds2;

dbNAVIGATOR1.DataSource:=dm.ds2;

copyarray(mas2,title);

end

else

begin

dbgrid1.DataSource:=dm.ds3;

dbNAVIGATOR1.DataSource:=dm.ds3;

copyarray(mas3,title);

end;

end;

for I := 0 to length(title) - 1 do

DBGrid1.Columns[i+1].Title.Caption:=title[i];

DBGrid1.Columns[0].Visible:=false;

show;

end;

procedure TForm2.DBNavigator1Enter(Sender: TObject;table: string);

begin

if table='1' then dbNAVIGATOR1.DataSource:=dm.ds1;

if table='2' then dbNAVIGATOR1.DataSource:=dm.ds2;

if table='3' then dbNAVIGATOR1.DataSource:=dm.ds3;

end;

end.

unfuncs

unit ufuncs;

interface

uses Windows, SysUtils, LDefin2D, ksConstTLB, ksAuto, ksTLB, Forms, dialogs;

type

ss = shortstring;

t_list = record

direction: boolean;

format: byte;

tab: boolean;

developer: ss;

org: ss;

material: ss;

code: ss;

name: ss;

use: boolean;

end;

t_diafragma = record

num: integer;

d: extended;

dm: extended;

f: extended;

j: extended;

e: extended;

em: extended;

kon: boolean;

end;

procedure WorkDocument(params: t_list; diaf: t_diafragma);

procedure WorkStamp(params: t_list; diaf: t_diafragma);

procedure insert2stamp(stamp: ksStamp; itemparam:ksTextItemParam; text: ss; num: byte);

procedure make_diafragma(diaf: t_diafragma);

procedure make_wheel(diaf: t_diafragma);

procedure make_int(diaf: t_diafragma);

procedure DrawLinDim(_x1,_y1,_x2,_y2,_xd,_yd: extended; zd: boolean = false);

procedure DrawRadDimt(_x,_y,_r: extended; _ang: word);

implementation

uses main;

procedure WorkDocument(params: t_list; diaf: t_diafragma);

var

buf : string;

docPar : ksDocumentParam;

docPar1 : ksDocumentParam;

shPar : ksSheetPar;

stPar : ksStandartSheet;

par : ksViewParam;

number : Integer;

shPar1 : ksSheetPar;

stPar1 : ksStandartSheet;

direct : SmallInt;

begin

doc := ksDocument2D( kompas.Document2D );

docPar := ksDocumentParam( kompas.GetParamStruct(ko_DocumentParam) );

docPar1 := ksDocumentParam( kompas.GetParamStruct(ko_DocumentParam) );

if ( (docPar <> nil) And (docPar1 <> nil) ) then begin

// docPar.fileName := 'c:\2.cdw';

docPar.comment := 'create document';

docPar.author := 'user';

docPar.regime := 0;

docPar.type_ := lt_DocSheetStandart;

shPar := ksSheetPar( docPar.GetLayoutParam() );

if ( shPar <> nil ) then begin

shPar.shtType := 1;

shPar.layoutName := '';

stPar := ksStandartSheet( shPar.GetSheetParam() );

if ( stPar <> nil ) then begin

stPar.format := params.format;

stPar.multiply := 1;

stPar.direct := params.direction;

end;

end;

// и с системным штампом 1

doc.ksCreateDocument( docPar );

par := ksViewParam( kompas.GetParamStruct(ko_ViewParam) );

if ( par <> nil ) then begin

number := 2;

with par do

begin

Init;

x := 0;

y := 0;

scale_ := 0.5;

Angle := 0;

Color := RGB( 10, 20, 10 );

state := stACTIVE;

name := 'user view';

end;

// вид с номером 2, масштабом 1, под углом 0

// координаты вида 0,0

doc.ksCreateSheetView( par, number );

// создадим слой с номером 5

doc.ksLayer( 5 );

make_diafragma(diaf);

WorkStamp(params,diaf);

end;

end;

end;

procedure WorkStamp(params: t_list; diaf: t_diafragma);

var

stamp : ksStamp;

itemParam : ksTextItemParam;

begin

stamp := ksStamp( doc.GetStamp );

if ( stamp <> nil ) then begin

if ( stamp.ksOpenStamp <> 0 ) then

begin

insert2stamp(stamp,itemparam,params.developer,110);

insert2stamp(stamp,itemparam,params.material,3);

insert2stamp(stamp,itemparam,params.org,9);

insert2stamp(stamp,itemparam,params.name,1);

insert2stamp(stamp,itemparam,params.code,2);

insert2stamp(stamp,itemparam,datetostr(now),130);

// insert2stamp(stamp,itemparam,floattostrf(diaf.m,fffixed,5,2),5);

stamp.ksCloseStamp;

end;

end;

end;

procedure insert2stamp(stamp: ksStamp; itemparam:ksTextItemParam; text: ss; num: byte);

var itemFont : ksTextItemFont;

begin

stamp.ksColumnNumber( num );

itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );

if ( itemParam <> nil ) then

begin

itemParam.Init;

itemFont := ksTextItemFont( itemParam.GetItemFont );

if ( itemFont <> nil ) then

begin

itemFont.SetBitVectorValue( NEW_LINE, true );

itemParam.s := text;

doc.ksTextLine( itemParam );

end;

end;

end;

procedure make_diafragma(diaf: t_diafragma);

var dt: extended;

c1,c2,c3,c4,c5,c6, g : reference;

const dd = 20;

ddd =15;

begin

with diaf do

begin

g := doc.ksNewGroup(0);

// рисуем кольцо

doc.ksContour(1);

make_wheel(diaf);

c1 := doc.ksEndObj;

doc.ksAddObjGroup(g, c1);

// нарисовали, теперь зальем штриховкой

doc.ksHatch( 0, 45, 2, 0, 0, 0 );

make_wheel(diaf);

c1:=doc.ksEndObj;

doc.ksAddObjGroup(g, c1);

// внешнее кольцо готово

// линии кольца

c3:=doc.ksLineSeg(0,dt, 0,0, 1);

doc.ksAddObjGroup(g, c3);

// осевые

c4:=doc.ksLineSeg(-5,0, e+5,0, 3);

doc.ksAddObjGroup(g, c4);

c4:=doc.ksLineSeg(-5,dt, j+5,dt, 3);

doc.ksAddObjGroup(g, c4);

//размеры

dt:=(b/2-l)/2;

DrawLinDim(b-r,di/2,b-r,-di/2,dd,0,true);

DrawLinDim(b-dt,d1/2,b-dt,d1/2-dw,dt+dd-r,0,true);

DrawLinDim(b,d1/2,b,-d1/2,dd+ddd,0,true);

DrawLinDim(b-r,de/2,b-r,-de/2,dd+ddd*2,0, true);

DrawLinDim(dt,d1/2-dw,dt+l,d1/2-dw,0,-dd);

DrawLinDim(0,de/2-r,b,de/2-r,0,dd);

DrawRadDimt(r,de/2-r,r,160);

DrawRadDimt(r,di/2+r,r,210);

doc.ksEndGroup;

doc.ksMoveObj( g, 170, 350 );

end;

end;

procedure make_wheel(diaf: t_diafragma);

begin

with diaf do

begin

d:=d/2;

dm:=dm/2;

doc.ksLineSeg( 0, d+j/cos(f), 0, dm, 1 );

doc.ksLineSeg( 0, dm, em, dm, 1 );

if diaf.kon then

doc.ksLineSeg( em, dm, em, d*2, 1 )

else

doc.ksLineSeg( em, dm, em, 0, 1 );

if diaf.kon then

begin

doc.ksLineSeg( em, d*2, j+e, d*2, 1 );

doc.ksLineSeg( j+e, d*2, j+e, d, 1 );

doc.ksLineSeg( j+e, d, j, d, 1 );

end

else

begin

end;

doc.ksLineSeg( j, d, 0, d+j/cos(f), 1 );

end;

end;

procedure make_int(diaf: t_diafragma);

begin

with diaf do

begin

end;

end;

procedure DrawLinDim(_x1,_y1,_x2,_y2,_xd,_yd: extended; zd: boolean = false);

var

param : ksLDimParam;

dPar : ksDimDrawingParam;

sPar : ksLDimSourceParam;

tPar : ksDimTextParam;

str : ksChar255;

arrText : ksDynamicArray;

obj : Reference;

begin

param := ksLDimParam( kompas.GetParamStruct(ko_LDimParam) );

if param = nil then

Exit;

dPar := ksDimDrawingParam( param.GetDPar );

sPar := ksLDimSourceParam( param.GetSPar );

tPar := ksDimTextParam ( param.GetTPar );

if ( (dPar = nil) Or (sPar = nil) Or (tPar = nil) ) then

Exit;

dPar.Init;

dPar.textBase := 0;

dPar.pt1 := 1;

dPar.pt2 := 1;

dPar.ang := -30;

dPar.lenght := 20;

sPar.Init;

sPar.x1 := _x1;

sPar.y1 := _y1;

sPar.x2 := _x2;

sPar.y2 := _y2;

sPar.dx := _xd;

sPar.dy := _yd;

sPar.basePoint := 1;

tPar.Init( False );

tPar.SetBitFlagValue( _AUTONOMINAL, true );

if zd then

tPar.sign := 1

else tpar.sign:=0;

str := ksChar255( kompas.GetParamStruct(ko_Char255) );

arrText := ksDynamicArray( tPar.GetTextArr );

if ( (str = nil) Or (arrText = nil) ) then

Exit;

obj := doc.ksLinDimension( param );

end;

procedure DrawRadDimt(_x,_y,_r: extended; _ang: word);

var

cir, obj : Reference;

aDim : ksRDimParam;

textLine : ksTextLineParam;

textItem : ksTextItemParam;

tPar : ksDimTextParam;

arr, arr1 : ksDynamicArray;

sPar : ksRDimSourceParam;

dPar : ksRDimDrawingParam;

begin

aDim := ksRDimParam ( kompas.GetParamStruct(ko_RDimParam) );

textLine := ksTextLineParam( kompas.GetParamStruct( ko_TextLineParam ) );

textItem := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );

if ( (aDim = nil) Or (textLine = nil) Or (textItem = nil) ) then

Exit;

textLine.Init;

textItem.Init;

tPar := ksDimTextParam( aDim.GetTPar );

arr := ksDynamicArray( textLine.GetTextItemArr );

sPar := ksRDimSourceParam( aDim.GetSPar );

dPar := ksRDimDrawingParam( aDim.GetDPar );

if ( (tPar = nil) {Or (font = nil)} Or (sPar = nil) Or (dPar = nil) ) then

Exit;

tPar.Init( true );

tPar.SetBitFlagValue( _AUTONOMINAL, true );

tPar.sign := 3;

arr.ksAddArrayItem( -1, textItem );

arr1 := ksDynamicArray( tPar.GetTextArr );

if ( arr1 = nil ) then

Exit;

arr1.ksAddArrayItem( -1, textLine );

sPar.Init;

sPar.xc := _x;

sPar.yc := _y;

sPar.rad := _r;

dPar.Init;

dpar.textPos:=1;

dpar.ang:=_ang;

dpar.pt1:=1;

obj:=doc.ksRadDimension( aDim );

end;

end.

Размещено на Allbest.ru


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

  • Обзор принципов построения и эффективного применения систем управления базами данных, CASE-средств автоматизации проектирования. Анализ возможностей методологии и инструментальных средств. Разработка модели бизнес-процессов гостиницы в среде All Fusion.

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

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

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

  • Принципы проектирования базы данных. Разработка автоматизированной информационной системы для учета материалов хранящихся на складах, их движения по складам, контроля прихода, расхода и остатков материалов, а так же для выявления потребности в их закупке.

    отчет по практике [4,9 M], добавлен 03.02.2013

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

    презентация [1,0 M], добавлен 19.10.2014

  • Анализ проектирования баз данных на примере построения программы ведения информационной системы картотеки ГИБДД. Основные функции базы данных. Обоснование выбора технологий проектирования и реализации базы данных. Описание информационного обеспечения.

    курсовая работа [753,0 K], добавлен 27.08.2012

  • Особенности проектирования информационных систем основанных на базах данных. Использование CASE-средств и описание бизнес процессов в BP-Win. Этапы проектирования современных информационных систем, виды диаграмм и визуальное представление web-сайта.

    курсовая работа [1,9 M], добавлен 25.04.2012

  • Автоматизация проектирования аналоговых микросхем. Обзор существующих решений. Определение, способы реализации PCell. Специфика физического проектирования. Причины рассогласования элементов и способы их устранения. Создание топологических эскизов.

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

  • Анализ существующих решений по автоматизации предметной области. Методология проектирования информационной системы агентства недвижимости. Спецификация и аттестация требований. Проектирование пользовательского интерфейса. Обоснование выбора платформы.

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

  • Состав, содержание и документирование работ на стадиях создания систем автоматизированного проектирования. Стандарты создания технологического оборудования, тактико-техническое задание и технико-экономическое обоснование комплекса средств автоматизации.

    курсовая работа [26,9 K], добавлен 22.11.2009

  • Внедрение информационных систем взаимодействия с клиентами. Назначение автоматизированного варианта решения задачи. Анализ существующих разработок и обоснование выбора технологии проектирования. Расчет и обоснование экономической эффективности проекта.

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

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