Найти в Дзене
Формат АА

Логика в Factorio. «Сборщик всего» на комбинаторах своими руками

Статья про тонкости игрового процесса в игре Factorio. В этой статье окунёмся в логику в игре Factorio, разберём работу схемы простейшего «сборщика всего». Представьте, что улетели на другую планету, а на оставленной фабрике срочно нужно что-то собрать на ходу, буквально в единичных количествах. Приходится через карту с помощью дронов строить производство этого «чего-то». И не факт, что оно потом снова понадобится. А потом вспомнили о чём-то ещё. И снова строить подобное производство тем же способом. Наверное, всё это потом придётся разбирать чтобы не мешалось. Или впервые прилетели на другую планету, набрали с собой разных готовых ресурсов, а тут надо и то штучно собрать, и это. А некоторое вообще руками не собирается, только в сборочном автомате. В общем, нужно что-то универсальное, чтобы периодически в нём собирать то, другое, третье, по мелочам. О таком универсальном сборщике будем говорить в этой статье. *Советую не пропускать вступление, и прочитать его внимательно! Эта статья по
Оглавление

Статья про тонкости игрового процесса в игре Factorio.

В этой статье окунёмся в логику в игре Factorio, разберём работу схемы простейшего «сборщика всего».

Предисловие

Представьте, что улетели на другую планету, а на оставленной фабрике срочно нужно что-то собрать на ходу, буквально в единичных количествах. Приходится через карту с помощью дронов строить производство этого «чего-то». И не факт, что оно потом снова понадобится. А потом вспомнили о чём-то ещё. И снова строить подобное производство тем же способом. Наверное, всё это потом придётся разбирать чтобы не мешалось.

Или впервые прилетели на другую планету, набрали с собой разных готовых ресурсов, а тут надо и то штучно собрать, и это. А некоторое вообще руками не собирается, только в сборочном автомате.

В общем, нужно что-то универсальное, чтобы периодически в нём собирать то, другое, третье, по мелочам. О таком универсальном сборщике будем говорить в этой статье.

Вступление

*Советую не пропускать вступление, и прочитать его внимательно!

Эта статья посвящена логике на комбинаторах. Как следует из предисловия — главный герой статьи — сборщик всего. Правильнее его называть «Сборщик почти всего».

Некоторые мои «сборщики» работают полностью на начальных ресурсах, создавая всю промежуточную продукцию, из которой собирается конечная продукция по рецепту. Чертежи таких сборщиков можно поискать в чате с чертежами моего Телеграм-канала (ссылки после статьи). Здесь же, в статье, упрощённый сборщик, он не будет производить из начальных ресурсов промежуточные предметы, чтобы из них собирать готовую продукцию. Сборщик будет собирать из уже готовых комплектующих. Подразумевается, что нужные комплектующие для разных рецептов мы с собой привезли (выгрузили, доставили, имеем в инвентаре).

В общей схеме сборщика используются различные логические схемы. Соответственно, я буду, не разрывая повествования о логике, делить текст заголовками на основе тех логических схем, которые рассматриваются в текущий момент. Это для удобства поиска по заголовкам.

Статья подаётся в стиле экскурсии по внутренним процессам внутри всей схемы. Не будет сложных раскладок и подробных объяснений. Будут только сухие объяснения — что куда и зачем, и как это функционирует. Будьте внимательны, рассматривая сигналы, обозначения цвета сигнальных проводов, способы подключения сигнальных проводов и условия в настройках комбинаторов.

В первую очередь статья рассчитана на игроков, хотя бы частично разбирающихся в логике, либо одарённых усидчивостью чтобы внимательно прочитать и освоить материал. Статья не является учебным пособием. Если всё же не понятно, не удаётся вникнуть в некоторые тонкости, или ускользает мысль, а повторное перечитывание не помогает собрать всё воедино — можно продолжить чтение пропуская сложные моменты. Эта статья не для того чтобы научить, а для того чтобы рассказать как это было сделано и как оно работает, помогает понять взаимодействие различных механизмов логики.

Alt-режим отключён, и на всех картинках комбинаторы просматриваются без дополнительной информации поверх них. Это сделано чтобы уменьшить визуальный шум.

Для удобства читателя я разнёс все комбинаторы в схеме на некоторое расстояние друг от друга и повернул. Сделал это, чтобы хорошо рассматривались подключения сигнальных проводов разного цвета и случайно не возникало ошибок. Чтобы вас не смущало большое количество сигнальных проводов в схемах, изначально проектируйте их так же — расставляя подальше друг от друга, не заплетая всё в клубок.

Схема сборщика не рассчитана на работу с жидкостями, работает только с сухими комплектующими, поэтому рецепты с жидкостями тут использовать не получится.

В схеме этого сборщика присутствует логика подсчёта необходимых ингредиентов для запроса. Поэтому отсутствует привычная для многих популярных сборщиков схема выкладывания излишков или выкладывания отменённых ингредиентов из сборочного автомата при смене рецепта.

Сборщик работает на дронах. Всё приносится дронами и уносится дронами. Конвейеры не используются.

Итак, у нас есть сеть дронстанций или одна дронстанция (по крайней мере), в радиусе действия которой мы строим схему. В этой сети есть дроны, есть логистические сундуки (или грузовая посадочная площадка) заполненные комплектующими для будущих рецептов. Дроны по запросу нашего сборщика будут приносить необходимые комплектующие и закладывать в синий сундук запроса.

Чертёж самой схемы сборщика можно взять из ссылки под статьёй и открыть в игре для практического изучения всего, о чём идёт повествование.

В статье приводятся скриншоты сделанные на остановленном сборщике. Все сигналы, которые видны на скриншотах — соответствуют неработающему состоянию.

Схема «Сборщика почти всего»

Вот схема, с которой ознакомимся в статье:

1. Схема сборщика.
1. Схема сборщика.

Кратко по рисунку 1:

  • Слева внизу постоянный комбинатор для установки нужных запросов.
  • Справа сверху синий сундук запроса для получения комплектующих.
  • Слева вверху красный сундук пассивного снабжения для выдачи готовой продукции.
  • В схеме используется сборочный автомат 3 типа для быстрой сборки. В него можно и даже желательно установить модули скорости.
  • Справа от сборочного автомата используются два зелёных массовых манипулятора — это для быстрой передачи комплектующих пачками из сундука в сундук и в сборочный автомат.
  • Слева от автомата синие быстрые манипуляторы — там не требуется перекладывать большой объём готовой продукции, их скорости хватает. Можно даже заменить на жёлтые обычные манипуляторы.
  • Вся эта схема питается электроэнергией от подстанции, основание которой виднеется вверху рисунка. После плотной установки комбинаторов в самом конце статьи, подстанция будет убрана и заменена средней опорой ЛЭП.

Установка рецептов и запуск схемы

Постоянный комбинатор всегда должен находиться в режиме «Выкл»! Все настройки делаем в выключенном комбинаторе! Например, как на рисунке 2 устанавливаем очередь из трёх наименований оборудования по несколько штук каждого:

2. Постоянный комбинатор.
2. Постоянный комбинатор.

В примере из рисунка 2 химических заводов выставили 2 штуки, паровых турбин выставили 3 штуки, дронстанцию выставили 1 штуку.

Для запуска всей схемы после настройки запросов включаем выключатель комбинатора в положение «Вкл» и сразу выключаем в положение «Выкл». Далее комбинатор остаётся выключенным! Этого краткого включения хватит, чтобы сигналы с рецептами прошли дальше по красному сигнальному проводу (с этого момента и далее: красный сигнальный провод — красный провод, а зелёный сигнальный провод — зелёный провод). Оставлять постоянный комбинатор включённым нельзя — запрос сделан кратким включением, схема его получила. Но после отработки всего списка запроса логика начнёт выполнять всё по новой, так как запрос от включённого комбинатора продолжает поступать.

Контроль отключённого постоянного комбинатора через дисплей

Игрок может случайно не выключить постоянный комбинатор. Чтобы контролировать, что комбинатор выключен, устанавливаем рядом дисплей и подключаемся к постоянному комбинатору через красный провод:

3. Дисплей для контроля отключённого постоянного комбинатора.
3. Дисплей для контроля отключённого постоянного комбинатора.

В дисплее настраиваем значок сигнала оповещения на условие, где ЛЮБОЙ больше нуля. То есть, если комбинатор не выключен, то с него идёт какой-то сигнал, который будет распознан как ЛЮБОЙ и оповещение будет показано.

Значок точки настраиваем на условие, где ВСЕ равны нулю. Это будет значить, что сигналов из комбинатора нет, он выключен, и дисплей успокаивающе показывает точку.

Ячейка памяти с ключом сброса/запоминания

С постоянного комбинатора по красному проводу идут сигналы с рецептами в ячейку памяти. Ячейка состоит из двух сравнивающих комбинаторов. Для того чтобы эта ячейка запомнила сигналы с их значениями — нужен ключевой сигнал, или проще «ключ». Ключ приходит по зелёному проводу.

Ключ запускает сброс в ячейке памяти, если не поступают данные с красного провода, либо включает запись данных, если они поступили по красному проводу. При отсутствии ключа в зелёном проводе — в ячейке памяти изменений не происходит.

4. Ячейка памяти с ключом сброса/запоминания.
4. Ячейка памяти с ключом сброса/запоминания.

К ключу мы ещё вернёмся в конце статьи, а сейчас представим, что ключ у нас имеется и он пришёл по зелёному проводу. А значит, сигналы рецептов с их количеством прошли по красному проводу и запомнились. Например, этими сигналами могли быть указанные в примере выше химические заводы, паровые турбины, дронстанция.

Верхний комбинатор проверяет значение ключа R с зелёного провода. Для этого в комбинаторе выключена галочка с красного провода, оставлена только галочка с зелёного провода. Если R не равен нулю — значит он больше нуля, а именно равен единице. Это тот ключ, который открывает ячейку памяти. Условие выполнилось, R не равен нулю, и на выход ВСЕ сигналы будут переданы только из красного провода (по нему сигналы приходят в ячейку памяти). Обратите внимание на рисунке 5 — галочка снята с зелёного провода на выходе! Требуется, чтобы ключевой сигнал R и другие сигналы, которые могут прийти по зелёному проводу — здесь и остались. Дальше пропускаются только сигналы рецепта из красного провода.

5. Верхний комбинатор в ячейке памяти.
5. Верхний комбинатор в ячейке памяти.

Выходы обоих комбинаторов соединены красным проводом. По этому красному проводу сигналы с их значениями из выхода верхнего комбинатора передаются на ВЫХОД нижнего комбинатора в ячейке памяти. На нижнем комбинаторе со входа на выход прокинут красный провод для зацикливания сигналов по нему. Соответственно, пришедший с верхнего комбинатора сигнал пройдёт с выхода на вход по этому проводу. Но так как в нижнем комбинаторе установлено условие, при котором ключ R равен нулю, то при действующем R равном единице — в этом комбинаторе условие не выполнено и сигналы из красного провода на выход пока не проходят, и не зацикливаются по красному проводу. Это и понятно — на выход они проходят напрямую по другому комбинатору из-за поступающего туда ключа.

Но стоит только отключиться ключу (R пропадёт, что равносильно нулю) — сразу же сработает условие в нижнем комбинаторе, и на выход пойдут ВСЕ сигналы из красного провода.

6. Нижний комбинатор в ячейке памяти.
6. Нижний комбинатор в ячейке памяти.

Так как ключевого сигнала R нет, то условие во втором комбинаторе будет выполнено всегда. Сигналы (из красного провода) будут передаваться со входа на выход в комбинаторе и по красному проводу с выхода снова на вход. Такая зацикленная модель сохранения значений будет работать до тех пор, пока снова не появится ключ на зелёном проводе и не прервёт зацикленность значений.

А в данном случае, пока ключа нет — сигналы хранятся в ячейке памяти. И из выхода нижнего комбинатора по красному проводу передаются дальше.

Выбор рецепта

Из ячейки памяти по красному проводу сигналы с рецептами поступают на выбирающий комбинатор. Сразу обратите внимание, что на этот же выбирающий комбинатор приходит зелёный провод от стального сундука предназначенного для накопления созданной продукции, прямиком через арифметический комбинатор (стрелка показывает путь прохождения сигналов по зелёному проводу до выбирающего комбинатора):

7. Выбирающий комбинатор для выбора действующего рецепта.
7. Выбирающий комбинатор для выбора действующего рецепта.

По зелёному проводу может приходить отрицательный сигнал готовой продукции для обнуления сигналов на входе выбирающего комбинатора. Об этом будет рассказано позже.

В комбинаторе выставлен режим выбора входа, но сортировка установлена по возрастанию. Все сигналы рецептов выстроятся в очередь от меньшего к большему и первый из них пройдёт на выход. Пройдёт только один. Он тут же будет отправлен по зелёному проводу в сборочный автомат и по красному проводу в сравнивающий комбинатор.

Рецепт в сборочном автомате

В сборочный автомат по зелёному проводу приходит сигнал с рецептом. В автомате поставлена галочка «Установить рецепт». Это задаст рецепт из пришедшего сигнала.

После установки рецепта нужно считать ингредиенты для его создания. Поэтому обязательно устанавливаем галочку «Считать ингредиенты».

8. Настройки галочек для задания рецепта и считывания ингредиентов.
8. Настройки галочек для задания рецепта и считывания ингредиентов.

Если в сигнале указан рецепт на один предмет, например, на 1 дронстанцию, то ингредиенты будут выданы для создания 1 дронстанции. Если же в сигнале будет рецепт на несколько одинаковых предметов, например, на 3 дронстанции, то автомат всё равно выдаст ингредиенты только для создания 1 дронстанции.

Сигналы с ингредиентами будут считаны по красному проводу, который соединяется со входом арифметического комбинатора.

Растягивание пути сигнала на один тик

Если вы никогда не видели очень ценного работника получающего баснословную зарплату за своё неоценимое существование в коллективе, но при этом не делающего вообще ничего, то этот арифметический комбинатор — как раз такой случай. Этот комбинатор получает список ингредиентов из сборочного автомата, прибавляет к КАЖДОМУ ингредиенту ноль и передаёт КАЖДЫЙ дальше:

9. Арифметический комбинатор передаёт КАЖДЫЙ сигнал без изменений.
9. Арифметический комбинатор передаёт КАЖДЫЙ сигнал без изменений.

Важность этого комбинатора, который, казалось бы, выполняет бесполезную работу в том, что он удлиняет прохождение сигналов на один тик. Это полезное действие необходимо в дальнейшем, при проходе сигналов, чего в статье не станем касаться чтобы не выходить за рамки простых объяснений.

Сейчас просто запомните, что таким образом можно:

  • получать данные и передавать их без потерь
  • можно удлинять путь сигналов на тик
  • можно создавать разрыв в цепи по типу обратного клапана — туда сигнал проходит через комбинатор, обратно сигнал вернуться не может; при этом в обычном сигнальном проводе без комбинатора сигналы могли бы идти и в ту и в обратную сторону, случайно испортив расчёты в формулах там, где эти сигналы не должны были появиться.

Простая ячейка памяти. Выключатель сигналов с ингредиентами

Из арифметического комбинатора по красному проводу сигналы с ингредиентами попадают сразу на входы двух сравнивающих комбинаторов:

10. Два сравнивающих комбинатор получают сигналы по красному проводу.
10. Два сравнивающих комбинатор получают сигналы по красному проводу.

Обратите внимание на дуговидную стрелку на рисунке 10. Она показывает от какого комбинатора по зелёному проводу также приходит сигнал на верхний из двух сравнивающих комбинаторов. По этому зелёному проводу приходит управляющий сигнал «Галочка», означающий, что в схеме сработало наполнение комплектующими и сейчас активно работает манипулятор, загружая всё в сборочный автомат. Но это мы уже забежали вперёд.

Разберёмся в значении приходящей галочки и работе двух сравнивающих комбинаторов. По сути эти комбинаторы в паре являются запрещающе-разрешающим устройством. А верхний из этих комбинаторов является простейшей ячейкой памяти.

Верхний комбинатор имеет два источника сигналов: по красному проводу и по зелёному проводу. По зелёному может прийти сигнал галочка. Со входа на выход комбинатора прокинут зелёный провод для зацикливания сигнала галочка.

11. Настройка верхнего сравнивающего комбинатора.
11. Настройка верхнего сравнивающего комбинатора.

По красному проводу приходят сигналы от сборочного автомата. Один из этих сигналов будет импульсный сигнал «Флаг» означающий, что сборочный автомат только что создал один предмет из рецепта.

Чтобы этот сигнал работал, в сборочном автомате установлена галочка в пункте «Чтение рецепта завершено», а в сигнал управления задан сигнал «Флаг».

12. Установка галочки в «Чтение рецепта завершено» и сигнала «Флаг».
12. Установка галочки в «Чтение рецепта завершено» и сигнала «Флаг».

Теперь, если оба условия в верхнем комбинаторе выполнятся — на выходе появится галочка, которая зациклится сама на себя, и ячейка памяти будет помнить эту галочку, постоянно выдавая её на выход.

В это время, если галочка по зелёному проводу не приходит на нижний комбинатор (то есть галочки нет, она равна нулю) И если по красному проводу есть приходящие сигналы со значением больше нуля, то КАЖДЫЙ сигнал с красного провода поступит на выход:

13. При соблюдении условий КАЖДЫЙ сигнал с красного провода поступит на выход комбинатора.
13. При соблюдении условий КАЖДЫЙ сигнал с красного провода поступит на выход комбинатора.

Обратите внимание на рисунок 13. Здесь также, как и в верхнем комбинаторе, в условиях указаны входы с конкретных проводов: в одном случае с зелёного, в другом случае с красного.

А вот на выходе из комбинатора указано количество только КАЖДОГО сигнала с красного входящего провода. Галочка с количеством с зелёного входного провода отключена.

Определение количества предметов в текущем рецепте

Возвращаемся к выбирающему комбинатору. Как нам теперь известно — он из списка заданных рецептов выбирает один и выдаёт на выход. С этого выхода по зелёному проводу рецепт попадает в сборочный автомат.

Но также с выбирающего комбинатора по красному проводу рецепт уходит параллельно в другое направление — на сравнивающий комбинатор. Здесь проверяется КАЖДЫЙ входящий сигнал, при этом мы знаем, что сигнала либо совсем нет, если не заданы рецепты, либо сигнал всего один — отсеянный в выбирающем комбинаторе рецепт. Вот он то и проходит проверку на значение больше нуля. Если сигнал есть, то он больше нуля и он проходит на выход. А там значение сигнала присваивается сигналу K:

14. Присвоение входящего КАЖДОГО сигнала сигналу K.
14. Присвоение входящего КАЖДОГО сигнала сигналу K.

Сигнал K — необходим для хранения количества предметов в рецепте. Поэтому в текущем комбинаторе любой рецепт просто передаёт своё количество в K.

Полное количество ингредиентов для всего рецепта

Зная количество (K) требуемых предметов в рецепте, нужно теперь узнать общее количество всех ингредиентов для создания этого количества предметов. Для этих целей сигнал K пришедший по зелёному проводу (хранящий количество предметов в рецепте) умножаем на КАЖДЫЙ входящий сигнал по красному проводу от запрещающе-разрешающего устройства (здесь КАЖДЫЙ — это список ингредиентов на 1 предмет рецепта):

15. Получение полного списка всех ингредиентов умножением на количество предметов K.
15. Получение полного списка всех ингредиентов умножением на количество предметов K.

Перемножив КАЖДЫЙ на количество предметов K — на выходе комбинатора получим список из всех КАЖДЫХ сигналов с полным количеством ингредиентов.

Сундук для накопления ингредиентов

На время забежим вперёд и посмотрим на стальной сундук:

16. Стальной сундук для накопления ингредиентов и его сигналы.
16. Стальной сундук для накопления ингредиентов и его сигналы.

Здесь стальной сундук нужен для накопления всех ингредиентов текущего рецепта в полном количестве. После запроса ингредиентов в синий сундук запроса, они перекладываются и накапливаются в стальном сундуке.

Соответственно, сундук раздаёт по зелёному проводу сигнал о количестве накопленных ингредиентов. Забегая вперёд ещё дальше, увидим, что манипулятор начнёт перекладывать ингредиенты в сборочный автомат только после полного их накопления. А до этого манипулятор не активен.

Обратите внимание, что сигналы от сундука идут на разные точки схемы, туда, где это требуется.

Подсчёт разницы между необходимыми и накопленными ингредиентами

Сигнал о количестве накопленных в сундуке ингредиентов приходит по зелёному проводу на арифметический комбинатор. Сюда же по красному проводу приходит полный список ингредиентов для рецепта:

17. Вычисление остатка ингредиентов.
17. Вычисление остатка ингредиентов.

Далее, из списка КАЖДЫХ необходимых ингредиентов отнимаются КАЖДЫЕ уже имеющиеся в сундуке ингредиенты. На выход приходит остаток КАЖДЫХ необходимых ингредиентов.

Запуск сигнала «Галочка» по условию

Остаток всех ингредиентов приходит на сравнивающий комбинатор по красному проводу. В то же время сюда же приходят сигналы со стального сундука по зелёному проводу.

Обратите внимание, что здесь обязательно сняты лишние галочки и чётко установлены галочки только на тех сигнальных проводах, с которых необходимо считывать соответствующие сигналы:

18. Создание сигнала «Галочка».
18. Создание сигнала «Галочка».

Если ВСЕ сигналы по красному проводу будут меньше или равны нулю — это будет означать, что остатка ингредиентов больше нет. Значит: либо сундук полностью заполнился нужными ингредиентами, либо рецепт не задан и входные сигналы отсутствуют.

При этом, если ЛЮБОЙ сигнал из стального сундука будет равен нулю, это будет означать, что в сундуке что-то лежит из ингредиентов.

Таким образом, если одновременно сработают оба условия, то сформируется сигнал «Галочка» равный 1. Это и есть тот самый сигнал, который уже встречался нам ранее при обсуждении запрещающе-разрешающего устройства на двух комбинаторах, куда галочка пришла через другой комбинатор.

Здесь галочка появляется как подтверждение факта, что все ингредиенты доставлены и они все или их часть находятся в стальном сундуке.

Простая ячейка памяти. Хранение сигнала «Галочка»

В сравнивающий комбинатор приходит сигнал с галочкой по красному проводу. Этот же красный провод прокинут от входа на выход комбинатора, зацикливая на себе сигнал. Таким образом здесь снова применяется простая ячейка памяти, работающая по выполненному условию.

Сюда же по зелёному проводу приходит сигнал со стального сундука.

В условиях проверяется, есть ли на входе красного провода галочка И пришедший из сундука по зелёному проводу ЛЮБОЙ сигнал является ли больше нуля. Если в сундуке что-то лежит, а галочка пришла больше нуля, то срабатывает условие для создания своей галочки равной 1, которая зацикливается по красному проводу и подаётся на выход:

19. Условия для создания сигнала «Галочка» в памяти и хранения его.
19. Условия для создания сигнала «Галочка» в памяти и хранения его.

Таким образом, если с предыдущего комбинатора приходит галочка, то она может зациклиться на этом комбинаторе при выполнении условий и пойти дальше.

Этот комбинатор необходим для подачи сигнала («Галочка») о том, что в сундуке лежат ингредиенты и их можно переложить в сборочный автомат. Ещё нужно вспомнить, что сигнал с этого комбинатора приходит на ячейку памяти в запрещающе-разрешающее устройство из двух сравнивающих комбинаторов, где галочка отключает разрешение передавать рецепт из сборочного автомата. Проще говоря, когда тут есть галочка, там запрещено передавать рецепт. То есть, если ингредиенты на рецепт накопились в полном объёме и происходит запуск создания предметов — рецепт транслировать в схему нельзя — он должен быть отключён. Иначе начнут накапливаться лишние ингредиенты, которые уже не нужны для создания этих предметов.

Манипулятор для загрузки ингредиентов в сборочный автомат

Если из предыдущего комбинатора в манипулятор поступит сигнал с галочкой больше нуля, то манипулятор включится логикой и начнёт перекладывать все ингредиенты в сборочный автомат:

20. Условие для работы манипулятора.
20. Условие для работы манипулятора.

При этом манипулятор желательно ставить самый максимальный. Это позволит быстро заполнить ингредиентами сборочный автомат и продолжать быстро добавлять новые ингредиенты во время работы сборочного автомата.

Регулировка запроса ингредиентов

В синий сундук запроса необходимо передать количество ингредиентов для рецепта. Также сундук должен быть отключён, если запросов нет. Иначе транспортные дроны продолжат приносить излишки. Для этого установлен сравнивающий комбинатор регулирующий работу и запросы.

В сравнивающий комбинатор по красному проводу поступают сигналы с остатками ингредиентов (смотри рисунок 17), которые необходимо доставить в сундук запроса. Сюда же поступает сигнал работы со сборочного автомата, который выглядит как кирка и, соответственно, называется «Кирка». Этот сигнал сообщает комбинатору, что идёт сборка предметов. Будем называть его сигналом «Работа».

В условиях также присутствует уже известная нам галочка, сообщающая о работе перекладывающего манипулятора и известный нам сигнал K, содержащий количество предметов в рецепте.

Все условия собраны через оператор И, означающий, что все эти условия должны выполниться одновременно:

21. Условия и выходные сигналы сравнивающего комбинатора.
21. Условия и выходные сигналы сравнивающего комбинатора.

Для срабатывания необходимо чтобы:

  • КАЖДЫЙ сигнал с рецептом был больше нуля
  • И сигнал с галочкой был нулевым, то есть манипулятор не забирает ингредиенты из сундука
  • И сигнал работы был нулевым, то есть сборочный автомат не работает
  • И сигнал K был больше нуля, то есть рецепт ещё не выполнен, а ингредиенты не все доставлены

Обратите внимание, что каждое условие работает со своими входными данными из разных проводов. Для этого везде сняты ненужные галочки, а установлены галочки на нужный цвет провода.

После срабатывания всех условий на выходе установлены два выходных сигнала: КАЖДЫЙ будет передавать в сундук запроса все пришедшие ингредиенты, сигнал «Пачка» со значением 1 будет необходим для условий включения/выключения сундука запроса и манипулятора.

Для более наглядного представления, какие сигналы откуда и через что приходят на сравнивающий комбинатор, я пометил эти сигналы в месте их появления и стрелками обозначил проходящий путь:

22. Места создания сигналов и путь их прохождения до сравнивающего комбинатора.
22. Места создания сигналов и путь их прохождения до сравнивающего комбинатора.

Для того чтобы сигнал работы сформировался в сборочном автомате во время работы, в нём необходимо установить галочку в пункте «Считать состояние работы» и в ячейке со значком выставить сигнал «Работа» (значок «Кирка»):

23. Галочка на пункте «Считать состояние работы».
23. Галочка на пункте «Считать состояние работы».

Сундук запроса

Из сравнивающего комбинатора в сундук запроса приходят два сигнала: сигнал «Пачка» разрешающий сундуку работать и запрашивать ингредиенты, и все сигналы с ингредиентами, которые в комбинаторе проходили как КАЖДЫЙ в условии.

24. Настройки сундука запроса.
24. Настройки сундука запроса.

Сундук запроса включится, если сигнал пачки будет больше нуля. Режим работы установлен в «Задать запросы». Все сигналы из сравнивающего комбинатора автоматически установятся как запросы предметов из логистической сети.

Обязательно необходимо включить галочку на пункте «Незапрошенное - в мусор». Это очень важно, так как дроны могут принести больше предметов, чем требуется. Одна из причин такого поведения: грузоподъёмность дронов позволяет брать несколько предметов, и дроны могут схватить немного «лишнего». Избежать засорения сундука запроса поможет скидывание излишков в мусорные слоты для отправки назад в логистическую сеть.

Вся работа сундука будет проходить под неустанным изъятием предметов манипулятором. Так как манипулятор перекладывает все предметы в стальной сундук, а логика арифметического комбинатора (смотри рисунок 17) в режиме постоянного слежения высчитывает остаток ингредиентов, которые необходимо принести, то в постоянном режиме в сундук запроса поступает обновлённая информация о текущем остатке ингредиентов, который сразу же автоматически заменяет предыдущие запросы сундука. Таким образом, сундук запрашивает всегда только актуальный остаток предметов. Этот остаток уменьшается, но дроны могли взять больше предметов ещё до этого. В таком случае некоторые предметы могут оказаться в мусорных слотах как излишки.

Если же всё сработало очень быстро, а дроны успели в последний миг закинуть в сундук немного предметов, то беды не будет — при следующем включении сундука запроса эти предметы либо окажутся частью запроса, либо окажутся мусором и будут выкинуты в мусорные слоты.

Выкладывание предметов из сундука запроса

Для постоянного подсчёта уже принесённых дронами ингредиентов, их нужно переложить в стальной сундук. Это вызвано тем, что в сундуке запроса невозможно вести подсчёт содержимого, пока сундук работает в режиме автоматических запросов.

Манипулятор, перекладывающий предметы из сундука запроса в стальной сундук соединён зелёным проводом со стальным сундуком и ведёт постоянный подсчёт находящихся в его лапке предметов:

25. Настройки манипулятора.
25. Настройки манипулятора.

Сумма предметов из лапки манипулятора и из стального сундука используется далее в расчётах.

Важно выбрать подсчёт содержимого манипулятора «Непрерывно». И ещё очень важно — установить самый скоростной манипулятор для этой работы. Так быстрее будет произведено перемещение ингредиентов из синего сундука запроса в стальной сундук.

После окончания перекладывания всех предметов в стальной сундук, манипулятор, как и сундук запроса перестанет получать сигнал «Пачка» и отключится вместе с сундуком запроса.

Сундук для накопления готовой продукции

Так же как до сборочного автомата использовался стальной сундук для накопления ингредиентов, так и после сборочного автомата используется стальной сундук для накопления готовой продукции.

По правде говоря, использование стального сундука здесь является расточительством. Вполне можно бы было обойтись дешёвым железным сундуком, а ещё дешевле и практичнее — самым дешёвым — деревянным сундуком. Почему так?

Всё потому, что до сборочного автомата используется всего один стальной сундук для накопления ингредиентов. Если в постоянном комбинаторе будут заданы несколько рецептов, состоящих из больших объёмов ингредиентов (например, несколько ядерных реакторов) или много обычных рецептов, требующих больших объёмов ингредиентов, то стальной сундук может переполниться и не выполнить полностью запрос на все ингредиенты. То есть, вся схема остановится и сборочный автомат не сможет изготавливать продукцию по рецептам. А если это так, то заказывать в постоянном комбинаторе необходимо разумное количество предметов, учитывая скромные возможности стального сундука. Отсюда и вытекает ответ на заданный вопрос, а именно — продукции, которую можно заказать, будет немного. Для складирования вполне хватит самого дешёвого сундука.

На рисунке показано, как много подключений зелёным проводом сделано к стальному сундуку:

26. Подключения сундука для накопления готовой продукции зелёным проводом.
26. Подключения сундука для накопления готовой продукции зелёным проводом.

Сигналы о количестве готовой продукции по зелёным проводам проходят в разные устройства для подсчётов. Синие быстрые манипуляторы, предназначенные для накладывания в сундук и извлечения из него, также подключены зелёным проводом чтобы непрерывно считать и суммировать количество продукции в лапках с количеством продукции в сундуке.

Перекладывание готовой продукции из сборочного автомата

Для извлечения из сборочного автомата готовой продукции достаточно синего быстрого манипулятора. В его настройках обязательно нужно включить подсчёт предметов в положение «Непрерывно»:

27. Настройки быстрого манипулятора.
27. Настройки быстрого манипулятора.

Создание отрицательного списка готовой продукции для вычитания из списка рецептов

Рассказывая выше о выбирающем комбинаторе я показал на рисунке 7 схематичное движение сигнала на вход этого комбинатора от стального сундука через арифметический комбинатор. В этой цепочке арифметический комбинатор получает от стального сундука сигналы со значением уже накопленной готовой продукции. Затем КАЖДЫЙ сигнал умножается на -1 для превращения этих сигналов в отрицательные. И далее КАЖДЫЙ отрицательный сигнал уходит на выход комбинатора, откуда по зелёному проводу идёт на вход выбирающего комбинатора:

28. Настройка арифметического комбинатора.
28. Настройка арифметического комбинатора.

Как вы запомнили, на входе в логическую схему используется ячейка памяти с ключом сброса из двух комбинаторов. Выходы этих комбинаторов соединены красным проводом, по которому могут перейти сигналы от комбинатора в комбинатор. Этот же красный провод соединяется со входом выбирающего комбинатора, передавая эти самые сигналы для подготовки рецепта в сборочный автомат.

Вся готовая продукция накапливается в стальном сундуке после сборочного автомата. Сигналы об этой продукции становятся отрицательными в арифметическом комбинаторе. Соответственно, объединившись с положительными сигналами из красного провода ячейки памяти на входе в выбирающий комбинатор — они обнуляют друг друга. Таким образом, на входе в выбирающий комбинатор «стираются» те сигналы, которые принадлежат уже готовой продукции. В выбирающем комбинаторе остаётся меньше сигналов с рецептами. В выборе рецепта происходят изменения, и новые рецепты изготавливается друг за другом, продолжая исчезать из списка входящих сигналов. В конце концов, вся продукция после изготовления оказывается в сундуке накопления, а на входе в выбирающий комбинатор «стираются» все рецепты, не оставив ничего. Работа прекращается.

Почему нельзя подать отрицательные КАЖДЫЕ сигналы из арифметического комбинатора на вход выбирающего комбинатора тоже красным проводом, ведь КАЖДЫЙ положительный сигнал всё равно обнуляется КАЖДЫМ отрицательным сигналом?

Всё дело в работе ячейки памяти:

  • Нельзя забывать, что ячейка памяти ВСЕГДА ДОЛЖНА ПОМНИТЬ заданную информацию, пока не будет сброшена с помощью ключа. В нашем случае ячейка памяти выдаёт сигнал не только на выбирающий комбинатор. А это значит, что изменятся рецепты, и будет нарушена другая логика использующая данные из ячейки.
  • Ячейка памяти должна только ОТДАВАТЬ хранимую информацию, но не принимать её из других источников по выходному каналу. Иначе значение в ячейке памяти будет меняться извне, нарушая основной принцип работы только через ключ. Подав отрицательный сигнал с арифметического комбинатора по красному проводу мы, как раз, сначала обнулим положительный сигнал, а затем заведём через выход в ячейку памяти этот самый отрицательный сигнал. Но так как сигнал будет поступать регулярно, он будет складываться с уже имеющимся предыдущим отрицательным сигналом, функционирующим по зацикленному красному проводу и его модульное значение будет увеличиваться.

Всегда тщательно обдумывайте использование цвета сигнальных проводов чтобы не нарушить работу ячейки памяти!

Таймер с анимацией. Визуализация работы сборочного автомата

Немного отвлечёмся от рецептов и вернёмся к сборочному автомату. Для лучшей наглядности работы логики визуализируем работу сборочного автомата простейшей мультипликацией на дисплее. Для этих целей установлены сравнивающий комбинатор и дисплей. Сравнивающий комбинатор получает сигналы на вход через зелёный провод напрямую из сборочного автомата. Сигнал зацикливается на комбинаторе красным проводом с выхода на вход. По зелёному проводу сигнал от комбинатора передаётся на дисплей.

29. Таймер на сравнивающем комбинаторе.
29. Таймер на сравнивающем комбинаторе.

Сравнивающий комбинатор здесь является обычным таймером. Вариантов таймера много, но принцип у всех практически одинаков. Пока выполняются условия — сигнал идёт на выход и снова возвращается по красному проводу суммируясь с самим собой входящим из зелёного провода. И так по кругу, пока сигнал не достигнет установленного значения, на котором условия перестанут выполняться.

В нашем случае используется цикл в 64 тика: 8 сменяющихся картинок по 8 тиков на каждую. Для того чтобы таймер мог отработать 64 тика — в нём установлены два условия. Одно из них касается самого сигнала, считающего тики. Это сигнал работы, который приходит во время работы сборочного автомата. Он зацикливается и прибавляет сам к себе единицу за каждый новый тик. Второй сигнал — это сигнал с флажком, означающий, что сборочный автомат окончил работу над рецептом. Всё остальное время сигнал с флажком не существует, то есть, равен нулю. Так как оба сигнала одновременно по условию выполняются, то сигнал работы продолжает прибавлять к себе единицу каждый тик. Пока выполняется цикл таймера — на выход подаются входные сигналы: у нас это — сигнал работы, увеличивающийся каждый тик на единицу. Сигнал этот уходит в дисплей.

Стоит только сигналу работы достигнуть значения 64 как тут же условие нарушится. На выход ничего не пройдёт, по красному проводу не будет зацикленного сигнала, и на входе останется только сигнал работы равный единице, который пришёл со сборочного автомата. А раз сигнал меньше 64, то условия снова работают — и таймер начнёт работать по новой. И так будет до тех пор, пока сигнал работы полностью не пропадёт, а со сборочного автомата не придёт сигнал с флажком. Тогда сигналов на выходе больше не будет вообще.

В дисплее заранее настроены несколько сообщений по определённым условиям.

И вот, если с комбинатора ничего вообще не приходит, это значит, что сигнал работы равен нулю. Поэтому первым в списке стоит значок с точкой, а «Работа» в условии указана равной нулю. Действительно, на всех дисплеях в этой логической схеме используется значок точки как отображение по умолчанию, показывающий, что пока сигнал не поступает.

Остальные сообщения разбиты с условиями по возрастанию сигнала работы на 8. И так до последнего сообщения, где сигнал работы проверяется на соответствие значению 64. Все сообщения имеют восемь значков со стрелкой. Разработчики создали хороший набор стрелок, самый большой из доступных вариаций со значками. Чёрточки и полосочки имеют, максимум, 4 значка и для красивой анимации не так хороши.

Все сообщения читаются дисплеем по списку сверху вниз от первого до последнего. И выполняется условие того значения, которое будет последним совпавшим. Поэтому стрелка расставлена в таком порядке, будто крутится по часовой стрелке с каждым следующим сообщением. Учитывая, что 8 тиков подряд показывается одна стрелка, потом 8 тиков показывается следующая стрелка, затем следующая — срабатывает эффект анимации на экране дисплея.

30. Настройка условий в сообщениях дисплея.
30. Настройка условий в сообщениях дисплея.

Для более красивой и плавной анимации требуется хотя бы 24-25 значков для смены друг за другом в течение 1 секунды, но у нас в наличии их только 8, поэтому и отображение одного значка растянуто на 8 тиков. Это неплохое значение визуализации. Но при желании можно изменить все условия в комбинаторе и дисплее ускорив или замедлив крутящуюся стрелку.

Создание отрицательного списка готовой продукции

После того как часть рецептов будет выполнена, готовая продукция начнёт складываться в стальной сундук накопления. Арифметический комбинатор по зелёному проводу получит сигналы о находящейся там продукции и по красному проводу получит список необходимых рецептов из ячейки памяти:

31. Вычитание из готовой продукции для следующей проверки.
31. Вычитание из готовой продукции для следующей проверки.

Далее КАЖДЫЙ сигнал готовой продукции с зелёного провода вычитает из себя КАЖДЫЙ сигнал из списка рецептов с красного провода. КАЖДЫЙ результат поступает на выход комбинатора. Если какая-то продукция уже частично или полностью изготовилась, то отнимая бόльший сигнал рецепта — получаем отрицательное значение на выходе. Если же продукции ещё нет, или она создана в полном объёме, то отняв сигнал рецепта получим ноль на выходе.

Создание ключа

С арифметического комбинатора могут прийти отрицательные сигналы, означающие, что ещё не вся продукция изготовлена по рецептам. Но когда всё будет закончено, значения обнулятся и на вход сравнивающего комбинатора не придёт ни одного сигнала. В условии комбинатора ВСЕ сигналы должны быть равны нулю. Таким образом, когда на входе нет сигналов, условие выполнено и на выходе создаётся ключ для ячейки памяти в виде сигнала R равного 1. Далее по зелёному проводу ключ попадёт в ячейку памяти позволяя стереть хранимые данные, если при этом нет сигналов на входе в ячейку памяти, или записать новые сигналы, если они есть на входе.

32. Создание ключа R=1.
32. Создание ключа R=1.

В то же время сигнал Rпоступит по красному проводу в следующий комбинатор, где тоже будет играть роль похожую на ключ, а точнее — это будет запускающий сигнал.

Ячейка памяти с запускающим сигналом

В сравнивающий комбинатор по красному проводу придёт запускающий сигнал R равный 1. Этот комбинатор является ячейкой памяти с запускающим сигналом. Он запускается пришедшим сигналом R при выполнении остальных условий, а далее зацикливается на самого себя с выхода на вход через красный провод и работает без пришедшего сигнала. Сбрасывается нарушением условий и отсутствием запускающего сигнала R. И так не работает до следующего срабатывания условий и приходящего запускающего сигнала.

33. Настройка ячейки памяти с запускающим сигналом R.
33. Настройка ячейки памяти с запускающим сигналом R.

Эта ячейка памяти во время работы с рецептами не получает запускающий сигнал R по красному проводу, поэтому всегда остановлена. Но когда по зелёному проводу из сундука с накопленной продукцией начинает приходить ЛЮБОЙ сигнал больше нуля, то часть условия выполняется. Остаётся только получить сигнал с галочкой чтобы сработал оператор И дающий оба выполненных условия. Но сигнал с галочкой запустится только когда по красному проводу придёт запускающий сигнал R. А это произойдёт, когда все рецепты будут выполнены и продукция сложится в сундук накопления. Об этом было выше, про создание ключа. И вот, сундук полный, сигнал R пришёл. Оператор ИЛИ сработает и условие R>0 сработает. На выходе образуется сигнал с галочкой равный 1. Теперь, за следующий тик сделав цикличный круг с выхода на вход по красному проводу, галочка уже войдёт как сигнал больше нуля и выполнит условие необходимое для группы условий, где через оператор И уже дожидается условие ЛЮБОЙ больше нуля.

Забегая вперёд, скажу, что после изымания продукции и перекладывания в красный сундук пассивного снабжения, в той ячейке памяти, которая работает на ключе и хранит рецепты — всё уже будет сброшено, так как постоянный комбинатор выключен и сигналы не посылает, а сигнал R требовал перезаписать данные в памяти. Естественно, они стёрлись и ячейка опустела. А вот в стальном сундуке накопления всё ещё осталась продукция. Это привело к перекосу в значениях. Если раньше в арифметическом комбинаторе от меньшей продукции отнимались бόльшие рецепты и на выход шли отрицательные значения, то сейчас отнимать нечего и на выход пошли положительные значения. А для создания ключа R и отрицательные и положительные значения не нужны, нужен только ноль. Поэтому R тут же сбросится и пропадёт из входа с красным проводом в нашей ячейке памяти. А без запускающего сигнала ячейка памяти будет работать до тех пор пока хоть сколько-то продукции ещё осталось в стальном сундуке накопления и лапках манипуляторов*. После этого условие нарушится, сигнал галочка перестанет поступать на выход и не будет зацикливаться.

*Ремарка. Нужно уточнить, что стальной сундук с обеих сторон соединён зелёными проводами с обоими манипуляторами, а в обоих манипуляторах обязательно ведётся непрерывный подсчёт предметов удерживаемых в лапках. Таким образом, ещё только доставая первый предмет из сборочного автомата, манипулятор уже передаёт через стальной сундук сигнал с количеством этих предметов. С этого начинается отсчёт продукции в сундуке. Точно также при изымании последней продукции из стального сундука, забирающий манипулятор всё ещё считает её и передаёт этот сигнал по зелёному проводу, не нарушая работу логики. И, только опустив последний предмет в сундук пассивного снабжения, манипулятор перестаёт подавать через стальной сундук какие-либо сигналы.

Перекладывание готовой продукции

После получения сигнала с галочкой манипулятор начнёт вытаскивать продукцию из стального сундука и перекладывать её в красный сундук пассивного снабжения. Манипулятор имеет два подключения: красным проводом к комбинатору, от которого получает сигнал с галочкой и зелёным проводом к стальному сундуку для ведения общего счёта продукции.

34. Настройка манипулятора извлекающего готовую продукцию.
34. Настройка манипулятора извлекающего готовую продукцию.

При этом сундук пассивного снабжения только считает своё содержимое:

35. Настройка сундука пассивного снабжения.
35. Настройка сундука пассивного снабжения.

Визуализация окончания работы

После выполнения всей работы рецепты сбрасываются, данные очищаются, продукция перекладывается в сундук пассивного снабжения. Если дроны не должны забрать готовую продукцию, то желательно сделать какое-то указание игроку, что всё готово.

В сравнивающий комбинатор по красному проводу из сундука пассивного снабжения подаётся ЛЮБОЙ сигнал, а по зелёному проводу из стального сундука ВСЕ сигналы. Если стальной сундук опустел, то ВСЕ сигналы станут равны нулю, при этом И если в сундуке пассивного снабжения есть хоть какая-нибудь продукция, то сигнал ЛЮБОЙ будет больше нуля. После выполнения этих условий на выходе будет создан сигнал с галочкой:

36. Настройка сравнивающего комбинатора для создания сигнала с галочкой.
36. Настройка сравнивающего комбинатора для создания сигнала с галочкой.

Галочка по зелёному проводу будет подана на дисплей.

37. Настройка сообщений дисплея.
37. Настройка сообщений дисплея.

На дисплее, при значении галочки равной нулю, будет отображаться точка, как на других дисплеях этой логической схемы. А если сигнал с галочкой будет единицей, то сработает условие, где галочка больше нуля и на экране дисплея отобразится галочка.

Если все предметы будут выложены в красный сундук пассивного снабжения, то галочка будет гореть на экране дисплея. Если игрок или его дроны заберут всё, то в комбинаторе нарушится условие ЛЮБОЙ больше нуля. Галочка перестанет поступать в дисплей и на экране снова загорится точка.

Схема сборщика в плотной компоновке

После полноценного проектирования, после проверки работоспособности, выявлении ошибок и исправления их, заканчивается доводка схемы до рабочего состояния и начинается компоновка. Осторожно вырезая комбинаторы и поворачивая призраки в воздухе, устанавливаем их более компактно друг к другу. При этом наблюдаем чтобы сигнальные провода не «порвались» между комбинаторами, чтобы не нарушилась связь. Некоторые провода заранее можно перецепить более практично. Например, на использованной в статье схеме сигнальные провода были развешаны между объектами как паутинки — почти от каждого объекта к каждому. Это было сделано намеренно — для читателя, чтобы визуально удалось понять пути прохождения сигналов. При компоновке часть проводов могут быть зацеплены друга за другом через несколько комбинаторов, и не обязаны тянуться от комбинатора в разные стороны.

Также соблюдаем некоторую эстетику: поворачиваем и устанавливаем комбинаторы и другие устройства с подключениями таким образом, чтобы провода не закрывали обзор за важными узлами, не закрывали дисплеи или постоянные комбинаторы.

Текущая схема после компоновки была запитана электричеством через среднюю опору ЛЭП, а подстанция удалена:

38. Скомпонованная схема сборщика.
38. Скомпонованная схема сборщика.

Чертежи.

К этой статье имеются два чертежа: один — специально для статьи, он совпадает со скриншотами и имеет все настройки как в статье, второй — готовая рабочая схема в скомпонованном варианте, уже для использования в игре

-----------------------------------------

Ссылка на чертежи из статьи в моём канале Telegram: https://t.me/format_aa/263

☕️ Если вы хотите угостить меня кофе или вкусняшкой за старания, сделать это можно с помощью доната: https://boosty.to/format_aa/donate

-----------------------------------------

Подпишись на канал и узнавай больше +

#Формат_АА
#Factorio
#схема
#чертежи
#сборщик
#логика
#комбинатор
#сравнивающий
#арифметический
#выбирающий
#дисплей