Scrap Mechanic

Scrap Mechanic

评价数不足
Scrap Mechanic - основы логики (Часть 1)
由 Insane Engineer 制作
В этом руководстве будет подробно разобраны основы логических элементов, а также и математические методы расчёта различных устройств.
2
   
奖励
收藏
已收藏
取消收藏
Базовые логические элементы
Всем привет. Думаю многие хотели разобраться в логических элементах, а также в методах постройки сложных механизмов на их основе. Итак, начнём!

В отличии от большей части гайдов по этой теме мы будем изучать азы с теории, а именно булевой алгебры, то есть в этой статье будет много (реально много) математики, но не страшной, ведь булева алгебра о "0" и "1", и следовательно складывать и умножать мы будем именно их. Ну что же, приступим.

Логический элемент И (AND):

Как видно из картинки: выполняет логическое умножение
Y = X1*X2
, а так как мы работаем с "0" и "1", то и результат будет либо "0", либо "1". Также на рисунке показана его таблица истинности (состояние выхода в зависимости от состояний входов), из неё следует, что "1" будет тогда и только тогда, когда на обоих входах "1". Аналогичную ситуацию видим и в игре:


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

Логический элемент ИЛИ (OR):
Данный логический элемент выполняет логическое сложение, но с одним "НО", если сложить "1" и "1", то получится не "2" (а в двоичном виде: "10"), а "1". В остальном - это обычное сложение "0" и "1":
Y = X1+X2
Ну и его обозначение + таблица истинности:


Из игры в этот раз скриншота не будет (я ленивая задница тут всё довольно просто).

Логический элемент НЕ (NOT):
В игре его нет, но для полного понимания темы его необходимо рассмотреть. Элемент НЕ можно изобразить как инвертор, а если ещё применить математику, то как знак "-". В булевой же алгебре используют немного иное обозначение, а именно верхнее подчёркивание:


Немного о логических элементах в игре
В Scrap Mechanic логические элементы могут иметь входов от 1 до какого-то большого предела (он реально большой и нас не интересует). И следовательно вышеприведённые формулы увеличиваются в размерах, например для 5-входовго логического И получим:
Y = X1*X2*X3*X4*X5.
Аналогично это работает и с элементом ИЛИ.
Про элементы И-НЕ (NAND), ИЛИ-НЕ (NOR), а тем более ИСКЛЮЧАЮЩИЕ ИЛИ (XOR) мы поговорим чуть позже. Скажу одно, что первые 2 элемента являются лишь симбиозом И (ИЛИ) с элементом НЕ.
Основные законы булевой алгебры
Я не буду рассматривать прям все, так как их довольно много. На булеву математику действуют все те же правила, что были изучены в 5 - 6 классах школы. Поэтому рассмотрим самую "экзотику", так как нормально редактора формул в Steam не предусмотрено - кину одной картинкой весь список формул:


Вот, это и есть основной багаж для проектирования различных механизмов, а точнее их расчёта =) (Да-да... Математика она везде).
Таблицы истинности и карты Карно
После изучения азов можно приступить к первым расчётам =). Для этого используются таблицы истинности, а также такой приём как составление "совершенно дизъюнктивной (конъюктивной) нормальной функции" (СДНФ и СКНФ соответственно). Звучит страшно, соглашусь, но на самом деле всё просто.
На практике часто используют СДНФ, так как она составляется по лог. "1" на выходе. Чтобы не растягивать время сразу приведу пример:



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

Условие
Выход Y имеет некоторую зависимость от входов X0, X1, X2 (Пока даже я сам не знаю, так как Y был набран произвольно).

Задание
Составить СДНФ по этой таблице.

Решение
СДНФ составляется следующим образом: для каждой строки выписывается логическая функция "И" для строк таблицы, в которых "Y" равен "1" таким образом, что если Xn = 0, то данная переменная берётся с инверсией, в противном случае выписывается сама переменная:



Аналогичным образом нужно обсчитать и остальные строки таблицы, в которых Y = 1, а полученные промежуточные результаты сложить:


Далее можно упростить выражение, но делать мы этого не будем, так как это долго и нерационально, ведь есть более удобный метод упрощения полученной функции (карты Карно).

СКНФ рассматривать не будем, так как даже в универе мы ей не пользовались =).

Карты Карно

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



Выглядит страшно, но как обычно всё просто. Карты Карно - это развёртка n-мерного куба, где n - число входов. Таким образом получаем некую таблицу, где есть комбинации входных переменных. Далее эта таблица заполняется согласно таблице истинности. После заполнения приходит время упрощения СДНФ: группируются все "1", при этом число "1" должно быть кратно двум, а группа должна представлять собой прямоугольник, также группы могут пересекаться. Группы надо формировать максимально большими. Также группа может состоять только из одной "1". В нашем случае всё не очень "радужно":



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



Таким образом, функция сократилась в несколько раз без лишних усилий =). Кстати X0 у нас вообще выпал, что нормально и даже хорошо =)
ПРАКТИКА!
Ура!!!! Настало время практики. Так как логического НЕ в игре нет заместо него можно использовать либо И-НЕ, либо ИЛИ-НЕ (с одним входом).
Данный этап фактически самый простой (главное в проводах не запутаться =) ), ведь тут наша задача по формуле подобрать логические элементы и собрать схему:


ПРОВОДА =):

Ну и для пущей уверенности нарисуем схему по ГОСТ:


Вот так выглядит наша схема по российскому ГОСТ (знаю что такое оформление тут не нужно, но при построении механизмов схема на бумажке может очень сильно помочь).

Таким образом, мы прошли путь от идеи (Условия) до построения простейшего комбинационного механизма в самой игре. У меня этот процесс обычно составляет минут 5 - 7 в зависимости от сложности задачи. Кстати сразу о некоторых вопросах, если нужно иметь много выходов, то для каждого выхода карта Карно составляется отдельно, следовательно и СДНФ тоже.

Особо недоверчивые могут проверить работоспособность последней схемы в Scrap Mechanic, благо она маленькая и простая =).
Итоги
Таким образом, мы познали Дзен булевой алгебры, а также научились составлять функции логических устройств и строить по ним схемы.
Те кто дочитал до конца - молодцы, ведь по факту это всё материал второго курса технического института, хотя он и не сильно сложный.
Полезные ссылки
Человек хорошо рассказывать про карты Карно: (Если не грузится)

Статья на Хабре по картам Карно[habr.com].

А на этом всё, до новых встреч!
10 条留言
Slirzoom 4 月 30 日 上午 8:00 
кто думает как построить implies держите: (a xor b) nand b
Oureim 2022 年 3 月 13 日 下午 12:26 
Можно было объяснить проще гораздо, а так это просто урок информатики
bruhhh 2022 年 3 月 12 日 上午 7:10 
зачем так сложно, если можно просто объяснить что делает каждый гейт
DR4G0N-313 2022 年 1 月 10 日 下午 4:19 
i am a Copy And Paste merk pay me steam points to copy TANK,DOGE, or BOB
Масюнец 2022 年 1 月 5 日 上午 6:17 
мы это по информатике только проходим )
Apple. 2021 年 10 月 31 日 上午 7:47 
норм
Jen 2021 年 10 月 29 日 下午 1:55 
Вот как у тебя это получилось, я в логике шарю и нормально, но нихрена не понял, вообще
ayayay 2021 年 10 月 28 日 上午 6:08 
не я слишком тупой чтобы понять это
Prometey 2021 年 9 月 16 日 上午 2:19 
Вот если бы ты для примера написал, как построить схему, чтобы эта твоя лампочка просигналила "SOS" по нажатию на 1 единственный выключатель или кнопку, это да, это пример, а скажи на кой мне 100 кнопок, чтобы управлять 1 единственным механизмом?
Prometey 2021 年 9 月 16 日 上午 2:15 
Попытка хорошая, если бы еще были реально материалы или ссылки на них, чтобы изучить. А по таким огрызкам, трудно что то реально понять. Так же стоит вопрос в надобности подобных схем - т.к. обычно вход 1, максимум 2 (выключатель\кнопка), в то время как выходов гораздо больше (подключаемых устройств обычно много). И задача стоит не в куче кнопок, соединенных с одним устройством, а в одной кнопке, соединенной с кучей устройств, на которые должен подаваться сигнал в определенной последовательности и интервалах. В твоем примере как раз все наоборот...