Minecart logic
Часть серии статей о |
Вычислениях |
---|
Логика: животная • существ • жидкостная • механическая • вагонеточная |
Компоненты: Сумматор • Память • Повторитель |
Введение вагонеток в Dwarf Fortress открыло новые возможности для логики и вычислений. Логические элементы и ячейки памяти на основе вагонеток просто строятся, быстро реагируют и могут быть построены даже без воды, энергии и существ. Тренировка, которую получат ваши доктора — лишь одна из причин использовать вагонеточную логику!
Техники использования вагонеток в схемах
Есть много разных концепций использования вагонеток для приёма входного сигнала, вычислений и передачи выходного сигнала. Эта статья не нацелена на исчерпывающее описание их всех; заинтересованный читатель может самостоятельно изучить эту тему глубже. Показанные примеры были выбраны, так как они показывают множество разных техник и несколько наиболее используемых логических элементов.
Обозначения
Трудно изобразить схему вагонеточной логики так, что она была понятна; каждый тайл на каждом z-уровне нужно показать до четырёх слоёв (рельсы, рампы, фурнитура, вагонетки), накладывающихся друг на друга. Для простоты рампы будут показываться на слое фурнитуры, и некоторые ненужные слои могут быть пропущены. Чтобы было легче понять расположение, компоненты прошлых слоёв показываются на более верхнем, если они не были изменены новыми компонентами. Стены O обычно показываются только там, где они важны для работы схемы, и рисуются только как последовательность колонн, чтобы не путать их с рельсами. Негравированный пол , иногда нужен для других компонентов, но, конечно, его можно сгладить при желании. Рельсы обозначаются ║═╗╝╚╔╩, а их окончание — ╨╥╡╞. Вагонетки ■ ускоряются роллерами, направленными на восток ╟ запад ╢ север ╧ или юг ╤ и замедляются остановками ≡. Роллеры управляются через редукторы, которые могут быть либо включены ☼, либо выключены ☼; обычно они подключены источнику питания P. Нажимные пластины ^ нужны для передачи выходного сигнала и, иногда, для работы самой схемы. Рампы вверх ▲ и вниз ▼ могут быть необходимы для перехода между z-уровнями или изменения скорости вагонетки; они могут быть накрыты крышей или пустым пространством . при взгляде из некоторых слоёв. Люки и раздвигающиеся мосты ╬ обычно используются для контролирования пути вагонетки. В описаниях схем даны пояснения, если они необходимы.
Конвертер энергии в сигнал (Power to signal)
O | O | |||||||||||||
╥ | , | ╤ | ☼ | |||||||||||
║ | ^ | P | ||||||||||||
╨ | , | ╧ | ☼ | |||||||||||
O | O | |||||||||||||
t | r | a | c | k | f | u | r | n | i | t | u | r | e |
В этой простейшей схеме выходная нажимная плита посылает сигнал включения, когда на редукторы ☼ подаётся энергия от P. Когда энергии нет, вагонетка останавливается на северном или южном роллере, и нажимная плита посылает сигнал выключения.
Это очень многофункциональное устройство. Немного изменив конструкцию, можно получить детектор фронта или повторитель (оставим это как упражнение читателю).
Память на маятнике Ньютона (Newton's Cradle Memory)
O | O | O | |||||||||||||||||||||
╥ | , | ╤ | ☼ | P | ■ | ☼ | P | ||||||||||||||||
║ | ║ | ║ | |||||||||||||||||||||
║ | ^ | ■ | |||||||||||||||||||||
╨ | , | ╧ | ☼ | P | ╧ | ☼ | P | ||||||||||||||||
O | O | O | |||||||||||||||||||||
t | r | a | c | k | f | u | r | n | i | t | u | r | e | m | i | n | e | c | a | r | t |
Схема ячейки памяти, предложенная TinyPirate, примечательна своим малым размером и демонстрацией важного принципа вагонеток. Когда северный редуктор ☼ ненадолго включают, он включает северный роллер ╤, запускающий вагонетку ■ в южную вагонетку ■. Южная вагонетка покидает нажимную пластину, выдающую выходной сигнал ^ и останавливается на южном, выключенном, роллере. Когда ненадолго включают южный редуктор, происходит обратная ситуация: южная вагонетка останавливается на нажимной пластине и толкает северную вагонетку на северный (выключенный) роллер — как это было в изначальном состоянии.
OR на постоянном движении (Continuous roller OR)
╔ | ═ | ╗ | ═ | ╗ | ╔ | ═ | ╗ | ═ | ╗ | |||||||
║ | ║ | O | ║ | ║ | ^ | O | ║ | |||||||||
║ | ║ | O | ║ | ╤ | ☼ | ╧ | O | ║ | ||||||||
║ | ║ | O | ║ | P | ╤ | ☼ | ╧ | O | ║ | |||||||
╚ | ═ | ╩ | ═ | ╝ | ╚ | ═ | ╧ | ═ | ╝ | |||||||
t | r | a | c | k | f | u | r | n | i | t | u | r | e |
Эта схема, предложенная Veylon, вычисляет выражение с помощью вагонетки, движущейся против часовой стрелки. Здесь используется принцип передачи энергии через однотайловые роллеры. Если включен хотя бы один из входов ☼ или ☼, энергия от P будет передаваться на самый южный Ю->С роллер ╧. Хотя после него скорость вагонетки становится направленной диагонально, стены не дают ей сойти с рельс. Если ни один из входов не включен, вагонетка проезжает этот перекресток, пропуская нажимную пластину ^.
Управляемый роллерами элемент AND (Roller switched AND)
║ | ║ | |||||||||||||||
╔ | ╗ | P | ╧ | ╗ | ||||||||||||
║ | ║ | ║ | ║ | |||||||||||||
╔ | ╗ | P | ╧ | ╗ | ||||||||||||
║ | ║ | ^ | ║ | |||||||||||||
╚ | ╗ | ╚ | ╗ | |||||||||||||
t | r | a | c | k | f | u | r | n | i | t | u | r | e |
Управляемый роллерами элемент AND (автор — Larix) использует поведение роллеров, чтобы избежать проблемной диагональной скорости. Она может быть непонятной из-за контринтуитивного направления роллеров и того факта, что роллеры реагируют на сигналы. Когда вагонетка встречает один из включенных (последний полученный сигнал для этого должен быть выключающим) роллеров ╧ или ╧, её скорость полностью перезаписывается и обращается, и она идёт по альтернативному (по часовой стрелке) пути. Если ни один из роллеров не активирован (т.е. последний полученный сигнал у обоих включающий), повороты пути будут игнорироваться, и вагонетка пройдёт прямо на юг, на пластину ^.
Сбрасываемый AND со сведением с рельс мостом (Resetting bridge-derailment AND)
O | . | ═ | . | O | ▼ | ═ | ▼ | O | ¢ | ═ | ▼ | ||||||||||
t | r | a | c | k | r | a | m | p | f | u | r | n | i | t | u | r | e | ||||
z | + | 1 | |||||||||||||||||||
O | O | O | |||||||||||||||||||
O | ╔ | O | ╗ | O | ▲ | O | ▲ | O | ▲ | O | ▲ | ||||||||||
╚ | ═ | ╚ | O | ╚ | ═ | ▲ | O | ╬ | ^ | ▲ | O | ||||||||||
╚ | ═ | ╝ | ╚ | ═ | ╝ | ╚ | ═ | ╝ | |||||||||||||
t | r | a | c | k | r | a | m | p | f | u | r | n | i | t | u | r | e | ||||
z | + | 0 |
Стены к востоку от схемы нужны для предотвращения схода вагонетки с рельс.
Когда и желтый люк ¢, и зеленый раздвижной мост ╬ открыты, вагонетка в этой схеме движется по кругу, нажимая на пластину ^. Если один из них закрыт, пластина не будет активирована: если закрыт мост, вагонетка сходит на нём с рельс и летит на южный путь, минуя пластину; если же закрыт люк, то вагонетка не сможет упасть на северозападную рампу и останется лежать на люке, пока он не откроется.
Есть много проблем при использовании такого логического элемента. Вагонетку может отбросить, когда мост сменит состояние под ней (при этом вагонетка, похоже, приобретает дополнительную скорость в случайном направлении, что может сбросить её с рельс или остановить); к сожалению, люк не может так же сводить вагонетку с рельс на ровных рельсах. Кроме того, вагонетка обрабатывает входы не одновременно, поэтому возможна ситуация, когда схема выдаёт включающий сигнал, когда входы не были включены одновременно (впрочем, обычно это не критично, так как вагонетка проходит расстояние между люком и мостом примерно за 8 тактов).
Это не всегда проблема, но это поведение является общим для элементов AND. Парадоксально, но одним из решений может стать управление входами через ещё один элемент AND. Если есть большое количество таких схем, и люки на всех них привязаны к одному рычагу, то быстрое переключение (включить и тут же выключить) этого рычага может гарантировать, что все схемы сработают в одно и то же время; если подсоединить эти схемы к следующей стадии вычисления, то входные сигналы для неё изменятся одновременно. Затем вагонетки вернутся на свои исходные позиции на люки и будут готовы к следующему нажатию тактового рычага.
Стоит отметить центральную восточную импульсную рампу, позволяющую вагонетке набрать достаточно скорости, чтобы пройти по схеме. Импульсные рампы можно использовать для создания схем, не требующих энергии, однако их поведение неинтуитивно, и их следует использовать с максимальной осторожностью.
NOT на управлении путём (MPL NOT)
O | , | O | , | |||||||||||||||||||||
t | r | a | c | k | r | a | m | p | ||||||||||||||||
z | + | 2 | ||||||||||||||||||||||
╔ | ═ | ╗ | ╔ | ═ | ╗ | ╔ | ═ | ╗ | ||||||||||||||||
O | ═ | ═ | . | . | ╝ | O | ▲ | ═ | ▼ | ▼ | ╝ | O | ▲ | ^ | ▼ | ¢ | ╝ | |||||||
t | r | a | c | k | r | a | m | p | f | u | r | n | i | t | u | r | e | |||||||
z | + | 1 | ||||||||||||||||||||||
O | O | O | ═ | ═ | O | O | O | O | ▲ | ▲ | O | |||||||||||||
t | r | a | c | k | r | a | m | p | ||||||||||||||||
z | + | 0 |
Логика на основе управлении путём вагонетки (Minecart Pathing Logic, MPL), придуманная Larix, решает проблемы надёжности и скорости, свойственные многим схемам на вагонеточной логике, путём использования двойных импульсных рамп и люка, который контролирует не просто путь, но направление движения. Вагонетка, перемещающаяся по схеме, указанной на рисунке, при открытом люке (он же вход схемы) ¢ будет двигаться по пути против часовой стрелки вне зависимости от начального направления скорости. Однако когда люк закрывается, вагонетка не может двигаться по прежнему пути и ускоряется по направлению по часовой стрелке, на выходную нажимную пластину ^. Она будет колебаться между крайней восточной и крайней западной рампами, пока люк не откроют, после чего продолжит движение против часовой стрелки.
При использовании рамп в сочетании с разогнанными вагонетками может понадобиться потолок, как показано на уровне z+2. Неважно, будет ли потолок полом или стеной. Некоторые стены, указанные на диаграмме, не важны для работоспособности схемы и показаны, чтобы помочь читателю ориентироваться.
Другие техники и логические элементы
Любой другой логический элемент можно сделать, комбинируя приведённые. NAND, например, это NOT AND; XOR — это OR AND (NOT AND). Были также придуманы и проверены схемы детектирования фронта сигнала и такта. Однако примеры сверху были выбраны из-за различия демонстрируемых ими техник. Заинтересованный читатель может исследовать данные логические элементы подробней, или даже разработать свои.
Можно использовать двери для блокирования пути вагонетки или предотвращения её схода с рельс, но для надёжности схемы нужно позаботиться о том, чтобы двери не могли менять состояние, когда вагонетка движется, или дверь может заклинить, когда вагонетка проходит через неё. Шлюзы не имеют таких проблемТребует проверки, но у них есть небольшая задержка. В некоторых схемах можно использовать несколько вагонеток с разным весом и нажимные пластины, срабатывающие только на вес одной из них, как это сделал Bloodbeard в своей необыкновенно маленькой схеме ячейки памяти. Роллеры можно располагать перпендикулярно рельсам, чтобы сводить вагонетку с рельс или придавать ей диагональную скорость. Управляемые остановки можно использовать для управления сходом с рельс. Возможные концепции ещё далеко не исчерпаны — и это только если перечислять практически применимые техники.
Интеграция с другими принципами
Нет никаких причин использовать вагонеточную логику отдельно от других. Объединение её с другими логическими принципами позволяет использовать сильные стороны каждой и избегать слабых.
Механическая логика
Самый очевидный выбор. Механическая логика предлагает потенциал для потрясающей скорости, но требует дополнительные средства для генерации сигналов или для создания задержки (чтобы создавать повторители, например); кроме того, трудно сделать память на редукторах. Вагонеточная логика превосходна именно в этих задачах. Конвертеры энергии в сигнал и память на вагонетках компактные и быстрые. Задержку в схемах на вагонетках можно точно настроить. Преимущества вагонеточной логики сделали жидкостную устаревшей для этих целей.
Логика существ
Вагонеточная логика, особенно не требующая энергии MPL от Larix, заменила логику существ в качестве логики последней надежды (когда ни энергия, ни жидкости недоступны) и в качестве первоначальной логики (когда вычисления нужны ещё до того, как можно производить энергию или иметь доступ к жидкости). Однако тем, кто увлекается борг-логикой, интеграция с вагонетками даёт интересные возможности. Сложно представить более простой тактовый генератор, чем вагонетка, поставленная на "push always after x days"; кроме того, управляемые (guided) вагонетки предоставляют беспрецедентный контроль над путями дварфов.
Жидкостная логика
Вагонеточная логика превосходит жидкостную настолько, что по большей части заменила её, однако проблему автоматической доставки жидкости обычно лучше всего решать техниками жидкостной логики. Тем не менее, при желании можно использовать способность вагонетки вмещать жидкость для вычислений.
Смотри также
- Ветвь на форуме с обсуждением идей вагонеточных вычислений от BloodBeard.
- Видеоинструкция по вагонеточной логике для начинающих от TinyPirate.
- Не требующая энергии логика, основанная на управляемых люками вагонетках, и логические элементы на этом принципе от Larix.