Автоматизация проектирования диафрагм в устройствах измерения расхода жидкостей и газов
Разработка средств информационной поддержи процессов проектирования сужающего устройства для измерения расхода при заданном режиме и выбора оптимального варианта относительного диаметра отверстия диафрагмы для минимизации длины прямолинейных участков.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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