Что такое генератор примеры генераторов
- Виды электрических генераторов и принципы их работы
- Электрогенераторы. Виды и устройство. Применение и как выбрать
- Виды электрогенераторов
- Генераторы Python: что это такое и зачем они нужны
- Что такое генератор и как он работает?
- И что, для вычисления генератора придётся много раз вызывать next()?
- И чем помогут генераторы в наших задачах?
- Как ещё можно создавать генераторы?
- Как создать бесконечную последовательность
- Какие ещё методы есть у генераторов?
- Что ещё можно сказать
- Что такое генератор
- Принцип работы электрогенератора
- Классификация генераторов
- Автономность
- Стационарные
- Мобильные
- Фазность
- Однофазные
- Трёхфазные
- Режимы работы
- Основные
- Резервные
- Сфера применения
- Производство
- Виды бытовых генераторов
- Газовые
- Бензиновые
- Дизельные
- Видео
- Электрический генератор
- Содержание
- История
- Динамо-машина Йедлика
- Диск Фарадея
- Динамо-машина
- Другие электрические генераторы, использующие вращение
- МГД генератор
- Классификация
- Электромеханические индукционные генераторы
- Углублённое руководство по JavaScript: генераторы. Часть 1, основы
- Мотивация
- Введение
- Поток управления в генераторах
- Отправка значений в генератор
- Заключение
Виды электрических генераторов и принципы их работы
Электрическим генератором называется машина или установка, предназначенная для преобразования энергии неэлектрической — в электрическую: механической — в электрическую, химической — в электрическую, тепловой — в электрическую и т. д. Сегодня в основном, произнося слово «генератор», мы имеем ввиду преобразователь механической энергии — в электрическую.
Это может быть дизельный или бензиновый переносной генератор, генератор атомной электростанции, автомобильный генератор, самодельный генератор из асинхронного электродвигателя, или тихоходный генератор для маломощного ветряка. В конце статьи мы рассмотрим в качестве примера два наиболее распространенных генератора, но сначала поговорим о принципах их работы.
Так или иначе, с физической точки зрения принцип работы каждого из механических генераторов — один и тот же: явление электромагнитной индукции, когда при пересечении линиями магнитного поля проводника — в этом проводнике возникает ЭДС индукции. Источниками силы, приводящей к взаимному перемещению проводника и магнитного поля, могут быть различные процессы, однако в результате от генератора всегда нужно получить ЭДС и ток для питания нагрузки.
Принцип работы электрического генератора — Закон Фарадея
Принцип работы электрического генератора был открыт в далеком 1831 году английским физиком Майклом Фарадеем. Позже этот принцип назвали законом Фарадея. Он заключается в том, что при пересечении проводником перпендикулярно магнитного поля, на концах этого проводника возникает разность потенциалов.
Первый генератор был построен самим Фарадеем согласно открытому им принципу, это был «диск Фарадея» — униполярный генератор, в котором медный диск вращался между полюсами подковообразного магнита. Устройство давало значительный ток при незначительном напряжении.
Позже было установлено, что отдельные изолированные проводники в генераторах проявляют себя гораздо эффективнее с практической точки зрения, чем сплошной проводящий диск. И в современных генераторах применяются теперь именно проволочные обмотки статора (в простейшем демонстрационном случае — виток из проволоки).
Генератор переменного тока
В подавляющем своем большинстве современные генераторы — это синхронные генераторы переменного тока. У них на статоре располагается якорная обмотка, от которой и отводится генерируемая электрическая энергия. На роторе располагается обмотка возбуждения, на которую через пару контактных колец подается постоянный ток, чтобы получить вращающееся магнитное поле от вращающегося ротора.
За счет явления электромагнитной индукции, при вращении ротора от внешнего привода (например от ДВС), его магнитный поток пересекает поочередно каждую из фаз обмотки статора, и таким образом наводит в них ЭДС.
Чаще всего фаз три, они смещены физически на якоре друг относительно друга на 120 градусов, так получается трехфазный синусоидальный ток. Фазы можно соединить по схеме «звезда» либо «треугольник», чтобы получить стандартное сетевое напряжение.
Частота синусоидальной ЭДС f пропорциональна частоте вращения ротора: f = np/60, где — p — число пар магнитных плюсов ротора, n – количество оборотов ротора в минуту. Обычно максимальная скорость вращения ротора — 3000 оборотов в минуту. Если подключить к обмоткам статора такого синхронного генератора трехфазный выпрямитель, то получится генератор постоянного тока (так работают, кстати, все автомобильные генераторы).
Упрощенная схема трехфазного генератора переменного тока:
Трехмашинный синхронный генератор
Конечно, у классического синхронного генератора есть один серьезный минус — на роторе располагаются контактные кольца и щетки, прилегающие к ним. Щетки искрят и изнашиваются из-за трения и электрической эрозии. Во взрывоопасной среде это не допустимо. Поэтому в авиации и в дизель-генераторах более распространены бесконтактные синхронные генераторы, в частности — трехмашинные.
У трехмашинных устройств в одном корпусе установлены три машины: предвозбудитель, возбудитель и генератор — на общем валу. Предвозбудитель — это синхронный генератор, он возбуждается от постоянных магнитов на валу, генерируемое им напряжение подается на обмотку статора возбудителя.
Статор возбудителя действует на обмотку на роторе, соединенную с закрепленным на ней трехфазным выпрямителем, от которого и питается основная обмотка возбуждения генератора. Генератор генерирует в своем статоре ток.
Газовые, дизельные и бензиновые переносные генераторы
Сегодня очень распространены в домашних хозяйствах дизельные, газовые и бензиновые генераторы, которые в качестве приводных двигателей используют ДВС — двигатель внутреннего сгорания, передающий механическое вращение на ротор генератора.
У генераторов на жидком топливе имеются топливные баки, газовым генераторам — необходимо подавать топливо через трубопровод, чтобы затем газ был подан в карбюратор, где превратится в составную часть топливной смеси.
Во всех случаях топливная смесь сжигается в поршневой системе, приводя во вращение коленвал. Это похоже на работу автомобильного двигателя. Коленвал вращает ротор бесконтактного синхронного генератора (альтернатора).
Лучшие инверторные генераторы домашних электростанций имеют встроенный аккумулятор для компенсации перепадов и систему двойного преобразования, у таких устройств переменное напряжение получается более стабилизированным.
Автомобильные генераторы
Еще один пример генератора переменного тока — самый распространенный в мире вид генератора — автомобильный генератор. Данный генератор традиционно содержит обмотку возбуждения с контактными кольцами на роторе и трехфазную обмотку статора с выпрямителем.
Встроенный электронный регулятор удерживает напряжение в допустимых для автомобильного аккумулятора пределах. Автомобильный генератор — высокооборотный генератор, его обороты могут достигать 9000 в минуту.
Хотя изначально ток получается переменным (полюсные наконечники ротора поочередно и в разной полярности пересекают своими магнитными потоками три фазы обмотки статора), затем он выпрямляется диодами и превращается в постоянный, пригодный для зарядки аккумулятора.
Необычные конструкции электрических генераторов:
Электрогенераторы. Виды и устройство. Применение и как выбрать
Для питания электроприборов в случае отсутствия проложенной линии электропередач или при аварийном отключении напряжения используются электрогенераторы. Они представляют собой технические устройства, которые вырабатывают электричество, потребляя при этом бензин, дизельное топливо или газ.
Что такое электрогенератор и его конструкция
Прибор представляет собой устройство, состоящее из двигателя внутреннего сгорания, который обеспечивает раскручивание якоря небольшого электромотора, сделанного по принципу генератора. В результате постоянного поддержания высоких оборотов создается электрическое напряжение, снимаемое на специальные клеммы и выводимое на внешнюю розетку, используемою для подключения потребителей энергии.
Электрогенераторы могут быть рассчитаны на кратковременное включение и на постоянную работу. По этому критерию они делятся на резервные источники питания и постоянные. Резервные применяются в тех случаях, когда требуется обеспечить питание приборов на короткий период, пока не будет возобновлено электроснабжение сети. Постоянные станции применяются, когда подключение к линии электропередач вообще отсутствует. В этом случае генератор является единственным источником энергии, поэтому работает непрерывно. В зависимости от предназначения оборудование генератора может оснащаться системой воздушного или водяного охлаждения. Воздушные обеспечивают эффективное снижение температуры корпуса устройства на несколько часов, а водяные не допускают перегрев вообще.
Стоит учитывать, что во время работы двигатель создает большой шум, что не всегда приемлемо. По этой причине электрогенераторы могут производиться не только в открытом, но и в шумопоглощающем корпусе, который значительно снижает уровень шума. Устройство с открытым корпусом представляет собой силовую раму, на которую устанавливается ДВС, топливный бак и генератор, при этом они являются открытыми, и все составляющие легко просматриваются. Устройство в шумопоглощающем корпусе имеет специальный защитный кожух, препятствующий распространению звука и вибрации.
Виды электрогенераторов
Электрические генераторы принято разделять на 3 вида в зависимости от используемого топлива для выработки энергии:
- Бензиновые.
- Дизельные.
- Газовые.
Каждая разновидность имеет свои достоинства и недостатки, которые нужно оценить и выбирать подходящую модель уже отталкиваясь от задач, запланированных для генератора.
Бензиновый
Бензиновые станции работают на бензине, за что и получили свое название. Данная категория устройств является самой дешевой при покупке, но очень дорогой в обслуживании. Работающие на бензине генераторы имеют компактный корпус и сравнительно небольшой вес, что делает такие станции максимально мобильными. Зачастую их можно разместить в багажнике легкового автомобиля.
Благодаря дешевизне их преимущественно выбирают для использования в качестве аварийного источника питания. Включение на несколько часов 5-10 раз в год потребует не таких уж и больших затрат на покупку бензина, что на фоне низкой стоимости самой станции является очень выгодным решением. В тех случаях, когда генератор должен работать постоянно, бензиновый вариант совершенно неприемлем. Во-первых, потребуется ежедневно тратить большие суммы на заправку горючего, а во-вторых, моторесурс таких устройств сравнительно короткий.
Дизельный
Дизельные электрогенераторы являются более экономичными в плане потребления топлива, но стоят значительно дороже, а также весят больше. Их моторесурс в 3-4 раза выше, чем у бензиновых аналогов. Дизельная станция может работать непрерывно по 10 и более часов на одной заправке. Такое оборудование редко выбирают для резервного питания частного дома в связи с дороговизной. Практическая экономия топлива при нескольких включениях в год будет незначительной и не покроет затраты на покупку генератора.
Дизельные станции выбирают в тех случаях, когда требуется постоянная выработка электричества. Это могут быть строительные объекты, которые еще не подключены к центральной сети электроснабжения, а также загородные участки и дачи, с такой же проблемой. Стоит отметить, что устройство на дизельном топливе являются более мощными и стойкими к поломкам, но очень шумными.
Газовый
Газовые генераторы еще называют двухтопливными, поскольку они оснащены гибридным двигателем, который может работать как на бензине, так и на баллонном газе. Такие устройства используют в качестве резервного источника энергии. Станция вырабатывает одинаковое количество электричества как на газе, так и на бензине. При питании гибридного двигателя из баллона существенно снижаются затраты на выработку энергии, поскольку стоимость газа намного ниже чем бензина. Стоит отметить, что двухтопливные станции довольно тяжелые и не такие компактные как бензиновые. Их моторесурс тоже не идет ни в какое сравнение с дизельными системами.
Однофазные или трехфазные
Электрогенераторы бывают однофазные и трехфазные. Первые используется для питания бытовых приборов, которые рассчитаны для работы от сети 220В и 50Гц. Они выбираются для установки в частные дома и офисы, где основная задача заключается в обеспечении работы бытовых приборов, таких как телевизор, холодильник, компьютер, водяной насос, фен, зарядка телефона, кондиционер и прочее. Также однофазные генераторы применяют строители при работе на объектах, поскольку именно от такой сети питаются шуруповерты, дрели, перфораторы, компрессоры и прочее оборудование.
Трехфазные электрогенераторы выдают 380 вольт. Для домашнего использования они применяются редко. Их применяют для питания промышленного оборудования. Такая станция позволит продолжить производство даже в том случае, если электроснабжение было остановлено. Особенность трехфазного генератора заключается в том, что на его корпусе имеется две розетки. Первая выдает одну фазу и обеспечивает питание обычных бытовых приборов на 220В, а вторая выводит 380В для промышленного оборудования.
Расчет мощности
Предлагаемые на рынке электрогенераторы имеют большой диапазон мощности от 0,6 и до 10 и выше кВт. Чем производительней станция, тем она дороже, шумнее и менее экономичная. По этим причинам следует подойти к выбору мощности генератора со всей серьезностью. Если мощности будет недостаточно, то при критической нагрузке устройство будет отключаться или просто выйдет из строя. В том случае, когда взять слишком высокий запас производительности, то устройство будет выдавать неоправданно большой поток, который не будет использоваться. В результате будет значительный расход горючего, что существенно увеличит себестоимость выработанной энергии.
Чтобы выбрать электрический генератор требуемых параметров следует провести расчет потребление энергии каждого прибора, который будет работать от него.
К примеру, требуется обеспечение одновременного питания:
- Холодильника на 700 Вт.
- Кондиционера на 1000 Вт.
- Лампы на 23 Вт.
- Компьютера на 50 Вт.
В результате подсчета можно определить, что для одновременного питания всех этих потребителей необходимо, чтобы генератор выдавал 1773 Вт. Кроме этого, нужно учитывать, что отдельные приборы в момент включения не доли секунды потребляют больше энергии, чем непосредственно в период нормальной работы. Данное явление называется коэффициент пускового тока. У холодильника и кондиционера он составляет 3,5. По этой причине в момент включения холодильник резко потребует 2450 Вт, а кондиционер 3500 Вт.
Таким образом, чтобы приборы с высоким коэффициентом пускового тока смогли работать, нужен генератор с мощностью не на 1773, а на 6023 Вт. К этому показателю нужно прибавить запас на 20%, который позволит исключить остановку и сгорание генератора при небольших скачках потребления, в случае включения дополнительной лампочки, утюга или фена. Фактически для таких потребителей нужна станция мощностью 7 кВт и более. Нужно отметить, что в указанном примере предложены приборы с очень высоким коэффициентом пускового тока. Если использовать более скромные потребители, которые не тянут много энергии при включении, то для частного дома, где электричество отключено на несколько часов, нужен только свет, телевизор и компьютер, поэтому даже генератор на 3 кВт справится с легкостью. Холодильник вполне постоит несколько часов выключенным.
Типы запуска По типу запуска электрогенераторы делятся на 4 группы с:
- Ручным стартером.
- Электростартером.
- Дистанционным запуском.
- Системой ATS.
Генератор с ручным стартером имеет специальный шнурок, при вытягивании которого обеспечивается раскручивание коленвала, что и запускает двигатель. Это самые бюджетные устройства. Чтобы запустить такой генератор может понадобиться несколько раз дернуть за пусковой шнур, что требует некоторых усилий, особенно в холодную погоду. Завести двигатель ручным способом в мороз очень тяжело, особенно у мощного генератора с высокой компрессией мотора.
Генераторы с электростартером запускаются как и любой автомобиль. Достаточно просто вставить ключ и повернуть. Стартер работает от аккумулятора. Также бывают генераторы с дистанционным запуском. Они являются модификацией модели с электростартером, которые дополнительно оснащены пультом дистанционного управления. Пульт напоминает обычную автосигнализацию. Он позволяет провести включение не выходя из дома.
Электрогенераторы с системой ATS работают автоматически. Они оборудованы специальным прибором, который постоянно контролирует наличие в системе электричества. В случае его отключения проводится автоматический запуск станции, и питание электроприборов возобновляется. При включении электроснабжения генератор сам отключается. Это позволяет исключить перерасход топлива в те моменты, когда это уже не нужно.
Генераторы Python: что это такое и зачем они нужны
Генераторы используют, чтобы оперативная память не давилась большими объёмами информации. В Python это фишки, экономящие память.
Допустим, у вас есть файл, который весит десяток гигабайт. Из него нужно выбрать и обработать строки, подходящие под какое-то условие, а то и сравнить со строками другого большого файла.
Другой пример: нужно проанализировать практически бесконечный поток данных. Это могут быть, например, показания счётчиков, биржевые котировки, сетевой трафик.
А может, нужно создать поток данных самостоятельно: рассчитать комбинаторную структуру для определения вероятности какого-то события, математическую последовательность или последовательность случайных чисел.
Что делать? Хранить такие объёмы данных в компьютере нереально: они не поместятся в оперативную память — а некоторые и на жёсткий диск. Выход один — обрабатывать информацию небольшими порциями, чтобы не вызывать переполнения памяти. В Python на этот случай есть специальный инструмент — генераторы.
Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.
Что такое генератор и как он работает?
- Генератор — это объект, который сразу при создании не вычисляет значения всех своих элементов.
- Он хранит в памяти только последний вычисленный элемент, правило перехода к следующему и условие, при котором выполнение прерывается.
- Вычисление следующего значения происходит лишь при выполнении метода next(). Предыдущее значение при этом теряется.
Этим генераторы отличаются от списков — те хранят в памяти все свои элементы, и удалить их можно только программно. Вычисления с помощью генераторов называются ленивыми, они экономят память.
Рассмотрим пример: создадим объект-генератор gen с помощью так называемого генераторного выражения. Он будет считать квадраты чисел от 1 до 4 — такую последовательность создаёт функция range(1,5).
Когда мы выведем на консоль переменную gen, то увидим лишь сообщение, что это объект-генератор.
При четырёх вызовах метода next(a) будут по одному рассчитываться и выводиться на консоль значения генератора: 1, 4, 9, 16. Причём в памяти будет сохраняться только последнее значение, а предыдущие сотрутся.
Когда мы попытаемся вызвать next(gen) в пятый раз, генератор сотрёт из памяти последний элемент (число 16) и выдаст исключение StopIteration.
Всё! Генератор больше не работает. Сколько бы мы ни вызывали next(gen), ничего считаться не будет. Чтобы запустить генератор ещё раз, придётся создавать его заново.
И что, для вычисления генератора придётся много раз вызывать next()?
Нет, значения можно вычислять в цикле for. В этом случае метод next() вызывается неявно. Например:
Когда весь цикл пройден, произойдёт исключение StopIteration. Хотя на консоль сообщение об этом не выводится, но генератор помнит о нём и больше работать не будет. То есть цикл for можно запускать только один раз, во второй раз не получится. Нельзя об этом забывать.
И чем помогут генераторы в наших задачах?
Для этого сначала рассмотрим упрощённый способ создания генератора — с помощью генераторного выражения.
Генераторные выражения позволяют создавать объект-генератор в одну строчку. В общем случае их пишут по шаблону:
( выражение for j in итерируемый объект if условие)
Где for, in, if — ключевые слова, j — переменная.
Пример генераторного выражения мы рассмотрели выше. Теперь посмотрим, как можно применить его для обработки большого файла.
Перед нами задача: на сервере есть огромный журнал событий log.txt, в котором хранятся сведения о работе какой-то системы за год. Из него нужно выбрать и обработать для статистики данные об ошибках — строки, содержащие слово error.
Такие строки можно выбрать и сохранить в памяти с помощью списка:
Здесь path — путь к файлу log. В результате сформируется список вида:
[строка1, строка2, строка3, ….. ]
В списке e_l содержатся все строки со словом error, они записаны в память компьютера. Теперь их можно обработать в цикле. Недостаток метода в том, что, если таких строк будет слишком много, они переполнят память и вызовут ошибку MemoryError.
Переполнения памяти можно избежать, если организовать поточную обработку данных с использованием объекта-генератора. Мы создадим его с помощью генераторного выражения (оно отличается от генератора списка только круглыми скобками).
Рассмотрим следующий код:
- Генераторное выражение возвращает объект-генератор err_gen.
- Генератор начинает в цикле выбирать из файла по одной строке со словом error и передавать их на обработку.
- Обработанная строка стирается из памяти, а следующая записывается и обрабатывается. И так до конца цикла.
Этот метод не вызывает переполнения, так как в каждый момент времени в памяти находится только одна строка. При этом нужный для работы объём памяти не зависит от размера файла и количества строк, удовлетворяющих условию.
Генераторы часто используют при веб-скрапинге . Они позволяют поочерёдно получать нужные веб-страницы и обрабатывать их информацию. Это намного эффективнее, чем загрузить в память сразу все выбранные страницы и затем обрабатывать их в цикле.
Как ещё можно создавать генераторы?
Генераторные выражения — это упрощённый вариант функций-генераторов, также создающих генераторы.
Функция-генератор отличается от обычной функции тем, что вместо команды return в ней используется yield. И если return завершает работу функции, то инструкция yield лишь приостанавливает её, при этом она возвращает какое-то значение.
При первом вызове метода next() выполняется код функции с первой команды до yield. При втором next() и последующих до конца генератора — код со следующей после yield команды и до тех пор, пока yield не встретится снова.
Чтобы было понятнее, рассмотрим небольшой пример:
Здесь функция f_gen(5) при вызове создаёт генератор a. Мы видим это, когда выводим a на консоль.
Посчитаем значения генератора в цикле for.
- При первой итерации выполняется код функции до yield: переменная s = 1, n = 1, yield возвращает 2.
- При второй итерации выполняется оператор после yield, далее к началу цикла и опять до yield: s = 2, n = 2, yield возвращает 6.
- Соответственно, при третьей и четвёртой итерации генерируются значения 12 и 20, после чего выполнение генератора прекращается.
Как видим, значения переменных n и s между вызовами сохраняются.
Yield — инструмент очень гибкий. Его можно несколько раз использовать в коде функции-генератора. В этом случае команды yield служат разделителями кода: при первом вызове метода next() выполняется код до первого yield, при следующих вызовах — операторы между yield. При этом в генераторной функции необязательно должен быть цикл, все значения генератора и так посчитаются.
Как создать бесконечную последовательность
Рассмотрим, как можно с помощью генератора создать математическую последовательность, например, программу, генерирующую простые числа (напоминаем, это числа, не имеющие делителей, кроме 1).
Наша программа будет последовательно анализировать целые числа больше 1. Для каждого числа n программа ищет делители в диапазоне от 2 до √n. Если делители есть, программа переходит к следующему числу. Если их нет, значит, n — число простое, и программа выводит его на печать.
Этот код выдаёт бесконечную последовательность простых чисел без ограничения сверху. Остановить его можно только вручную.
Подобным образом с помощью генераторов можно создавать ряды случайных чисел, комбинаторные структуры, рекуррентные ряды, например, ряд Фибоначчи и другие последовательности.
Какие ещё методы есть у генераторов?
Когда-то был один next(), но в Python 2.5 появилось ещё три метода:
- .close() — останавливает выполнение генератора;
- .throw() — генератор бросает исключение;
- .send() — интересный метод, позволяет отправлять значения генератору.
Рассмотрим пару небольших примеров.
Сначала на .close() и .throw():
Программа создаёт два генератора, возвращающих бесконечную последовательность квадратов чисел. Их выполнение прекращается с помощью методов .close() и .throw().
Пример использования .send()
Здесь мы не получаем значения генератора, а отправляем их на обработку с помощью метода .send().
С помощью этих методов можно создавать сопрограммы, или корутины, — это функции, которым можно передавать значения, приостанавливать и снова возобновлять их работу. Их обычно используют в Python для анализа потоков данных в корпоративной многозадачности. Генераторы позволяют создавать сложные разветвлённые программы для обработки потоков.
Что ещё можно сказать
С изучения генераторов начинается освоение последовательной обработки гигантских потоков данных. Это может быть, например, трейдинг и технический анализ в биржевых операциях.
Но даже если не говорить о глобальных задачах, скрипты с применением генераторов — это способ избежать копирования данных в память. Генераторы позволяют экономить ресурсы компьютера и создавать красивый чистый код.
Изучить генераторы и другие объекты Python можно на курсах в Skillbox. Вы получите серьёзные теоретические знания и практический опыт. С самого начала обучения будете участвовать в реальных проектах. Те, кто успешно окончит курсы, станут программистами middle-уровня, а мы поможем найти хорошую работу.
Что такое генератор
Что такое генератор? Это электромеханический прибор, который преобразует кинетическую энергию в электрический переменный ток. Основой энергетического преобразования является вращающееся магнитное поле. Понятие генератора включает в себя массу устройств различного принципа действия. Это гальванические, электростатические приборы, солнечные батареи, турбины электростанций и пр. В статье пойдёт речь именно о генераторах электрической энергии.
Принцип работы электрогенератора
В основу работы агрегатов, преобразующих энергию, положен закон Фарадея об электродвижущей силе (ЭДС). Учёный открыл закон, который объяснил природу появления тока в металлическом контуре (рамке), вращающемуся в однородном магнитном поле (явление индукции). Ток возникает также при вращении постоянных магнитов вокруг металлического контура.
Простейшая схема генератора представляется в виде вращающейся металлической рамки между двумя разно полюсными магнитами. На оси рамки помещают токосъёмные кольца, которые получают заряд электрического тока и передают его дальше по проводникам.
В действительности статор (неподвижная часть прибора) состоит из электромагнитов, а ротором служит группа рамных проводников. Устройство представляет обратный электромотор. Электродвигатель поглощает электрический ток и заставляет вращаться ротор. Электрический генератор, преобразовывающий кинематическую энергию механического вращения в ЭДС, называют индукционным генератором.
Классификация генераторов
Классификация преобразователей энергии даёт чёткое понятие – что такое генератор электрического тока. Различают электрические генераторы по следующим признакам:
- автономность;
- фазность;
- режим работы;
- сфера применения.
Автономность
Главное преимущество, которым обладает электрический генератор, – это его полная независимость от централизованных поставщиков энергии. Автономность электротехнического оборудования бывает стационарной и мобильной.
Стационарные
Обычно это генераторные станции, работающие от дизельных двигателей. Станции используют для электроснабжения потребителей в местах, удалённых от централизованных электрических сетей.
Стационарные генераторные станции необходимы для обеспечения током производственных процессов там, где даже кратковременные перебои поставки электроэнергии недопустимы.
Мобильные
Электрогенераторы мобильного типа выполнены в виде компактных аппаратов, которые можно перемещать в пространстве. Передвижные станции используют для электросварки, местного освещения, снабжения током бытовых электроприборов и многое другое.
Оборудование включает в себя двигатель внутреннего сгорания, работающий на бензине или дизельном топливе. Агрегаты имеют различные габариты. Компактный аппарат может транспортировать один человек. Существуют мобильные агрегаты, которые устанавливаются на специальном автомобильном прицепе.
Фазность
По фазовой структуре электрического потока различают однофазные и трёхфазные агрегаты.
Однофазные
Генераторы, производящие однофазный ток, предназначены в основном для питания бытовых приборов. Чаще всего это мобильные аппараты. Однофазными агрегатами хозяева оснащают свои частные домовладения для бытовых нужд (освещения, питания электротехники и др.).
Трёхфазные
Генераторные источники трёхфазного тока используются для питания силового электрооборудования. В некоторых случаях получаемый трёхфазный ток разделяют по фазам. Таким образом, делают развод электропроводки по всему дому для питания бытовых электроприборов.
Важно! Все ветви фазового разделения должны равняться между собой мощности потребления. Если разница нагрузок будет велика, то генератор быстро выйдет из строя.
Режимы работы
В зависимости от того, в каком режиме эксплуатируются агрегаты, их подразделяют на основные и резервные.
Основные
Аппараты предназначены для работы в постоянном режиме. Мощные электрогенераторы с дизельными двигателями относят к промышленным установкам. Устанавливаются там, где требуется получение электроэнергии круглосуточно.
Резервные
Само название агрегатов говорит о применении их в исключительных случаях – при внезапном отключении централизованного электроснабжения. Генераторы могут включаться в работу при срабатывании реле, реагирующего на исчезновение напряжения в электросети централизованного источника. Резервные аппараты рассчитаны на беспрерывную работу в течение нескольких часов.
Сфера применения
Генераторы изготавливают, рассчитанные на две сферы применения: для быта и производства.
Сейчас торговая сеть предлагает широкий выбор бытовых генераторов. Это однофазные установки, предназначенные для аварийного обеспечения электроэнергией частных домостроений. Также компактные агрегаты используют для питания выносного электрооборудования. Для бытовых электроприборов, использующих цифровую элементную базу важно качество тока. Устройство должно выдавать электроэнергию следующих параметров: 220 В, 1 А, 50 Гц.
Мощные бытовые агрегаты используют для электросварочных работ. Их преимуществом является способность производить ток большой силы для получения электрической дуги.
Обратите внимание! Если в инструкции бытового аппарата производитель не оговаривает применение для электросварки, то его нельзя использовать для сварочных работ. В противном случае генератор выйдет из строя.
Производство
Независимыми мощными стационарными генераторами оснащают цеха промышленных предприятий, жилые районы, строительные объекты, больницы и объёмные общественные здания.
Виды бытовых генераторов
Электротехническая промышленность выпускает бытовые генераторы переменного тока трёх видов:
- газовые;
- бензиновые;
- дизельные.
Газовые
Генераторы газового типа выдают ток низкой себестоимости. Стоимость 1 кВт/ часа составляет 3 рубля. Газовые агрегаты используют как резервные источники электроэнергии. Устройства предназначены для режима кратковременного включения при сбое поставки электрического тока централизованной сетью электроснабжения.
В частных домов используют газовые установки мощностью 5 кВт. Агрегаты оснащены системой автозапуска. При отключении электричества аппарат автоматически включается в работу и восстанавливает напряжение в электросети дома. Генераторы с воздушным охлаждением после 12 часов непрерывной работы требуют перерыва.
Выгодно устанавливать такие преобразователи энергии при центральном газопроводе. Автономное снабжение сжатым природным газом установок связано с рядом условий, таких, как наличие газобаллонного сервиса поставки энергоносителя и технически исправного приёмного оборудования в доме.
Одними из достоинств газовых агрегатов является то, что генераторы работают практически бесшумно, выхлоп продуктов сгорания топлива сведён к 0.
Газовые генераторы устанавливают вне дома. Для обеспечения бесперебойной работы устройства в зимний период помещают в специальные кожухи. Существующие модели – с жидкостным охлаждением, какое допускает их установку внутри дома.
Бензиновые
Бензиновые генераторы в основной своей массе изготавливают мощностью, не превышающей 20 кВт. Устройства используют для аварийного обеспечения электричеством загородных домов, дач, а также для питания ручных электроинструментов, небольших станков и прочее. Генераторы могут поддерживать освещение придомовой территории, автомобильной стоянки и торговых площадей.
Дополнительная информация. Стандартное топливо для агрегатов – это бензин марки АИ-92. Кратковременно можно заливать в бак оборудования бензин АИ-76 и АИ-95.
Бензиновые генераторы переменного тока могут быть мобильными и стационарными. Особо мощные тяжёлые установки оснащают колёсной парой. В зависимости от модели, устройства оснащают ручным запуском или стартером. Для понижения шумности работы двигателя внутреннего сгорания аппарат помещают в звукопоглощающий кожух.
Дизельные
Дизельные генераторы переменного тока представляют устройства, мощность которых достигает до 3 мВт. Агрегаты могут служить постоянными источниками электроэнергии для загородных домов и дач. Автономные дизельные источники переменного электрического тока питают мощное деревообрабатывающее оборудование, станки различного назначения. Дизель-генераторы могут снабжать током целые посёлки.
Дизельные установки изготавливают в стационарном и мобильном варианте. Агрегаты обладают большой шумностью. Поэтому в некоторых случаях их помещают в специальные шумоизоляционные кожухи.
По сравнению с бензиновыми аналогами, дизель-генераторы потребляют топливо в меньшем объёме, которое стоит дешевле, чем бензин. Дорогие модели способны контролировать управление процессом генерации энергии, автоматически включаться в работу при возникновении аварийных ситуаций в сети центрального электроснабжения.
Современный рынок электротехники располагает огромным ассортиментом генераторов переменного тока. Модели различных систем питания с большим диапазоном мощности удовлетворят любые требования потребителей.
Видео
Электрический генератор
Электрический генератор — это устройство, в котором неэлектрические виды энергии (механическая, химическая, тепловая) преобразуются в электрическую энергию.
Содержание
История
Русский ученый Э.Х.Ленц еще в 1833 г. указал на обратимость электрических машин: одна и та же машина может работать как электродвигатель, если ее питать током, и может служить генератором электрического тока, если ее ротор привести во вращение каким-либо двигателем, например паровой машиной. В 1838 г. Ленц, один из членов комиссии по испытанию действия электрического мотора Якоби, на опыте доказал обратимость электрической машины.
Первый генератор электрического тока, основанный на явлении электромагнитной индукции, был построен в 1832 г. парижскими техниками братьями Пиксин. Этим генератором трудно было пользоваться, так как приходилось вращать тяжелый постоянный магнит, чтобы в двух проволочных катушках, укрепленных неподвижно вблизи его полюсов, возникал переменный электрический ток. Генератор был снабжен устройством для выпрямления тока. Стремясь повысить мощность электрических машин, изобретатели увеличивали число магнитов и катушек. Одной из таких машин, построенной в 1843 г., был генератор Эмиля Штерера. У этой машины было три сильных подвижных магнита и шесть катушек, вращавшихся от рук вокруг вертикальной оси. Таким образом, на первом этапе развития электромагнитных генераторов тока (до 1851 г.) для получения магнитного поля применяли постоянные магниты. На втором этапе (1851-1867 гг.) создавались генераторы, у которых для увеличения мощности постоянные магниты были заменены электромагнитами. Их обмотка питалась током от самостоятельного небольшого генератора тока с постоянными магнитами. Подобная машина была создана англичанином Генри Уальдом в 1863 г.
При эксплуатации этой машины выяснилось, что генераторы, снабжая электроэнергией потребителя, могут одновременно питать током и собственные магниты. Оказалось, что сердечники электромагнитов сохраняют остаточный магнетизм после выключения тока. Благодаря этому генератор с самовозбуждением дает ток и тогда, когда его запускают из состояния покоя. В 1866-1867 гг. ряд изобретателей получили патенты на машины с самовозбуждением.
В 1870 г. бельгиец Зеноб Грамм, работавший во Франции, создал генератор, получивший широкое применение в промышленности. В своей динамо-машине он использовал принцип самовозбуждения и усовершенствовал кольцевой якорь, изобретенный еще в 1860 г. А. Пачинотти.
В одной из первых машин Грамма кольцевой якорь, укрепленный на горизонтальном валу, вращался между полюсными наконечниками двух электромагнитов. Якорь приводился во вращение через приводной шкив, обмотки электромагнитов были включены последовательно с обмоткой якоря. Генератор Грамма давал постоянный ток, который отводится с помощью металлических щеток, скользивших по поверхности коллектора. На Венской международной выставке в 1873 г. демонстрировались две одинаковые машины Грамма, соединенные проводами длиной 1 км. Одна из машин приводилась в движение от двигателя внутреннего сгорания и служила генератором электрической энергии. Вторая машина получала электрическую энергию по проводам от первой и, работая как двигатель, приводила в движение насос. Это была эффектная демонстрация обратимости электрических машин, открытой Ленцем, и демонстрация принципа передачи энергии на расстояние.
До того, как была открыта связь между электричеством и магнетизмом, использовались электростатические генераторы, которые работали на основе принципов электростатики. Они могли вырабатывать высокое напряжение, но имели маленький ток. Их работа была основана на использовании наэлектризованных ремней, пластин и дисков для переноса электрических зарядов с одного электрода на другой. Заряды вырабатывались, используя один из двух механизмов:
- Электростатическую индукцию
- Трибоэлектрический эффект, при котором электрический заряд возникал из-за механического контакта двух диэлектриков
По причине низкой эффективности и сложностей с изоляцией машин, вырабатывающих высокие напряжения, электростатические генераторы имели низкую мощность и никогда не использовались для выработки электроэнергии в значимых для промышленности масштабах. Примерами доживших до наших дней машин подобного рода являются электрофорная машина и генератор Ван де Граафа.
Динамо-машина Йедлика
В 1827 венгр Аньош Иштван Йедлик начал экспериментировать с электромагнитными вращающимися устройствами, которые он называл электромагнитные самовращающиеся роторы. В прототипе его униполярного электродвигателя (был завершен между 1852 и 1854) и стационарная и вращающаяся части были электромагнитные. Он сформулировал концепцию динамо-машины по меньшей мере за 6 лет до Сименса и Уитстона, но не запатентовал изобретение, потому что думал, что он не первый, кто это сделал. Суть его идеи состояла в использовании вместо постоянных магнитов двух противоположно расположенных электромагнитов, которые создавали магнитное поле вокруг ротора. Изобретение Йедлика на десятилетия опередило его время.
Диск Фарадея
В 1832 Майкл Фарадей открыл принцип работы электромагнитных генераторов. Принцип, позднее названный законом Фарадея, заключался в том, что разница потенциалов образовывалась между концами проводника, который двигался перпендикулярно магнитному полю. Он также построил первый электромагнитный генератор, названный «диском Фарадея», который являлся униполярным генератором, использовавшим медный диск, вращающийся между полюсами подковообразного магнита. Он вырабатывал небольшое постоянное напряжение и сильный ток.
Конструкция была несовершенна, потому что ток самозамыкался через участки диска, не находившиеся в магнитном поле. Паразитный ток ограничивал мощность, снимаемую с контактных проводов и вызывал бесполезный нагрев медного диска. Позднее в униполярных генераторах удалось решить эту проблему, расположив вокруг диска множество маленьких магнитов, распределенных по всему периметру диска, чтобы создать равномерное поле и ток только в одном направлении.
Другой недостаток состоял в том, что выходное напряжение было очень маленьким, потому что образовывался только один виток вокруг магнитного потока. Эксперименты показали, что используя много витков провода в катушке можно получить часто требовавшееся более высокое напряжение. Обмотки из проводов стали основной характерной чертой всех последующих разработок генераторов.
Однако, последние достижения (редкоземельные магниты), сделали возможными униполярные двигатели с магнитом на роторе, и должны внести много усовершенствований в старые конструкции.
Динамо-машина
Динамо-машина стала первым электрическим генератором, способным вырабатывать мощность для промышленности. Работа динамо-машины основана на законах электромагнетизма для преобразования механической энергии в пульсирующий постоянный ток. Постоянный ток вырабатывался благодаря использованию механического коммутатора. Первую динамо-машину построил Pixii Ипполит Пикси в 1832.
Пройдя ряд менее значимых открытий, динамо-машина стала прообразом, из которого появились дальнейшие изобретения, такие как двигатель постоянного тока, генератор переменного тока, синхронный двигатель, роторный преобразователь.
Динамо-машина состоит из статора, который создает постоянное магнитное поле, и набора обмоток, вращающихся в этом поле. На маленьких машинах постоянное магнитное поле могло создаваться с помощью постоянных магнитов, у крупных машин постоянное магнитное поле создается одним или несколькими электромагнитами, обмотки которых обычно называют обмотками возбуждения.
Большие мощные динамо-машины сейчас можно редко где увидеть, из-за большей универсальности использования переменного тока на сетях электропитания и электронных твердотельных преобразователей постоянного тока в переменный. Однако до того, как был открыт переменный ток, огромные динамо-машины, вырабатывающие постоянный ток, были единственной возможностью для выработки электроэнергии. Сейчас динамо-машины являются редкостью.
Другие электрические генераторы, использующие вращение
Без коммутатора динамо-машина является примером генератора переменного тока. С электромеханическим коммутатором динамо-машина — классический генератор постоянного тока. Генератор переменного тока должен всегда иметь постоянную частоту вращения ротора и быть синхронизирован с другими генераторами в сети распределения электропитания. Генератор постоянного тока может работать при любой частоте ротора в допустимых для него пределах, но вырабатывает постоянный ток.
МГД генератор
Магнитогидродинамический генератор напрямую вырабатывает электроэнергию из энергии движущейся через магнитное поле плазмы или другой подобной проводящей среды (например, жидкого электролита) без использования вращающихся частей. Разработка генераторов этого типа началась потому, что на его выходе получаются высокотемпературные продукты сгорания, которые можно использовать для нагрева пара в парогазовых электростанциях и таким образом повысить общий КПД. МГД генератор является обратимым устройством, то есть может быть использован и как двигатель.
Классификация
- Электромеханические
- Индукционные
- Электрофорная машина
- Термоэлектрические
- Термопары
- Термоионные генераторы
- Фотоэлементы
- Магнитогидро(газо)динамические генераторы
- Химические источники тока
- Гальванические элементы
- Топливные элементы
- Биогенераторы
Электромеханические индукционные генераторы
Электромеханический генера́тор — это электрическая машина, в которой механическая работа преобразуется в электрическую энергию.
— устанавливает связь между ЭДС и скоростью изменения магнитного потока пронизывающего обмотку генератора.
Углублённое руководство по JavaScript: генераторы. Часть 1, основы
В этой серии статей я расскажу почти всё, что нужно знать о генераторах в JavaScript: что это такое, как их использовать и какие тонкости с ними связаны. И, как всегда, начнём мы с основ — общего представления о том, что такое генераторы.
Я не исхожу из того, что вы хоть что-то знаете о генераторах. Но вам требуется хорошо разбираться в итераторах и итерируемых объектах в JavaScript. Если вы с ними не знакомы или «плаваете в теме», то сначала углублённо изучите их. Если же вы владеете этими знаниями, то можно погружаться в мир генераторов. Это очень странный мир, в котором многое совершенно не похоже на то, что вы используете в обычном JS-коде. При этом сам механизм очень прост, и даже после прочтения этой статьи вы сможете уверенно использовать генераторы. Приступим!
Мотивация
«А зачем мне вообще учиться использовать генераторы?» — спросите вы. Очень честный вопрос. В самом деле, генераторы пока ещё довольно экзотическая фича, во многих кодовых базах они применяются редко. Но есть проблемы, которые с помощью генераторов решаются на удивление элегантно. В следующей статье я покажу подобный пример. И после того, как мы освоим генераторы, попробуем объединить их с React, чтобы получить код, который значительно превосходит тот, что основан на хуках. Надеюсь, это вдохновит вас на поиск своих сценариев применения генераторов.
Однако не нужно считать генераторы чем-то экспериментальным. Они активно применяются в продовых кодовых базах многих проектов.
Полагаю, в мире React самым популярным является пакет redux-saga, это промежуточное ПО для Redux, позволяющее писать код с побочными эффектами, который к тому же очень удобочитаем и прекрасно тестируется (а это редкость!).
Надеюсь, мне удалось вас убедить в большой пользе от изучения генераторов.
Введение
Если бы мне пришлось объяснять суть генераторов одним предложением, я бы написал так: «Это синтаксический сахар для создания итераторов». Конечно, такое описание и вовсе не охватывает природу и возможности генераторов. Но всё же близко к правде.
Давайте возьмём простую функцию, возвращающую число:
Если её типизировать с помощью TypeScript, то мы бы сказали, что она возвращает числовой тип:
Чтобы превратить функцию в генератор, после ключевого слова function нужно добавить знак * :
Но если бы мы и правда делали это на TypeScript, то компилятор начал бы жаловаться, потому что функция-генератор возвращает не просто значение, которое было возвращено в её теле.
Она возвращает итератор!
Если мы изменим типизацию так:
то компилятор TypeScript проглотит код без вопросов. Но это TypeScript. А теперь давайте посмотрим, вернёт ли function* итератор в чистом JavaScript. Например, применительно к тому, что вернул генератор, попробуем вызвать такой метод:
Не только работает, но и выводит в консоль < value: 5, done: true >. На самом деле очень разумное поведение. В некотором смысле функция является итерабельной, возвращает всего одно значение и завершается.
А можно ли вернуть из генератора несколько значений? Вероятно, первым делом вы подумали о нескольких возвращениях:
Для того, кто привык к обычным функциям, это выглядит богохульством. Но я предупреждал, что мы вошли в совершенно иной мир! Здесь всё возможно.
Однако… этот вариант не работает. Выполним код:
И получим результат:
Получили только первое значение, а затем итератор застрял в состоянии «done». Любопытно, что мы можем лишь однократно обратиться к возвращённому значению, потому что последующие вызовы next возвращают лишь undefined .
И такое поведение тоже совершенно верное. Оно подчиняется основному правилу для всех функций: return всегда останавливает исполнение тела функции, даже если после return ещё есть какой-нибудь код. Это верно и для функций-генераторов.
Но всё же есть способ «вернуть» из нашего генератора несколько значений. Для этого предназначено ключевое слово yield :
Снова выполним код:
То есть извлечение значений из генератора позволяет создать итератор, который возвращает несколько значений.
А что будет, если после этого ещё несколько раз вызвать next ? Функция поведёт себя как обычный итератор, постоянно возвращая объект < value: undefined, done: true >.
Теперь обратите внимание, что последней строкой генератора тоже является yield . Изменится ли что-то, если поменять её на return ?
Любопытно. Делает всё то же самое, но свойство done становится true на один шаг раньше. Быть может, вы помните, что свойство done возвращаемого объекта определяет, должен ли продолжаться цикл for . of .
Посмотрим, как ведут себя обе версии генератора getNumber с циклами for . of .
Сначала запустим версию с тремя извлечениями:
Так и должен себя вести итератор.
Теперь запустим генератор с двумя извлечениями и одним возвращением:
Очень интересно. Если подумать, то именно так ведут себя итераторы с циклом for . of . Свойство done решает, должен ли выполняться следующий этап итерации.
Посмотрите, как в статье об итерируемых объектах мы эмулировали цикл for . of с while :
В этом коде если вы при вызове iterator.next() получите объект < value: 3, done: true >, то число 3 тоже не появится в консоли. Причина в том, что перед вызовом console.log(element) идёт условие !result.done . А поскольку для объекта < value: 3, done: true >это условие имеет значение false , тело while не будет выполнено для числа 3.
И циклы for . of работают точно так же.
То есть правило простое: хотите, чтобы появилось значение из цикла for . of ? Применяйте yield ! Хотите вернуть значение из генератора, но не включать его в итерацию for . of ? Применяйте return !
Поток управления в генераторах
В генераторах можно использовать все обычные конструкции потока управления. Например, можно выбрать число для извлечения в зависимости от переданного в генератор аргумента:
Вызов getNumber(false) создаст итератор, возвращающий числа 1, 2, 3. А вызов getNumber(true) создаст итератор, возвращающий числа 1, -100, 3.
Кроме того, в генераторах можно даже использовать циклы! Именно в этом проявляется их сила.
В статье об итерируемых объектах мы создали бесконечный итератор, который генерировал числа 0, 1, 2, 3,… и вплоть до бесконечности. Это было не слишком сложно, но и код получился не самым удобочитаемым. Теперь же мы можем сделать генератор всего в несколько простых строк:
Сначала задаём index значение 0 , а затем бесконечно исполняем цикл while(true) . В нём мы извлекаем текущий index , а потом просто увеличиваем его на единицу. И следующим шагом извлекаем новое значение.
Изумительно просто, верно? Именно этот пример поразил меня, когда я начал изучать генераторы. Надеюсь, что вас он впечатлил не меньше.
Посмотрите, как далеко мы ушли: мы все привыкли к функциям, которые возвращают только одно значение, а теперь пишем функцию, которая «возвращает» практически… вечно!
Отправка значений в генератор
Выше мы узнали, что можно с помощью генераторов создавать обычные итераторы. Но возвращаемый итератор выглядит странно. Он позволяет нам… передавать значения обратно в генератор!
Расширим наш предыдущий пример:
Здесь мы по прежнему просто извлекаем из генератора числа, а также присваиваем переменным то, что вычисляют их выражения yield . Очевидно, что сейчас эти переменные никак не используются. Ради иллюстрации мы будем их просто журналировать, но вы можете делать с ними что угодно.
Добавим в начало функции дополнительный журнал:
А затем будем исполнять этот генератор несколько раз. Рекомендую скопировать этот код куда-нибудь или открыть статью в другой вкладке. Вам будет гораздо проще понять, что происходит, если по мере запуска примеров вы сможете как можно чаще возвращаться к этому генератору!
Запустим новый генератор:
Надеюсь, вам понятно, какой журнал относится к генератору, а какой к циклу for . of . Вот ответы:
Очевидно, что результатами выражений yield являются просто undefined . Но можно это изменить! Для этого придётся убрать цикл for . of и использовать итератор вручную.
Вызовем четыре раза метод next из итератора, чтобы получить три числа и последний объект с переменной done в значении true . И будем журналировать все результаты вызовов next .
После выполнения этого кода (с тем же генератором) мы получим:
Здесь мало что поменялось: значения undefined никуда не делись. Мы лишь заменили числа из цикла for . of на журналирование всех объектов из вызовов next .
Генераторы разумно используют гибкость интерфейса итератора. Ведь у него должен быть метод next , возвращающий объект вида < done, value >. Но никто не говорил, что этот метод не может принимать какие-нибудь аргументы! Он будет по прежнему удовлетворять интерфейсу, пока возвращает объект ожидаемого вида!
Давайте передадим несколько строк в вызовы next :
После исполнения мы видим в консоли ещё что-то кроме undefined :
Возможно, результат вас удивил. Ведь первой переданной в next буквой была a , а здесь мы видим только b , c и d . Но если разобрать выполнение пошагово, то всё станет понятно.
Вызов next заставляет генератор выполняться, пока он не дойдёт до вызова yield . Тогда будет возвращена часть из вызова next (в качестве значения объекта < value, done >). С этого момента генератор просто ждёт следующего вызова next . Значение, переданное в этот другой вызов next , станет тем значением, которое вычислит выражение yield .
Разберём всё по шагам.
Когда вы в первый раз вызвали next , он просто начал исполнять функцию-генератор. В нашем случае это означает, что будет исполнено console.log(‘start’) .
В генераторе после console.log(‘start’) мы доходим до выражения yield 1 . Число 1 будет возвращено из первого вызова next , который мы только что сделали. Чтобы проверить это, можете обернуть вызов next в console.log :
Вот что мы получили:
Как раз единицу мы и извлекли из генератора.
Сейчас генератор приостановлен. Даже выражение, в котором мы дошли до yield — const first = yield 1; — не было выполнено целиком. Ведь генератор пока не знает, какое значение должно быть у yield 1 . Дадим ему это значение с помощью следующего вызова next :
То есть генератор продолжил исполнение и заменил yield 1 на значение, которое мы передали в вызов next — строку b .
Чтобы закрепить понимание, можете здесь передать какие нибудь другие значения:
Это даст такой результат (надеюсь, теперь вам понятно, почему):
Именно вы здесь решаете, что должно вычислить выражение yield 1 .
Наше первое выражение yield использует значение, предоставленное во втором вызове next . Это крайне важно для понимания работы генераторов.
Дойдя до yield , генератор говорит: «я верну в текущем вызове next , а в следующем вызове next дай мне в качестве аргумента то, что я должен заменить на yield ». И это означает, что переданный в первый вызов next аргумент никогда не будет использован генератором. Его просто некуда предоставить, так что уберём его из примера:
После второго вызова next генератор продолжил исполнение кода, пока не дошёл до другого выражения yield — yield 2 . Поэтому число 2 возвращено в качестве значения из этого вызова next .
То есть этот код:
Что тут происходит? Генератор не знает, какое значение нужно получить при вычислении yield 2 в выражении const second = yield 2; . Поэтому он просто ждёт, пока вы не передадите новое значение в вызов next :
Теперь мы получили:
То есть после третьего вызова next код генератора возобновляет исполнение, пока не доходит до yield 3 . И число 3 возвращается в качестве значения из этого вызова:
Теперь генератор приостановлен на выражении const third = yield 3; . Мы знаем, как снова его запустить:
И поскольку генератор не содержит других выражений yield , то и не возвращает других значений. Он выполняется вплоть до своего завершения. Поэтому последний объект < done, value >из вызова next не содержит значения и уведомляет о завершении итератора.
И всё! Если вы запутались, то прогоните примеры самостоятельно. Можете помочь себе, пошагово добавляя успешные вызовы next и console.log . Постарайтесь также всегда контролировать, в какой строке генератора вы сейчас находитесь. Помните! Нужно разбирать генератор пошагово, чтобы точно разобраться в ситуации! Не ограничивайтесь чтением статьи, прогоните пример самостоятельно столько раз, сколько потребуется для полного понимания происходящего!
Заключение
Мы изучили основы работы генераторов. Узнали, как их создавать, как использовать ключевое слово yield и генераторы.
Надеюсь, первые упражнения и примеры вдохновили вас узнать больше. Нам предстоит ещё многое рассмотреть в будущих статьях.
Источник: