Приложение, позволяющее производить расчет заданной электрической схемы с различными параметрами
Изучение законов изменения электрических величин во времени, подбор двигателей в зависимости от входных параметров. Разработка программы, рассчитывающей параметры заданной схемы четырехполюсника методом интеграла Дюамеля. Код и листинг программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 25.12.2012 |
Размер файла | 744,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allest.ru
Министерство образования и науки Украины
ПРИАЗОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет Информационных Технологий
Кафедра автоматизации технологических процессов и производств
Пояснительная записка
к смешанной курсовой работе по дисциплинам:
«Современные методы программирования»
И «Теоретические основы электротехники»
Выполнил:
студент группы МА-10
Михайленко А.С.
Проверили:
доцент, к.т.н.
Добровольская Л.А.,
старший преподаватель
Щербаков С.В.
Мариуполь, ПГТУ 2012г.
РЕФЕРАТ
Пояснительная записка объемом 52 с., 4 рис., 1 блок - схема.
Целью данного курсового проекта является получение законов изменения электрических величин во времени, а так же расчет параметров и подбор двигателей. Для этого необходимо изучить методику расчета электрических цепей и расчетов двигателей. Решение должно быть получено в результате выполнения соответствующей программы для ЭВМ, составленной самим студентом.
Ключевые слова: коммутация цепи, закон изменения во времени тока, законы коммутации, классический метод расчёта, операторный метод расчёта, переходные процессы, электродвигатель, асинхронный электродвигатель, повторно-кратковременный режим работы, среда разработки, Builder 6, интерфейс, дистрибутив, методы, свойства, объект.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
3. ВЫБОР АЛГОРИТМА И МЕТОДОВ РЕШЕНИЯ ЗАДАЧ ПРОЕКТИРОВАНИЯ
3.1 МЕТОД РАСЧЕТА ИНТЕГРАЛА ДЮАМЕЛЯ
3.2 ЭЛЕКТРИЧЕСКИЕ МАШИНЫ ПОСТОЯННОГО ТОКА
3.3 ТРЕХФАЗНЫЕ АСИНХРОННЫЕ ДВИГАТЕЛИ
4. ПРОГРАМНАЯ РЕАЛИЗАЦИЯ
4.1 C++BUILDER 6
4.2 ОПИСАНИЕ ФУНКЦИЙ
4.3 КОД ПРОГРАММЫ
4.4 БЛОК - СХЕМА ВЫВОДА ГРАФИКОВ
ЗАКЛЮЧЕНИЕ
ЛИТЕРАТУРА
ВВЕДЕНИЕ
Целью данного курсового проекта является получение законов изменения электрических величин во времени, расчет машин в режиме двигателя и генератора, а так же асинхронных двигателей. Для этого необходимо изучить методику расчета электрических цепей и расчетов двигателей. Решение должно быть получено в результате выполнения соответствующей программы для ЭВМ, составленной самим студентом.
C++Builder 6 - это мощная система визуального объектно-ориентированного программирования, позволяющая решать множество задач, в частности:
1. Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических, до графических и мультимедиа.
2. Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений, написанных на любом языке. В частности, с помощью C++Builder можно объединить в единую систему с удобным современным интерфейсом имеющиеся на предприятии прикладные программы DOS, Windows и др. Интерфейс удовлетворяет всем требованиям Windows и автоматически настраивается на ту систему, которая установлена на компьютере пользователя, поскольку использует многие функции, процедуры, библиотеки Windows.
3. Создавать мощные системы работы с локальными и удаленными базами данных любых типов. При этом имеются средства автономной отладки приложений с последующим выходом в сеть.
1. ПОСТАНОВКА ЗАДАЧИ
В ходе выполнения курсовой работы необходимо разработать программу, которая позволит:
рассчитывать параметры заданной схемы четырехполюсника методом интеграла Дюамеля;
рассчитывать параметры схем МПТ в режиме генератора и в режиме двигателя;
рассчитывать и подбирать асинхронные двигатели в зависимости от входных параметров;
представлять полученные данные в удобном для пользователя виде.
2. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
В данной работе входными данными являются параметры цепи, вводимые пользователем во время работы программы. Собственно сама электрическая схема, построенная согласно заданию на курсовой проект и являющаяся неизменной. Параметры асинхронного двигателя, МПТ в двух режимах и четырехполюсника, вводимые во время работы приложения.
Выходными данными являются рассчитанные законы изменения напряжения на определенном элементе цепи. Выходные параметры МПТ, а также графики асинхронных двигателей. Сформированный отчет по определенному разделу приложения.
3. ВЫБОР АЛГОРИТМА И МЕТОДОВ РЕШЕНИЯ ЗАДАЧ ПРОЕКТИРОВАНИЯ
3.1 МЕТОД РАСЧЕТА ИНТЕГРАЛА ДЮАМЕЛЯ
Расчет переходных процессов с помощью интеграла Дюамеля
При использовании интеграла Дюамеля переменную, по которой производится интегрирование, обозначают , а момент времени, в который надо найти ток в цепи, обозначают через t. Пусть к цепи с нулевыми начальными условиями в момент времени t = 0 подключается напряжение (рис. 54).
Чтобы найти ток в цепи в момент времени t , заменим плавную кривую ступенчатой и просуммируем токи от начальных напряжений u(0) и от всех ступенек напряжений, вступающих в действие с запаздыванием во времени.
Напряжение u(0) в момент времени t вызовет в цепи ток u(0) g(t), где g(t)- переходная проводимость. В момент времени возникает скачок напряжения . Чтобы найти составляющую тока в момент времени t, вызываемую этим скачком напряжения , необходимо умножить на значение переходной проводимости с учетом времени действия скачка до момента времени t.фУ
Рис. 1 - К выводу интеграла Дюамеля
Это время равно , следовательно, приращение тока от этого скачка равно .
Полный ток в момент времени t получим, если просуммируем все частичные токи от отдельных скачков и прибавим их к току u(0) g(t):
Число членов суммы равно числу ступенек напряжения. Следовательно, ступенчатая кривая тем лучше заменяет плавную кривую, чем больше число ступенек. С этой целью заменим конечный интервал времени на бесконечно малый и перейдем от суммы к интегралу:
(9)
Формулу ( 9 ) называют интегралом Дюамеля.
Порядок выполнения расчетов с помощью интеграла Дюамеля
1.Определяем переходную проводимость g(t) при определении тока в соответствующей ветви ( или переходную функцию по напряжению k(t) при определении напряжения, приложенного к рассматриваемой ветви) для исследуемой цепи.
2.Определяем g(t-ф). С этой целью в формуле для g(t) заменяют t на . Аналогично поступают с k(t),заменяя её на k(t- ф).
3. Определяем . Для этого находим производную от заданного напряжения u(t) по времени и в полученном выражении заменяют t на .
4. Подставляем найденные на этапах 1, 2, 3 функции в формулу (9), интегрируем по переменной с учётом установленных пределов.
Рассмотрим применение интеграла Дюамеля для расчёта переходного процесса в схеме (рис. 55б) при подаче на её вход импульса напряжения, изображённого на рис.55а.
Значения параметров схемы примем, как в рассмотренном ранее примере:
R= 1 кОм, C= 100 мФ. Параметры сигнала: А=1 В, b = 10, t - время, сек.
а) б)
Рис. 2 К расчёту переходного процесса с помощью интеграла Дюамеля
Переходная функция по напряжению для рассматриваемой схемы была определена ранее и равна
k (t) = 1 - e - 10 t .
Интеграл Дюамеля в этом случае запишется в виде
t
U вых = Uвх (0) k (t) + ? U'(ф) k (t - ф) d ф .
Значения величин, входящих в интеграл Дюамеля:
Uвх (0)=А=1; U'(ф) =-b=-10; k (t - ф)= 1 - e - 10 ( t- ф).
Подставляя эти величины в интеграл Дюамеля, имеем:
t
U вых =1(1 - e - 10 t) + ? (-10)( 1 - e - 10 ( t- ф)) d ф =
0
t t t
=1 - e - 10 t - 10 ? d ф+ 10 e-10 t ?e10 ф d ф = 1 - e - 10 t - 10 t+ 10 e-10 t(0.1e10 ф| )=
0 0 0
= 1 - e - 10 t - 10 t+ e-10 t(e10 t-1)= 1 - e - 10 t - 10 t+1 - e- 10 t= 2 - 2e- 10 t-10 t.
Окончательно имеем, что в результате действия импульса заданной формы напряжение на выходе электрической цепи будет изменяться в интервале 0 ? t ? 0.1 c по закону
U вых = 2 - 2e- 10 t-10 t.
Рис. 3 Зависимости U вых (t) при воздействии на схему различных импульсов напряжения
На рис. 56 показаны построенные с помощью ЭВМ зависимости U вых (t) при воздействии на схему единичного скачка напряжения (1) и при воздействии на схему импульса напряжения рис. 45а (2).
Видно, что на ёмкости С в первом случае напряжение будет равно ? 0.63 В, а во втором случае остаточное напряжение будет равно ? 0.27 В после окончания действия импульса.
3.2 ЭЛЕКТРИЧЕСКИЕ МАШИНЫ ПОСТОЯННОГО ТОКА. ОБЩИЕ ПОЛОЖЕНИЯ И ФОРМУЛЫ
1. Машина постоянного тока (МПТ) -- электрическая машина, обмотка якоря которой соединена с электрической сетью постоянного тока с помощью механического (коллектор) или полупроводникового преобразователя частоты. Машины постоянного тока классифицируются: а) по назначению - - генераторы (ГПТ) и двигатели (ДПТ) постоянного тока; б) по способам возбуждения (в зависимости от того, как обмотка возбуждения включена по отношению к обмотке якоря): с независимым, параллельным, последовательным, смешанным возбуждением (МПТ имеет одну последовательную и одну параллельную обмотки возбуждения), с постоянными магнитами.
Номинальный режим - режим работы МПТ при условиях, для которых она предназначена заводом-изготовителем.
Соответствующие номинальному режиму мощность, напряжение на главных зажимах машины, ток, частота вращения, КПД называются номинальными и указываются на заводской табличке (паспорте), прикрепленной к корпусу машины.
Основные формулы, описывающие электромагнитные процессы в МПТ как в генераторном, так и двигательном режимах работы, следующие.
ЭДС якоря (ЭДС параллельной ветви обмотки якоря)
, (1.1)
где - постоянная, N - число активных проводников в обмотке якоря, р - число пар главных полюсов, а -- число пар параллельных ветвей обмотки якоря, - угловая скорость вращения якоря.
Магнитный, поток на полюс
, (1.2)
где - среднее значение магнитной индукции в воздушном зазоре под главным полюсом, l -- расчетная длина сердечника якоря, - полюсное деление (часть окружности якоря, приходящаяся на один полюс).
Электромагнитная мощность
Рж = ЕЯ1Я= (1.3)
Электромагнитный момент
(1.4)
где - ток якоря.
Мощность потерь в МПТ
, (1.5)
где, ,, - мощность механических, магнитных (мощность потерь в стали сердечника якоря) и электрических (в обмотке якоря) потерь соответственно, причем , где - внутреннее сопротивление цепи якоря; - мощность потерь на возбуждение в МПТ с электромагнитным возбуждением, где Iв и UВ - ток в цепи возбуждения и напряжение на ее зажимах, a -- эквивалентное сопротивление этой цепи; Рпд = 0,01РНОМI* - - мощность добавочных потерь, а I* = I/Iном -- относительное значение тока МПТ.
Коэффициент полезного действия (КПД)
, (1.6)
где -- мощность энергии, подведенной к МПТ, Р2 -полезная мощность МПТ.
Генераторы постоянного тока (основные положения и формулы)
Уравнение напряжения генератора
U = Ея- IЯRЯ (1.7)
Полезная электрическая мощность
P2 = UI, (1.8)
где ток генератора
-- параллельном или смешанном возбуждении,
- при других способах возбуждения.
Мощность подведенной механической энергии
, (1.9)
где -- вращающий момент на валу первичного двигателя.
Характеристики генератора:
холостого хода U0= Ея = f(IB) при I = 0 и п = const;
внешняя U = f (I) при = RB + RpB = const и п = const;
регулировочная 1В = f(I) при U = const и п = const, где Rрв - - сопротивление обмотки возбуждения, Дрв -сопротивление регулировочного реостата в цепи возбуждения.
Двигатели постоянного тока ( основные положения и формулы)
Уравнение напряжения
U = Ея + (1.10)
Уравнение движения
М-(М0 + М2) = J, (1.11)
где М0 - момент холостого хода, обусловленный магнитными и механическими потерями в двигателе, М2 -- полезный момент на валу, J - момент инерции вращающихся масс.
В установившемся режиме работы двигателя (при п = const)
М = (М0 + М2) = СоIяФ. (1.12)
Полезная механическая мощность на валу
Р2 -= М2. (1.13)
Мощность электрической энергии, потребляемой из сети
UI+- при независимом возбуждении,
= (1.14)
UI- при других способах возбуждения,
где -- мощность потерь на возбуждение.
Ток двигателя
- при параллельном или смешанном возбуждении,
I= - при других способах возбуждения.
Ток якоря в установившемся режиме
, (1.15)
где IОя - ток якоря в режиме холостого хода.
Угловая скорость вращения в установившемся режиме
(1.16)
Начальный пусковой ток якоря
, (1.17)
где Rп - сопротивление пускового реостата в момент пуска.
Начальная кратность пускового тока
, (1.18)
где - пусковой ток.
ЭДС якоря Ея, электромагнитный момент М, мощность потерь и КПД определяют по приведенным выше формулам .
3.3 ТРЕХФАЗНЫЕ АСИНХРОННЫЕ ДВИГАТЕЛИ
Общие положения и формулы
Асинхронная машина - это машина переменного тока, у которой в установившемся режиме магнитное поле, участвующее в основном процессе преобразования энергии, и ротор вращаются с разными угловыми скоростями.
Конструктивное исполнение: с короткозамкнутым и с фазным ротором (с контактными кольцами).
Режимы, работы асинхронных машин: двигательный (основной), генераторный и тормозной. Наиболее распространены трехфазные асинхронные двигатели (АД).
Номинальные (паспортные) данные двигателя: механическая мощность РНОм напряжение обмотки статора и ток статора , частота напряжения сети f, частота вращения ротора, КПД ном, коэффициент мощности соsном, напряжение между контактными кольцами при разомкнутой обмотке ротора U20 = Е2 и номинальный ток в обмотке ротора 1ном -- для АД с фазным ротором.
В каталогах на двигатели, кроме того, указывают начальную кратность пускового тока Iп* = 1n/1ном , начальную кратность пускового момента Мп* = МП/МНОМ, кратность максимального момента (перегрузочную способность двигателя) Ммах* = Ммах/Мном.
В паспортных данных АД обычно указывают два значения напряжения, например, 380/220 В. Меньшее значение напряжения (220 В) -- это фазное напряжение обмотки статора. Если линейное напряжение сети равно этому напряжению, то обмотки статора необходимо соединить треугольником, если линейное напряжение сети равно большему значению UlHOM (380 В), то обмотки статора соединяют звездой. Соответственно указывают и два значения линейного тока I1ном при соединении обмоток звездой и треугольником.
Частота вращения магнитного поля
(2.1)
где f -- частота напряжения сети, р -- число пар полюсов в машине. При промышленной частоте f = 50 Гц частота вращения магнитного поля определяется как , n1 = 3000/р.
Скольжение -- это относительная разность частот вращения или угловых скоростей магнитного поля и ротора
, (2.2)
где п2 -- частота вращения ротора, и - угловые скоростивращения магнитного поля и ротора.
Частота вращения ротора п2=n1(1-s). (2.3)
Частота ЭДС, индуцированной в обмотке статора вращающимся магнитным потоком, равна частоте напряжения в сети
f1 = f2 . (2.4)
Частота ЭДС и тока в обмотке ротора
(2. 5)
Действующие и комплексные значения ЭДС, индуцированные в фазных обмотках статора и неподвижного и вращающегося ротора
, (2.6)
где w1 и w2 -- числа витков фазных обмоток статора и ротора, k1 и k2 -- их обмоточные коэффициенты.
Из уравнений (2.6) следует, что Е2s = sE2
Коэффициент трансформации ЭДС с учетом (6):
. (2.7)
ЭДС рассеяния обмоток статора и ротора:
, ,
где , , индуктивные сопротивления, a и -- индуктивности фазных обмоток статора и ротора, обусловленные потоками рассеяния, причем с учетом уравнения (6) X2s = sX2
Ток ротора
, (2.8)
где -- комплексное сопротивление фазной обмотки вращающегося ротора, rz -- активное сопротивление фазной обмотки вращающегося ротора, r2 -- то же неподвижного ротора.
Связь между параметрами обмотки реального и приведенного ротора
, (2.9)
где -- коэффициент трансформации по току» ,
m1 и m2 -- число фаз обмоток статора и ротора. Для двигателя с фазным ротором m1 = m2 и ki = ke.
Схема замещения двигателя представлена на рис.2, где R1 -- активное сопротивление фазной обмотки статора, R2'-- приведенное активное сопротивление фазы обмотки неподвижного ротора, -- приведенное активное сопротивление ротора, отражающее процесс преобразования электрической энергии в механическую.
Рис.4 - Схема замещения асинхронного двигателя
Активная мощность подведенной электрической энергии
р1 = ЗU1фI1ф cos = = U1лI1л cos. (2.10)
Механическая мощность на валу:
Р2 = М22 = 0,105 М2n2 . (2.11)
КПД двигателя
. (2.12)
Мощность потерь в двигателе
= P пэ1 + Рпэ2 + Рпм1 + Рпмх + Рпд , (2.13)
где РПЭ1 = = 3 и Рпэ2 = = З -- мощность электрических потерь в обмотках статора и ротора, Pпм1 -- мощность магнитных потерь в сердечнике статора, Рпмх и Рпд = 0,005, Рном -- мощности механических и добавочных потерь.
Электромагнитный (вращающий) момент
, (2.14)
где I2а = I2 cos активная составляющая тока в обмотке ротора, cos= cos (E2^I2), Хк = X1 + Х2' -- индуктивное сопротивление двигателя, а постоянные С и С' соответственно равны
С С' =.
Критическое скольжение, соответствующее максимальному моменту Mmax
, (2.15)
где - приведенное добавочное сопротивление реостата в цепи ротора.
Максимальный момент
. ..... (2.16)
Упрощенное уравнение механической характеристики в относительных единицах (формула Клосса)
. (2.17)
Критическое скольжение может быть найдено на основании уравнения (15) по известным параметрам обмотки ротора или из уравнения (17) по известным значениям моментов и скольжения для какого-либо характерного режима работы АД (пуск, номинальный режим). Например, критическое скольжение, соответствующее естественной механической характеристике, может быть найдено по известным для номинального режима скольжению sиом и вращающему моменту М* = 1
(2.18)
Рабочие характеристики двигателя -- это зависимости n2 (Р2), s (P2), М2 (Р2), р1 (P2), (Р2), I1 (Р2), соs (Р2). Или в относительных единицах: n2* (Р2*), s (P2*), М2* (Р2*), р1* (P2*), (Р2*), I1* (Р2*), соs (Р2*) при U = const и f = const.
4. ПРОГРАМНАЯ РЕАЛИЗАЦИЯ
4.1 C++BUILDER 6
C++Builder -- одна из самых мощных систем, позволяющих на самом современном уровне создавать как отдельные прикладные программы Windows, так и разветвленные комплексы, предназначенные для работы в корпоративных сетях и в Интернете. С++Builder - это среда объектно-ориентированного программирования.
Объектно-ориентированное программирование.
Объектно-ориентированное программирование (сокращенно ООП) -- это в наше время совершенно естественный подход, к построению сложных (и не очень сложных) программ и систем.
Приложение, построенное по принципам объектной ориентации -- это не последовательность каких-то операторов, не некий жесткий алгоритм. Объектно-ориентрованная программа -- это совокупность объектов и способов их взаимодействия. Отдельным (и главным) объектом при таком подходе во многих случаях можно считать пользователя программы. Он же служит и основным, но не единственным, источником событий, управляющих приложением.
Помимо методов, работающих с отдельными данными, в объекте имеются методы, работающие со всей их совокупностью, меняющие их структуру. Таким об- / разом, объект является совокупностью свойств и методов. Но это пока нельзя считать законченным определением объекта, поскольку прежде, чем дать полное определение, надо еще рассмотреть взаимодействие объектов друг с другом.
Средой взаимодействия объектов (как бы силовым полем, в котором существуют объекты) являются сообщения, генерируемые в результате различных событий. События наступают, прежде всего, вследствие действий пользователя -- перемещения курсора мыши, нажатия кнопок мыши или клавиш клавиатуры. Но события могут наступать и в результате работы самих объектов. В каждом объекте определено множество событий, на которые он может реагировать. В конкретных экземплярах объекта могут быть определены обработчики каких-то из этих событий, которые и определяют реакцию данного экземпляра объекта. К написанию этих обработчиков, часто весьма простых, и сводится, как будет видно далее, основное программирование при разработке графического интерфейса пользователя с помощью C++Builder.
Теперь можно окончательно определить объект как совокупность свойств и методов, а также событий, на которые он может реагировать.
С целью организации динамического распределения памяти во все объекты заложены методы их создания -- конструкторы и уничтожения -- деструкторы. Конструкторы объектов, которые изначально должны присутствовать в приложении (прикладной программе), срабатывают при запуске программы. Деструкторы всех объектов, имеющихся в данный момент в приложении, срабатывают при завершении его работы. Но нередко и в процессе выполнения различные новые объекты (например, новые окна документов) динамически создаются и уничтожаются с помощью их конструкторов и деструкторов.
Основы визуального программирования интерфейса.
Сколько существует программирование, столько существуют в нем и тупики, в которые оно постоянно попадает и из которых, в конце концов, доблестно выходит. Один из таких тупиков или кризисов когда-то был связан с разработкой графического интерфейса пользователя. Программирование вручную всяких привычных пользователю окон, кнопок, меню, обработка событий мыши и клавиатуры, включение в программы изображений и звука требовало все больше и больше времени программиста. В ряде случаев весь этот сервис начинал занимать до 80-90% объема программных кодов. Причем весь этот труд нередко пропадал почти впустую, поскольку через год -- другой менялся общепринятый стиль графического интерфейса, и все приходилось начинать заново. Среда предоставляет формы (в приложении их может быть несколько), на которых размещаются компоненты. Обычно это оконные формы, хотя они могут быть сделаны невидимыми. На форму с помощью мыши переносятся и размещаются пиктограммы компонентов, имеющихся в библиотеках C++Builder. С помощью простых манипуляций можно изменять размеры и расположение этих компонентов.
Но достоинства визуального программирования не сводятся к этому. Самое главное заключается в том, что во время проектирования формы и размещения на ней компонентов C++Builder автоматически формирует коды программы, включая в нее соответствующие фрагменты, описывающие данный компонент. А затем в соответствующих диалоговых окнах пользователь может изменить заданные по умолчанию значения каких-то свойств этих компонентов и, при необходимости, написать обработчики каких-то событий. То есть проектирование сводится, фактически, к размещению .компонентов на форме, заданию некоторых их свойств и написанию, при необходимости, обработчиков событий.
Компоненты могут быть визуальные, видимые при работе приложения, и невизуальные, выполняющие те или иные служебные функции. Визуальные компоненты сразу видны на экране в процессе проектирования в таком же виде, в каком их увидит пользователь во время выполнения приложения. Это позволяет очень легко выбрать место их расположения и их дизайн -- форму, размер, оформление, текст, цвет и т.д. Невизуальные компоненты видны на форме в процессе проектирования в виде пиктограмм, но пользователю во время выполнения они не видны, хотя и выполняют для него за кадром весьма полезную работу. В библиотеки визуальных компонентов C++Builder включено множество типов компонентов, и их номенклатура очень быстро расширяется от версии к версии. Имеющегося уже сейчас вполне достаточно, чтобы построить практически любое самое замысловатое приложение, не прибегая к созданию новых компонентов. При этом даже неопытный программист, делающий свои первые шаги на этом поприще, может создавать приложения, которые выглядят совершенно профессионально.
Типы объектов и, в частности, компонентов библиотек C++Builder оформляются в виде классов. Классы -- это типы, определяемые пользователем. В классах описываются свойства объекта, его методы и события, на которые он может реагировать.
Новый класс может наследовать свойства, методы, события своего родительского класса, т.е. того класса, на основе которого он создается. Например, при создании новой кнопки можно взять за основу один из уже разработанных классов кнопок и только добавить к нему какие-то новые свойства или отменить какие-то свойства и методы родительского класса.
4.2 ОПИСАНИЕ ФУНКЦИЙ
1. __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
Главная функция приложения. В ней происходит запуск базы данных и ini файла.
2. void __fastcall TForm1::ColorButton1Click(TObject *Sender)
Функция для расчёта асинхронных двигателей
3. void __fastcall TForm1::ColorButton2Click(TObject *Sender)
Функция для вывода значений расчёта асинхронных двигателей по умолчанию
4. void __fastcall TForm1::ColorButton3Click(TObject *Sender)
Функция для вывода дополнительных графиков для асинхронных двигателей
5. void __fastcall TForm1::BitmapButton6Click(TObject *Sender)
Функция для вывода выходных параметров МПТ в режиме генератора
6. void __fastcall TForm1::ColorButton4Click(TObject *Sender)
Функция для вывода выходных параметров МПТ в режиме генератора по умолчанию
7. void __fastcall TForm1::BitmapButton5Click(TObject *Sender)
Функия для вывода выходных параметров МПТ в режиме двигателя
8. void __fastcall TForm1::ColorButton5Click(TObject *Sender)
Функия для вывода выходных параметров МПТ в режиме двигателя по умолчанию
9. void __fastcall TForm1::BitmapButton7Click(TObject *Sender)
Функция вывода выходных параметров четырёхполюсника
10. void __fastcall TForm1::ColorButton6Click(TObject *Sender)
Функция вывода выходных параметров четырёхполюсника по умолчанию
11. void __fastcall TForm1::ColorButton7Click(TObject *Sender)
Функция для вывода графиков четырёхполюсника
4.3 КОД ПРОГРАММЫ.
UNIT1.CPP
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit7.h"
#include "Unit8.h"
#include "Unit9.h"
//#include <parametru.h>;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "BitmapButton"
#pragma link "ColorButton"
#pragma link "AdvProgressBar"
#pragma link "GradientLabel"
#pragma link "AdvPageControl"
#pragma resource "*.dfm"
#include <IniFiles.hpp>
#include <bass.h>
#include <math.h>
#include <System.hpp>
//#include <jpeg.hpp>
//#include<complex>
HSTREAM chan;
HSAMPLE samp;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//-------------------------------------------------------------------------;
//Забивание значений в ini файлы;
char WinDirChar[255];
GetWindowsDirectory(WinDirChar,255);
String IniFile = (String)WinDirChar +"\\INIin1.ini";
if (FileExists(IniFile))
{
TIniFile *Ini = new TIniFile(IniFile);
//Для асинхронных двигателей;
Edit1->Text = Ini->ReadString("Edits","Edit1","50"); //f частота;
Edit2->Text = Ini->ReadString("Edits","Edit2","2"); //P- полюса;
Edit8->Text = Ini->ReadString("Edits","Edit8","1475"); // n2 nom;
Edit9->Text = Ini->ReadString("Edits","Edit9","4500"); //P nom;
Edit10->Text = Ini->ReadString("Edits","Edit10","380"); // U1 nom;
//Для МПТ в режиме генератора;
Edit11->Text = Ini->ReadString("Edits","Edit11","10000"); //P nom;
Edit12->Text = Ini->ReadString("Edits","Edit12","230"); //U nom;
Edit13->Text = Ini->ReadString("Edits","Edit13","1450"); //n nom;
Edit14->Text = Ini->ReadString("Edits","Edit14","0.3"); //R якоря;
Edit15->Text = Ini->ReadString("Edits","Edit15","150"); //R в;
//Для МПТ в режиме двигателя;
Edit21->Text = Ini->ReadString("Edits","Edit21","4200"); //P nom;
Edit22->Text = Ini->ReadString("Edits","Edit22","210"); //U nom;
Edit23->Text = Ini->ReadString("Edits","Edit23","1500"); //n nom;
Edit24->Text = Ini->ReadString("Edits","Edit24","0.20"); //R якоря;
Edit25->Text = Ini->ReadString("Edits","Edit25","0.78"); //КПД ном;
//Для четырехполюсников;
Edit31->Text = Ini->ReadString("Edits","Edit31","15"); //A;
Edit32->Text = Ini->ReadString("Edits","Edit32","1.2"); //tи;
Edit33->Text = Ini->ReadString("Edits","Edit33","22000"); //R;
Edit34->Text = Ini->ReadString("Edits","Edit34","0.000125"); //C;
// Для самой формы;
Form1->Left = Ini->ReadInteger("Position","left",437);
Form1->Top = Ini->ReadInteger("Position","top",139);
Form1->Height = Ini->ReadInteger("Size","Height",600);
Form1->Width = Ini->ReadInteger("Size","Width",800);
}
//К заданию асинхроные двигатели таблица;
TStringList *list = new TStringList;
list->LoadFromFile("d://1.txt");
for(int i=0;i<list->Count;i++)
{
StringGrid1->Rows[i]->Delimiter=' ';
StringGrid1->Rows[i]->DelimitedText= list->Strings[i];
}
// проверка корректности загруженной BASS.dll;
if (HIWORD(BASS_GetVersion()) != BASSVERSION)
{
Application->MessageBoxA(0,"Не корректная версия BASS.DLL",MB_ICONERROR);
}
else
return ;
//Инициализвция аудио - по умолчанию ,44100 hz,stereo 16 bits;
if (!BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL))
{
Application->MessageBoxA(0,"Ошибка инициализации аудио",MB_ICONERROR);
}
BASS_ChannelGetData(chan,fft,BASS_DATA_FFT1024);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton1Click(TObject *Sender)
{
//Освобождаем объекты перед закрытием;
BASS_Stop();//останавливаем проигрывание;
BASS_StreamFree(chan);//освобождаем звуковой канал;
BASS_Free();//освобождаем ресурсы используемые BASS;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//Передвижение картинки по экрану;
const int SC_DRAGMOVE = 0xF012;
if (WindowState!=wsMaximized)
{
ReleaseCapture();
Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton2Click(TObject *Sender)
{
flag==0;
povtor=0;
if(flag==2)
{
povtor=1;
// BASS_ChannelSetPosition(chan,BASS_POS_BYTE);
BASS_ChannelPlay(chan,FALSE);
flag=1;
}
else
{
if (OpenDialog1->Execute())//пользователь выбирает файл
{
//povtor++;
if(povtor==2)
{
ShowMessage("Вы не можете два раза подряд нажимать плей!!!");
}
AnsiString b=OpenDialog1->FileName;//считываем имя файла
char *a=b.c_str();//переводим тип AnsiString в char
//создаем поток для нашего MP3 файла
chan=BASS_StreamCreateFile(FALSE, a, 0, 0, 0);
//Запускаем звучание песни
BASS_ChannelPlay(chan,FALSE);
povtor++;
}
}
flag=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton4Click(TObject *Sender)
{
if(flag==1)
{
BASS_ChannelPause(chan);
flag=2;
}
else
ShowMessage("Нажмите Play!!!");
//return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton3Click(TObject *Sender)
{
if(flag==1)
{
BASS_ChannelStop(chan); // останавливаем звучание
BASS_StreamFree(chan); // освобождаем ресурсы
flag=1;
}
else
ShowMessage("Нажмите Play!!!");
//return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//Бегущая строка;
static String InitialCaption = GradientLabel1->Caption;
GradientLabel1->Caption = GradientLabel1->Caption.SubString(2,(GradientLabel1->Caption.Length() - 1))+ GradientLabel1->Caption.SubString(1,1);
if(!Caption.Length())
GradientLabel1->Caption = InitialCaption;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton1Click(TObject *Sender)
{
double n1,I1nom,Snom,Nnom=0.795,cosF1nom=0.46;
double P1nom,Mnom;
//Частота вращения магнитного поля;
float f=Edit1->Text.ToDouble();
int p=Edit2->Text.ToInt();
float n2nom=Edit8->Text.ToDouble();
float Pnom=Edit9->Text.ToDouble();
float U1nom=Edit10->Text.ToDouble();
n1=60*f/p;
Form1->Edit3->Text=FloatToStr(n1)+" об/мин";
//Скольжение в номинальном режиме;
Snom=1-n2nom/n1;
Form1->Edit7->Text=FloatToStrF(Snom,ffFixed,8,4);
//Номинальный момент двигателя;
Mnom=Pnom*9.55/n2nom;
Form1->Edit4->Text=FloatToStrF(Mnom,ffFixed,8,3)+" Нм";
//Активная мощность подведенная к двигателю;
P1nom=Pnom/Nnom;//Nnom-КПД;
Form1->Edit5->Text=FloatToStrF(P1nom,ffFixed,8,3)+" Вт";
//Номинальный ток двигателя;
I1nom=P1nom/(sqrt(3)*U1nom*cosF1nom);
Form1->Edit6->Text=FloatToStrF(I1nom,ffFixed,8,3)+" A";
//Построение графиков;
Form1->Chart1->Series[0]->Clear();
Form1->Chart1->Series[1]->Clear();
Form2->Chart1->Series[0]->Clear();
Form2->Chart2->Series[0]->Clear();
int g=0;
// for(int i = 1; i<StringGrid1->RowCount; i++)
for(int j = 1; j<StringGrid1->ColCount; j++)
{
//StringGrid1->Cells[i][j]=random(10);
x[g]=StrToFloat(StringGrid1->Cells[j][0].c_str());
y[g]=StrToFloat(StringGrid1->Cells[j][1].c_str());
z[g]=StrToFloat(StringGrid1->Cells[j][2].c_str());
Form1->Chart1->Series[0]->AddXY((x[g]),(y[g]));
Form1->Chart1->Series[1]->AddXY((x[g]),(z[g]));
P1nom=Pnom/y[g];//Nnom-КПД;
Form2->Chart1->Series[0]->AddXY((x[g]),P1nom);
I1nom=P1nom/(sqrt(3)*U1nom*z[g]);
Form2->Chart2->Series[0]->AddXY((x[g]),I1nom);
g++;
}
for(int i=0; i<g; i++)
{
Memo1->Lines->Add(FloatToStrF(x[i] ,ffFixed,5,3));
Memo1->Lines->Add(FloatToStrF(y[i] ,ffFixed,5,3));
Memo1->Lines->Add(FloatToStrF(z[i] ,ffFixed,5,3));
Memo1->Lines->Add("\n");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton2Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)
{
Edit1->Text="50";
Edit2->Text="2";
Edit8->Text="1475";
Edit9->Text="4500";
Edit10->Text="380";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton3Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите посмотреть графики?","внимание!!!", MB_YESNO) == mrYes)
{
Form2->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
char WinDirChar[255];
GetWindowsDirectory(WinDirChar,255);
String IniFile = (String)WinDirChar +"\\INIin1.ini";
TIniFile *Ini = new TIniFile(IniFile);
// Запись в ini файл;
//Асинхронные двигатели;
Ini->WriteString("Edits","Edit1",Edit1->Text);
Ini->WriteString("Edits","Edit2",Edit2->Text);
Ini->WriteString("Edits","Edit8",Edit8->Text);
Ini->WriteString("Edits","Edit9",Edit9->Text);
Ini->WriteString("Edits","Edit10",Edit10->Text);
//МПТ в режиме генератора;
Ini->WriteString("Edits","Edit11",Edit11->Text);
Ini->WriteString("Edits","Edit12",Edit12->Text);
Ini->WriteString("Edits","Edit13",Edit13->Text);
Ini->WriteString("Edits","Edit14",Edit14->Text);
Ini->WriteString("Edits","Edit15",Edit15->Text);
//МПТ в режиме двигателя;
Ini->WriteString("Edits","Edit21",Edit21->Text);
Ini->WriteString("Edits","Edit22",Edit22->Text);
Ini->WriteString("Edits","Edit23",Edit23->Text);
Ini->WriteString("Edits","Edit24",Edit24->Text);
Ini->WriteString("Edits","Edit25",Edit25->Text);
//Для четырехполюсников;
Ini->WriteString("Edits","Edit31",Edit31->Text);
Ini->WriteString("Edits","Edit32",Edit32->Text);
Ini->WriteString("Edits","Edit33",Edit33->Text);
Ini->WriteString("Edits","Edit34",Edit34->Text);
//Для самой формы;
Form1->Left = Ini->ReadInteger("Position","left",437);
Form1->Top = Ini->ReadInteger("Position","top",139);
Form1->Height = Ini->ReadInteger("Size","Height",600);
Form1->Width = Ini->ReadInteger("Size","Width",800);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton6Click(TObject *Sender)
{
//Загрузка параметров;
// загрузка (-------)
Form1->AdvProgressBar1->Max=100;
Form1->AdvProgressBar1->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar1->Position=g;
Sleep(10);//Делаем задержку;
}
//МПТ в режиме генератра;
float Pnom=Edit11->Text.ToDouble();
float Unom=Edit12->Text.ToDouble();
float nnom=Edit13->Text.ToDouble();
float Ria=Edit14->Text.ToDouble();
float Rv=Edit15->Text.ToDouble();
float Inom,Iv,Iianom,Eia,Pem,w,n,Pm,Pne,Pnv,Pob,P1,kpd;
//3.1 Номинальный ток генератора;
Inom=Pnom/Unom;
Form1->Edit16->Text= FloatToStrF(Inom,ffFixed,8,3)+" A";
//3.2 Ток возбуждения;
Iv=Unom/Rv;
//3.3 Ток якоря в номинальном режиме;
Iianom=Inom+Iv;
//3.4 ЭДС якоря;
Eia=Unom+(Iianom*Ria);
Form1->Edit17->Text= FloatToStrF(Eia,ffFixed,8,3)+" В";
//3.5 Электромагнитная мощность;
Pem=Eia*Iianom;
//3.5 Электромагнитный момент;
const float pi=3.14;
w=(pi*nnom)/30;
n=Pem/w;
Form1->Edit19->Text= FloatToStrF(n,ffFixed,8,3)+" Нм";
//3.7 Мощность механических,магнитных и добавочных потерь;
Pm=0.06*Pnom;
//3.8 Мощность электрических потерь в цепи якоря;
Pne=Ria*pow(Iianom,2);
//3.9 Мощность электрических потерь в цепи возбуждения;
Pnv=pow(Iv,2)*Rv;
//3.10 Мощность потерь в генераторе;
Pob=Pm+Pne+Pnv;
//3.11 Мощность первичного двигателя;
P1=Pnom+Pob;
Form1->Edit20->Text= FloatToStrF(P1,ffFixed,8,3)+" Вт";
//3.12 КПД генератора;
kpd=(P1-Pob)/P1;
Form1->Edit18->Text= FloatToStrF(kpd,ffFixed,8,3)+"";
ShowMessage("Загрузка параметров завершена!!!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton4Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)
{
Edit11->Text=10000;
Edit12->Text=230;
Edit13->Text=1450;
Edit14->Text=0.3;
Edit15->Text=150;
Form1->AdvProgressBar1->Max=100;
Form1->AdvProgressBar1->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar1->Position=g;
Sleep(10);//Делаем задержку;
}
ShowMessage("Загрузка параметров завершена!!!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if (MessageBox(0,"вы действительно хотите выйти из программы?","внимание!!!", MB_YESNO) == mrYes)
CanClose=true;
else CanClose=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton5Click(TObject *Sender)
{
//Загрузка параметров;
// загрузка (-------)
Form1->AdvProgressBar2->Max=100;
Form1->AdvProgressBar2->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar2->Position=g;
Sleep(10);//Делаем задержку;
}
//МПТ в режиме двигателя;
float Pnom1=Edit21->Text.ToDouble();
float Unom1=Edit22->Text.ToDouble();
float nnom1=Edit23->Text.ToDouble();
float Ria1=Edit24->Text.ToDouble();
float kpd2=Edit25->Text.ToDouble();
float P1nom,Inom1,Iianom1,Ip,Iiap,Rp,Rv,w1,Eia1,CoF,Mp,Mnom,Mpol;
float Mo,Ioia,Io,w2,no;
//1.Потребляемая из сети мощность в номинальном режиме;
P1nom=Pnom1/kpd2;
//2.Номинальный ток двигателя;
Inom1=P1nom/Unom1;
Form1->Edit26->Text= FloatToStrF(Inom1,ffFixed,8,3)+" A";
//3.Номинальный ток якоря;
const float Iv1=3.44;
Iianom1=Inom1-Iv1;
//4.Начальный пусковой момент при заданной начальной пусковой кратности;
Ip=Inom1*2;
//5.Начальный пусковой ток якоря;
Iiap=Ip-Iv1;
//6.Начальное сопротивление якорной цепи в момент пуска;
Rp=Unom1/Iiap;
//7.Пусковое сопротивление;
Rv=Rp-Ria1;
Form1->Edit27->Text= FloatToStrF(Rv,ffFixed,8,3)+" Ом";
//8.Номинальная угловая скорость врщения;
const float pi=3.14;
w1=(pi*nnom1)/30;
//9.ЭДС якоря при номинальной нагрузке;
Eia1=Unom1-Iianom1*Ria1;
//10.Постоянная машина при постоянном магнитном потоке;
CoF=Eia1/w1;
//11.Электромагнитный начальный пусковой момент;
// Mp=CoF*Iiap;
//12.Электромагнитный момент в номинальном режиме;
Mnom=CoF*Iianom1;
//13.Полезный вращающий момент на валу двигателя;
Mpol=Pnom1/w1;
//14.Момент холостого хода;
Mo=Mnom-Mpol;
Form1->Edit29->Text= FloatToStrF(Mo,ffFixed,8,3)+" Нм";
//15.Ток якоря в режиме холостого хода;
Ioia=Mo/CoF;
//16.Ток холостого двигателя;
Io=Ioia+Iv1;
Form1->Edit30->Text= FloatToStrF(Io,ffFixed,8,3)+" A";
//17.Частота вращения в режиме холостого хода;
w2=(Unom1-(Ioia*Ria1))/CoF;
no=30*w2/pi;
Form1->Edit28->Text= FloatToStrF(no,ffFixed,8,3)+" об/мин";
ShowMessage("Загрузка параметров завершена!!!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton5Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)
{
Edit21->Text=4200;
Edit22->Text=220;
Edit23->Text=1450;
Edit24->Text=0.15;
Edit25->Text=0.78;
Form1->AdvProgressBar2->Max=100;
Form1->AdvProgressBar2->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar2->Position=g;
Sleep(10);//Делаем задержку;
}
ShowMessage("Загрузка параметров завершена!!!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton6Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)
{
Edit31->Text=15;
Edit32->Text=1.2;
Edit33->Text=22000;
Edit34->Text=0.000125;
Form1->AdvProgressBar3->Max=100;
Form1->AdvProgressBar3->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar3->Position=g;
Sleep(10);//Делаем задержку;
}
ShowMessage("Загрузка параметров завершена!!!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitmapButton7Click(TObject *Sender)
{
//Загрузка параметров;
// загрузка (-------)
Form1->AdvProgressBar3->Max=100;
Form1->AdvProgressBar3->Position=0;
for(char g=0;g<=100;g++)
{
Form1->AdvProgressBar3->Position=g;
Sleep(10);//Делаем задержку;
}
//Очистка графиков;
Form3->Chart1->Series[0]->Clear();
Form3->Chart2->Series[0]->Clear();
Form3->Chart1->Series[1]->Clear();
Form3->Chart2->Series[1]->Clear();
double X=Edit33->Text.ToDouble();
double Y=Edit34->Text.ToDouble();
function r;
r.Set( X, Y);
r.Run();
//M(p)=0;
// float p1=-2.75/2;
// float p2=p1;
//Решение квадратного уравнения;
double x1,x2,x3,x4;
double A=pow(X,2)*pow(Y,2);
double R11=22000;double C11=0.000125;
double A1=pow(R11,2)*pow(C11,2);
double B=4*X*Y;
double B1=4*R11*C11;
double C=4;
double C1=4;
double D;
double D1;
const double t=1e-8;
double Np1=1;
double Np2=1;
double Mp1,Mp2;
double Mp3,Mp4;
int q=0;
if (abs(A1)<t && abs(B1)<t && abs(C1)<t )
{
ShowMessage("Уравнение выраждено!!");
}
else
{
D1=pow(B1,2)-4*A1*C1;
}
if(D1>-t)
{
if(abs(D1)<t)
{
D1=0;
x3=(-B1)/(2*A1);
x4=x3;
Mp3=2.0*7.56*x3+11.0;
Mp4=2.0*7.56*x4+11.0;
ShowMessage("2 одинаковых корня!!");
q=1;
}
else
{
x3=(-B1+sqrt(D1))/(2*A1);
x4=(-B1-sqrt(D1))/(2*A1);
Mp3=2.0*7.56*x3+11.0;
Mp4=2.0*7.56*x4+11.0;
ShowMessage(" 2 разных корня!");
q=1;
}
}
else
{
ShowMessage("Действительных корней нет!!!");
}
double Mp33=Np1/Mp3;
double Mp44=Np2/Mp4;
Form1->Edit35->Text= FloatToStrF(x3,ffFixed,6,4);
Form1->Edit36->Text= FloatToStrF(x4,ffFixed,6,4);
//-------------------------------------------------------;
int z=0;
if (abs(A)>t && abs(B)>t )
{
D=pow(B,2)-4*A*C;
}
else
{
ShowMessage("Уравнение выраждено!!!");
z=1;
}
if(z!=1)
{
if(D>-t)
{
if(abs(D)<t)
{
D=0;
x1=(-B)/(2*A);
x2=x1;
Mp1=(2.0*7.56*x1+11.0);
Mp2=2.0*7.56*x2+11.0;
ShowMessage("2 одинаковых корня");
z=0;
q=1;
}
else
{
x1=(-B+sqrt(D))/(2*A);
x2=(-B-sqrt(D))/(2*A);
Mp1=(2.0*7.56*x1+11.0);
Mp2=(2.0*7.56*x2+11.0);
q=1;
z=0;
ShowMessage("2 разных корня");
}
}
else
{
ShowMessage("Действительных корней нет!!!");
z=1;
};
};
double Mp11=Np1/Mp1;
double Mp22=Np2/Mp2;
if(z!=1)
{
Form1->Edit37->Text= FloatToStrF(x1,ffFixed,6,4);
Form1->Edit38->Text= FloatToStrF(x2,ffFixed,6,4);
};
//---------------------------------------------------;
float Uvix1,Uvix2;
for(float l=0;l<=5;l+=0.2)
{
if(q==1)
{
if (z!=1)
{
Uvix1=(Np1*exp(x1*l)/Mp1)+(Np2*exp(x2*l)/Mp2);
Form3->Chart3->Series[0]->AddXY(l,Uvix1);
}
Uvix2=(Np1*exp(x3*l)/Mp3)+(Np2*exp(x4*l)/Mp4);
Form3->Chart3->Series[1]->AddXY(l,Uvix2);
}
else
{
if(z!=1)
{
Uvix1=(Np1*exp(x1*l)/Mp1)+(Np2*exp(x2*l)/Mp2);
Form3->Chart3->Series[0]->AddXY(l,Uvix1);
}
}
}
if(z!=1)
{
GradientLabel55>Caption="Uвых(t)="+FloatToStrF(Mp11,ffGeneral,4,2)+"exp("+FloatToStrF(x1,ffGeneral,5,2)+"t)"+"+"+FloatToStrF(Mp22,ffGeneral,5,2)+"exp("+FloatToStrF(x2,ffGeneral,5,2)+"t)";
};
GradientLabel56>Caption="Uвых(t)="+FloatToStrF(Mp33,ffGeneral,4,2)+"exp("+FloatToStrF(x3,ffGeneral,5,2)+"t)"+"+"+FloatToStrF(Mp44,ffGeneral,5,2)+"exp("+FloatToStrF(x4,ffGeneral,5,2)+"t)";
ShowMessage("Загрузка параметров завершена!!!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton7Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите посмотреть графики?","внимание!!!", MB_YESNO) == mrYes)
{
Form3->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton8Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите распечатать?","внимание!!!", MB_YESNO) == mrYes)
{
// Асинхронные двигатели;
Form4->QRLabel1->Caption=Edit1->Text+" Гц";
Form4->QRLabel2->Caption=Edit2->Text+"";
Form4->QRLabel3->Caption=Edit8->Text+" об/мин";
Form4->QRLabel4->Caption=Edit9->Text+" Вт";
Form4->QRLabel5->Caption=Edit10->Text+" В";
Form4->QRLabel6->Caption=Edit3->Text;
Form4->QRLabel7->Caption=Edit4->Text;
Form4->QRLabel8->Caption=Edit5->Text;
Form4->QRLabel9->Caption=Edit6->Text;
Form4->QRLabel10->Caption=Edit7->Text;
Form4->QRDBChart1->Series[0]->DataSource = Form1->Chart1->Series[0];
Form4->QRDBChart1->Series[1]->DataSource = Form1->Chart1->Series[1];
Form4->QRDBChart5->Series[0]->DataSource = Form2->Chart1->Series[0];
Form4->QRDBChart13->Series[0]->DataSource = Form2->Chart2->Series[0];
Form4->QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton9Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите распечатать?","внимание!!!", MB_YESNO) == mrYes)
{
//МПТ в режиме генератора;
Form5->QRLabel1->Caption=Edit11->Text+" Вт";
Form5->QRLabel2->Caption=Edit12->Text+" В";
Form5->QRLabel3->Caption=Edit13->Text+" об/мин";
Form5->QRLabel4->Caption=Edit14->Text+" Ом";
Form5->QRLabel5->Caption=Edit15->Text+" Ом";
Form5->QRLabel6->Caption=Edit16->Text;
Form5->QRLabel7->Caption=Edit17->Text;
Form5->QRLabel8->Caption=Edit18->Text;
Form5->QRLabel9->Caption=Edit19->Text;
Form5->QRLabel10->Caption=Edit20->Text;
Form5->QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton10Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите распечатать?","внимание!!!", MB_YESNO) == mrYes)
{
//титульный лист;
Form7->QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton11Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите распечатать?","внимание!!!", MB_YESNO) == mrYes)
{
//МПТ в режиме двигателя;
Form6->QRLabel1->Caption=Edit21->Text+" Вт";
Form6->QRLabel2->Caption=Edit22->Text+" В";
Form6->QRLabel3->Caption=Edit23->Text+" об/мин";
Form6->QRLabel4->Caption=Edit24->Text+" Ом";
Form6->QRLabel5->Caption=Edit25->Text+"";
Form6->QRLabel6->Caption=Edit26->Text;
Form6->QRLabel7->Caption=Edit27->Text;
Form6->QRLabel8->Caption=Edit28->Text;
Form6->QRLabel9->Caption=Edit29->Text;
Form6->QRLabel10->Caption=Edit30->Text;
Form6->QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ColorButton12Click(TObject *Sender)
{
if (MessageBox(0,"вы действительно хотите распечатать?","внимание!!!", MB_YESNO) == mrYes)
{
//Четырехполюсники;
Form8->QRLabel1->Caption=Edit31->Text+" В";
Form8->QRLabel2->Caption=Edit32->Text+" с";
Form8->QRLabel3->Caption=Edit33->Text+" Oм";
Form8->QRLabel4->Caption=Edit34->Text+" Ф";
Form8->QRLabel9->Caption=Edit37->Text;
Form8->QRLabel10->Caption=Edit38->Text;
Form8->QRLabel15->Caption=GradientLabel55->Caption;
Form8->QRDBChart5->Series[0]->DataSource = Form3->Chart1->Series[0];
Form8->QRDBChart5->Series[1]->DataSource = Form3->Chart1->Series[1];
Form8->QRDBChart33->Series[0]->DataSource = Form3->Chart2->Series[0];
Form8->QRDBChart33->Series[1]->DataSource = Form3->Chart2->Series[1];
Form8->QRDBChart1->Series[0]->DataSource = Form3->Chart3->Series[0];
Form8->QRDBChart1->Series[1]->DataSource = Form3->Chart3->Series[1];
Form8->QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit8KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit9KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit10KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit11KeyPress(TObject *Sender, char &Key)
{
if ( (!(isdigit(Key))) && (!(Key ==VK_BACK)) && (!(Key ==',')) )
{
Key = 0;
ShowMessage("Недопустимый символ\nЗдесь нельзя вводить буквы \nМожно вводить цифры и \nнажимать BackSpace");
Подобные документы
Разработка программы, которая по заданной самостоятельно функции будет выполнять интегрирование методом прямоугольников. Блок-схема алгоритма вычисления интеграла (функция rectangle_integrate). Экспериментальная проверка программы, ее текст на языке C.
курсовая работа [232,0 K], добавлен 27.05.2013Основные параметры устройства отображения информации. Обоснование выбора используемых ресурсов микроконтроллера и схемы включения. Разработка схемы алгоритма. Описание и отладка программы. Схема электрическая принципиальная и листинг трансляции программы.
курсовая работа [121,3 K], добавлен 12.12.2014Программная реализация методов вычислительной математики и их применения к расчету и оптимизации электрической схемы. Сущность первого и второго законов Кирхгофа. Компоненты, использованные для реализации интерфейса программы. Листинг программного кода.
курсовая работа [1,3 M], добавлен 14.01.2014Обозначения и термины, характерные для электрических систем при изложении узлового метода. Создание математической модели данного метода в виде системы алгебраических и трансцендентных уравнений. Структура и листинг программы анализа электрических схем.
отчет по практике [1,0 M], добавлен 29.05.2013Микропроцессоры позволяют строить универсальные устройства управления электронными весами. Разработка функциональной схемы, схемы алгоритма прикладной программы. Разработка принципиальной схемы, управляющей программы. Листинг управляющей программы.
курсовая работа [118,0 K], добавлен 04.07.2008Особенности метода численного интегрирования функции одной переменной. Замена на каждом элементарном отрезке подынтегральной функции на многочлен первой степени (линейную функцию). Разработка алгоритма программы, ее листинг. Пример работы программы.
контрольная работа [217,9 K], добавлен 14.07.2012Табличный вывод значений суммы ряда и номера последнего элемента суммы в зависимости от значений величин входных параметров с применением операторов ветвления и циклов. Блок-схема алгоритма решения. Время работы программы для расчета одного значения.
контрольная работа [762,9 K], добавлен 14.05.2013Написание прикладного Windows-приложения на примере программы-органайзера, позволяющей вести электронный ежедневник и телефонную записную книжку. Описание блок-схемы программы и операционной системы. Листинг результатов обработки на контрольном примере.
дипломная работа [2,5 M], добавлен 29.12.2014Проектирование схемы, выполненной на основе однокристального микроконтроллера 51 серии для получения с 8 аналоговых входов информации о изменении их состояния с течением времени. Параметры устройства, описание элементов схемы, листинг программы.
курсовая работа [627,2 K], добавлен 24.12.2012Разработка программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран заданную информацию. Типы блок-схем и их использование при написании программы. Описание входных данных и результат вычислений, листинг программы.
курсовая работа [680,3 K], добавлен 03.08.2009