Гидроаккумулирующая электростанция

Автор — Кузьма, школьник

Известно, что ГАЭС работает в двух режимах — насосном и турбинном.
В первом режиме ГАЭС, потребляя избыточную энергию от тепловых электростанций в часы наименьших нагрузок в системе (обычно 7—-12 часов в сутки), перекачивает воду из нижнего питающего водохранилища в верхний аккумулирующий бассейн (зарядка станции).
Во втором режиме ГАЭС работает в часы максимального потребления энергии в системе (2—6 час. в сутки). Расходуя воду из верхнего бассейна, она вырабатывает электроэнергию в систему (разрядка станции).
Подробности о ГАЭС, см. например: Гидроаккумулирующая электростанция

Решение

Расположим на форме элементы: pictureBox1 (для рисования); четыре кнопки: Начать, Выработка электроэнергии, Аккумуляция воды, Стоп;  label1 и textBox1 для информации о заполнении бассейнов; label2 и label3 (на pictureBox1) для индикации выработанной/запасенной энергии. Не визуальный компонент timer1  используем для отображения динамики заполнения/сработки бассейнов (Interval=500 мс).

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

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace ГАЭС
{
    public partial class Form1 : Form
    {
        Graphics gr;        // графический объект
        SolidBrush brw;     // кисть - Вода
        SolidBrush brs;     // кисть - Небо
        HatchBrush brg;     // кисть - ГАЭС   
        Color DashBug = Color.LimeGreen;    // цвет штриховки
        Color C_water = Color.Blue;         // цвет воды
        Color C_sky = Color.MintCream;      // цвет неба
        Color C_kontur = Color.Maroon;      // цвет контуров

        Pen peng;           // перо - границы
        Pen penw;           // перо - труба
        Pen pent;           // труба без воды

        int x;              // % заполнения верхнего водохранилища
        bool generator;     // генерация электроэнергии (true) или гидроаккумуляция (false)
        int Ev;             // Выработка электроэнергии, кВт-ч
        int Ez;             // запас гидроэнергии, кВт-ч

        // начальная загрузка 
        public Form1()
        {
            InitializeComponent();
            brw = new SolidBrush(C_water);
            brs = new SolidBrush(C_sky);
            brg= new HatchBrush(HatchStyle.DashedUpwardDiagonal, DashBug, Color.Gray);
            penw = new Pen(C_water, 6);
            peng = new Pen(C_kontur, 3);
            pent = new Pen(Color.Gray,6);
            gr = pictureBox1.CreateGraphics();  //инициализируем объект типа графики, привязав его к PictureBox          
        }

        // Показать схему ГАЭС
        private void button1_Click(object sender, EventArgs e)
        {
            x = Convert.ToInt32(textBox1.Text);
            foto();
        }

        // Схема ГАЭС с некоторым уровнем воды, x в %
        private void foto()
        {
            gr.Clear(C_sky);
            gr.FillRectangle(brw, 0, 100-x, 100, 100);
            gr.DrawRectangle(peng, 0, 0, 101, 101);
            gr.FillRectangle(brw, 0, 301+x, 200, 100-x);
            gr.DrawRectangle(peng, 0, 301, 200,100);
            gr.FillRectangle(brg, 0, 101, 101, 201);
            gr.DrawBezier(penw, 99, 99, 200,200,100,200,120,400);
            timer1.Enabled = true;
        }
       
        // Выработка электроэнергии
        private void button2_Click(object sender, EventArgs e)
        {
            generator = true;
            timer1.Start();
            Ev = 0;
        }

        // Гидроаккумуляция
        private void button3_Click(object sender, EventArgs e)
        {
            generator = false;
            timer1.Start();
            Ez = 0;
        }

        // динамика процесса
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (generator)
            {
                if (x > 10)         // генерация
                {
                    gr.DrawBezier(penw, 99, 99, 200, 200, 100, 200, 120, 400);
                    gr.FillRectangle(brs, 2, 100 - x, 98, 1);
                  
                    gr.FillRectangle(brw, 2, 301 + x, 197, 1);
                    x = x - 1;
                    Ev = Ev + 1000;
                    textBox1.Text = x.ToString();
                    label2.Text = "Выработано " + Ev.ToString() + " кВт-ч электроэнергии";
                    label3.Text = "";
                }
                else                //  x=10% - минимальный запас
                    gr.DrawBezier(pent, 99, 99, 200, 200, 100, 200, 120, 400);
            }
            else
            {
                if (x < 90)         // аккумулирование
                {
                    gr.FillRectangle(brw, 2, 100 - x, 98, 1);
                    gr.FillRectangle(brs, 2, 301 + x, 197, 1);
                    gr.DrawBezier(penw, 99, 99, 200, 200, 100, 200, 120, 400);
                    x = x + 1;
                    Ez = Ez + 1000;
                    textBox1.Text = x.ToString();
                    label3.Text = "Запасено " + Ez.ToString() + " кВт-ч гидроэнергии";
                    label2.Text = "";
                }
                else              //  заполнение не более 90% 
                    gr.DrawBezier(pent, 99, 99, 200, 200, 100, 200, 120, 400);
            }
        }

        // стоп
        private void button4_Click(object sender, EventArgs e)
        {
            gr.DrawBezier(pent, 99, 99, 200, 200, 100, 200, 120, 400);
            Ev = 0;
            Ez = 0;
            timer1.Stop();
        }

    }
}

Окно программы в режиме аккумуляции воды:

ГАЭС

 

 

 

 


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Важно: Вы можете поддержать проект и автора.
1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x