Формализованный синтез структур и законов управления системами газоснабжения стартовых комплексов космических ракет
Диссертация
Согласно первому варианту структура СГ (назовем ее СГ1) предполагает наличие одной секции, а закон управления ею предписывает ее постоянное подключение к магистрали выдачи газа потребителю на всем интервале времени, определяемом заданной циклограммой потребления. Объем и давление в секции выбраны так, чтобы кривая падения давления в секции (сплошная плавная линия) всегда располагалась выше… Читать ещё >
Содержание
- Предисловие
- Глава 1. Формализация задачи синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет, анализ возможных подходов к ее решению
- 1. 1. Математическая постановка задачи синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 1. 2. Анализ возможных подходов к решению задачи
- 1. 3. Основные результаты
- Глава 2. Метод синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 2. 1. Задача синтеза структур и законов управления системой газоснабжения в случае одной секции источника питания и одной магистрали (задача 1—>1) и алгоритм ее решения
- 2. 2. Использование модельного времени в алгоритме решения задачи 1—>
- 2. 3. Задача синтеза структур и законов управления системой газоснабжения в случае п секций источника питания и одной магистрали (задача п—>1) и алгоритм ее решения
- 2. 3. 1. Алгоритм решения задачи в случае двух секций источника питания и одной магистрали
- 2. 3. 2. Алгоритм решения задачи в случае п секций источника питания и одной магистрали
- 2. 3. 3. Использование модельного времени в алгоритме решения задачи п—>
- 2. 4. Задача синтеза структур и законов управления системой газоснабжения в случае п секций источника питания и ш магистралей (задача п—>т) и алгоритм ее решения
- 2. 5. Использование привязки моментов переключения функции управления к фронтам циклограммы потребления
- 2. 6. Формирование множества обобщенных потребителей
- 2. 7. Этапы метода формализованного синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 2. 8. Основные результаты
- Глава 3. Автоматизированная система синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 3. 1. Общие сведения об автоматизированной системе синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 3. 2. Описание логической структуры данных и алгоритмов автоматизированной системы синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 3. 3. Функциональные возможности программы синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 3. 4. Основные результаты
- Глава 4. Практическая апробация метода синтеза структур и законов управления системами газоснабжения стартовых комплексов космических ракет
- 4. 1. Синтез структур и законов управления системой газоснабжения, обеспечивающей предстартовую подачу гелия на борт ракеты «3EHHT-3SL»
- 4. 2. Синтез структур и законов управления системой газоснабжения, обеспечивающей предстартовую подачу азота на борт ракеты «3EHHT-3SL»
- 4. 3. Основные результаты
Список литературы
- Арзуманов Ю.Л., Петров P.A., Халатов Е. М. Системы газоснабжения и устройства пневмоавтоматики ракетно-космических комплексов.— М.: Машиностроение, 1997. — 464 с.
- Бутаенко В.Ф. Пневмоавтоматика ракетно-космических систем./Под ред. акад. B.C. Будника — М.: Машиностроение, 1979. — 168 с.
- Космонавтика. Энциклопедия / Под ред. В. П. Глушко — М.: Сов. Энциклопедия, 1985. — 528 с.
- Халатов Е.М. Концепция гибкой структуры систем газоснабжения стартовых комплексов космических ракет // Справочник. Инженерный журнал. — 1998. — № 1 — с.48−52.
- Мамонтов М.А. Некоторые случаи течения газа. — М. Оборонгиз, 1951. — 490 с.
- Мамонтов М.А. Вопросы термодинамики тела переменной массы. — М.: Оборонгиз, 1961. — 528 с.
- Герц Е.В., Крейнин Г. В. Теория и расчет силовых пневматических устройств. — М: АН СССР, 1960. — 278 с.
- Пневматические устройства и системы в машиностроении: Справочник. / Под общ. редакцией Е. В. Герц. — М. Машиностроение, 1981. —408 с.
- Вукалович М.П., Новиков И. И. Техническая термодинамика. — М., 1968,-304 с.
- Абрамович Г. Н. Прикладная газовая динамика. — М. 1969. — 824 с.
- Подчуфаров Б.М. Введение в динамику тепломеханических систем. — Тула: ТПИ, 1969. — 102 с.
- Подчуфаров Б.М. Основы динамики тепломеханических систем. Учебное пособие. — Тула.: ТулПИ, 1982. — 83 с.
- Подчуфаров Б.М. Основы управления и регулирования тепломеханических систем. Учебное пособие. — Тула.: ТулПИ, 1982. — 59 с.
- Подчуфаров Б.М. Тепломеханика. Учебное пособие. — Тула: ТПИ, 1984. — 100 с.
- Чекмазов В.И. Некоторые вопросы динамики пневматического редуктора давления. — Известия ВУЗ-ов. — 1966. — № 8. — с. 115−119.
- Шорников Е.Е., Чекмазов В. И. Газовые и гидравлические системы управления: учебное пособие. — Тула, ТПИ, 1885. — 79 с.
- Справочник по теории автоматического управления. /Под ред. A.A. Красовского — М.: Наука, Гл. ред. Физ.-мат. Лит. 1987. -— 712 с.
- Ройтенберг Я.Н. Автоматическое управление. — М. Наука, 1978.
- Попов Е.П. Теория линейных систем автоматического регулирования и управления. — М. 1978. — 256 с.
- Теория автоматического управления. 4.1. Теория линейных систем автоматического управления. / Под ред. A.A. Воронова — М., «Высшая школа», 1977. — 303 с.
- Теория автоматического управления. 4.2. Теория нелинейных систем автоматического управления./ Под ред. A.A. Воронова — М., «Высшая школа», 1977. — 320 с.
- Понтрягин JI.C., Болтянский В. Г., Гамкрелидзе В. В., Мищенко Е. Ф. Математическая теория оптимальных процессов. — М., Наука, 1969.
- Болтянский В.Г. Математические методы оптимального управления. — М., Наука, 1969. — 408 с.
- Фельдбаум A.A. Основы теории оптимальных автоматических систем. — М. Физматгиз. 1963.
- Иванов В.А., Фалдин Н. В. Теория оптимальных систем автоматического управления. — М.: Наука, Гл. ред. физ.-мат. Лит. 1981. — 336 с.
- Атанс М., Фалб П. Оптимальное управление. — М.: Машиностроение. 1968.
- Беллман Р. Динамическое программирование. — М. ИЛ, 1960. -400с.
- Беллман Р., Дрейфус С. Прикладные задачи динамического программирования. — М.: Наука, 1965.
- Беллман Р., Каллаба Р. Динамическое программирование и современная теория управления. — М.: Наука, 1969.
- Химмельблау Д. Прикладное нелинейное программирование.— М.: Мир, 1975. — 532 с.
- Гил Ф., Мюррей У., Райт М. Практическая оптимизация. — М.: Мир, 1985. — 509с.
- Форсайт Дж., Малькольм М., Моулер К. Машинные методы математических вычислений. — М., 1980. — 360 с.
- Моисеев H.H. Методы оптимизации — М. Наука, 1978. — 562с.
- Моисеев H.H. Численные методы в теории оптимальных систем.— М. Наука, 1971. — 523 с.
- Моисеев H.H. Элементы теории оптимальных систем. — М. Наука, 1975. —458 с.
- Корбут A.A., Финкелынтейн Ю. Ю. Дискретное программирование — М. Сов. Радио. — 1969.
- Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. — М. Энергоатомиздат, 1988. — 480 с.
- Юдин Д.Б., Гольштейн Е. Г. Линейное программирование. Теория, методы и приложения. — М.: Наука, 1969.
- Современное состояние теории исследования операций. /Под ред. H.H. Моисеева. — М.: Наука, 1979. — 464с.
- Аоки М. Введение в методы оптимизации. — М.: Наука. 1977. —343 с.
- Норенков И.П. Введение в автоматизированное проектирование технических устройств и систем. — М.: Высшая школа, 1980. —312 с.
- Крон Т. Исследования сложных систем по частям — диакоптика. — М.: Наука, 1972.
- Вермишев Ю.Х. Методы автоматического поиска решений при проектировании сложных технических систем. — М.: Радио и связь, 1982. — 152 с.
- Ильин В.Н. Основы автоматизации схемотехнического проектирования. — М.: Энергия. 1979. — 392 с.
- Лэсдон JI.C. Оптимизация больших систем. / Под ред. A.A. Первозванского. — М.: Наука, 1975. — 431 с.
- Projectirung mit intelligenter Rechnerunterstutzung / Feldmann Dierk G., Nisser Kay Peter // Olhydraul und Pneum. — 1992., — 36 № 3 — стр. 169−175. 129. — Нем., рез. англ.
- САЕ in der Hydraulik — Dichtung und Warheit // Technica (Suisse). — 1993. — 42, № 8. — стр. 14−17. — Нем.
- Чкалов B.B. // Совершенствование и автоматизация производственных процессов: Тезисы доклада. / Челябинский государственный технический университет. — Челябинск, 1991. — стр. 4−5 — Рус.
- Optimisierte Auslegung von Pneumatikanlagen // Druklufttechnik. — 1994. — № 7−8. стр. 48−49. Нем.
- Shaltmen-Projectprogram hat zusatzliches Revisionsmodul // Maschinenmarkt. — 1994. — 100 № 12 стр. 79. Нем.
- Progettazione con ELCAD di impianti oleoidraulici // Fluid: Appar. idraul. e pheum. — 1993. — 33. № 353 — стр. 99. Ит.
- Konstructions-Software fur den Rohrleistungs- und Anlagenbau. // Ind. — Anz. 1994. — 166, № 27−28, стр. 53 — Нем.
- Zhang Xianglin e.a. // Jichuang yu yeya = Mach, tool and Hydraul. — 1994. — № 6 — стр. 321−324. — Кит.- рез. англ.
- Fluid power software showcase / Hitchcox A. // Hydraul and Pneum. (USA) — 1995. — 48, № 2. — стр. 31−33. Англ. Место хранения — ГПНТБ.
- Planungsshinweise fur Druckluftnetze / Schmitter Wolfgang // Drucklufttechnik. — 1995., № 9−10. Стр. 52, 54−56.
- Simulare Fmpianto // Fluid: Appar. idraul. e pheum. — 1991. — 31. № 330 —стр. 42. Ит.
- Modellazione di sistemi pneumatici / Ferrarezi Carlo // Fluid: Appar. idraul. e pheum. — 1993. — 33. № 346 — стр. 48−59. Ит.
- Сравнение методов расчёта динамики пневматических исполнительных механизмов. // Донской А. С., Лазариди Х. С., Свидская Н.Е.- СПб. гос. университет технологии и дизайна. — СПб., 1995. — 10 с. рус. деп. в ЦНИИТЭИлегпром 8.8.95, №№ 3614-лп 95.
- Kanda Kunio // Yuatsu to Kukiatsu = J. Jap. Hydraul. and Pneum. Soc. — 1996. — 26, № 1 — стр. 95−97 — Яп.
- Simularea sistemelor hidraulice metode de studiu si modelare matematica / Auram M., Aupei O. // Constr. mas. — 1994. — 46., № 11−12, стр. 17−21, VIII, IX — Рум., рез. англ., фр., нем.
- Крутько П.Д. Обратные задачи динамики управляемых систем. Линейные модели. — М.: Наука, 1987.
- Халатов Е.М., Петрищев П. К., Мозжечков В. А. Оптимизация законов управления системами газоснабжения стартовых комплексов космических ракет. // ТулГУ. — Тула, 1998. 42 с. Деп. в ВИНИТИ 17.06.98, № 1818-В98.
- Петров P.A., Халатов Е. М., Петрищев П. К., Мозжечков В. А. Синтез оптимальных структур и законов управления системами газоснабжения стартовых комплексов комических ракет. // Справочник. Инженерный журнал. — 1999. — № 1. — с. 18−25.
- Петрищев П.К., Халатов Е. М., Мозжечков В. А. Автоматизированный синтез оптимальных структур и законов управления систем газоснабжения стартовых комплексов. ЦНИИМАШ. Фонд алгоритмов и программ по ракетно-космической технике. Per. № 4083, 1999 г.
- Петрищев П.К., Мозжечков В. А. Методы решения задачи оптимального синтеза систем газоснабжения стартовых комплексов // Сборник тезисов докладов XII НТК Тульского АИИ. — Тула, 1999. — с. 676, 677.
- Основная программа. Файл Sps tv. pas$A-, B-, D+, E+, F+, G-, I+, L+, N+, 0~, P-, Q-, R-, S+, T-, V+, X+}$M 16 384,0,655 360}$Define TurboVision }
- Program SintezOfPneumoSystems —
- Uses Simula, Types, Crt, Dos, Keys, ThingCol, Objects,
- BGI6, Graphics, GPrint, Graph, Math, RealLn, SPSDlg, App, Menus, Drivers, Views, Memory, Dialogs, MsgBox, StdDlg, Gadgets, Look — Const NW: Longlnt = 0 —
- NumWritten: IntType = 0 — Const NStep: Word = 100 W: RealType =4 001. NSepMax Word = -mMax Word = 3nMax Word = 41. NSepMin Word = 4mMin Word = 3nMin Word 31. Объём одного баллона }
- MaxSection = 255 — Var fg, fq, fqM: PGraphic -tau, fqi, fgi: PThingCollection
- SepTimes Variants mfg, mfq Users Oper User U,
- BeginU, PlaceU, ShortU: nSep { N m, n, d Fronts: Counts: I S
- PThingCollection PThingCollection PCollection — PCollection — POperation — PUser —
- Времена переключений } { Полная информация о вариантах }1. String }, 1. Boolean Char —
- OMem, OMax: Longint — Begin
- OMem := MemAvail — OMax := MaxAvail — SPS. Init — SPS. Run — SPS. Done —
- WriteLn ('© DP Technology, Corp &1. Forward Forward Forward
- DP CrazyGraphics, Inc, 1996−99')
- Типы данных, используемые в программе. Файл Types. pas$ F+}
- Unit Types — { Базовые объектные типы для программы SPS } InterFace
- Uses Simula, Graph, Graphics, Objects, ThingCol, Crt — { Давление атмосферы } { Расход — г/сек 10.5000 } { Время — минуты } { Объем — литры } Const LName = 30 -1.omment = 100 — LField = 20 —
- PSNGraph = ATSNGraph — TSNGraph = Object (TGraphic)1. Constructor Init —
- Procedure InsertPoint (XCoord, YCoord: Real -1. Comment: String) -1. Procedure Draw -1. End -1.tType = Longlnt —
- PSpecialStringCollection = ATSpecialStringCollection — TSpecialStringCollection = Object (TStringCollection)
- Function Compare (Keyl, Key2: Pointer: Integer -1. Virtual -1. End —
- PNoSortStringCollection = ATSpecialStringCollection — TNoSortStringCollection = Object (TStringCollection)
- Function Compare (Keyl, Key2: Pointer: Integer -1. Virtual -1. End —
- TRealFunction = Function (t: RealType) TIntFunction = Function (t: IntType) PGas = ATGas -1. RealType — IntType -1. TGas = Record1. Name Comment mM1. End —
- PSection = ATSection TSection = RecordС1. Po, Pe n W1. End -1. PUser = ATUser —
- TUser = Object (TCollection)
- String LName. — String [ LComment ] Real -1. RealType1. RealType Word — RealType
- Емкость секции } { Начальное и } { конечное давление } { Количество баллонов в секции } { Объем баллона }
- Name: String — { Уникальное имя потребителя } V: RealType — { Объем }t0: RealType — { Начало первой операции } Constructor Init (N: String — aV: RealType) ,
- Destructor Done — Virtual —
- Function te: RealType — { Конец последней операции } Function q (t: RealType): RealType — { Запрашиваемоедавление }
- Function g (t: RealType): RealType — { Расход } Procedure Save (Var f: File) — Procedure Load (Var f: File) — Procedure Print (FName: String) -1. End —
- POperation = ATOperation — TOperation = Object (TObject) {Record}1. OName UName ONumber OTypeнаддув }1. CBegin PrevOpзавершены }1. BTime, ETime Gas Pдавление }1. Go, tgпадения расхода }mгаза }
- Constructor Init (ON, UN: String — ONum: Word) —
- Destructor Done — Virtual —
- Procedure Save (Var f: File) —
- Procedure Load (Var f: File) —
- Length (SI) <= Length ( S2 ) Then Compare If Length ( SI )> Length (S2) Then Compare1. End —
- TNoSortStringCollection } Function TNoSortStringCollection. Compare -1. Begin {-1 if Keyl
Key2 }1. Compare := -1 -1. End — { TUser } - Constructor TUser. Init — Begin1. herited Init (1, 1) —
- String — { Уникальное имя операции }
- String — { Имя пользователя }: Word — { Номер операции }: Byte — { Тип операции продувка или
- Byte — { Условие начала }: PStringCollection — { Коллекция имен ONameопераций, которые должны быть
- Время начала операции }: RealType — { Время завершения операции }: TGas — { Газ }
- RealType — { Достигаемое/поддерживаемое
- Начальное значение расхода }: RealType — { Постоянная времени экспоненты
- RealType — { Требуемая/прокачиваемая масса1. N — = aV —
- MaxLonglnt — { Просто очень большое число }1. Name Vto1. End —
- Destructor TUser. Done — Begin1. herited Done1. End —
- Procedure TUser. Save — Var I: Integer — Begin
- BlockWrite (f, Name, SizeOf (Name)) — BlockWrite (f, V, SizeOf (V)) — I := Count 1 —
- BlockWrite (f, I, SizeOf (I)) —
- For I := 0 To Count 1 Do TOperation (At (I)Л).Save (f) -1. End —
- Procedure TUser. Load — Var I, J: Integer — Begin
- Procedure TUser. Print — Var I: Integer -f: Text — Begin1. Fname = '' Then Begin
- AssignCRT (f) — Rewrite (f)1. End Else Begin1. Assign (f, FName) -$ 1-}1. Append (f) -$ 1+}
- IOResult <> 0 Then Rewrite (f)1. End —
- WriteLn (f, 'Name: ', Name) — WriteLn (f, ' V: ', V: 20: 5) — Close (f) —
- For I := 0 To Count 1 Do TOperation (At (I)л).Print (FName)1. End —
- Function TUser. te — Var I: Integer -r: RealType — Beginr := Self. tO -1. For I := 0 To Count 1 Do
- TOperation (At (I)л J. ETime > r
- Then r := TOperation (At (I)A).ETime -te := r1. End -1. Function TUser. q —
- Var NCountOp: Integer — { Номер текущей операции } CountOp: POperation — { Текущая операция } Found: Boolean — Begin1. Found := False —
- For NCountOp := 0 To Count 1 Do Begin
- CountOp := At (NCountOp) — If (t ≥ CountOpA. BTime) Andt ≤ CountOpA. ETime) Then Begin Found := True — Break End1. End —
- Пока условия завершенности предыдущих операций опускаются } If Not Found Then q := 0 Else q := CountOp''4. P -1. End -1. Function TCJser. g —
- Function PaintG (tB, gB, { Начальное время и расход }tg, { Постоянная времени экспоненты }t { Текущее время }1. RealType): RealType -1. Var PG: RealType — Begin
- Экспонента, спадающая от точки tB, gB }до нуля с постоянной времени tg }
- PG := Exp (tg * t + Ln (gB) + tg * tB) — PaintG := PG1. End —
- Var NCountOp: Integer — { Номер текущей операции } CountOp: POperation — { Текущая операция } Found: Boolean — Begin1. Found := False —
- For NCountOp := 0 To Count 1 Do Begin
- CountOp := At (NCountOp) — If (t ≥ CountOpA. BTime) Andt ≤ CountOpA. ETime) Then Begin Found True — Break End1. End —
- Пока условия завершенности предыдущих операций опускаются } If Not Found Then g := 0 Else Case CountOpA. OType Of Produv: g := CountOpA. Go —
- Nadduv: g := PaintG (CountOpA.BTime, CountOpA. Go, 1. CountOpA. tg, t) -1. Nadduv: With CountOpA Dog := Exp (tg * t + Ln (Go) + tg * BTime)1. End1. End -1. TOperation }
- Constructor TOperation. Init — Begin1. herited Init —
- PrevOp := New (PStringCollection, Init (1, 1)) -1. Complete := False —
- OName ON — UName := UN — ONumber := ONum1. End —
- Destructor TOperation. Done — Begin
- Dispose (PrevOp, Done) — Inherited Done1. End —
- Procedure TOperation. Save -1. Var I: Integer -1. PS: PString — Begin
- BlockWrite (f, PSA, SizeOf (PS"")) -1. WriteLn (I)1. End —
- BlockWrite fr BTime r SizeOf BTime)) —
- BlockWrite f, ETime r SizeOf ETime)) —
- BlockWrite f, Gas f SizeOf Gas)) /
- BlockWrite f, P r SizeOf P))
- BlockWrite fr Go / SizeOf Go)) f
- BlockWrite f, tg r SizeOf tg)) T
- BlockWrite f, m r SizeOf m)) -1. End —
- Procedure TOperation. Load — Var I, J: Integer -1. S: String — Begin
- BlockRead (f, S, SizeOf (S)) —
- PrevOp Insert (NewStr (S)) -1. End —
- BlockRead (fr BTime f SizeOf { BTime)
- BlockRead (f, ETime f SizeOf (ETime)
- BlockRead (f, Gas t SizeOf (Gas))
- BlockRead (fr P r SizeOf (P)) —
- BlockRead (fr Go f SizeOf (Go))
- BlockRead (fr tg t SizeOf (tg)) —
- BlockRead (fr m / SizeOf (m)) -1. End —
- Procedure TOperation. Print — Var I: Integer — PS: PString — f: Text — Begin1. Fname = '' Then Begin
- AssignCRT (f) — Rewrite (f)1. End Else Begin1. Assign (f, FName)1. Append if)-1. End r
- WriteLn f, ' OName: ', OName) —
- WriteLn fr ' UName: ', UName) —
- WriteLn f, ' ONumber: ', ONumber) —
- WriteLn fr ' OType: ', OType) —
- WriteLn fr ' CBegin: ', CBegin) —
- WriteLn (f, ' BTime: ', BTime: 20: 5) /
- WriteLn (f, ' ETime: ', ETime: 20: 5) i
- WriteLn (f, ' Gas: ', Gas Name) —
- WriteLn (f, ' P: P: 20: 5) r
- WriteLn (f, ' Go: ', Go 20: 5 —
- WriteLn (f, ' tg: ', tg 20: 5 -1. WriteLn (f, ' m: m) r
- For I := 0 To PrevOpA. Count-1 Do Begin1. PS := PrevOpA. At (I) —
- WriteLn (f, ' Completed: PSA) -1. End -1. Close (f) -1. End -1. TSNGraph }
- Constructor TSNGraph. Init — Begin
- TThingCollection.Init (10, 10, SizeOf (TCommentCoord)) -1. XUp := 0 -1. XDown: = 0 -1. YUp := 0 -1. YDown := 0 -1. HeightX := 0 -1. WidthY := 0 -1. End —
- Procedure TSNGraph. InsertPoint — Var Coord: TCommentCoord — Begin1. Count = 0 Then Begin
- MaxX := XCoord — MaxY := YCoord — MinX := XCoord — MinY := YCoord -1. End Else Begin
- XCoord > MaxX Then MaxX := XCoord — If YCoord > MaxY Then MaxY := YCoord — If XCoord < MinX Then MinX := XCoord — If YCoord < MinY Then MinY := YCoord —
- End — Coord. X := XCoord — Coord. Y := YCoord — Coord. Comment := Comment — Insert (NewThing (Coord))1. End —
- Procedure TSNGraph. Draw — Var OGC: Word -1. PC: PCommentCoord —
- Calculator: Integer — Begin
- OGC := GraphColor — GraphColor := GetBkColor — Inherited Draw — PC := At (0) — GraphColor := OGC —
- For Calculator := 0 To Count 1 Do Begin1. PC := At (Calculator) —
- PieSlice (TGraphic.X (PCA.X), TGraphic. Y (PCA.Y), 0, 360, 2)
- Процедуры рисования графиков. Файл DrawGr. inc
- Var vFile: File Of TVariant — Const vName = 'Variants.$$$ 1 —
- Function Pc (Rest: RealType — Baloons: Word — U: String): RealType — Forward —
- Function Rel (Baloons: Word — U: String): RealType — Forward — { Процедуры рисования графиков }
- Procedure DrawStatusLine (StatLine: String) —
- Var ViewPort: ViewPortType -1. Begin
- GetViewSettings (ViewPort) —
- SetViewPort (0, GetMaxY TextHeight ('Gg'), GetMaxX, GetMaxY, ClipOff) -1. ClearViewPort —
- OutTextXY (0, 0, StatLine) —
- With ViewPort Do SetViewPort (XI, Yl, X2, Y2, Clip) -1. End —
- Procedure DrawGraph (Graphic: PSNGraph) -1. Var Key: Char — {gd, gm: Integer -1. Begin$IfDef TurboVision } DoneSysError- DoneEvents- DoneVideo- DoneMemory- {$EndIf }1.itScreen -gd := Detect -1.itGraph (gd, gm, ' ') —
- Graphic".SetWindow (100, 10, GetMaxX 20, GetMaxY — 30) — Graphic".SetColors (White, White, White, White) — Graphic".SetDiv (SepOn, SepOn, LinesOff, LinesOff) — Graphic".SetText (10, 4 0) — Graphic".Draw — Repeat
- DrawStatusLine ('FlO-печать Esc-закончить просмотр1) -1. Key := ReadKey -1. Key = ExtCode Then1. ReadKey = FlOKey Then1. Begin1. Repeat
- InitPrn (PrnNum) Then Begin
- DrawStatusLine ('Esc-прервать печать') — CopyToPrn (0, 0, GetMaxX, GetMaxY 20,
- GetBkColor, 1, 1, 1, False) — ClearViewPort — Graphic".Draw — Break1. End Else Begin
- DrawStatusLine ('Принтер не готов ! Escпрервать Enter-продолжить') —
- ReadKey = EscKey Then Break1. End -1. Until False1. End —
- Until Key = EscKey — DoneScreen — {$IfDef TurboVision } InitMemory-1.itVideo- InitEvents- InitSysError- Application".Redraw- {$EndIf } End —
- Procedure DrawNRest — Var Graphic: PSNGraph —
- Vars: PThingCollection — I, J: Integer — V, W: TVariant — Find: Boolean — Sm, SNSep, Sd: String — Begin1. ReSet (vFile) —
- Vars := New (PThingCollection, Init (5, 1, SizeOf (TVariant))) — Graphic := New (PSNGraph, Init) —
- For I := 0 To Variants'*.Count 1 Do
- While Not EoF (vFile) Do Begin
- V := TVariant (Variants".At (I)A) —
- Read (vFile, V) — Find := False —
- For J := 0 To VarsA. Count 1 Do Begin
- W := TVariant (VarsA.At (J)A) — If (V.n = W. n) And (V.m = W. m) Then Begin
- Find := True — If V. Rest < W. Rest
- Then TVariant (VarsA.At (J)A) := V1. End -1. End —
- Not Find Then VarsA. Insert (VarsA.NewThing (V)) -1. End —
- For I := 0 To VarsA. Count 1 Do Begin
- V := TVariant (VarsA.At (I)A) — Str (V.m, Sm) —
- Str (V.NSep, SNSep) — Str (V.d, Sd) —
- GraphicA.InsertPoint (V.n, V. Rest, 'N=' + SNSep + ' m=' + Sm + ' d=' + Sd) — End -1. nMax = nMin Then
- Begin GraphicA. MaxX := nMax + 1 — GraphicA. MinX := nMin 1 End — DrawGraph (Graphic) — Dispose (Graphic, Done) — Dispose (Vars, Done) -1. End —
- Procedure DrawDRest — Var Graphic: PSNGraph — I: Integer — V: TVariant — Sm, SNSep, Sn: String — Begin1. ReSet (vFile) —
- Graphic := New (PSNGraph, Init) —
- For I := 0 To Variants".Count 1 Do
- While Not EoF (vFile) Do Begin
- Объектные типы данных для интерфейса. Файл TVTypes. inc1. Типы TV } Туре1. PSPSInfо = ATSPSInfo —
- TSPSInfо = Object (TInfoStatus)
- Params: PStaticText — Constructor Init (T: String) Procedure UpdateParams (Status1. Word1. NSep, n, m, d: Byte)1. Virtual {
- Procedure UpdateVectors (Status
- Word — U: String — Rest: RealType)1. Virtual1. End
- SPSApp = Object (TApplication)1.foWindow: PSPSInfо — E: TEvent -f: Text — Heap: PHeapView- UserWindow: PUserWindow — NumOfComb,
- CalculatedComb: RealType — Constructor Init — Destructor Done — Virtual — Procedure InsertVar (NSep, m, n, d :
- Rest: RealType nBaloons: Word U: String) — Function q (Users: PCollection — t RealType — { Обобщенное запрашиваемое давление }
- Function g (gUsers: PCollection — t: RealType — { Обобщенный расход }
- Procedure CalcQ (Users: PCollection — Procedure CalcG (CgUsers: PCollection1. Byte -r. r1. RealType) :1. RealType) :fq: PGraphic) — fg: PGraphic)1. Virtual
- Procedure PrintResult (Name: String) —
- Procedure Calculation — Procedure N20ne — Procedure N20neM — Procedure N2M —
- Procedure OutOfMemory — Virtual — Procedure Idle — Virtual — Procedure About —
- End — { Implementation } { SPSApp }1. Constructor SPSApp. Init -1. Var R: TRect -1. Begin
- Users := New (PCollection, Init (1, 1)) —
- DisableCommands (cmDel, cmDelAll, cmNRest, cmDRest, cmStNad .) — SepTimes := New (PThingCollection, Init (5, 1, SizeOf (RealType)))
- Variants := New (PThingCollection, Init (5, 1, SizeOf (TVariant
- Assign (vFile, vName) — Inherited Init — GetExtent® — Dec (R.B.X) —
- R.A.X := R.B.X 9- R.A.Y := R.B.Y — 1- Heap := New (PHeapView, Init®) — Insert (Heap)-1. End -1. Destructor SPSApp. Done -1. Begin {
- Dispose (Gl, Done) — Dispose (G2, Done) —
- Dispose (SepTimes, Done) —
- Dispose (Variants, Done) -$ 1-}
- Erase (vFile) — If IOResult <> 0 Then -$ 1+}
- Dispose (Users, Done) — Dispose (Heap, Done) — Inherited Done1. End —
- Function SPSApp. SelectSys -1. Var R: TRect -1. Begin1. UsersA. FreeAll —
- GetFileName ('*.sps', DataFile) = cmCancel Then Begin SelectSys := False — Exit End — tO := MaxLonglnt — te := 0 -1.adUsers (DataFile) —
- EnableCommands (cmCalculation .) -1. SelectSys := True —
- ApplicationA.GetExtent (R) -1. R.B.X := R.B.X Div 2 -1. R.B.Y := R.B.Y 2 —
- UserWindow := New (PUserWindow, Init (R, Users, 'Потребители')) DeskTopA. Insert (UserWindow)1. End —
- Procedure SPSApp. SelectMethod — Var Dialog: PDialog — R: TRect —
- Control: Word — M, Fr: PView — Begin
- R.Assign (0, 0, 43, 11) —
- Dialog := New (PDialog, Init (R, 'Выбор метода решения')) — DialogA. Options := Options or ofCentered — With DialogA Do Begin
- R.Assign (4, 2, 39, 5) — M := New (PRadioButtons, Init (R, NewSItem ('n'+#26+'l',
- NewSItem ('n'+#26+'l, метод модельного времени', NewSItem ('n'+#26+'m', Nil))))) -1.sert (M) —
- R.Assign (9, 6, 33, 7) —
- Fr := New (PCheckboxes, Init (R,
- FrA.SetData (Byte (Fronts)) —
- Control := DeskTopA. ExecView (Dialog) -1. Control <> cmCancel1. Then Begin1. MA. GetData (Method) —
- FrA.GetData (Byte (Fronts)) -1. End —
- Dispose (Dialog, Done) -1. End —
- Procedure SPSApp. SetPrices — Var P: Record1. Pb, PI, Pg, 1. Relpk, Relb, 1. Rell: Real -1. End-1. Dig: PDialog -1. R: TRect —
- Control: PView — С: Word -1. Begin1. P. Pb := Pb -1. P. PI := PI -1. P. Pg := Pg -1. P. Relpk := Relpk -1. P. Relb := Relb -1. P. Rell := Rell —
- R.Assign (21, 4, 58, 19) —
- New (Dig, Init (R, 'Цены и вероятности')) —
- DlgA.Options := DlgA. Options or ofCenterX or ofCenterY —
- R.Assign (21, 3, 34, 4) —
- Control := New (PRealLine, Init (R, 20, 10)) — DlgA. Insert (Control) — R. Assign (2, 3, 20, 4) —
- DlgA.Insert (New (PLabel, Init (R, 'Стоимость баллона', Controlr
- R.Assign { 21, 4, 34, 5) —
- Control := New (PRealLine, Init (R, 20, 10)) — DlgA. Insert (Control) — R. Assign (2, 4, 18, 5) —
- DlgA.Insert (New (PLabel, Init (R, 'Стоимость линии', Control)) R. Assign (21, 5, 34, б) —
- Control := New (PRealLine, Init (R, 20, 10)) — DlgA. Insert (Control) — R. Assign { 2, 5, 17, 6) —
- DlgA.Insert (New (PLabel, Init (R, 'Стоимость газа', Control))) R. Assign (11, 8, 34, 9) —
- Control := New (PRealLine, Init (R, 20, 10)) — DlgA. Insert (Control) — R. Assign (2, 8, 10, 9) —
- DlgA.Insert (New (PLabel, Init (R, 'Клапана', Control))) — R. Assign (11, 9, 34, 10) —
- Control := New (PRealLine, Init (R, 12, 10)) — DlgA. Insert (Control) — R. Assign (2, 9, 10, 10) -1. Control)))1. R, 'Линии
- Control))) — cmOK, bfDefault)) -cmCancel, bfNormal))
- DlgA.Insert (New (PLabel, Init (R, 'Баллона' R. Assign (11, 10, 34, 11) —
- Control := New (PButton, Init (R, '~C~ancel' DlgA. Insert (Control) — R. Assign (3, 7, 35, 8) —
- Control := New (PStaticText, Init (R, 'Вероятности безотказной работы: ')) —
- DlgA.Insert (Control) — R. Assign (3, 2, 30, 3) —
- Control := New (PStaticText, Init (R, 'Стоимостные характеристики:'))Г
- DlgA.Insert (Control) — DlgA. SelectNext (False) — DlgA. SetData (P) — С := DeskTop"1. ExecView (Dig) — If С <> cmCancel Then Begin
- DlgA.GetData (P) — Pb := P. Pb PI := P. P1 Pg := P. Pg Relpk := P. Relpk — Relb := P. Relb — Rell := P. Rell -1. End -1. Dispose (Dig, Done) -1. End —
- Procedure SPSApp. SetCalcParams, Var Params: Record
- NSepMin, NSepMax, mMin, mMax, nMin, nMax, nStep: Real1. End -1. Dig: PDialog -1. R: TRect —
- Control: PView — С: Word — Begin
- Params.NSepMin Params. NSepMax Params. mMin Params.mMax Params. nMin Params.nMax Params. nStep
- NSepMin = NSepMax = mMin = mMax = nMin = nMax := nStep — R. Assign (11, 5, 68, 18) —
- R.Assign (46, 3, 54, 4) -1. R, 3, 0))
- R, 'Минимальное количество участков
- Control := New (PRealLine, Init (R, 3, 0)) — Dig".Insert (Control) — R. Assign (2, 3, 4 5, 4) —
- Dig".Insert (New (PLabel, Init (R, 'Максимальное количество участков разбиения', Control))) —
- R.Assign (46, 4, 54, 5) —
- Control := New (PRealLine, Init (R, 3, 0)) — Dig".Insert (Control) — R. Assign (2, 4, 44, 5) —
- Dig".Insert (New (PLabel, Init (R, 'Минимальное число обобщённых потребителей', Control))) —
- R.Assign (46, 5, 54, 6) —
- Control := New (PRealLine, Init (R, 3, 0)) — Dig".Insert (Control) — R. Assign (2, 5, 45, 6) —
- Dig".Insert (New (PLabel, Init (R, 'Максимальное число обобщённых потребителей', Control))) —
- R.Assign (46, 6, 54, 7) —
- Control := New (PRealLine, Init (R, 3, 0)) — Dig".Insert (Control) — R. Assign (2, 6, 32, 7) —
- Dig".Insert (New (PLabel, Init (R, 'Минимальное количество секций', Control))) —
- R.Assign (46, 7, 54, 8) —
- Control := New (PRealLine, Init (R, 3, 0)) — Dig".Insert (Control) — R. Assign (2, 7, 33, 8) —
- Dig".Insert (New (PLabel, Init (R, 'Максимальное количество секций', Control))) —
- R.Assign (46, 8, 54, 9) —
- Control := New (PRealLine, Init (R, 8, 0)) — Dig".Insert (Control) — R. Assign (2, 8, 34, 9) —
- Dig".Insert (New (PLabel, Init (R, 'Количество шагов интегрирования ', Control))) —
- R.Assign (8, 10, 24, 12) —
- Control := New (PButton, Init (R, '0~k~', cmOK, bfDefault)) — Dig".Insert (Control) — R. Assign (32, 10, 48, 12) —
- Control := New (PButton, Init (R, '~C~ancel', cmCancel, bfNormal)) -1. Dig".Insert (Control) —
- Dig".SelectNext (False) -1. Dig".SetData (Params) —
- С := DeskTop".ExecView (Dig) -1. С <> cmCancel1. Then Begin1. Dig".GetData (Params) —
- NSepMin = Trunc Abs Params NSepMin)) —
- NSepMax = Trunc Abs Params NSepMax)) -mMin = Trunc Abs Params mMin)) tmMax = Trunc Abs Params mMax)) tnMin = Trunc Abs Params nMin)) /nMax = Trunc Abs Params nMax)) fnStep = Trunc Abs Params nStep)) r1. End -1. Dispose (Dig, Done) -1. End —
- Procedure SPSApp. InitStatusLine -1. Var R: TRect -1. Begin1. GetExtent (R) -1. R.A.Y := Pred (R.B.Y) —
- StatusLine := New (PStatusLine, Init (R,
- NewStatusDef (0, $FFFF, NewStatusKey ('', kbAltX, cmQuit, NewStatusKey ('', kbAltF3, cmClose, cmDel, kbShiftDel, cmDelAll, {
- NewStatusKey ('~Del~ Удалить запись', kbNoKey,
- NewStatusKey ('~Shift-Del~ Удалить все',
- NewStatusKey ('~F7~ Искать', kbF7, cmFind,} NewStatusKey ('', kbF5, cmZoom, NewStatusKey ('', kbCtrlF5, cmReSize, NewStatusKey ('~F10~ Меню', kbFlO, cmMenu, Nil))))))){)}, Nil))1. End —
- Procedure SPSApp. InitMenuBar -1. Var R: TRect -1. Begin
- GetExtent (R) — R.B.Y := Succ (R.A.Y) — MenuBar := New (PMenuBar, Init (R, NewMenu (1. Newltem (~'+AA+'~'kbAltSpace, cmAbout, hcNoContext, hcNoContext, cmTable, hcNoContext,
- NewSubMenu ('~Д~анные', hcNoContext, NewMenu (
- Newltem ('~Р~асчет', 'F9', kbF9, cmCalculation,
- NewSubMenu ('~Р~езультаты', hcNoContext, NewMenu (
- Newltem ('~Т~аблица', 'Alt-T', kbAltT, 1. NewLine (
- Newltem ('Количество секций-остаток', '', kbNoKey, cmNRest, hcNoContext,
- Newltem ('Количество переключений-остаток', '', kbNoKey, cmDRest, hcNoContext,
- Newltem ('Стоимость-надёжность', '', kbNoKey, cmStNad, hcNoContext, 1. Nil)))))) ,
- NewSubMenu ('~У~становки', hcNoContext, NewMenu (
- Newltem ('~П~ринтер', '', kbNoKey, cmSetPrinter, hcNoContext, cmCalcParams, hcNoContext, cmSetMethod, hcNoContext, cmSetPrices, hcNoContext,
- Newltem ('~П~араметры расчёта', '', kbNoKey, Newltem ('~М~етод', 'Alt-M', kbAltM, Newltem ('~Ц~ены и вероятности', '', kbNoKey, Nil))))
- Newltem ('~В~ыход', '', kbNoKey, cmQuit, hcNoContext, Nil))))))))1. End —
- Procedure SPSApp. HandleEvent (Var Event: TEvent) —
- Var Driver, Mode: Integer — Begin1. (Event.What = evCommand) And
- Event.Command In cmClose, cmQuit .) Then If UserWindow <> Nil Then Dispose (UserWindow, Done) Inherited HandleEvent (Event) — If Event. What = evCommand Then Case Event. Command Of{ {