рефераты

Рефераты

рефераты   Главная
рефераты   Краткое содержание
      произведений
рефераты   Архитектура
рефераты   Астрономия
рефераты   Банковское дело
      и кредитование
рефераты   Безопасность
      жизнедеятельности
рефераты   Биографии
рефераты   Биология
рефераты   Биржевое дело
рефераты   Бухгалтерия и аудит
рефераты   Военное дело
рефераты   География
рефераты   Геодезия
рефераты   Геология
рефераты   Гражданская оборона
рефераты   Животные
рефераты   Здоровье
рефераты   Земельное право
рефераты   Иностранные языки
      лингвистика
рефераты   Искусство
рефераты   Историческая личность
рефераты   История
рефераты   История отечественного
      государства и права
рефераты   История политичиских
      учений
рефераты   История техники
рефераты   Компьютерные сети
рефераты   Компьютеры ЭВМ
рефераты   Криминалистика и
      криминология
рефераты   Культурология
рефераты   Литература
рефераты   Литература языковедение
рефераты   Маркетинг товароведение
      реклама
рефераты   Математика
рефераты   Материаловедение
рефераты   Медицина
рефераты   Медицина здоровье отдых
рефераты   Менеджмент (теория
      управления и организации)
рефераты   Металлургия
рефераты   Москвоведение
рефераты   Музыка
рефераты   Наука и техника
рефераты   Нотариат
рефераты   Общениеэтика семья брак
рефераты   Педагогика
рефераты   Право
рефераты   Программирование
      базы данных
рефераты   Программное обеспечение
рефераты   Промышленность
      сельское хозяйство
рефераты   Психология
рефераты   Радиоэлектроника
      компьютеры
      и перифирийные устройства
рефераты   Реклама
рефераты   Религия
рефераты   Сексология
рефераты   Социология
рефераты   Теория государства и права
рефераты   Технология
рефераты   Физика
рефераты   Физкультура и спорт
рефераты   Философия
рефераты   Финансовое право
рефераты   Химия - рефераты
рефераты   Хозяйственное право
рефераты   Ценный бумаги
рефераты   Экологическое право
рефераты   Экология
рефераты   Экономика
рефераты   Экономика
      предпринимательство
рефераты   Юридическая психология

 
 
 

Выбор материала и расчет параметров обделок вертикальных столов метрополитенов

Оглавление. 1. Аннотация (Annotation) стр. 2 2. Общий раздел 3           2.1. История развития метрополитена. Метрополитен                     сегодня. 4           2.2. Введение. 8          2.3. Горно-геологические условия строительства. 9          2.4. Выбор и расчет сечения вертикального ствола. 10          2.5. Расчет паспорта буро-взрывных работ. 12          2.6. Расчет параметров замораживания массива. 14           2.7. Технология ведения работ по замораживанию породного массива. 17          2.8. Производство горнопроходческих работ. 19 3. Основная часть. 21           3.1. Нагрузки от горного давления на обделки вертикальных стволов метрополитенов. 22           3.2. Проверка несущей способности тюбинговых обделок  вертикальных стволов метрополитенов. 29           3.3. Расчет параметров и построение паспорта прочности       несущей способности тюбинговых обделок вертикальных стволов метрополитенов. 32           3.4. Проверка устойчивости тюбинговых обделок вертикальных стволов метрополитенов. 35 4. Приложения. 36 4.1. Программа для проверки несущей способности и построения паспорта прочности тюбинговых обделок вертикальных стволов метрополитенов. 37 5. Список используемой литературы. 57
1. Annotation
In this work analysis procedure for bearing capacity of tubbing lining
for shaft is presented. The analysis is camed out for two layer lining ring.
The procedure is implemented into computer program for calculation the bearing
capacity of standart tubbing lining and allows to evaluate nonstandart tubbing
lining performance. The program is designed for Microsoft Windows version 3.1
or higher and OS/2.
2. Общий раздел
2.1.
ИСТОРИЯ РАЗВИТИЯ МОСКОВСКОГО МЕТРОПОЛИТЕНА. 
МЕТРОПОЛИТЕН СЕГОДНЯ.
Тоннели метрополитенов
относятся к категории капитальных 
сооружений, срок  службы которых
планируется не менее чем на столетие. Поэтому не случайно теоретик
метростроения П.И.Балинский, анализируя факторы,  влияющие на жизненность таких внеуличных транспортных систем,
зависимых ,  главным образом,  от численности и подвижности населения
крупнейших городов, обращается к периодам такого масштаба.
К началу прошлого столетия,
когда появились метрополитены, население самого  крупного города планеты - Лондона достигло миллиона человек (в
1800 г. - 950 тыс., а уже в 1801 г. - 1 млн.145 тыс.чел) и продолжало
возрастать.
Нашествие Наполеона
превратило пылающую столицу в 
почти  безлюдный город. Но всего
два года спустя город стал быстро оживать. В английской столице в 1814 году
Александру I представили члена 
Лондонского королевского общества, талантливого военного инженера Марка
Брюнеля.  Речь зашла о насущной
проблеме  устройства  постоянной шоссейной переправы через р.Неву
в Петербурге,  в результате чего с
Брюнелем был заключен контракт на ее проектирование. Начатую в 1814 г.
работу  он  передал русским заказчикам в начале 20-х гг.  в двух вариантах: мостовом и тоннельном.
Вариант подводного тоннеля возник вследствие опасения разрушения опор моста
плывущими льдинами. В основе проекта оказалось замечательное изобретение  - 
тоннелепроходческий щит, 
ставший  впоследствии  наиболее 
эффективным средством метростроения не только в России и Англии,  но и во всем мире. Идея возникла при
наблюдении за морским моллюском-древоточцем, 
пробуривавшим своей раковиной отверстия в обломках затонувшего
корабля.  В первых эскизах Брюнель
представил механическую копию такого цилиндрического червя для бурения тоннелей
со сборной  тюбинговой  обделкой, монтируемой  по спирали, 
- настоящего предшественника будущих механизированных щитов. Брюнеля не
отпустили в Россию.  Страну, с которой
он имел официальные деловые связи, и, лишившись поддержки скончавшегося в 1825
г. Александра I,  он остался в Лондоне.
Брюнель переработал чертежи применительно к местным условия р.Темзы, сходным с
Невой.
В 1863 г.  произошло главное событие в истории
метростроения - пуск первого в мире 3,6-километрового подземного участка
внеуличной железной дороги в Лондоне. В 1863 г. парламентская комиссия одобрила
сооружение подземной кольцевой линии общей протяженностью 30 км. Она откралась
в 1884 г.
Большое внимание привлекла
постройка первой  электрофицированной
линии в Париже, с которой могли ознакомиться многочисленные посетители
Всемирной выставки 1900 г.  Активное  участие 
в  создании этой и нескольких
последующих линий принимал русский инженер, энтузиаст отечественного
метростроения С.Н.Розанов.
Наступило время уверенной
прокладки подземных линий метрополитенов в Берлине,  Гамбурге, Филадельфии, Мадриде, Барселоне, Токио. Началась борьба
за метрополитен в Петербурге и Москве.
Перед первой мировой войной
транспортный кризис в Москве резко обостирлся, в результате чего появилось
несколько новых предложений метрополитена, инициированных Городской Управой.
Населенность Москвы к 1915 г.  достигла
двухмиллионой отметки и, казалось, что проблема приобретает облик
реальности,  но помешали военные и
революционные события, преобразовавшие страну.
Для быстрейшего
восстановления  городского  коммунального  хозяйства в Москве было создано управление МКХ.  Работу в нем возглавили опытные инженеры
К.С.Мышенков  и  С.Н.Розанов,  перешедшими  в 1931 г. в
организованный "Метрострой". Проходка в этом же году началась с
опытного участка по рабочим чертежам Технического отдела Управления Метростроя,  а затем - Метропроекта, выпущенным под
руководством проф.В.Л.Николаи. 
Постройка первого в  мире
Лондонского и первого в нашей стране осуществлялась по чертежам,  разработанным еще до создания
строительных  организаций: в Лондоне -
Брюнеля, а в Москве - опытного тоннеля С.Н.Розанова.
Сооружение линии  1 очереди велось с неподдельным энтузиазмом,
а пуск первого в России метрополитена ознаменовался,  как подлинный праздник.
Сегодня невозможно себе
представить нашу  столицу  без 
самого быстрого и эффективного городского транспорта -
метрополитена.  Общая длина подземных
магистралей превысила 250 км и продолжает 
расти. Ежедневные  перевозки  достигли 
8,7 млн.  пассажиров.  Все это обеспечивается неустанным трудом
30-тысячного коллектива метрополитена.
Московский метрополитен -
первенец отечественного  метростроения
-  с момента своего открытия в 1935 году
занимает ведущее положение в отрасли, 
являясь флагманом научно-технического прогресса в системе метрополитенов
страны.
В жизни крупнейших городов
мира,  в том числе и Москвы,
метрополитен является  наиболее  удобным 
для населения видом городского пассажирского транспорта.  15 мая 1995 г. исполнилось 60 лет со дня
открытия движения поездов на первой линии Московского метрополитена
протяженностью 11,2 км с 13 станциями.
С тех  пор метрополитен постоянно развивался,  совершенствовалось его сложное хозяйство.
Сегодня эксплуатационная  длина  9 
линий достигла 243,6 км со 150 станциями.
С увеличением протяженности
трассы постоянно возрастал и объем перевозок пассажиров: в 1935 г.
среднесуточные показатели составляли 177 тыс., а в 1994 г. 8723 тыс.человек. В
настоящее время на долю метрополитена приходится 51,7 % объема всех
пассажирских перевозок города.  Максимальная
интенсивность движения - 42 пары 8-вагонных составов в час, интервал между
поездами 85 секунд (Замоскворецкая линия). Такой интенсивности движения нет ни
на одном метрополитене мира. Кроме того, 
заполняемость вагонов значительно превышает допустимые нормы,  что отрицательно сказывается на надежности  устройств вагонов, пути и,  в конечном счете,  на выполнении графика движения поездов.
По оценкам специалистов,
метрополитену для полного обеспечения потребности столицы в перевозках
пассажиров неддостает около 100 км линий, В настоящее время плотность сети
метрополитена на 1 км2 площади города составляет 0,26 км, в то время
как в Нью-Йорке этот показатель равен 0,5, в Лондоне - 1,2, в Париже - 2,8 км.
За 60 лет: перевезено более
86 миллиардов пассажиров; пропущено около 
111  миллионов  поездов, 
из  которых 99,93 % проследовало
строго по графику; сэкономлено электроэнергии 515 миллионов кВтч.
Среди метрополитенов
Российской Федерации среднесуточная перевозка пассажиров  Московского 
метрополитена составляет около 80 %, что почти в 5,4 раза выше
среднесуточной перевозки С.-Петербургского и в 29 раз - Новосибирского
метрополитенов.
МЕТРОПОЛИТЕН В
ЦИФРАХ Показатели 15 мая 1935 г. 15 мая 1995 г. Протяженность линий,км 11,2 243,6 Их количество 1 9 Количество станций           в том числе:                                   - пересадочных      - оборудованных эскалаторами 13 - 4 150 49 107 Количество вестибюлей 16 232 То же, эскалаторных машин 15 508 Протяженность лестничного полотна эскалаторов, км 1.5 55.2 Развернутая длина тоннелей, км 13.01 521.6 То же, пути, км 30.08 703.7 Среднесуточная перевозка пассажиров, тыс. чел. 177 8723 Годовой объем перевозки, млн. чел. 110.7 3183.9 Удельный вес в общегородских перевозках, % 2 51.7 Количество вагонов 58 4060 Максимальное число вагонов в составе 4 8 Максимальная частота движения поездов, пар/час 15 42 Минимальный интервал между поездами 5 мин. 85 сек Пропуск поездов в среднем за сутки (проезд) 487 7870 Конструктивная скорость движения, км/ч 50 90 Средняя эксплуатационная, км/ч 26.7 41 Удельный расход электроэнергии, кВтч/тыс.тн.-км 67.2 55.5 Численность работников по эксплуатации, чел 1991 24615 То же на 1 км пути, чел 181 104.3
2.2. Введение.
Вертикальный ствол является
вскрывающей горной выработкой для раскрытия фронта проходческих работ при
строительстве станций метрополитена глубокого заложения.
В процессе строительства
подземного сооружения через вертикальный ствол ведут все строительные работы.
Он служит для выдачи породы, подачи материалов, оборудования и элементов
обделки, для энергоснабжения, водоотлива и вентиляции при проходке, а так же для
спуска и подъема людей.
В период эксплуатации
станции метрополитена глубокого заложения ствол используют главным образом для
вентиляции сооружения. В отдельных случаях стволы забучиваются.
Вертикальный ствол имеет
круговое сечение, которое обеспечивает рациональную работу обделки в условиях
всестороннего горного давления.
2.3. Горно-геологические условия строительства.
Горно-геологический район
строительства вертикального ствола круглой формы диаметром в проходке 6 м и
глубиной 45 м состоит из водоносных песчаных и глинистых
грунтов и известняков:
- Рыхлые горные породы,
галька, щебень, песок.
- Наносы, слежавшиеся
грунты, пластичные глины, известняк белый мелкокристаллический.
Абсолютная отметка устья
ствола 131 м. Глубина ствола 45м.
Мощности пластов песка , глины  и известняка  равны соответственно
10, 15 и 25 м.
Пористость песка, глины и
известняка равны соответственно 38,  40
и 39%, а весовые влажности - 17, 22 и 20%.
Удельные веса песка, глины и
известняка равны соответсвенно 19, 19.6 и 21 Н/м3.
Начальная температура грунта
и температура замерзания равны соответственно =+120С и =00С.
2.4. Выбор и расчет сечения вертикального ствола.
Для обеспечения рациональной
работы материала обделки в условиях всестороннего горного давления принимаем
круглую форму сечения ствола. Произведем расчет размеров сечения ствола.
Определяем часовую
производительность подъема:
AЧ=, т/час,
где кр=1.5 - коэффициент неравномерности подъема;
N=300
- число рабочих дней в году;
t=16
- ч/сут - время работы в сутки;
АГ - годовой объем грунта выдаваемый из ствола, АГ »100000 м3.
AЧ= т/час.
Определяем массу груза
выдаваемого за один раз:
 AЧ, т,
где  - высота подъема, м;
НСТ=45 м - глубина ствола;
h1=8.1 м - высота откаточного горизонта;
 м;
q=12 сек - время
разгрузки-загрузки клети.
 т.
Определяем объем
одновременно поднимаемого груза:
, м3,
где g=1.9 ¸ 2.1 т/м3 -
средняя плотность выдаваемой породы.
 м3.
По полученной
грузоподъемности выбираем:
  - вагонетка УВГ - 1.6:
           вместимость кузова 1.6 м3;
           габариты - 850´1300´2700 мм;
           ширина колеи - 600 мм;
  - клеть марки 1УКН3.3Г-2, с размерами:
           ширина - 1000 мм:
           высота - 3040 мм:
           длина - 3300 мм;
  - подъемная машина марки 2БМ-2000/1030-3А:
           двухбарабанная;
           диаметр каната dК=24
мм;
           высота подъема - 170 м;
           потребляемая мощность - 90 кВт;
           масса машины - 31100 кг.
Произведем выбор армирующих
элементов.
В качестве проводников
принимаем сосновый брус 160´180 мм. Расстрелами
принимаем балки из двутавра №24.
Учитывая все
минимально-допустимые зазоры:
  - зазоры между расстрелами и клетью - 200 мм;
  - зазоры между проводниками и направляющими башмаками клети - 10
мм;
  - зазор между углом клети и обделкой - 150 мм;
и размеры лесоспуска 1.5 м2,
и лестничного отделения - 0.6´0.7 м, а так же учитывая
толщину тюбингового кольца обделки, графически определяем искомое сечение
ствола.
Ближайшим к типовому сечению
ствола является сечение ствола с наружним диаметром по обделке 6.0 м.
Принимаем DСТВ=6.0 м.
2.5. Расчет паспорта буро-взрывных работ.
Определим удельный расход
взрывчатого вещества и примем его тип. При данных горно-геологических условиях
строительства наиболее целесообразно применить аммонит №6ЖВ, в патронах
диаметром 32 мм. Электродетонаторы типа ЭДКЗ-ПМ-15 с сериями замедления - 0; 0.15;
0.30; 0.45; 0.60 сек.
, кг/м3,
где q1=0.1f, где f=4 - крепость вмещающих пород по
профессору Протодьяконову;
,
,
где Sпрох - сечение ствола в проходке
ВЧ м2
Sвч=28.26 м2
 - коэффициент
работоспособности;
 кг/м3.
Определим количество шпуров
в сечении
,
где
 
 
 
 
 шпуров.
Определим и зададим
остальные параметры буро-взрывных работ:
  глубина шпура -  м;
  глубина заходки -  м;
  КИШ=0.8 ();
Определим расход взрывчатого
вещества за цикл:
,
 кг/цикл.
Заряжание шпуров призводится
следующим образом:
в центральный (буферный) шпур заряжается одна шашка
массой 250 грамм, во врубовые - 3 шашки, в отбойные - 2 шашки. Общее число
шашек - 98 штук. Взрывание производится методом обратного инициирования.
Материал забойки - песок средних фракций. Взрывание производится с четырьмя
степенями замедления.
2.6. Расчет параметров замораживания массива.
Расчет ледогрунтового
ограждения.
Расчет толщины
ледогрунтового ограждения производим по формуле Ляме.
,
где  м - радиус ствола в
проходке;
 МПа - допустимый
предел прочности замороженных пород на сжатие;
 - коэффициент запаса
прочности при сжатии, равный 2-5.
 - давление массива на
ледогрунтовое ограждение, где
 - удельный вес
грунта, т/м3;
 м - глубина
замораживания;
 МПа
 м.
Расчет диаметра
замораживания и числа замораживающих
Число колонок
,
где ;
 м - диаметр ствола;
 - глубина
замораживания;
 м
 колонки,
где  м - расстояние между
колонками.
Расчет
хладопроизводительности замораживающей станции.
,
где  ккал/час,
где  м - диаметр
замораживающей колонки;
 - глубина
замораживания;
 ккал/м2.час
 ккал/час
 ккал/час
Таким образом исходя из
полученной хладопроизводительности принимаем установку замораживания ПХУ-50.
Технические характеристики
ПХУ-50:
- хладопроизводительность
при
   и       - 203 ккал/час;
- общая установленная
мощность электродвигателя - 105 кВт;
- хладагент - фреон;
- одновременная зарядка
хладоном R-22 - 550 кг;
- рабочее давление
охлаждающей воды - 0.4 МПа;
- зарядка системы CaCl2
- 1.6 т.
На время эксплуатации
используются четыре станции ПХУ-50, одна из которых резервная, но иногда
включается в работу.
Расчет времени активного
замораживания.
, сут,
где , где
 - объем породного
цилиндра;
 м3
,
где
 м3
 - пористость
 ккал/0С.кг
 кг/м3
 ккал/м3
, где
 ккал/кг
 ккал/кг
 кг/м3
 ккал/0С.кг
 ккал/м3
 м3
 кг/м3
 ккал/0С.кг
 ккал/м3
 ккал/м3
 ккал/м3
 ккал/м2.час
 м2
 ккал
 сут
Таким образом время
активного замораживания равно 23 суткам, так как необходимое время на
подключение и проверку хладопроизводительной станции около 7 дней.
Во время пассивного режима
замораживания хладопроизводительность станции берется равной 35% от активного
режима замораживания, что обеспечивается постоянной работой одной станции
ПХУ-50 с периодическим подключением еще одной ПХУ-50.
2.7. Технология ведения работ по замораживанию породного
массива.
Сооружение ствола начинается
с возведения форшахты, которая выполняет роль оголовка ствола. Сначала
отрывается котлован на глубину 4 м и на бетонную подготовку толщиной 15 см
водружаются четыре тюбинговых кольца ствола. Далее, предварительно вставив кондуктора
под бурение замораживающих скважин, из труб диаметром 219 мм в затюбинговое
пространство закачивается бетон марки В25. После схватывания бетона приступают
к бурению замораживающих скважин диаметром 300 мм. Бурение осуществляется
станком СБУ-150 с глинистым пригрузом. Замораживающие скважины заглубляются в
водоупор не менее чем на 4 метра. Буровые работы производятся в следующей
последовательности:
  - бурение замораживающих, дополнительных и термометрических
скважин;
  - цементация затрубного пространства замораживающих и
термометрических скважин; перед опусканием в скважину замораживающей колонки ее
обязательно промывают водой;
  - по окончании проходки ствола все пробуренные скважины
тампонируются или цементируются.
После того как скважины
пробурены их оборудуют замораживающими колонками и монтируют рассольную сеть. В
качестве колонок используют бесшовные цельнотянутые трубы с наружным диаметром
146 мм, насосно-компрессорная труба диаметром 114 мм и питающая труба диаметром
33.5 мм.
При монтаже все
замораживающие трубы перед опусканием подвергаются гидравлическому испытанию.
После этого монтируют колонку и опускают ее в скважину, после этого производят
контрольное испытание на водонепроницаемость стыков и всей системы в целом.
Колонку заливают водой и герметизируют. Если уровень жидкости в течение пяти
суток не снизится более чем на два сантиметра на каждые пятьдесят метров
глубины, то колонки готовы к эксплуатации. После монтажа замораживающих
колонок, обсадные трубы извлекаются, а пространство между колонкой и стенками
скважины забучивается песком.
После оборудования
замораживающих колонок приступают к монтажу рассольной сети. Для магистральных
рассолопроводов применяют стальные трубы диаметром 219 мм. Для снижения
теплопотерь рассолопровод укладывают на брусья в траншеи и изолируют. Питающие
и отводящие трубы присоединяют одним концом к головке замораживающей колонки, а
другим к распределителю и коллектору. После этого по параллельной схеме
производим включение замораживающих колонок в рассольную сеть. Подключив
замораживающую станцию к рассольной сети производят пробное включение. Если
никаких неисправностей не обнаружено, то приступают к активному замораживанию.
За время работы станции,
осуществляются следующие виды контроля:
  - контроль за работой замораживающей станции;
  - контроль за работой замораживающих колонок;
  - контроль за процессом формирования ледогрунтового ограждения,
который производится с помощью термо- и гидронаблюдательных скважин.
В случае обнаружения
каких-то неполадок в системе, все неработающие элементы сразу же заменяются или
ремонтируются, чтобы не допустить размораживания создавшегося ледогрунтового
ограждения.
После достижения
ледогрунтовым ограждением проектных размеров замораживающую станцию переводят
на пассивный режим работы и приступают к ведению горнопроходческих работ по
сооружению ствола.
2.8. Производство горно-строительных работ.
После создания
ледогрунтового ограждения приступают к проходке ствола.
В зоне мягких пород
разработка ведется вручную или отбойными молотками МО-10. При пересечении
крепких замороженных пород разработку ведут буро-взрывным способом. Шпуры бурят
ручными перфораторами марки ПР-30К. Взрывные работы проводятся малыми заходками
с максимальной осторожностью, чтобы не повредить ледогрунтовое ограждение и
замораживающие колонки.
Погрузка породы производится
экскаваторным рабочим органом на подвесном проходческом полке в бадьи объемом 1
м3, которые выдаются на поверхность и разгружаются в породные
бункера.
После зачистки и
проветривания забоя после взрыва приступают к возведению постоянной обделки.
В качестве обделки ствола
используется сборная обделка из чугунных тюбингов. Монтаж тюбингов производится
с помощью тельфера, подвешенного на проходческом полке. После сбора кольца
обделки производят нагнетание цементно-песчаной смеси за обделку. Выполняются
гидроизоляционные работы.
Гидроизоляция сборных
тюбинговых обделок состоит в 
герметизации швов  между
элементами обделки, болтовых отверстий и отверстий для нагнетания.
Последовательность ведения
гидроизоляционных работ в стволе с чугунной тюбинговой обделкой:
  - проверка гидроизоляции болтовых отверстий;
  - изоляция отверстий для нагнетания;
  - чеканка швов между тюбингами.
Гидроизоляцию болтовых
отверстий  выполняют  с 
использованием гидроизоляционных шайб ( асбобитумных или полимерных ),  устанавливаемых при сболчивании тюбингов.
Отверстия для нагнетания очищают и изолируют постановкой  пробки 
с гидроизоляционной асбобитумной или пластмассовой шайбой.
Гидроизоляция швов чугунной
тюбинговой обделки  осуществляется на
расстоянии  30-50  м от забоя путем заполнения чеканочных
канавок гидроизоляционными материалами с последующей их  чеканкой. 
Укладку замазки и чеканку швов ведут в два-три слоя толщиной по 2 см
участками длиной по 3-4 м. 
Гидроизоляционные работы ведут с 
чеканочной тележки.
При большом  гидростатическом давлении для чеканки швов
применяют свинцовую проволоку или освинцованный  шнур.  Стыки  проволоки или шнура  выполняют 
внахлёстку.  После чеканки шнура
через 8-24 ч поверх свинца укладывают замазку из водонепроницаемого  расширяющегося цемента (ВНЦ) или
быстротвердеющего уплотняющего состава (БУС).
После этого подвесной полок
опускается и производятся работы по монтажу расстрелов и проводников,
наращиванию вентиляции, кабелей и направляющих проводников.
В случае проникновения в
забой воды, производят раскопку приямка и собравшуюся в нем воду откачивают на
поверхность.
Особое внимание при работе в
низких температурах следует уделить пневмоинструменту:
  - перфораторам;
  - отбойным молоткам;
  - болтокрутам;
  - пескоструйным шлифмашинам и т.д.
Необходимо принимать меры по
обезвоживанию сжатого воздуха. После проходки ствола на всю глубину
производится его металлоизоляция путем обваривания его стальными листами.
Далее все проходческое
оборудование демонтируется и ствол оборудуется постоянным клетевым подъемом.
Для того чтобы ввести
обделку ствола в работу рассольную сеть демонтируют, колонки извлекают,
скважины цементируют. Таким образом происходит оттаивание ледогрунтового
ограждения естественным способом.
После проведения всех мер
гидроизоляции, армировке и оборудованию ствола, ствол сдается в эксплуатацию.
Общие сроки строительства
ствола - четыре месяца.
После окончания эксплуатации
ствола, он или забучивается или служит для вентиляции подземного сооружения.
3. Основная часть
3.1. Нагрузки от горного давления на обделки
вертикальных стволов метрополитенов.
Расчет обделки вертикальных
стволов метрополитенов будем вести на наиболее неблагоприятное сочетание
неравномерных нагрузок по контуру ствола. Неравномерность нагрузок по контуру
ствола вызвана неравнокомпонентностью поля напряжений в массиве горных пород, а
также дополнительными нагрузками от близрасположенных зданий, сооружений,
механизмов, оборудования и т.д. на поверхности.
Наиболее неблагоприятными
нагрузками по условию прочности и деформируемости обделки являются нормальные к
контуру  и касательные к
контуру  нагрузки вида (см.
лист 1):
где  - полярный угол (см.
лист 1), отсчитываемый от точки приложения максимальных нагрузок .
Соотношения между
экстремальными нагрузками  и  (см. лист 1) и
величинами  и  определяются
выражениями:
Соотношения между
максимальными  и минимальными  нагрузками по контуру
ствола характеризуются коэффициентом неравномерности  равным:
 
Значения коэффициента
неравномерности при обычном способе проходки ствола составляют:
  - на протяженных участках не выше 20 м - ;
  - вблизи сопряжений до 20 м и при наличии геологических нарушений -
;
  - на участках примыкающих к дневной поверхности - .
Максимальные касательные
напряжения  на контакте системы
порода-обделка” определяются по формуле:
где  - коэффициент,
зависящий от деформативных свойств системы 
порода-обделка” и отношения наружного радиуса обделки  к его внутреннему
радиусу .
Параметр  можно определить по
формуле или по таблице 1:
,
где  и  - соответственно
модуль деформации обделки и породы.
Таблица 1.
Значения параметра . r/rв  при G0/Gn 0.10 1.0 10 50 100 250 500 1.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 1.05 2.161 2.162 2.167 2.186 2.212 2.287 2.430 1.10 2.350 2.352 2.388 2.555 2.795 3.744 7.127 1.15 2.582 2.584 2.703 3.398 7.744 --- --- 1.20 2.815 2.846 3.177 5.751 --- --- ---
1. Участки ствола в наносах,
слабых сыпучих или выветренных грунтах.
Нагрузка от горного давления
на обделку ствола в наносах, слабых сыпучих или выветренных коренных породах
определяется с использованием методов предельного равновесия без учета
коэффициента сцепления породы, что идет в запас прочности.
Расчетная максимальная
нагрузка  на обделку ствола
определяется по формуле:
,
где  - коэффициент
перегрузки, принимаемый равным ;
 - коэффициент,
учитывающий неравномерность нагрузки за счет близости рассматриваемого участка
с координатой  к сопряжению с
горизонтальной выработкой: при  - , при  - .
Нормативная нагрузка от
горного давления  в выветренных породах
определяется по формуле или из таблицы 2:
,
где  - глубина заложения
рассматриваемого участка ствола;
;
 - нормативное
значение угла внутреннего трения грунта, принимаемое для песчаных и глинистых
грунтов по таблице 3 (составлена на основании СНиП II-15-74
Основания зданий и сооружений. Нормы проектирования”).
Примечание: для
промежуточных значений  и  величина  может определяться
линейным интерполированием данных по таблице 2.
Таблица 2.
Значения нормативной
нагрузки от горного давления  на обделку ствола в
наносах, слабых сыпучих или выветренных коренных породах в зависимости от
глубины, радиуса и грунтовых условий. H/r /gr j=50 j=100 j=150 j=200 j=250 j=300 j=350 j=400 0.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.50 0.4042 0.3260 0.2618 0.2084 0.1653 0.1293 0.0997 0.0753 1.00 0.7843 0.6132 0.4767 0.3662 0.2807 0.2114 0.1563 0.1131 1.75 1.3238 0.9965 0.7448 0.5477 0.4031 0.2902 0.1919 0.1613 2.50 1.8363 1.3405 0.9700 0.6888 0.4906 0.3411 0.2327 0.1553 3.75 2.6178 1.8540 1.2845 0.8701 0.5937 0.3950 0.2586 0.1664 5.00 4.4198 2.3149 1.5485 1.0220 0.6664 0.4288 0.2727 0.1716 6.25 4.1619 2.7383 1.7780 1.1240 0.7214 0.4521 0.2814 0.1742 7.50 4.8802 3.1327 1.9822 1.2197 0.7945 0.4691 0.2871 0.1757 8.75 5.5786 3.5038 2.1671 1.3022 0.8000 0.4820 0.2911 0.1767 10.0 6.2603 3.8553 2.3367 1.3979 0.8296 0.4921 0.2940 0.1774 15.0 8.8574 5.1213 2.9069 1.6302 0.9131 0.5176 0.3002 0.1786
Нормативная нагрузка от
горного давления  в слабых сыпучих
породах определяется по формуле:
.
Нормативная дополнительная
нагрузка  на обделку ствола,
вызванная весом наземных зданий, сооружений или оборудования учитывается, если
нагружающий объект отстоит от контура ствола не дальше чем на  (, см. лист 1). При этом обязательно определение для участка
ствола при .
Таблица 3.
Нормативные значения угла
внутреннего трения , град, для песчаных и глинистых грунтов. Виды грунтов Значения  при к - те пористости   0.45 0.55 0.65 0.75 0.85 0.95 1.05 Пески гравелистые и крупные 430 400 380 --- --- --- --- Пески средней крупности 400 380 350 --- --- --- --- Пески мелкие 380 360 320 280 --- --- --- Пески пылеватые 360 340 300 260 --- --- --- Супеси (консистенция  0 - 0.25) 300 290 270 --- --- --- --- Супеси (консистенция  0.25 - 0.75) 280 260 240 210 --- --- --- Суглинки (консистенция  0 - 0.25) 260 250 240 230 220 200 --- Суглинки (консистенция  0.25 - 0.5) 240 230 220 210 190 170 --- Суглинки (консистенция  0.5 - 0.75) --- --- 190 180 160 140 120 Глины (консистенция  0 - 0.25) --- 210 200 190 180 160 140 Глины (консистенция  0.25 - 0.5) --- --- 180 170 160 140 110 Глины (консистенция  0.5 - 0.75) --- --- 150 140 120 100 70
Нормативная дополнительная
нагрузка  по глубине ствола при
наличии одной пригрузки (см. лист 1) или нескольких, центры тяжести которых
одинаково удалены от ствола и лежат на перпендикулярных друг другу осях,
определяются по формуле:
,
где  - расстояние от
внешнего контура ствола до наиболее удаленной точки нагружающего объекта;
 - средний поперечный
размер нагружающего объекта;
 - вес нагружающего
объекта.
Дополнительную нагрузку  можно также
определять по данным таблицы 4 в зависимости от глубины ствола, его радиуса и
грунтовых условий по формуле, используя для промежуточных значений  и  линейную
интерполяцию:
,
в которой
и где значение безразмерного
параметра
в зависимости от грунтовых условий и отношения  приведены в таблице
4.
Таблица 4.
Значения безразмерного
параметра  в зависимости от
глубины ствола, его радиуса и грунтовых условий. H/r j=50 j=100 j=150 j=200 j=250 j=300 j=350 j=400 0.00 0.8396 0.7041 0.5871 0.4903 0.4059 0.3334 0.2710 0.2174 0.50 0.7812 0.6077 0.4680 0.3571 0.2708 0.2008 0.1454 0.1022 1.00 0.7415 0.5451 0.3945 0.2800 0.1973 0.1340 0.0878 0.0543 1.75 0.6994 0.4817 0.3240 0.2107 0.1356 0.0825 0.0475 0.025 2.50 0.6688 0.4376 0.2780 0.1685 0.1006 0.0558 0.0288 0.0135 3.75 0.6317 0.3873 0.2280 0.1258 0.680 0.033 0.0147 0.0057 5.00 0.6046 0.3523 0.1954 0.1002 0.0500 0.021 0.0086 0.0029 6.25 0.5834 0.3261 0.1722 0.0830 0.0387 0.0157 0.0055 0.0016 7.50 0.5661 0.3055 0.1541 0.0708 0.0311 0.0117 0.0038 0.0010 8.75 0.5516 0.2887 0.1410 0.0616 0.0258 0.0091 0.0027 0.0006 10.0 0.5392 0.2741 0.1300 0.0540 0.0218 0.0073 0.0020 0.0004 15.0 0.5022 0.2352 0.1006 0.0372 0.0129 0.0036 0.0008 0.0001
При наличии пригрузок с
одинаковым весом, центры тяжести которых лежат на перпендикулярных друг другу
осях, но находятся на разных расстояниях  от контура ствола, в
формуле подставляется меньшее из значений .
Если же пригрузки имеют
различный вес, но расположены на равном расстоянии  от контура ствола, в
формуле подставляется большее значение .
Если же пригрузки имеют
различный вес и расположены на различных расстояниях от контура ствола, расчет
ведется для каждой пригрузки в отдельности и в расчет принимается наибольшее из
полученных значений .
При наличии нескольких
пригрузок, центры тяжести которых пересекаются относительно центра сечения
ствола под углами меньшими 900 и составляют соответственно углы , наибольшая дополнительная равнодействующая нагрузка  определяется по
формуле:
,
где  - порядковый номер
нагружающего объекта;
 - дополнительные
нагрузки от  - й пригрузки
определяемые по формулам при соответствующих значениях ;
 - угол,
соответствующий расчетному направлению приложения наибольшей равнодействующей
нагрузки, определяемой по формуле:
.
2. Участки ствола в коренных
породах.
На участках где породы
относятся к категории нестойких, нагрузка на обделку определяется в зависимости
от способа сооружения ствола, его поперечного сечения, коэффициента крепости
пород .
 Средняя нормативная нагрузка 
на обделку ствола от горного давления  определяется по
формуле:
,
где  - коэффициент,
учитывающий степень разгрузки породной поверхности ствола при принятой
технологии крепления, конструкции и материала обделки. Коэффициент может
приниматься по таблице 5.
При проходке ствола в
водоносных породах имеющих напор , полная средняя нормативная нагрузка на обделку принимается
равной сумме нагрузок  и .
Расчетные максимальные
нагрузки , минимальные нагрузки , а также расчетные значения  и  определяются как
произведение средней нормативной нагрузки  и соответствующих
коэффициентов, приведенных при проходке ствола обычным способом в таблице 6 и
при проходке ствола бурением - в таблице 7.
Таблица 5.
Значения коэффициента . Тип и способ сооружения ствола Монолитная при совмещенной схеме проходке 5 То же при параллельной и параллельно-щитовой схеме проходки 3 Тюбинговая, вводимая в работу на расстоянии от забоя не менее    20 м при обычном способе проходки 1.1 То же при возведении крепи с предварительной откачкой раствора и полной разгрузкой породных стенок при проходке стволов бурением 0.8
Таблица 6.
Соотношения между расчетными
значениями , , ,  и средней нормативной
нагрузкой  при обычном способе
проходки. Участок ствола Характеристики нагрузок Pmax Pmin P0 P2 P2 P0 Протяженный 2.8 0.33 1.56 1.24 0.8 Вблизи сопряжения (до 20 м) 3.1 0.17 1.64 1.46 0.9 На участке пересечения геологического нарушения 3.3 0.17 1.74 1.56 0.9
Таблица 7.
Соотношения между расчетными
значениями , , ,  и средней нормативной
нагрузкой  при проходке ствола
бурением. Участок ствола Характеристики нагрузок Pmax Pmin P0 P2 P2 P0 Протяженный 1.4 0.6 1.0 0.4 0.4 Вблизи сопряжения 1.5 0.3 0.9 0.6 0.6
3.2. Проверка несущей способности  тюбинговых обделок вертикальных стволов
метрополитенов.
Расчет тюбинговой обделки
вертикальных стволов метрополитенов будем производить как для двухслойного
состава кольца (см. лист 1), наружным слоем которого является оболочка из
спинок тюбингов, внутренним - кольцевые ребра жесткости.
Проверку несущей способности
тюбинговой обделки будем производить из условия, при котором максимальные
напряжения растяжения  и сжатия  в ребре и спинке не
превышали расчетных сопротивлений материала обделки:
;        ,
где  - расчетное
сопротивление материала обделки (железобетона или чугуна) принимаемое по СНиП
II-21-75 “Бетонные и железобетонные конструкции. Нормы проектирования.” или
СНиП II-8.3-72 “Стальные конструкции. Нормы проектирования.”
Несущая способность
тюбинговой обделки с расчетными характеристиками материала  и  обеспечена если
выполняются условия:
  для ребра (сечение Б-Б на листе 1):
  для спинки (сечение В-В на листе 1):
где знак “+” относится в
зависимости от материала конструкции к расчетным характеристикам железобетона,
а “-” - к расчетным характеристикам чугуна;
;
;
 - радиус конструкции
тюбинговой обделки по спинке тюбинга (см. лист 1);
 - внутренний радиус
тюбинговой обделки по кольцевому ребру (см. лист 1);
 - расстояние в свету
между кольцевыми ребрами тюбинга (см. лист 1);
 - высота кольцевого
ребра тюбинга (см. лист 1);
;
;
, , ,  - коэффициенты
передачи нагрузок через наружний слой, в зависимости от геометрических размеров
конструкции и определяемые по формулам:
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
 - коэффициент
Пуассона материала обделки, принимаемый равным 0.25 для бетонной и
железобетонной,  0.23 - 0.27 - для
чугунной и 0.3 - для остальных.
При определении области
применения типовой тюбинговой обделки ствола на различное сочетание нагрузок , ,  следует построить
паспорт прочности конструкции в координатах  - . Несущая способность конструкции будет обеспечена если комбинации
нагрузок  ,  и  лежат в области,
ограниченной нижними границами линий, характеризующих условия прочности по
сжимающим и растягивающим напряжениям в спинке и ребре тюбинга и условия
положительности нагрузок по формуле .
:
3.3. Расчет параметров и построение паспорта
прочности несущей способности тюбинговых обделок вертикальных стволов
метрополитенов.
Параметры паспорта несущей
способности тюбинговой обделки, т.е. координаты точек пересечения линий с осями
 и , определяются по формулам:
1. Железобетонная тюбинговая
обделка:
  линия 1 - условие прочности по сжимающим напряжениям в ребре
тюбинга:
;
;
  линия 2 - условие прочности по растягивающим напряжениям в ребре
тюбинга:
;
;
  линия 3 - условие положительности нагрузок:
;
   линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:
;
;
  линия 5 - условие прочности по растягивающим напряжениям в спинке
тюбинга:
;
;
2. Чугунная тюбинговая
обделка:
  линия 1 - условие прочности по сжимающим напряжениям в ребре
тюбинга:
;
;
  линия 2 - условие прочности по растягивающим напряжениям в ребре
тюбинга:
;
;
  линия 3 - условие положительности нагрузок:
;
   линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:
;
;
  линия 5 - условие прочности по растягивающим напряжениям в спинке
тюбинга:
;
;
Примечание: при построении
паспортов прочности тюбинговых обделок можно использовать программу для ЭВМ,
приведенную в приложении 1.
При  несущую способность железобетонных
обделок конструкции ВНИИМШС, марка бетона 400 для стволов диаметром 4.5 - 8.0 м
можно определить по паспортам прочности приведенным на листах 3 и 4.
При  несущую способность
чугунных тюбинговых обделок конструкции Шахтспецстрой, чугун марки СЧ 12-28 для
стволов диаметром 6.0 - 7.0 м можно определить по паспортам прочности
приведенным на листе 4.
3.4.
Проверка устойчивости тюбинговых обделок вертикальных стволов метрополитенов.
Проверку устойчивости
обделки вертикальных стволов метрополитенов, т.е. способности сопротивляться
выпучиванию в сторону ствола, производится исходя из условия:
;
где  - коэффициент формы
упругой линии кольца обделки при потере устойчивости; расчетное критическое
давление  находится как
наименьшее значение функции .
4. Приложения
4.1. Программа для проверки несущей способности и
построения паспорта прочности тюбинговых обделок вертикальных стволов
метрополитенов.
unit Calc1;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs,
DBTables, DB, DBFilter, Grids, DBGrids, StdCtrls,
  RXLookup, ExtCtrls,
Buttons;
type
  TForm1 =
class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    rxDBLookupCombo1:
TrxDBLookupCombo;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    DBGrid1: TDBGrid;
    Label4: TLabel;
    TableSTUFF:
TTable;
    DataSourceSTUFF:
TDataSource;
    rxDBFilter1:
TrxDBFilter;
    DataSourceDATA:
TDataSource;
    TableDATA:
TTable;
    TableDATAR:
TFloatField;
    TableDATAMass:
TFloatField;
    TableDATAR_press:
TFloatField;
   
TableDATAR_stretch: TFloatField;
    TableDATAPuasson:
TFloatField;
    TableDATAR1:
TFloatField;
    TableDATARb:
TFloatField;
    TableDATAA:
TFloatField;
    TableDATAB:
TFloatField;
    TableDATAStuff:
TSmallintField;
    BitBtn1: TBitBtn;
    RadioGroup1:
TRadioGroup;
    RadioButton1:
TRadioButton;
    RadioButton2:
TRadioButton;
    RadioButton3:
TRadioButton;
    procedure
rxDBLookupCombo1Change(Sender: TObject);
    procedure DBGrid1DblClick(Sender:
TObject);
    procedure RadioButton1Click(Sender:
TObject);
    procedure RadioButton2Click(Sender:
TObject);
    procedure RadioButton3Click(Sender:
TObject);
    private
       { Private declarations }
    public
       { Public declarations }
end;
var
  Form1: TForm1;
implementation
uses
   Draw;
{$R *.DFM}
procedure
TForm1.rxDBLookupCombo1Change(Sender:
TObject);
var
  S: String;
begin
 
rxDBFilter1.Deactivate;
 
rxDBFilter1.Filter.Clear;
  s:='Stuff =
'+TableSTUFF.FieldByName('Code').AsString;
 
rxDBFilter1.Filter.Add(S);
 
rxDBFilter1.Activate;
end;
procedure
TForm1.DBGrid1DblClick(Sender:
TObject);
var
  Mass, R_press,
R_stretch, Puasson, PuassonP, R1, Rb, R, A, B: Double;
  P0, P2: Double;
  C1, C2: Double;
  K0, K1, K2, K3, K4:
Double;
  L, L1: Double;
  ALFA1, ALFA2:
Double;
  BETA, BETA1, BETA2:
Double;
  DELTA1, DELTA2:
Double;
  GAMMA1, GAMMA2:
Double;
  D1, D2: Double;
  F: Double;
  SIGMARS, SIGMARR,
SIGMASS, SIGMASR: Double;
  i: Integer;
  Pkr, PkrOld:
Double;
  Eo, Ep, J: Double;
procedure
Calc;
begin
    C1 := R1/Rb;
    C2 := R/R1;
    F :=
(C2*C2-1)/(C1*C1-1)*(C2*C2-1)/(C1*C1-1)*
        
(C2*C2-1)/(C1*C1-1)*(1+B/A);
    D2 :=
(C2*C2+1)*(C2*C2+1)*(C2*C2+1)/(Puasson+1);
    D1 :=
(C1*C1-1)*(C1*C1-1)/(Puasson+1);
    DELTA2 :=
C2*C2*(C2*C2+1);
    DELTA1 :=
C2*C2*(3-C2*C2);
    GAMMA2 :=
C2*C2*(2*C2*C2*C2*C2+C2*C2+1);
    GAMMA1 :=
C2*C2*(3+C2*C2);
    BETA :=
(3+R/Rb*R/Rb)/(3-R/Rb*R/Rb);
    BETA2 :=
C2*C2*C2*C2*(C2*C2+1)-D2+F*(C1*C1+1+D1);
    BETA1 :=
3*C2*C2-1-D2+F*((3-C2*C2)*C1*C1*C1*C1+D1);
    ALFA2 :=
C2*C2*(2+C2*C2+C2*C2*C2*C2)-          
            
D2+F*(2*C1*C1*C1*C1+C1*C1+1+D1);
    ALFA1 :=
3*C2*C2+1+D2+F*((C1*C1+3)*C1*C1*C1*C1-D1);
    K4 :=
(ALFA2*DELTA1-ALFA1*DELTA2)/(ALFA2*BETA1-ALFA1*BETA2);
    K3 :=
(ALFA1*GAMMA2-ALFA2*GAMMA1)/(ALFA2*BETA1-ALFA1*BETA2);
    K2 :=
(BETA2*DELTA1-BETA1*DELTA2)/(ALFA2*BETA1-ALFA1*BETA2);
    K1 :=
(BETA1*GAMMA2-BETA2*GAMMA1)/(ALFA2*BETA1-ALFA1*BETA2);
    L1 :=
4*C2*C2*(C2*C2+1-BETA)-(K1+BETA*K2)*((C1*C1+1)*(C1*C1+1)
         
+4*C2*C2)+2*(K3+BETA*K4)*((C2*C2+1)*(C2*C2+1)-2);
    L :=
(K1+BETA*K2)*(C1*C1+1)-(K3+BETA*K4);
    K0 :=
3*C2*C2/((1+B/A)*(C2*C2-1)/(C1*C1-1)*(2+C1*C1)+2*C2*C2+1);
  end;
begin
  with TableDATA do begin
    Mass :=
FieldByName('Mass').AsFloat;
    R_press :=
FieldByName('R_press').AsFloat;
    R_stretch :=
FieldByName('R_stretch').AsFloat;
    Puasson :=
FieldByName('Puasson').AsFloat;
    R1 :=
FieldByName('R1').AsFloat;
    Rb :=
FieldByName('Rb').AsFloat;
    R :=
FieldByName('R').AsFloat;
    A :=
FieldByName('A').AsFloat;
    B :=
FieldByName('B').AsFloat;
  end;
  if RadioButton1.Checked then begin
    Calc;
    if TableDATA.FieldByName('Stuff').AsInteger
= 0 {Железо-бетон} then begin
      PLines[isP0,1]
:= (C1*C1-1)*Mass*R_press/2*C1*C1*K0*(1+B/A);
      PLines[isP2,1]
:= (C1*C1-1)*(C1*C1-1)*
                       
Mass*R_press/4*C1*C1*K0*(1+B/A);
      PLines[isP0,2]
:= -(C1*C1-1)*Mass*R_stretch/2*C1*C1*K0*(1+B/A);
      PLines[isP2,2]
:= (C1*C1-1)*(C1*C1-1)*
                       
Mass*R_stretch/4*C1*C1*K0*(1+B/A);
      PLines[isP0,4]
:= (C2*C2-1)*Mass*R_press/(2*C2*C2-K0*
                       
(C2*C2+1));
      PLines[isP2,4]
:= (C2*C2-1)*(C2*C2-1)*Mass*R_press/L1;
      PLines[isP0,5]
:= -(C2*C2-1)*
                       
Mass*R_stretch/(2*C2*C2-K0*(C2*C2+1));
      PLines[isP2,5] :=
(C2*C2-1)*(C2*C2-1)*Mass*R_stretch/L1;
    end
    else begin         {Чугун}
      PLines[isP0,1]
:= (C1*C1-1)*Mass*R_press/2*C1*K0*(1+B/A);
      PLines[isP2,1]
:= (C2*C2-1)*(C2*C2-1)*
                       
Mass*R_press/4*C1*C1*K0*(1+B/A);
      PLines[isP0,2]
:= -(C2*C2-1)*Mass*R_stretch/2*C1*K0*(1+B/A);
      PLines[isP2,2]
:= (C1*C1-1)*(C1*C1-1)*
                       
Mass*R_stretch/4*C1*C1*K0*(1+B/A);
      PLines[isP0,4]
:= (C2*C2-1)*Mass*R_press/(2*C2*C2-K0*
                        (C2*C2+1));
      PLines[isP2,4]
:= (C2*C2-1)*(C2*C2-1)*Mass*R_press/L1;
      PLines[isP0,5]
:= -(C2*C2-1)*Mass*R_stretch/(2*C2*C2-K0*
                       
(C2*C2+1));
      PLines[isP2,5]
:= (C2*C2-1)*(C2*C2-1)*Mass*R_stretch/L1;
    end;
   
DrawForm.ShowModal;
  end
  else if RadioButton2.Checked then begin
    Calc;
    P0 :=
StrToFloat(Edit1.Text);
    P2 :=
StrToFloat(Edit2.Text);
    SIGMARS :=
ABS(2*C1*C1/(C1*C1-1)*(1+B/A)*(P0*K0+2*P2*L/
                  (C1*C1-1)));
    SIGMARR := ABS(2*C1*C1/(C1*C1-1)*(1+B/A)*(P0*K0-2*P2*L/
                  (C1*C1-1)));
    SIGMASS :=
ABS(P0/(C2*C2-1)*(2*C2*C2-K0*(C2*C2+1))+P2*L1/
                  (C2*C2-1)*(C2*C2-1));
    SIGMASR :=
ABS(P0/(C2*C2-1)*(2*C2*C2-K0*(C2*C2+1))-P2*L1/
                  (C2*C2-1)*(C2*C2-1));
    if (SIGMARS>Mass*R_press)
or (SIGMARR>Mass*R_stretch) or
      
(SIGMASS>Mass*R_press) or (SIGMASR>Mass*R_stretch)
    then
     
MessageDlg('Несущая способность не
                 
обеспечена',mtInformation,[mbOk],0)
    else
      MessageDlg('Несущая способность
                 
обеспечена',mtInformation,[mbOk],0);
  end
  else begin
    i:=1;
    PkrOld :=0;
    repeat
      i := i+1;
      Pkr :=
(i*i-1)*Eo*J/((1-Puasson)*(1-Puasson)*R*R*R)+Ep/(2*
            
(1+PuassonP))*((i+1)*(i+1)/(i*i*(i-1))+(i-1)*
            
(i-1)/(i*i*(i+1)*(3-4*PuassonP)));
      if Pkr < PkrOld then PkrOld := Pkr else i:=0;
    until i = 0;
    P0 :=
StrToFloat(Edit1.Text);
    if P0<=Pkr then
      
MessageDlg('Устойчивость обеспечена',mtInformation,[mbOk],0)
    else
      
MessageDlg('Устойчивость не
                  
обеспечена',mtInformation,[mbOk],0);
  end;
end;
procedure
TForm1.RadioButton1Click(Sender:
TObject);
begin
  Label2.Visible :=
False;
  Label3.Visible :=
False;
  Edit1.Visible :=
False;
  Edit2.Visible :=
False;
end;
procedure
TForm1.RadioButton2Click(Sender:
TObject);
begin
  Label2.Visible :=
True;
  Label3.Visible :=
True;
  Edit1.Visible :=
True;
  Edit2.Visible :=
True;
end;
procedure
TForm1.RadioButton3Click(Sender:
TObject);
begin
  Label2.Visible :=
True;
  Label3.Visible :=
False;
  Edit1.Visible :=
True;
  Edit2.Visible :=
False;
end;
end.
unit Draw;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics,  
  Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
     TDrawForm =
class(TForm)
     BitBtn1:
TBitBtn;
procedure
FormActivate(Sender:
TObject);
private
    { Private
declarations }
public
    { Public
declarations }
end;
  TPaintData =
(isP0,isP2);
  TDiagramArray =
Array[TPaintData,1..5] of Double;
var
  PLines :
TDiagramArray;
  DrawForm:
TDrawForm;
implementation
{$R *.DFM}
procedure
TDrawForm.FormActivate(Sender:
TObject);
var
  R: TRect;
  MaxX, MinX: Double;
  MaxY, MinY: Double;
  Nx, Ny: Integer;
  Kx, Ky: Double;
  i: Byte;
  PointMin, PointMax:
Double;
procedure
DrawLine(X0,
k, b:Double);
begin
   
Canvas.MoveTo(R.Left+60+Round(Kx*X0),R.Bottom-30);
    if k<0 then
     
Canvas.LineTo(R.Left+60,Round(R.Bottom - 33 -  
                   (Ky*(b+(k*(10)/Kx)))))
    else
     
Canvas.LineTo(R.Right-10,Round(R.Bottom - 33 -
                   (Ky*(-b+(k*((R.Right-R.Left-70)/Kx))))));
  end;
begin
  PLines[isP0,3] :=
0;
  PLines[isP2,3] :=
0;
  MaxX := 0.0;
  MinX := 0.0;
  MaxY := 0.0;
  MinY := 0.0;
  for i := 1 to 5 do begin
    if PLines[isP0,i] > MaxX then MaxX := PLines[isP0,i];
    if PLines[isP2,i] > MaxY then MaxY := PLines[isP2,i];
    if PLines[isP0,i] < MinX then MinX := PLines[isP0,i];
    if PLines[isP2,i] < MinY then MinY := PLines[isP2,i];
  end;
  if MaxX > 200 then Nx := 100 else Nx
:= 10;
   MaxX :=
Round(MaxX/Nx)*Nx+Nx;
  if MaxY > 200 then Ny := 100 else Ny := 10;
  MaxY :=
Round(MaxY/Ny)*Ny+Ny;
  with DrawForm do begin
    Canvas.Pen.Color
:= clBlack;
    R.Left := 10;
    R.Top := 10;
    R.Right := Width
- 15;
    R.Bottom :=
Height - 70;
   
Canvas.FrameRect(R);
   
Canvas.Brush.Color := clBtnFace;
    Kx := (R.Right -
R.Left - 80)/MaxX;
    Ky := (R.Bottom -
R.Top - 80)/MaxY;
    {Ось Po}
   
Canvas.MoveTo(R.Left+10,R.Bottom-30);
    Canvas.LineTo(R.Right-10,R.Bottom-30);
    {Ось P2}
   
Canvas.MoveTo(R.Left+60,R.Top+30);
   
Canvas.LineTo(R.Left+60,R.Bottom-30);
    i := 0;
    while i*Nx<MaxX do begin
      Inc(i);
     
Canvas.MoveTo(R.Left+60+Round(Kx*i*Nx),R.Bottom-33);
     
Canvas.LineTo(R.Left+60+Round(Kx*i*Nx),R.Bottom-27);
     
Canvas.TextOut(R.Left+50+Round(Kx*i*Nx), R.Bottom-20,
                    
IntToStr(i*Nx));
    end;
    i := 0;
    while i*Ny<MaxY do begin
      Inc(i);
     
Canvas.MoveTo(R.Left+63,R.Bottom-30-Round(Ky*i*Ny));
     
Canvas.LineTo(R.Left+57,R.Bottom-30-Round(Ky*i*Ny));
     
Canvas.TextOut(R.Left+30, R.Bottom-35-Round(Ky*i*Ny),
                    
IntToStr(i*Ny));
    end;
    if PLines[isP0,1] >
PLines[isP0,4] then
      PointMax :=
PLines[isP0,4]
    else PointMax :=
PLines[isP0,1];
    if PLines[isP0,2] >
PLines[isP0,5] then
      PointMin :=
PLines[isP0,2]
    else PointMin :=
PLines[isP0,5];
    if PointMin < 0 then PointMin := 0.0;
   
DrawLine(PLines[isP0,1],
            
-(PLines[isP2,1]/PLines[isP0,1]),PLines[isP2,1]);
   
DrawLine(PLines[isP0,2],
            
-(PLines[isP2,2]/PLines[isP0,2]),PLines[isP2,2]);
    DrawLine(0,1,0);
   
DrawLine(PLines[isP0,4],
            
-(PLines[isP2,4]/PLines[isP0,4]),PLines[isP2,4]);
   
DrawLine(PLines[isP0,5],
            
-(PLines[isP2,5]/PLines[isP0,5]),PLines[isP2,5]);
   
Canvas.Brush.Color := clGreen;
   
Canvas.FloodFill(Round((((PointMax-PointMin)/2)*Kx)+R.Left+60),
                    
R.Bottom-55, clBlack, fsBorder);
   
Canvas.Brush.Color := clBtnFace;
   
Canvas.TextOut(R.Right-80, R.Bottom-50, 'P0, TC/M*2');
   
Canvas.TextOut(R.Left+20, R.Top+10, 'P2, TC/M*2');
  end;
end;
end.
unit Edittub;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics,   
  Controls,Forms,
Dialogs, DBFilter, DB, DBTables, Grids, DBGrids, 
  RXLookup, ExtCtrls,
DBCtrls;
type
    TEditDataForm =
class(TForm)
    Panel1: TPanel;
    rxDBLookupCombo1:
TrxDBLookupCombo;
    TableSTUFF:
TTable;
    DataSourceSTUFF:
TDataSource;
    DBGrid1: TDBGrid;
    DataSourceDATA: TDataSource;
    TableDATA:
TTable;
    TableDATAMass:
TFloatField;
    TableDATAR_press:
TFloatField;
   
TableDATAR_stretch: TFloatField;
    TableDATAPuasson:
TFloatField;
    TableDATAR1:
TFloatField;
    TableDATARb:
TFloatField;
    TableDATAR:
TFloatField;
    TableDATAA:
TFloatField;
    TableDATAB:
TFloatField;
    rxDBFilter1:
TrxDBFilter;
    TableDATAStuff:
TSmallintField;
    DBNavigator1:
TDBNavigator;
   procedure rxDBLookupCombo1Change(Sender:
TObject);
   procedure DBNavigator1Click(Sender:
TObject; Button:
                               TNavigateBtn);
   procedure DBGrid1DblClick(Sender:
TObject);
private
    { Private
declarations }
public
    { Public
declarations }
end;
var
  EditDataForm:
TEditDataForm;
implementation
{$R *.DFM}
uses
   EditForm;
procedure
TEditDataForm.rxDBLookupCombo1Change(Sender:
TObject);
var
  S: String;
begin
 
rxDBFilter1.Deactivate;
 
rxDBFilter1.Filter.Clear;
  s:='Stuff =
'+TableSTUFF.FieldByName('Code').AsString;
  rxDBFilter1.Filter.Add(S);
 
rxDBFilter1.Activate;
end;
procedure
TEditDataForm.DBNavigator1Click(Sender:
TObject; Button:
                                          TNavigateBtn);
begin
  case Button of
    nbInsert:
      begin
       
EditDataTub(TableDATA, True,
                   
TableSTUFF.FieldByName('Code').AsInteger);
      end;
    nbEdit:
      begin
       
EditDataTub(TableDATA, False,
                    TableSTUFF.FieldByName('Code').AsInteger);
      end;
  end;
end;
procedure
TEditDataForm.DBGrid1DblClick(Sender:
TObject);
begin
 
EditDataTub(TableDATA, False,
              TableSTUFF.FieldByName('Code').AsInteger);
end;
end.
unit Editform;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics,
  Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, DB,  
  DBTables, Buttons;
type
    TEdTubForm = class(TForm)
    DataSource1:
TDataSource;
    Panel1: TPanel;
    DBEdit1: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    Label7: TLabel;
    DBEdit7: TDBEdit;
    Label8: TLabel;
    Label9: TLabel;
    Panel2: TPanel;
    Panel3: TPanel;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Table1: TTable;
    Label10: TLabel;
    DBText1: TDBText;
    DataSource2:
TDataSource;
    Query1: TQuery;
    Query1Material:
TStringField;
procedure
FormCreate(Sender:
TObject);
public
    FCode: Integer;
    function EditTub( Table: TTable; IsNew:
Boolean; Code: Integer):
                      Boolean;
  end;
var
  EdTubForm:
TEdTubForm;
function
EditDataTub(Table:
TTable; IsNew: Boolean; Code: Integer):
                     Boolean;
implementation
{$R *.DFM}
function
EditDataTub(Table:
TTable; IsNew: Boolean; Code: Integer):
                     Boolean;
begin
  Result := False;
  with TEdTubForm.Create(Application)
do
  try
    FCode := Code;
    Result := EditTub(Table, IsNew, Code);
  finally
    Free;
  end;
end;
function
TEdTubForm.EditTub(Table:
TTable; IsNew: Boolean; Code:
                            Integer):
Boolean;
begin
  if Table <> nil then
   
DataSource1.DataSet := Table
  else begin
    Table1.Open;
   
DataSource1.DataSet := Table1;
  end;
  if IsNew then begin
   
DataSource1.DataSet.Append;
   
DataSource1.DataSet.FieldByName('Stuff').AsInteger := Code;
  end
    else DataSource1.DataSet.Edit;
  Result := ShowModal
= mrOk;
  if Result then
   
DataSource1.DataSet.Post
  else
   
DataSource1.DataSet.Cancel;
end;
procedure
TEdTubForm.FormCreate(Sender:
TObject);
begin
  Query1.Active :=
False;
 
Query1.ParamByName('St').AsInteger := FCode;
  Query1.Active :=
True;
end;
end.
unit EditUser;
interface
uses
  SysUtils, WinTypes,
WinProcs, Classes, Graphics, Forms, Controls,  
  Buttons, StdCtrls, ExtCtrls, DBCtrls,
Mask, DB, DBTables;
type
    TEditUserDialog =
class(TForm)
    OKBtn: TBitBtn;
    CancelBtn:
TBitBtn;
    UsersTable:
TTable;
    dsUsers:
TDataSource;
    NameEdit:
TDBEdit;
    FullNameEdit:
TDBEdit;
    GroupBox:
TGroupBox;
    PasswordEdit:
TDBEdit;
    ConfirmPassword:
TEdit;
    Label1: TLabel;
    Label2: TLabel;
    LevelGroup:
TDBRadioGroup;
    procedure
OKBtnClick(Sender:
TObject);
    procedure CancelBtnClick(Sender:
TObject);
    procedure
FormHide(Sender:
TObject);
private
    { Private
declarations }
public
    { Public
declarations }
    function EditUser(const
UserName: string; Table: TTable; IsNew:
                      Boolean):
Boolean;
end;
var
  EditUserDialog:
TEditUserDialog;
function
EditUserData(const
UserName: string; Table: TTable;
                      IsNew: Boolean): Boolean;
implementation
uses
  Global, Crypt;
{$R *.DFM}
const
  SNotFound =
'Записей не обнаружено';
  SNoConfirmPassword
= 'Вы ввели разные пароли. Проверьте  
                        правильность
ввода';
 
function
EditUserData(const
UserName: string; Table: TTable;
                      IsNew: Boolean): Boolean;
var
  SUName: string;
begin
  Result := False;
  SUName := UserName;
  if glUserLevel <> ulAdministrator then begin
    Table := nil;
    SUName :=
glUserName;
  end;
  with TEditUserDialog.Create(Application)
do
  try
    Result :=
EditUser(SUName, Table, IsNew);
  finally
    Free;
  end;
end;
{ TEditUserDialog }
function
TEditUserDialog.EditUser(const
UserName: string; Table:
                                  Ttable; IsNew: Boolean): Boolean;
begin
  NameEdit.Enabled :=
(glUserLevel = ulAdministrator);
  LevelGroup.Enabled
:= (glUserLevel = ulAdministrator);
  if Table <> nil then begin
    dsUsers.DataSet
:= Table;
    UsersTable.Close;
  end
  else begin
    UsersTable.Open;
    if UserName <> '' then begin
      if not
UsersTable.FindKey([UserName]) then
        raise
Exception.Create(SNotFound);
    end;
    dsUsers.DataSet
:= UsersTable;
  end;
  if IsNew then dsUsers.DataSet.Append
  else dsUsers.DataSet.Edit;
 
ConfirmPassword.Text := PasswordEdit.Text;
  Result := ShowModal
= mrOk;
end;
procedure
TEditUserDialog.OKBtnClick(Sender:
TObject);
begin
  if PasswordEdit.Text <>
ConfirmPassword.Text then
    raise
Exception.Create(SNoConfirmPassword);
 
dsUsers.DataSet.Post;
  ModalResult :=
mrOk;
end;
procedure
TEditUserDialog.CancelBtnClick(Sender:
TObject);
begin
 
dsUsers.DataSet.Cancel;
  ModalResult :=
mrCancel;
end;
procedure
TEditUserDialog.FormHide(Sender:
TObject);
begin
 
dsUsers.DataSet.Cancel;
  UsersTable.Close;
end;
end.
unit Global;
interface
type
  TUserLevel =
(ulInvalid, ulOperator, ulManager, ulAdministrator);
const
  InvalidID = 0;
  glUserLevel:
TUserLevel = ulInvalid;
  glUserName: string
= '';
  glUserID: Longint =
InvalidID;
function
cUserLevel(Code:
Longint): TUserLevel;
implementation
function
cUserLevel(Code:
Longint): TUserLevel;
begin
  Result :=
ulInvalid;
  if (Code in
[Integer(Low(TUserLevel))..Integer(High(TUserLevel))]) then
    Result :=
TUserLevel(Code);
end;
end.
 
unit Global;
interface
type
  TUserLevel =
(ulInvalid, ulOperator, ulManager, ulAdministrator);
const
  InvalidID = 0;
  glUserLevel:
TUserLevel = ulInvalid;
  glUserName: string
= '';
  glUserID: Longint =
InvalidID;
function
cUserLevel(Code:
Longint): TUserLevel;
implementation
function
cUserLevel(Code:
Longint): TUserLevel;
begin
  Result :=
ulInvalid;
  if (Code in
[Integer(Low(TUserLevel))..Integer(High(TUserLevel))]) then
    Result :=
TUserLevel(Code);
end;
end.
 
unit Main;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics,   
  Controls, Forms,
Dialogs, SpeedBar, Menus, ExtCtrls, Placemnt, DB, 
  DBSecur, DBTables;
type
    TStaftForm =
class(TForm)
    SpeedBar:
TSpeedBar;
    ExitItem:
TSpeedItem;
    MainMenu:
TMainMenu;
    FileMenu:
TMenuItem;
   
InsuranceMenuItem: TMenuItem;
   
FileMenuSeperator: TMenuItem;
   
PrinterSetupMenuItem: TMenuItem;
    ExitMenuItem:
TMenuItem;
    DictSetupMenu:
TMenuItem;
    UserMenuItem:
TMenuItem;
    WindowMenu:
TMenuItem;
    TileMenuItem:
TMenuItem;
    CascadeMenuItem:
TMenuItem;
   
MinimizeAllMenuItem: TMenuItem;
   
ArrangeAllMenuItem: TMenuItem;
    HelpMenu:
TMenuItem;
   
HelpContentsMenuItem: TMenuItem;
   
HelpMenuSeparator: TMenuItem;
    AboutMenuItem:
TMenuItem;
   
ChangePasswordItem: TSpeedItem;
    PrintSetupItem:
TSpeedItem;
    CalcItem:
TSpeedItem;
    PrinterSetup:
TPrinterSetupDialog;
    TileWindowsItem:
TSpeedItem;
   
CascadeWindowsItem: TSpeedItem;
    HintPanel:
TPanel;
    DBSecurity1:
TDBSecurity;
    Database1:
TDatabase;
    EditItem:
TMenuItem;
    FormPlacement:
TFormPlacement;
    procedure
ArrangeAllMenuItemClick(Sender: TObject);
    procedure TileMenuItemClick(Sender:
TObject);
    procedure CascadeMenuItemClick(Sender:
TObject);
    procedure MinimizeAllMenuItemClick(Sender:
TObject);
    procedure AboutMenuItemClick(Sender:
TObject);
    procedure
PrinterSetupMenuItemClick(Sender:
TObject);
    procedure
ExitMenuItemClick(Sender:
TObject);
    procedure
FormStorageRestorePlacement(Sender:
TObject);
    procedure
FormStorageSavePlacement(Sender:
TObject);
    function
DBSecurity1CheckUser(UsersTable:
TTable;
const
    Password:
String): Boolean;
    procedure UserMenuItemClick(Sender:
TObject);
    procedure FormCreate(Sender:
TObject);
    procedure
FormDestroy(Sender:
TObject);
    procedure
InsuranceMenuItemClick(Sender:
TObject);
    procedure
ShowHint(Sender:
TObject);
    procedure EditItemClick(Sender:
TObject);
private
    procedure SetUserLevel;
    procedure UpdateMenuItems(Sender:
TObject);
    function ShowForm(FormClass:
TFormClass): TForm;
end;
var
  StaftForm: TStaftForm;
implementation
uses
   About, rxIni,
VCLUtils, Global, AppUtils, EditUser, UserList,
   EditTub, Calc1;
{$R *.DFM}
const
  siMDIChilds =
'OpenMDIChilds';
procedure
TStaftForm.SetUserLevel;
begin
  case glUserLevel of
    ulOperator:
      begin
       
DictSetupMenu.Visible := False;
       
DictSetupMenu.Enabled := False;
       
UserMenuItem.Visible := False;
       
UserMenuItem.Enabled := False;
      end;
    ulManager:
      begin
       
DictSetupMenu.Visible := True;
        DictSetupMenu.Enabled
:= True;
       
UserMenuItem.Visible := False;
       
UserMenuItem.Enabled := False;
      end;
    ulAdministrator:
      begin
       
DictSetupMenu.Visible := True;
       
DictSetupMenu.Enabled := True;
       
UserMenuItem.Visible := True;
       
UserMenuItem.Enabled := True;
      end;
  end;
end;
procedure
TStaftForm.TileMenuItemClick(Sender:
TObject);
begin
  Tile;
end;
procedure
TStaftForm.CascadeMenuItemClick(Sender:
TObject);
begin
  Cascade;
end;
procedure
TStaftForm.MinimizeAllMenuItemClick(Sender:
TObject);
var
  I: Integer;
begin
  for I := MDIChildCount - 1 downto 0 do
   
MDIChildren[I].WindowState := wsMinimized;
end;
procedure
TStaftForm.ArrangeAllMenuItemClick(Sender:
TObject);
begin
  ArrangeIcons;
end;
procedure
TStaftForm.AboutMenuItemClick(Sender:
TObject);
begin
 
ShowAboutDialog('Расчет тюбинговой обделки', 'Королев А.В.',  
                  'МГГУ',
nil, 1, 0, 1996);
end;
procedure
TStaftForm.PrinterSetupMenuItemClick(Sender:
TObject);
begin
  PrinterSetup.Execute;
end;
procedure
TStaftForm.ExitMenuItemClick(Sender:
TObject);
begin
  Close;
end;
function
TStaftForm.ShowForm(FormClass:
TFormClass): TForm;
var
  Form: TForm;
begin
  Result := nil;
  StartWait;
  try
    Form :=
FindForm(FormClass);
    if Form = nil then
     
Application.CreateForm(FormClass, Form);
    with Form do begin
      if WindowState = wsMinimized
then WindowState := wsNormal;
      Show;
    end;
    Result := Form;
  finally
    StopWait;
  end;
end;
procedure
TStaftForm.FormStorageRestorePlacement(Sender:
TObject);
var
  IniFile:
TrxIniFile;
  List: TStrings;
  I: Integer;
  FormClass:
TFormClass;
  Form: TForm;
begin
  StartWait;
  try
    SpeedBar.Visible
:= True;
    IniFile :=
TrxIniFile.Create(FormPlacement.IniFileName);
    try
      if (glUserLevel in
[ulManager, ulAdministrator]) then begin
        List :=
TStringList.Create;
        try
         
IniFile.ReadList(siMDIChilds, List);
          for I := 0
to List.Count - 1 do begin
            FormClass
:= TFormClass(GetClass(List[I]));
            if FormClass
<> nil then ShowForm(FormClass);
          end;
        finally
          List.Free;
        end;
      end;
    finally
      IniFile.Free;
    end;
  finally
    StopWait;
  end;
end;
procedure
TStaftForm.FormStorageSavePlacement(Sender:
TObject);
var
  IniFile:
TrxIniFile;
  List: TStrings;
  I: Integer;
begin
  IniFile :=
TrxIniFile.Create(FormPlacement.IniFileName);
  try
   
IniFile.EraseSection(siMDIChilds);
    List :=
TStringList.Create;
    try
      for I := MDIChildCount - 1 downto 0 do
       
List.Add(MDIChildren[I].ClassName);
      if List.Count > 0 then
       
IniFile.WriteList(siMDIChilds, List);
    finally
      List.Free;
    end;
  finally
    IniFile.Free;
  end;
end;
function
TStaftForm.DBSecurity1CheckUser(UsersTable:
TTable;
const
  Password: String):
Boolean;
begin
  Result := (Password
= UsersTable.FieldByName('Password').AsString);
  if Result then begin
    glUserName :=
UsersTable.FieldByName('UserName').AsString;
    glUserID :=
UsersTable.FieldByName('ID').AsInteger;
    glUserLevel := cUserLevel(UsersTable.FieldByName('UserLevel')
                   .AsInteger);
    Result :=
(glUserLevel <> ulInvalid);
  end;
  if Result then SetUserLevel;
end;
procedure
TStaftForm.UserMenuItemClick(Sender:
TObject);
begin
 
ShowForm(TUserListForm);
end;
procedure
TStaftForm.ShowHint(Sender:
TObject);
begin
  HintPanel.Caption
:= Application.Hint;
end;
procedure
TStaftForm.UpdateMenuItems(Sender:
TObject);
begin
  { Enable or disable
menu items and buttons }
 
CascadeMenuItem.Enabled := MDIChildCount > 0;
 
TileMenuItem.Enabled := MDIChildCount > 0;
 
ArrangeAllMenuItem.Enabled := MDIChildCount > 0;
 
MinimizeAllMenuItem.Enabled := MDIChildCount > 0;
 
TileWindowsItem.Enabled := MDIChildCount > 0;
 
CascadeWindowsItem.Enabled := MDIChildCount > 0;
end;
procedure
TStaftForm.FormCreate(Sender:
TObject);
begin
  Application.OnHint
:= ShowHint;
 
Screen.OnActiveFormChange := UpdateMenuItems;
 
SetAutoSubClass(True);
  { set wait cursor
to SQL }
  WaitCursor :=
crSQLWait;
  { register classes
of MDI-child forms }
 
{RegisterClasses([TDictForm, TRatesForm, TItemReportForm]);}
end;
procedure
TStaftForm.FormDestroy(Sender:
TObject);
begin
 
Screen.OnActiveFormChange := nil;
 
Application.HelpCommand(HELP_QUIT,0);
end;
procedure
TStaftForm.InsuranceMenuItemClick(Sender:
TObject);
begin
  Form1.ShowModal;
end;
procedure
TStaftForm.EditItemClick(Sender:
TObject);
begin
  EditDataForm.Show;
end;
end.
unit UserList;
interface
uses
  SysUtils, WinTypes,
WinProcs, Messages, Classes, Graphics,
  Controls, Forms,
Dialogs, DBCtrls, ExtCtrls, DBTables, DB, Grids,
  DBGrids, RXDBCtrl,
Placemnt, StdCtrls, Buttons;
type
    TUserListForm =
class(TForm)
    UsersTable:
TTable;
    dsUsers:
TDataSource;
    UsersGrid:
TrxDBGrid;
   
UsersTablePassword: TStringField;
    Panel1: TPanel;
    DBNavigator:
TDBNavigator;
    FormPlacement:
TFormPlacement;
    UsersTableID:
TFloatField;
   
UsersTableUserName: TStringField;
   
UsersTableFullName: TStringField;
    UsersTableUserLevel:
TFloatField;
    BitBtn1: TBitBtn;
    procedure DBNavigatorClick(Sender:
TObject; Button:
                               TNavigateBtn);
    procedure
UsersGridDblClick(Sender:
TObject);
    procedure
FormPlacementSavePlacement(Sender:
TObject);
    procedure FormPlacementRestorePlacement(Sender:
TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject;
var Action: TCloseAction);
end;
var
  UserListForm:
TUserListForm;
implementation
uses
   EditUser, IniFiles, Global;
const
  SAccessDenied =
'Недостаточно прав. Доступ запрещен';
{$R *.DFM}
procedure
TUserListForm.DBNavigatorClick(Sender:
TObject;
                                         Button: TNavigateBtn);
begin
  case Button of
    nbInsert:
      begin
       
EditUserData('', UsersTable, True);
      end;
    nbEdit:
      begin
       
EditUserData('', UsersTable, False);
      end;
  end;
end;
procedure
TUserListForm.UsersGridDblClick(Sender:
TObject);
begin
  EditUserData('',
UsersTable, False);
end;
procedure
TUserListForm.FormPlacementSavePlacement(Sender:
TObject);
var
  IniFile: TIniFile;
  I: Integer;
begin
  IniFile :=
TIniFile.Create(FormPlacement.IniFileName);
  try
    for I := 0 to ComponentCount - 1 do begin
      if Components[I] is
TrxDBGrid then
       
TrxDBGrid(Components[I]).SaveLayout(IniFile);
    end;
  finally
    IniFile.Free;
  end;
end;
procedure
TUserListForm.FormPlacementRestorePlacement(Sender:
                                                      TObject);
var
  IniFile: TIniFile;
  I: Integer;
begin
  IniFile :=
TIniFile.Create(FormPlacement.IniFileName);
  try
    for I := 0 to ComponentCount - 1 do begin
      if Components[I] is
TrxDBGrid then
       
TrxDBGrid(Components[I]).RestoreLayout(IniFile);
    end;
  finally
    IniFile.Free;
  end;
end;
procedure
TUserListForm.FormCreate(Sender:
TObject);
begin
  if not (glUserLevel in [ulAdministrator]) then begin
    raise
Exception.Create(SAccessDenied);
  end;
  UsersTable.Open;
end;
procedure
TUserListForm.FormClose(Sender:
TObject;
var
  Action:
TCloseAction);
begin
  Action := caFree;
end;
end.
program
Shaft;
uses
  Forms,
  Main in 'MAIN.PAS'
{StaftForm},
  Global in
'GLOBAL.PAS',
  EditUser in
'EDITUSER.PAS',
  UserList in
'USERLIST.PAS' {UserListForm},
  Edittub in
'EDITTUB.PAS' {EditDataForm},
  Editform in
'EDITFORM.PAS' {EdTubForm},
  Calc1 in
'CALC1.PAS' {Form1},
  Draw in 'DRAW.PAS'
{DrawForm};
{$R *.RES}
begin
 
Application.CreateForm(TStaftForm, StaftForm);
 
Application.CreateForm(TEditDataForm, EditDataForm);
 
Application.CreateForm(TEdTubForm, EdTubForm);
 
Application.CreateForm(TForm1, Form1);
 
Application.CreateForm(TDrawForm, DrawForm);
  Application.Run;
end.
5. Список использованной
литературы.
1. Баклашов
И.В., Картозия Б.А. “Механика подземных сооружений и конструкций крепей” - М.,
Недра, 1992, 543 с.
2. Насонов
И.Д., Федюкин В.А., Шуплик М.Н., “Технология строительства подземных
сооружений” - М., Недра, 1992, 285 с.
3. Насонов И.Д., Шуплик М.Н. “Закономерности
формирования ледопородных ограждений при сооружении стволов шахт” - М., Недра,
1976, 237 с.
4. Храпов В.Г. “Тоннели и метрополитены” - М.,
Транспорт, 1989, 383 с.
5. Белый В.В. “Справочник инженера
шахтостроителя” в 2-х томах - М., 1983
6. Туренский Н.Г., Ледяев А.П. “Строительство
тоннелей и метрополитенов” - М., Транспорт, 1992, 264 с.
7. Богомолов Г.М., Голицынский Д.М. Сеславинский
С.И. “Справочник инженера тоннельщика” - М., Транспорт, 1993, 389 с.
Реферат на тему метрополитен музей с оглавлением и из каких литератур они взяты. Расчет замораживания вмещающих пород вертикального ствола. Нагрузки на обделку тоннеля научные материалы автореферат. Установка термометрической трубы калькуляция. Реферат на тему внутренне очертание обделок. Расчет горного давления на обделку тоннеля. Паспорт несущей способности чугунной крепи. Выбор материалов реферат технология. Марки тюбинга для крепления ствола. Калькуляция водоотлива в траншеи. Расчет материалов для стола. Тюбинговая обделка стволов. Обделки конструкция выбор. Расчет тюбинговой обделки. Расчет вертикальной опоры.

© 2011 Рефераты