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

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


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


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


====Обозначения====
====Обозначения====
Трудно изобразить схему на вагонеточной логике так, что она была понятна; каждый тайл на каждом z-уровне нужно показать до четырёх слоёв ({{tt|рельсы|track}}, рампы, {{tt|фурнитура|furniture}}, {{tt|вагонетки|minecart}}), накладывающихся друг на друга. Для простоты рампы будут показываться на слое фурнитуры, и некоторые ненужные слои могут быть пропущены. Чтобы было легче понять расположение, компоненты прошлых слоёв показываются на более верхнем, если они не были изменены новыми компонентами. Стены {{Raw Tile|O|#FFF|#000}} обычно показываются только там, где они важны для работы схемы, и рисуются только как последовательность колонн, чтобы не путать их с рельсами. Негравированный пол {{Raw Tile|,|#FFF|#000}} иногда нужен для других компонентов, но, конечно, его можно сгладить при желании. Рельсы обозначаются {{Raw Tile|║|#FFF|#000}}{{Raw Tile|═|#FFF|#000}}{{Raw Tile|╗|#FFF|#000}}{{Raw Tile|╝|#FFF|#000}}{{Raw Tile|╚|#FFF|#000}}{{Raw Tile|╔|#FFF|#000}}{{Raw Tile|╩|#FFF|#000}}, а их окончание — {{Raw Tile|╨|#FFF|#000}}{{Raw Tile|╥|#FFF|#000}}{{Raw Tile|╡|#FFF|#000}}{{Raw Tile|╞|#FFF|#000}}. Вагонетки {{Raw Tile|■|#FFF|#000}} ускоряются роллерами, направленными на восток {{Raw Tile|╟|#FFF|#000}} запад {{Raw Tile|╢|#FFF|#000}} север {{Raw Tile|╧|#FFF|#000}} или юг {{Raw Tile|╤|#FFF|#000}} и замедляются остановками {{Raw Tile|≡|#FFF|#000}}. Роллеры управляются через [[Gear assembly|редукторы]], которые могут быть либо включены {{Raw Tile|☼|#FFF|#000}}, либо выключены {{Raw Tile|☼|#777|#000}}; обычно они подключены источнику [[power|питания]] {{Raw Tile|P|#0F0|#000}}. [[pressure plate|Нажимные пластины]] {{Raw Tile|^|#FFF|#000}} нужны для передачи выходного сигнала и, иногда, для работы самой схемы. Рампы вверх {{Raw Tile|▲|#FFF|#000}} и вниз {{Raw Tile|▼|#FFF|#000}} могут быть необходимы для перехода между z-уровнями или изменения скорости вагонетки; они могут быть накрыты крышей или пустым пространством {{Raw Tile|.|#0FF|#000}} при взгляде из некоторых слоёв. [[hatch|Люки]] и раздвигающиеся [[bridge|мосты]] {{Raw Tile|╬|#000|#CCC}} обычно используются для контролирования пути вагонетки. В описаниях схем даны пояснения, если они необходимы.
Трудно изобразить схему вагонеточной логики так, что она была понятна; каждый тайл на каждом z-уровне нужно показать до четырёх слоёв ({{tt|рельсы|track}}, рампы, {{tt|фурнитура|furniture}}, {{tt|вагонетки|minecart}}), накладывающихся друг на друга. Для простоты рампы будут показываться на слое фурнитуры, и некоторые ненужные слои могут быть пропущены. Чтобы было легче понять расположение, компоненты прошлых слоёв показываются на более верхнем, если они не были изменены новыми компонентами. Стены {{Raw Tile|O|#FFF|#000}} обычно показываются только там, где они важны для работы схемы, и рисуются только как последовательность колонн, чтобы не путать их с рельсами. Негравированный пол {{Raw Tile|,|#FFF|#000}} иногда нужен для других компонентов, но, конечно, его можно сгладить при желании. Рельсы обозначаются {{Raw Tile|║|#FFF|#000}}{{Raw Tile|═|#FFF|#000}}{{Raw Tile|╗|#FFF|#000}}{{Raw Tile|╝|#FFF|#000}}{{Raw Tile|╚|#FFF|#000}}{{Raw Tile|╔|#FFF|#000}}{{Raw Tile|╩|#FFF|#000}}, а их окончание — {{Raw Tile|╨|#FFF|#000}}{{Raw Tile|╥|#FFF|#000}}{{Raw Tile|╡|#FFF|#000}}{{Raw Tile|╞|#FFF|#000}}. Вагонетки {{Raw Tile|■|#FFF|#000}} ускоряются роллерами, направленными на восток {{Raw Tile|╟|#FFF|#000}} запад {{Raw Tile|╢|#FFF|#000}} север {{Raw Tile|╧|#FFF|#000}} или юг {{Raw Tile|╤|#FFF|#000}} и замедляются остановками {{Raw Tile|≡|#FFF|#000}}. Роллеры управляются через [[Gear assembly|редукторы]], которые могут быть либо включены {{Raw Tile|☼|#FFF|#000}}, либо выключены {{Raw Tile|☼|#777|#000}}; обычно они подключены источнику [[power|питания]] {{Raw Tile|P|#0F0|#000}}. [[pressure plate|Нажимные пластины]] {{Raw Tile|^|#FFF|#000}} нужны для передачи выходного сигнала и, иногда, для работы самой схемы. Рампы вверх {{Raw Tile|▲|#FFF|#000}} и вниз {{Raw Tile|▼|#FFF|#000}} могут быть необходимы для перехода между z-уровнями или изменения скорости вагонетки; они могут быть накрыты крышей или пустым пространством {{Raw Tile|.|#0FF|#000}} при взгляде из некоторых слоёв. [[hatch|Люки]] и раздвигающиеся [[bridge|мосты]] {{Raw Tile|╬|#000|#CCC}} обычно используются для контролирования пути вагонетки. В описаниях схем даны пояснения, если они необходимы.


===Конвертер энергии в сигнал (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}}. Когда энергии нет, вагонетка останавливается на северном или южном роллере, и нажимная плита посылает сигнал выключения.


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


===Память на маятнике Ньютона (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
Строка 32: Строка 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}} и останавливается на южном, выключенном, роллере. Когда ненадолго включают южный редуктор, происходит обратная ситуация: южная вагонетка останавливается на нажимной пластине и толкает северную вагонетку на северный (выключенный) роллер — как это было в изначальном состоянии.


===Continuous roller OR===
===OR на постоянном движении (Continuous roller OR)=== <!--хз, возможно, можно перевести как-то покрасивее -->
{{diagram|spaces=yes|\
<diagram>
  ╔═╗═╗  ╔═╗═╗
  ╔═╗═╗  ╔═╗═╗
  ║ ║O║  ║ [#F0F]^O║
  ║ ║O║  ║ [#F0F]^O║
Строка 44: Строка 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's] roller OR continuously evaluates two operands via a minecart traveling counter-clockwise using principles of power transmission through single tile rollers. Should either input {{Raw Tile|☼|#0F0|#000}} or {{Raw Tile|☼|#FF0|#000}} be engaged, power {{Raw Tile|P|#0F0|#000}} is transmitted to the southernmost, S->N roller {{Raw Tile|╧|#FFF|#000}}. Although the minecart is left with diagonal velocity, walls prevent derailment. When neither input is engaged, the minecart continues over the T-junction to the east, missing the output plate {{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}}.


===Roller switched AND===
===Управляемый роллерами элемент AND (Roller switched AND)===
{{diagram|spaces=yes|\
<diagram>
   ║      ║
   ║      ║
   ╔╗    [#0F0]P[#0F0]╧╗
   ╔╗    [#0F0]P[#0F0]╧╗
Строка 55: Строка 55:
   ║║      [#F0F]^║
   ║║      [#F0F]^║
   ╚╗      ╚╗
   ╚╗      ╚╗
track  furniture}}
track  furniture</diagram>
[[User:Larix|Larix]]'s roller-switched AND takes advantage of the behavior of rollers to avoid troublesome diagonal velocity. It is potentially confusing both for the counter-intuitive direction of its rollers as well as the way that rollers respond to signals. When the minecart encounters either activated (that is, the last signal received was an '''off''') S->N roller {{Raw Tile|╧|#FF0|#000}} or {{Raw Tile|╧|#0F0|#000}}, its velocity is completely rewritten and reversed, sending it onto the alternate (clockwise) path. Should neither roller be activated (that is, the last signal received by both was an '''on'''), the track bends will be ignored and the minecart will travel directly south, over the output plate {{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>
 
Логика на основе управлении путём вагонетки (Minecart Pathing Logic, MPL), придуманная Larix, решает проблемы надёжности и скорости, свойственные многим схемам на вагонеточной логике, путём использования двойных импульсных рамп и люка, который контролирует не просто путь, но направление движения. Вагонетка, перемещающаяся по схеме, указанной на рисунке, при открытом люке (он же вход схемы) {{Raw Tile|¢|#0F0|#000}} будет двигаться по пути против часовой стрелки вне зависимости от начального направления скорости. Однако когда люк закрывается, вагонетка не может двигаться по прежнему пути и ускоряется по направлению по часовой стрелке, на выходную нажимную пластину {{Raw Tile|^|#F0F|#000}}. Она будет колебаться между крайней восточной и крайней западной рампами, пока люк не откроют, после чего продолжит движение против часовой стрелки.


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


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.
===Другие техники и логические элементы===


===Other techniques and gates===
Любой другой логический элемент можно сделать, комбинируя приведённые. NAND, например, это NOT AND; XOR — это OR AND (NOT AND). Были также придуманы и проверены схемы детектирования фронта сигнала и такта. Однако примеры сверху были выбраны из-за различия демонстрируемых ими техник. Заинтересованный читатель может исследовать данные логические элементы подробней, или даже разработать свои.
Any logic gate can be made with a combination of those shown. NAND, for instance, is NOT AND; XOR is OR AND (NOT AND). Clocks and edge detection are suggested and proven designs exist, if not on this page. But the examples above were chosen for the disparate techniques they demonstrate. The interested reader is encouraged to further research, or the design of his or her own gates.


Doors can be used to block the travel of a minecart through a circuit, or to prevent derailment, although for reliability's sake, care needs to be taken that the door cannot change state while the minecart is in motion, or it may jam on top of the minecart. [[Floodgate]]s won't jam in this fashion, although they do introduce some latency. Minecarts of multiple weights, with pressure plates that trigger only on the weight of one, may be used in certain designs; Bloodbeard's fantastically tiny [http://www.bay12forums.com/smf/index.php?topic=114923.msg3532411#msg3532411 load-adjusted memory cell] is a good exampleRollers can be used perpendicularly to a track to derail a cart and impart diagonal velocity. Switchable track stops can prevent or permit derailment. The possibilities are far from exhausted-- and that's assuming one is only interested in ''practical'' techniques.
Можно использовать [[door|двери]] для блокирования пути вагонетки или предотвращения её схода с рельс, но для надёжности схемы нужно позаботиться о том, чтобы двери не могли менять состояние, когда вагонетка движется, или дверь может заклинить, когда вагонетка проходит через неё. [[Floodgate|Шлюзы]] не имеют таких проблем{{verify}}, но у них есть небольшая задержка. В некоторых схемах можно использовать несколько вагонеток с разным весом и нажимные пластины, срабатывающие только на вес одной из них, как это сделал Bloodbeard в своей необыкновенно маленькой схеме [http://www.bay12forums.com/smf/index.php?topic=114923.msg3532411#msg3532411 ячейки памяти]. Роллеры можно располагать перпендикулярно рельсам, чтобы сводить вагонетку с рельс или придавать ей диагональную скорость. Управляемые остановки можно использовать для управления сходом с рельс. Возможные концепции ещё далеко не исчерпаны — и это только если перечислять практически применимые техники.


==Integration with other disciplines==
==Интеграция с другими принципами==
There's no reason minecart logic needs to be used in isolation. Combining it with other logical disciplines allows one to use each where it is strong, and avoid each where it is weak.
Нет никаких причин использовать вагонеточную логику отдельно от других. Объединение её с другими логическими принципами позволяет использовать сильные стороны каждой и избегать слабых.


===[[Mechanical logic]]===
===[[Mechanical logic|Механическая логика]]===
This is the most obvious choice. Mechanical logic offers the potential for incredible speed, yet requires a medium to generate useful signals or to create delay (hence, to create repeaters), and it's hard to use gear assemblies as memory cells. Minecart logic excels at precisely these tasks. Minecart-based power-to-signal and memory are tiny and fast. Minecart-based delay is precisely tunable. The superiority of minecart logic has made water obsolete for these purposes.
Самый очевидный выбор. Механическая логика предлагает потенциал для потрясающей скорости, но требует дополнительные средства для генерации сигналов или для создания задержки (чтобы создавать повторители, например); кроме того, трудно сделать память на редукторах. Вагонеточная логика превосходна именно в этих задачах. Конвертеры энергии в сигнал и память на вагонетках компактные и быстрые. Задержку в схемах на вагонетках можно точно настроить. Преимущества вагонеточной логики сделали жидкостную устаревшей для этих целей.


===[[Creature logic]]===
===[[Creature logic|Логика существ]]===
Minecart logic, particularly Larix's powerless MPL logic, has replaced creature logic as the logic-of-last-resort (for when power and fluid are unavailable) or first-resort (for when computation is desired before power can be set up or fluid accessed). However, for the borg logic hobbyist, integration with minecarts suggests interesting possibilities. It is difficult to imagine a simpler clock than a minecart with a "push always after x days" condition, and guided minecarts offer unprecedented control over the path of [[dwarf|dwarves]].
Вагонеточная логика, особенно не требующая энергии MPL от Larix, заменила логику существ в качестве логики последней надежды (когда ни энергия, ни жидкости недоступны) и в качестве первоначальной логики (когда вычисления нужны ещё до того, как можно производить энергию или иметь доступ к жидкости). Однако тем, кто увлекается борг-логикой, интеграция с вагонетками даёт интересные возможности. Сложно представить более простой тактовый генератор<!-- хз, возможно, здесь имелись ввиду просто часы -->, чем вагонетка, поставленная на "push always after x days"; кроме того, управляемые (guided) вагонетки предоставляют беспрецедентный контроль над путями [[dwarf|дварфов]].


===[[Fluid logic]]===
===[[Fluid logic|Жидкостная логика]]===
Minecart logic outperforms fluid logic sufficiently to have mostly replaced it. However, the problem of automated fluid delivery may be best solved through some fluid logic techniques, and may suggest some [[stupid dwarf trick]]s for those that want to use the fluid capacity of minecarts to compute.
Вагонеточная логика превосходит жидкостную настолько, что по большей части заменила её, однако проблему автоматической доставки жидкости обычно лучше всего решать техниками жидкостной логики. Тем не менее, при желании можно [[stupid dwarf trick|использовать способность вагонетки вмещать жидкость для вычислений]].


== See Also ==
== Смотри также ==
* BloodBeard's [http://www.bay12forums.com/smf/index.php?topic=114923.0 Minecart Dwarfputing Ideas] thread.
* [http://www.bay12forums.com/smf/index.php?topic=114923.0 Ветвь на форуме с обсуждением идей] вагонеточных вычислений от BloodBeard.
* TinyPirate's [http://youtu.be/qgfDPZbdI0A Minecart Logic 101] instructional video.
* [http://youtu.be/qgfDPZbdI0A Видеоинструкция по вагонеточной логике] для начинающих от TinyPirate.
* [[User:Larix/MPL|Powerless logic]] based on hatch-switched minecarts. [[User:Larix/MPL/2|Logic gates]] built under this design doctrine.
* [http://dwarffortresswiki.org/index.php/User:Larix/MPL Не требующая энергии логика], основанная на управляемых люками вагонетках, и [http://dwarffortresswiki.org/index.php/User:Larix/MPL/2 логические элементы на этом принципе] от Larix.


[[Категория:Логика]]
[[Категория:Логика]]
[[en:Minecart_logic]]
[[en:Minecart_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) вагонетки предоставляют беспрецедентный контроль над путями дварфов.

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

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

Смотри также