Minecart logic: различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
м (Грамматика.)
 
(не показано 5 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{computing}}
{{computing}}


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


==Техники использования вагонеток в схемах==
==Техники использования вагонеток в схемах==
Строка 11: Строка 11:


===Конвертер энергии в сигнал (Power to signal)===
===Конвертер энергии в сигнал (Power to signal)===
{{diagram|spaces=yes|\
<diagram>
   O      O
   O      O
   ╥,      ╤☼
   ╥,      ╤☼
Строка 17: Строка 17:
   ╨,      ╧☼
   ╨,      ╧☼
   O      O
   O      O
track furniture}}
track furniture
</diagram>


В этой простейшей схеме выходная нажимная плита посылает сигнал включения, когда на редукторы {{Raw Tile|☼|#FFF|#000}} подаётся энергия от {{Raw Tile|P|#0F0|#000}}. Когда энергии нет, вагонетка останавливается на северном или южном роллере, и нажимная плита посылает сигнал выключения.
В этой простейшей схеме выходная нажимная плита посылает сигнал включения, когда на редукторы {{Raw Tile|☼|#FFF|#000}} подаётся энергия от {{Raw Tile|P|#0F0|#000}}. Когда энергии нет, вагонетка останавливается на северном или южном роллере, и нажимная плита посылает сигнал выключения.
Строка 24: Строка 25:


===Память на маятнике Ньютона (Newton's Cradle Memory)===
===Память на маятнике Ньютона (Newton's Cradle Memory)===
{{diagram|spaces=yes|\
<diagram>
   O      O        O
   O      O        O
   ╥,      ╤[#0C0]☼[#0F0]P      [#000][#0f0]■[#0C0]☼[#0F0]P
   ╥,      ╤[#0C0]☼[#0F0]P      [#000][#0f0]■[#0C0]☼[#0F0]P
Строка 31: Строка 32:
   ╨,      ╧[#CC0]☼[#0F0]P      ╧[#CC0]☼[#0F0]P
   ╨,      ╧[#CC0]☼[#0F0]P      ╧[#CC0]☼[#0F0]P
   O      O        O
   O      O        O
track furniture minecart}}
track furniture minecart</diagram>


Схема ячейки памяти, предложенная [http://dwarffortresswiki.org/index.php/User:TinyPirate TinyPirate], примечательна своим малым размером и демонстрацией важного принципа вагонеток. Когда северный редуктор {{Raw Tile|☼|#0C0|#000}} ненадолго включают, он включает северный роллер {{Raw Tile|╤|#FFF|#000}}, запускающий вагонетку {{Raw Tile|■|#000|#0F0}} в южную вагонетку {{Raw Tile|■|#000|#FF0}}. Южная вагонетка покидает нажимную пластину, выдающую выходной сигнал {{Raw Tile|^|#F0F|#000}} и останавливается на южном, выключенном, роллере. Когда ненадолго включают южный редуктор, происходит обратная ситуация: южная вагонетка останавливается на нажимной пластине и толкает северную вагонетку на северный (выключенный) роллер — как это было в изначальном состоянии.
Схема ячейки памяти, предложенная [http://dwarffortresswiki.org/index.php/User:TinyPirate TinyPirate], примечательна своим малым размером и демонстрацией важного принципа вагонеток. Когда северный редуктор {{Raw Tile|☼|#0C0|#000}} ненадолго включают, он включает северный роллер {{Raw Tile|╤|#FFF|#000}}, запускающий вагонетку {{Raw Tile|■|#000|#0F0}} в южную вагонетку {{Raw Tile|■|#000|#FF0}}. Южная вагонетка покидает нажимную пластину, выдающую выходной сигнал {{Raw Tile|^|#F0F|#000}} и останавливается на южном, выключенном, роллере. Когда ненадолго включают южный редуктор, происходит обратная ситуация: южная вагонетка останавливается на нажимной пластине и толкает северную вагонетку на северный (выключенный) роллер — как это было в изначальном состоянии.


===OR на постоянном движении (Continuous roller OR)=== <!--хз, возможно, можно перевести как-то покрасивее -->
===OR на постоянном движении (Continuous roller OR)=== <!--хз, возможно, можно перевести как-то покрасивее -->
{{diagram|spaces=yes|\
<diagram>
  ╔═╗═╗  ╔═╗═╗
  ╔═╗═╗  ╔═╗═╗
  ║ ║O║  ║ [#F0F]^O║
  ║ ║O║  ║ [#F0F]^O║
Строка 42: Строка 43:
  ║ ║O║  [#0F0]P╤[#FF0]☼╧O║
  ║ ║O║  [#0F0]P╤[#FF0]☼╧O║
  ╚═╩═╝  ╚═╧═╝
  ╚═╩═╝  ╚═╧═╝
track  furniture}}
track  furniture</diagram>


Эта схема, предложенная [http://www.bay12forums.com/smf/index.php?topic=114923.msg3891809#msg3891809 Veylon], вычисляет выражение с помощью вагонетки, движущейся против часовой стрелки. Здесь используется принцип передачи энергии через однотайловые роллеры. Если включен хотя бы один из входов {{Raw Tile|☼|#0F0|#000}} или {{Raw Tile|☼|#FF0|#000}}, энергия от {{Raw Tile|P|#0F0|#000}} будет передаваться на самый южный Ю->С роллер {{Raw Tile|╧|#FFF|#000}}. Хотя после него скорость вагонетки становится направленной диагонально, стены не дают ей сойти с рельс. Если ни один из входов не включен, вагонетка проезжает этот перекресток, пропуская нажимную пластину {{Raw Tile|^|#F0F|#000}}.
Эта схема, предложенная [http://www.bay12forums.com/smf/index.php?topic=114923.msg3891809#msg3891809 Veylon], вычисляет выражение с помощью вагонетки, движущейся против часовой стрелки. Здесь используется принцип передачи энергии через однотайловые роллеры. Если включен хотя бы один из входов {{Raw Tile|☼|#0F0|#000}} или {{Raw Tile|☼|#FF0|#000}}, энергия от {{Raw Tile|P|#0F0|#000}} будет передаваться на самый южный Ю->С роллер {{Raw Tile|╧|#FFF|#000}}. Хотя после него скорость вагонетки становится направленной диагонально, стены не дают ей сойти с рельс. Если ни один из входов не включен, вагонетка проезжает этот перекресток, пропуская нажимную пластину {{Raw Tile|^|#F0F|#000}}.


===Управляемый роллерами элемент AND (Roller switched AND)===
===Управляемый роллерами элемент AND (Roller switched AND)===
{{diagram|spaces=yes|\
<diagram>
   ║      ║
   ║      ║
   ╔╗    [#0F0]P[#0F0]╧╗
   ╔╗    [#0F0]P[#0F0]╧╗
Строка 54: Строка 55:
   ║║      [#F0F]^║
   ║║      [#F0F]^║
   ╚╗      ╚╗
   ╚╗      ╚╗
track  furniture}}
track  furniture</diagram>


Управляемый роллерами элемент AND (автор — [http://dwarffortresswiki.org/index.php/User:Larix Larix]) использует поведение роллеров, чтобы избежать проблемной диагональной скорости. Она может быть непонятной из-за контринтуитивного направления роллеров и того факта, что роллеры реагируют на сигналы. Когда вагонетка встречает один из включенных (последний полученный сигнал для этого должен быть выключающим) роллеров {{Raw Tile|╧|#FF0|#000}} или {{Raw Tile|╧|#0F0|#000}}, её скорость полностью перезаписывается и обращается, и она идёт по альтернативному (по часовой стрелке) пути. Если ни один из роллеров не активирован (т.е. последний полученный сигнал у обоих включающий), повороты пути будут игнорироваться, и вагонетка пройдёт прямо на юг, на пластину {{Raw Tile|^|#F0F|#000}}.
Управляемый роллерами элемент AND (автор — [http://dwarffortresswiki.org/index.php/User:Larix Larix]) использует поведение роллеров, чтобы избежать проблемной диагональной скорости. Она может быть непонятной из-за контринтуитивного направления роллеров и того факта, что роллеры реагируют на сигналы. Когда вагонетка встречает один из включенных (последний полученный сигнал для этого должен быть выключающим) роллеров {{Raw Tile|╧|#FF0|#000}} или {{Raw Tile|╧|#0F0|#000}}, её скорость полностью перезаписывается и обращается, и она идёт по альтернативному (по часовой стрелке) пути. Если ни один из роллеров не активирован (т.е. последний полученный сигнал у обоих включающий), повороты пути будут игнорироваться, и вагонетка пройдёт прямо на юг, на пластину {{Raw Tile|^|#F0F|#000}}.


=== (Resetting bridge-derailment AND)===
=== Сбрасываемый AND со сведением с рельс мостом (Resetting bridge-derailment AND)===
{{diagram|spaces=yes|\
<diagram>
  O[#0FF].═[#0FF]. O▼═▼   O[#FF0]¢═▼
  O[#0FF].═[#0FF]. O▼═▼   O[#FF0]¢═▼
        
        
        
        
        
        
track ramp furniture
track ramp furniture
z+1
z+1
  O╔O╗ O▲O▲  O▲O▲
    O    O      O
   ╚═╚ ╚═▲    [#000][#0f0]╬[#F0F]^
  O╔O╗ O▲O▲  O▲O▲
   ╚═╝ ╚═╝    ╚═╝
   ╚═╚O ╚═▲O  [#0f0]╬[#F0F]^▲O
track ramp furniture
   ╚═╝   ╚═╝    ╚═╝
z+0}}
track ramp furniture
z+0</diagram>


When both the yellow hatch {{Raw Tile|¢|#FF0|#000}} and the green retractable bridge {{Raw Tile|╬|#000|#0F0}} are open, minecarts on this circuit make a continuous loop, triggering the output plate {{Raw Tile|^|#F0F|#000}}.  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.
Когда и желтый люк {{Raw Tile|¢|#FF0|#000}}, и зеленый раздвижной мост {{Raw Tile|╬|#000|#0F0}} открыты, вагонетка в этой схеме движется по кругу, нажимая на пластину {{Raw Tile|^|#F0F|#000}}. Если один из них закрыт, пластина не будет активирована: если закрыт мост, вагонетка сходит на нём с рельс и летит на южный путь, минуя пластину; если же закрыт люк, то вагонетка не сможет упасть на северозападную рампу и останется лежать на люке, пока он не откроется.


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.
Есть много проблем при использовании такого логического элемента. Вагонетку может отбросить, когда мост сменит состояние под ней (при этом вагонетка, похоже, приобретает дополнительную скорость в случайном направлении, что может сбросить её с рельс или остановить); к сожалению, люк не может так же сводить вагонетку с рельс на ровных рельсах. Кроме того, вагонетка обрабатывает входы не одновременно, поэтому возможна ситуация, когда схема выдаёт включающий сигнал, когда входы не были включены одновременно (впрочем, обычно это не критично, так как вагонетка проходит расстояние между люком и мостом примерно за 8 тактов).


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.
Это не всегда проблема, но это поведение является общим для элементов AND. Парадоксально, но одним из решений может стать управление входами через ещё один элемент AND. Если есть большое количество таких схем, и люки на всех них привязаны к одному рычагу, то быстрое переключение (включить и тут же выключить) этого рычага может гарантировать, что все схемы сработают в одно и то же время; если подсоединить эти схемы к следующей стадии вычисления, то входные сигналы для неё изменятся одновременно. Затем вагонетки вернутся на свои исходные позиции на люки и будут готовы к следующему нажатию тактового рычага.


===MPL NOT===
Стоит отметить центральную восточную импульсную рампу, позволяющую вагонетке набрать достаточно скорости, чтобы пройти по схеме. Импульсные рампы можно использовать для создания схем, не требующих энергии, однако их поведение неинтуитивно, и их следует использовать с максимальной осторожностью.
{{diagram|spaces=yes|\
 
===NOT на управлении путём (MPL NOT)===
<diagram>
   
   
O,      O,
O,      O,
Строка 94: Строка 98:
track    ramp
track    ramp
z+0
z+0
}}
</diagram>


Larix's [http://dwarffortresswiki.org/index.php/User:Larix/MPL/2 powerless logic gates] <!-- MPL - Minecart Pathing Logic--> 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 {{Raw Tile|¢|#0F0|#000}} 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 {{Raw Tile|^|#F0F|#000}}. 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.
Логика на основе управлении путём вагонетки (Minecart Pathing Logic, MPL), придуманная Larix, решает проблемы надёжности и скорости, свойственные многим схемам на вагонеточной логике, путём использования двойных импульсных рамп и люка, который контролирует не просто путь, но направление движения. Вагонетка, перемещающаяся по схеме, указанной на рисунке, при открытом люке (он же вход схемы) {{Raw Tile|¢|#0F0|#000}} будет двигаться по пути против часовой стрелки вне зависимости от начального направления скорости. Однако когда люк закрывается, вагонетка не может двигаться по прежнему пути и ускоряется по направлению по часовой стрелке, на выходную нажимную пластину {{Raw Tile|^|#F0F|#000}}. Она будет колебаться между крайней восточной и крайней западной рампами, пока люк не откроют, после чего продолжит движение против часовой стрелки.


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.
При использовании рамп в сочетании с разогнанными вагонетками может понадобиться потолок, как показано на уровне z+2. Неважно, будет ли потолок полом или стеной. Некоторые стены, указанные на диаграмме, не важны для работоспособности схемы и показаны, чтобы помочь читателю ориентироваться.


===Другие техники и логические элементы===
===Другие техники и логические элементы===
Строка 106: Строка 110:
Можно использовать [[door|двери]] для блокирования пути вагонетки или предотвращения её схода с рельс, но для надёжности схемы нужно позаботиться о том, чтобы двери не могли менять состояние, когда вагонетка движется, или дверь может заклинить, когда вагонетка проходит через неё. [[Floodgate|Шлюзы]] не имеют таких проблем{{verify}}, но у них есть небольшая задержка. В некоторых схемах можно использовать несколько вагонеток с разным весом и нажимные пластины, срабатывающие только на вес одной из них, как это сделал Bloodbeard в своей необыкновенно маленькой схеме [http://www.bay12forums.com/smf/index.php?topic=114923.msg3532411#msg3532411 ячейки памяти]. Роллеры можно располагать перпендикулярно рельсам, чтобы  сводить вагонетку с рельс или придавать ей диагональную скорость. Управляемые остановки можно использовать для управления сходом с рельс. Возможные концепции ещё далеко не исчерпаны — и это только если перечислять практически применимые техники.
Можно использовать [[door|двери]] для блокирования пути вагонетки или предотвращения её схода с рельс, но для надёжности схемы нужно позаботиться о том, чтобы двери не могли менять состояние, когда вагонетка движется, или дверь может заклинить, когда вагонетка проходит через неё. [[Floodgate|Шлюзы]] не имеют таких проблем{{verify}}, но у них есть небольшая задержка. В некоторых схемах можно использовать несколько вагонеток с разным весом и нажимные пластины, срабатывающие только на вес одной из них, как это сделал Bloodbeard в своей необыкновенно маленькой схеме [http://www.bay12forums.com/smf/index.php?topic=114923.msg3532411#msg3532411 ячейки памяти]. Роллеры можно располагать перпендикулярно рельсам, чтобы  сводить вагонетку с рельс или придавать ей диагональную скорость. Управляемые остановки можно использовать для управления сходом с рельс. Возможные концепции ещё далеко не исчерпаны — и это только если перечислять практически применимые техники.


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


===[[Mechanical logic|Механическая логика]]===
===[[Mechanical logic|Механическая логика]]===

Текущая версия от 16:35, 5 сентября 2023

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

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

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

Обозначения

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

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

  O       O    
  ,         
         ^P   
  ,         
  O       O    
track furniture

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

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

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

  O       O        O    
  ,      P      P  
                     
         ^            
  ,      P      P  
  O       O        O    
track furniture minecart

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

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

       
  O    ^O   
  O   O   
  O  PO   
       
track   furniture

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

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

               
        P    
             
        P    
         ^    
             
track   furniture

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

Сбрасываемый AND со сведением с рельс мостом (Resetting bridge-derailment AND)

 O..  O    O¢   
                      
                      
                      
track  ramp  furniture
z+1                   
     O     O      O   
 OO  OO   OO    
  O  O   ^O   
             
track  ramp  furniture
z+0                   

Стены к востоку от схемы нужны для предотвращения схода вагонетки с рельс.

Когда и желтый люк ¢, и зеленый раздвижной мост открыты, вагонетка в этой схеме движется по кругу, нажимая на пластину ^. Если один из них закрыт, пластина не будет активирована: если закрыт мост, вагонетка сходит на нём с рельс и летит на южный путь, минуя пластину; если же закрыт люк, то вагонетка не сможет упасть на северозападную рампу и останется лежать на люке, пока он не откроется.

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

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

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

NOT на управлении путём (MPL NOT)

                         
O,       O,              
track    ramp            
z+2                      
                
O..   O   O^¢ 
track    ramp   furniture
z+1                      
                         
OOOO   OOOO          
track    ramp            
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) вагонетки предоставляют беспрецедентный контроль над путями дварфов.

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

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

Смотри также