Minecart logic

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску

Введение вагонеток в Dwarf Fortress открыло новые возможности для логики и вычислений. Логические элементы и ячейки памяти на основе вагонеток просто строятся, быстро реагируют и могут быть построены даже без воды, энергии и существ. Тренировка, которую получат ваши доктора — лишь одна из причин использовать вагонеточную логику!

Техники использования вагонеток в схемах

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

Обозначения

Трудно изобразить схему на вагонеточной логике так, что она была понятна; каждый тайл на каждом z-уровне нужно показать до четырёх слоёв (рельсы, рампы, фурнитура, вагонетки), накладывающихся друг на друга. Для простоты рампы будут показываться на слое фурнитуры, и некоторые ненужные слои могут быть пропущены. Чтобы было легче понять расположение, компоненты прошлых слоёв показываются на более верхнем, если они не были изменены новыми компонентами. Стены O обычно показываются только там, где они важны для работы схемы, и рисуются только как последовательность колонн, чтобы не путать их с рельсами. Негравированный пол , иногда нужен для других компонентов, но, конечно, его можно сгладить при желании. Рельсы обозначаются , а их окончание — . Вагонетки ускоряются роллерами, направленными на восток запад север или юг и замедляются остановками . Роллеры управляются через редукторы, которые могут быть либо включены , либо выключены ; обычно они подключены источнику питания P. Нажимные пластины ^ нужны для передачи выходного сигнала и, иногда, для работы самой схемы. Рампы вверх и вниз могут быть необходимы для перехода между z-уровнями или изменения скорости вагонетки; они могут быть накрыты крышей или пустым пространством . при взгляде из некоторых слоёв. Люки и раздвигающиеся мосты обычно используются для контролирования пути вагонетки. В описаниях схем даны пояснения, если они необходимы.

Конвертер энергии в сигнал (Power to signal)

O O ╥, ╤☼ ║ [#F0F]^[#0F0]P ╨, ╧☼ O O track furniture


В этой простейшей схеме выходная нажимная плита посылает сигнал включения, когда на редукторы подаётся энергия от P. Когда энергии нет, вагонетка останавливается на северном или южном роллере, и нажимная плита посылает сигнал выключения.

Это очень многофункциональное устройство. Немного изменив конструкцию, можно получить детектор фронта или повторитель (оставим это как упражнение читателю).

Память на маятнике Ньютона (Newton's Cradle Memory)

O O O ╥, ╤[#0C0]☼[#0F0]P [#000][#0f0]■[#0C0]☼[#0F0]P ║ ║ ║ ║ [#F0F]^ [#000][#ff0]■ ╨, ╧[#CC0]☼[#0F0]P ╧[#CC0]☼[#0F0]P O O O track furniture minecart


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

OR на постоянном движении (Continuous roller OR)

╔═╗═╗ ╔═╗═╗ ║ ║O║ ║ [#F0F]^O║ ║ ║O║ ╤[#0F0]☼╧O║ ║ ║O║ [#0F0]P╤[#FF0]☼╧O║ ╚═╩═╝ ╚═╧═╝ track furniture


Эта схема, предложенная Veylon, вычисляет выражение с помощью вагонетки, движущейся против часовой стрелки. Здесь используется принцип передачи энергии через однотайловые роллеры. Если включен хотя бы один из входов или , энергия от P будет передаваться на самый южный Ю->С роллер . Хотя после него скорость вагонетки становится направленной диагонально, стены не дают ей сойти с рельс. Если ни один из входов не включен, вагонетка проезжает этот перекресток, пропуская нажимную пластину ^.

Управляемый роллерами элемент AND (Roller switched AND)

║ ║ ╔╗ [#0F0]P[#0F0]╧╗ ║║ ║║ ╔╗ [#0F0]P[#FF0]╧╗ ║║ [#F0F]^║ ╚╗ ╚╗ track furniture


Управляемый роллерами элемент AND (автор — Larix) использует поведение роллеров, чтобы избежать проблемной диагональной скорости. Она может быть непонятной из-за контринтуитивного направления роллеров и того факта, что роллеры реагируют на сигналы. Когда вагонетка встречает один из включенных (последний полученный сигнал для этого должен быть выключающим) роллеров или , её скорость полностью перезаписывается и обращается, и она идёт по альтернативному (по часовой стрелке) пути. Если ни один из роллеров не активирован (т.е. последний полученный сигнал у обоих включающий), повороты пути будут игнорироваться, и вагонетка пройдёт прямо на юг, на пластину ^.

(Resetting bridge-derailment AND)

O[#0FF].═[#0FF]. O▼═▼ O[#FF0]¢═▼ track ramp furniture z+1 O╔O╗ O▲O▲ O▲O▲ ╚═╚ ╚═▲ [#000][#0f0]╬[#F0F]^▲ ╚═╝ ╚═╝ ╚═╝ track ramp furniture z+0


When both the yellow hatch ¢ and the green retractable bridge are open, minecarts on this circuit make a continuous loop, triggering the output plate ^. If either is closed, the plate is never activated. If the bridge is closed, the minecart derails to the southern path, avoiding the plate. If the hatch is closed, the minecart is unable to drop into the northwest ramp, and so sits on the upper, northwestern tile until the hatch opens.

There are many concerns when using a gate like this. Minecarts can be flung when a bridge changes state underneath them, and unfortunately, hatch covers cannot provide the same derailment effect on flat track. Additionally, because your minecart never evaluates both operands at exactly the same moment, it's possible for this gate to output when neither operand is actually true (i.e., last received an on signal) at the same moment.

It's not always a problem, but this behavior is common to AND gates. Paradoxically, one solution is to moderate your inputs via an extra AND gate; this design shows how that can be done. When a large number of circuits such as that shown are created and the hatches of all of them are linked to a single lever, a quick flick (on and off) of that lever can guarantee that all of your circuits fire at the same time-- that is, that all of your inputs for the next computation change state simultaneously. The minecarts then return to their position atop the hatches, ready for another flick of your clock lever.

Worth noting, as well, is the central eastern impulse ramp that allows the minecart to maintain enough velocity to complete this circuit. Impulse ramps like this can be used to make unpowered gates. However, their behavior is unintuitive, and they should only be used with extreme caution. For example, in the diagram above, such a device used for continuous AND evaluation (rather than the resetting AND suggested in the text) is likely to accelerate the minecart on each pass, such that the minecart will stop moving after some number of circuits.

MPL NOT

O, O, track ramp z+2 ╔═╗ ╔═╗ ╔═╗ O══[#0FF].[#0FF].╝ O▲═▼▼╝ O▲[#F0F]^▼[#0F0]¢╝ track ramp furniture z+1 OOO══O OOO▲▲O track ramp z+0


Larix's powerless logic gates avoid the reliability and latency issues that plague many minecart designs through the use of paired impulse ramps and hatches that control not just path, but direction of movement. A minecart traveling the pictured circuit while the input hatch ¢ is open will settle into a counter-clockwise path, regardless of the direction of its initial velocity. Yet when the hatch becomes closed, the minecart cannot travel counter-clockwise, but instead is accelerated in the clockwise direction, onto the output plate ^. It will then oscillate between the far east and far west ramps until the hatch is opened, at which point it will resume counter-clockwise motion.

Use of ramps with high-velocity minecarts may necessitate ceilings as demonstrated on z+2. The exact nature of the ceiling (floor, wall) is unimportant. Some diagrammed walls are unnecessary for the design and are drawn to help the reader in orientation.

Другие техники и логические элементы

Любой другой логический элемент можно сделать, комбинируя приведённые. NAND, например, это NOT AND; XOR — это OR AND (NOT AND). Были также придуманы и проверены схемы детектирования фронта сигнала и такта. Однако примеры сверху были выбраны из-за различия демонстрируемых ими техник. Заинтересованный читатель может исследовать данные логические элементы подробней, или даже разработать свои.

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

Интеграция с другими дисциплинами

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

Механическая логика

Самый очевидный выбор. Механическая логика предлагает потенциал для потрясающей скорости, но требует дополнительные средства для генерации сигналов или для создания задержки (чтобы создавать повторители, например); кроме того, трудно сделать память на редукторах. Вагонеточная логика превосходна именно в этих задачах. Конвертеры энергии в сигнал и память на вагонетках компактные и быстрые. Задержку в схемах на вагонетках можно точно настроить. Преимущества вагонеточной логики сделали жидкостную устаревшей для этих целей.

Логика существ

Вагонеточная логика, особенно не требующая энергии MPL от Larix, заменила логику существ в качестве логики последней надежды (когда ни энергия, ни жидкости недоступны) и в качестве первоначальной логики (когда вычисления нужны ещё до того, как можно производить энергию или иметь доступ к жидкости). Однако тем, кто увлекается борг-логикой, интеграция с вагонетками даёт интересные возможности. Сложно представить более простой тактовый генератор, чем вагонетка, поставленная на "push always after x days"; кроме того, управляемые (guided) вагонетки предоставляют беспрецедентный контроль над путём дварфов.

Жидкостная логика

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

Смотри также