Перейти к содержимому
  • 0
Teen_Romance

Замена конденсаторов в реакторе

Вопрос

Решил я тут попробовать написать программу для авто замены лазуритовых конденсаторов в реакторе. Выходит пока что не очень. Пока конденсаторы меняются, реактор успевает нагреться на 600 единиц. Я пролистал тему про "Очень много электричества" тут на форуме и не нашел ничего значительного. Я пробовал просто с транспозером в один сундук выкладывать конденсаторы, а из второго брать. Собственно вопрос: есть ли возможность менять их, не выключая реактор? Может какие то методы быстрее других? Может методы транспозера медленнее работает, чем например методы сундука для трансфера вещей или еще какие то тонкости есть? Или это вовсе невозможно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Впринципе можна менять конденсаторы через метод из openPeripheral.swapStacks. Просто нужно будет иметь в реакторе 1 пустую клетку. Всегда туда ложить целый конденсатор и потом менять его с поломаным. В этом случае реактор никогда не останется без конденсатора и можна будет заменять их не офая реактор. 

Второй способ вынимать стержни урана (моха) которые охлаждает данный конденсатор. В этом случае отключение реактора будет точечное и не сильно будет влиять на общую прыбыль. 

Изменено пользователем whiskas

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, Teen_Romance сказал:

есть ли возможность менять их, не выключая реактор? Может какие то методы быстрее других?

Самое значимое из темы "Очень много электричества":

  • Быстрее транспозера ничего пока не придумали.
  • Возможность менять конденсаторы, не отключая реактор, имеется. Но универсальный рецепт отсутствует.

Остальная информация менее значима.

 

7 часов назад, Teen_Romance сказал:

Я пролистал тему про "Очень много электричества" тут на форуме и не нашел ничего значительного.

Что для тебя является значительным в контексте этой темы?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

Что для тебя является значительным в контексте этой темы?

Собственно любая информация о возможности менять конденсаторы без остановки, будет значимой. Про транспозер я понял. Значит его оставляю)
Если возможность менять конденсаторы есть, это уже радует. Но не совсем понятно, что значит "универсальный рецепт отсутствует"?
Вот пример самой простой программы для замены конденсаторов:
 

Скрытый текст

local sides = require("sides")
local tr = require("component").transposer
local middleColumn = {5,14,23,32,41,50}
local leftColumn = {2,11,20,29,38,47}
local rightColumn = {8,17,26,35,44,53}

function replaceCondensers()
    local slot = 1
    for _, v in pairs(middleColumn) do
        tr.transferItem(sides.up,sides.south,1,v,slot)
        tr.transferItem(sides.west,sides.up,1,slot,v)
        slot = slot + 1
    end
    for _, v in pairs(leftColumn) do
        tr.transferItem(sides.up,sides.south,1,v,slot)
        tr.transferItem(sides.west,sides.up,1,slot,v)
        slot = slot + 1
    end
    for _, v in pairs(rightColumn) do
        tr.transferItem(sides.up,sides.south,1,v,slot)
        tr.transferItem(sides.west,sides.up,1,slot,v)
        slot = slot + 1
    end
end

function run()
    while true do
        if tr.getStackInSlot(sides.up,23).damage > 1000 then
            replaceCondensers()
        end
    end
end

run()

 

Самый простейший алгоритм: достать и вставить. Но все равно не достаточно быстро:( Схема на обычных урановых стержнях с тремя столбиками конденсаторов. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Цитата

менять конденсаторы без остановки

В чем проблема остановить реактор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
59 минут назад, prop сказал:

В чем проблема остановить реактор?

В том, что пока он остановлен, он не работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, Teen_Romance сказал:

В том, что пока он остановлен, он не работает

Ну ладно.

 

Скрытый текст

Если потребляемая энергия не равна производимой, то downtime в пару секунд не должен положит систему, нужны подробности.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, prop сказал:

Если потребляемая энергия не равна производимой, то downtime в пару секунд не должен положит систему, нужны подробности.

Нет никаких проблем с тем, чтобы остановить реактор. Просто менять конденсаторы не останавливая реактор, конечно же эффективнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

теоритически можно менять конденсаторы без нагрева реактора в определённый момент времени

но есть маленькая проблема - низкий TPS на сервере + лаги

в итоге получаем включенный реактор без теплопоглатителя с вероятностью взрыва

 

выключение реактора и замена конденсатора много времени не занимает,

да энергии чуть меньше расчётной, но зато это безопасно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, serafim сказал:

теоритически можно менять конденсаторы без нагрева реактора в определённый момент времени

Да, я понимаю риски, но способ узнать все равно хочется. Теоретически. Значит на практике никто не проверял? И как узнать этот определенный момент?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно взять и написать свой мод, который решает эту проблему.
Direwolf20 в Твиттере: «@voxcpw Did you try open computers? Look at the transposer. https://t.co/ZncwDB4yPn» / Твиттер (twitter.com)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, prop сказал:

Можно взять и написать свой мод, который решает эту проблему.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, Teen_Romance сказал:

не совсем понятно, что значит "универсальный рецепт отсутствует"?

Об этом выше уже упомянул @serafim :

3 часа назад, serafim сказал:

есть маленькая проблема - низкий TPS на сервере + лаги

в итоге получаем включенный реактор без теплопоглатителя с вероятностью взрыва

Но с этим вроде как разобрались:

3 часа назад, Teen_Romance сказал:

Да, я понимаю риски, но способ узнать все равно хочется. Теоретически. Значит на практике никто не проверял? И как узнать этот определенный момент?

На практике проверял я. Момент узнать можно.

 

Ты в своей программе уже выполняешь проверку tr.getStackInSlot(sides.up,23).damage > 1000. И если будешь сравнивать значение прочности с полученным на предыдущем шаге, ты поймаешь тот майнкрафтовский тик, в который был выполнен реакторный тик конкретно этого реактора. Следующий реакторый тик повторится ровно через 19 майнкрафтовских тиков. И так далее с интервалом 20 тиков, пока чанк не перезагрузится. После перезагрузки чанка потребуется синхонизироваться заново. За 19 тиков теоретически можно выполнить 9 обменов конденсаторов. Или даже 10 обменов, если отказаться от постоянного чтения запроса прочности конденсатора.

 

Но всё это актуально, если нет лагов. Даже на ненагруженном сервере иногда случаются микролаги, и в запасе оказывается не 19 тиков, а всего 18. Да и транспозер также может отработать не за положенный тик, а за два. А на лагающем сервере вообще может потребоваться несколько тиков.

 

4 часа назад, serafim сказал:

выключение реактора и замена конденсатора много времени не занимает,

да энергии чуть меньше расчётной, но зато это безопасно

К сказанному добавлю, что короткое отключение реактора в правильно выбранный момент и вовсе не приводит к снижению выработки энергии. Главное, держать реактор включенным в момент реакторного тика. А в течение остальных 19 тиков реактор можно держать выключенным, без конденсаторов и топлива. Такова механика.

 

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

 

Но нужно помнить, что все эти лишние включения-выключения создают нагрузку на сервер. Как, собственно, и непрерывная проверка износа конденсатора также нагружает сервер.

 

Следующая идея, которая поможет успешно решить задачу: слона надо есть по частям. То есть, не надо пытаться между реакторными тиками поменять сразу все конденсаторы. Схема с тремя столбиками конденсаторов выдаёт 9856 hu/s. Ёмкость же лазуритового конденсатора составляет 100k hu. Это значит, что замена конденсатора требуется в среднем один раз в 100000/9856 = 10.146 секунд. За это время пройдёт 10 реакторных тиков. В идеале реактор будет требовать внимания один раз в 10 секунд. Но такое планирование требует серьёзно расшевелить мозги, да и алгоритм может оказаться тяжеловатым для сервера.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, eu_tomat сказал:

реакторный тик

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, NEO сказал:

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

Реактор производит вычисления с компонентами один раз в секунду. Это событие можно назвать реакторным тиком. Можешь предложить лучший термин.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А компоненты ломаются до генерации энергии или после?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, hohserg сказал:

А компоненты ломаются до генерации энергии или после?

Компоненты ломаются во время реакторного тика до генерации энергии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, eu_tomat сказал:

Реактор производит вычисления с компонентами один раз в секунду. Это событие можно назвать реакторным тиком. Можешь предложить лучший термин.

 

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

 

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

Познавательно выходит. Забыл про этот кусок кода:

if (this.updateTicker++ % this.getTickRate() != 0) {
return;
}

Таки да.

Интересный момент, всякий раз updateTimer инициализируется не нулем, а псевдослучайным числом в диапазоне от 0 до 20. Из этого следует что первый реакторный тик случайно происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, NEO сказал:

Забавно выходит

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

 

Практически все первые проверки той или иной идеи микроконтроля я выполняю вручную. Благо, для этого не требуется высокая скорость. Главное, попадать в такт процессам реактора. Да и это не всегда требуется.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще хотелось бы узнать полную картину процесса, что происходит во время замены и почему.

 

Есть ли смысл поменять пороговое при котором происходит замена конденсаторов, почему именно 1000? 

Может из-за того, что это значение слишком мало в процессе замены, конденсаторы, которые меняются последними успевают сломаться и из-за этого происходит нагрев реактора?

И тогда есть два гипотетических решения:

1)Поиграться с константой

2)Использовать второй транспозер, который будет менять конденсаторы с конца

 

Изменено пользователем prop

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
11 минуту назад, prop сказал:

Есть ли смысл поменять пороговое при котором происходит замена конденсаторов, почему именно 1000? 

Конденсаторы ломаются от 0 до 10000, где 10000 это уже сломанный конденсатор и он пропадает. 1000 указана для теста, чтобы долго не ждать.

12 минуты назад, prop сказал:

Использовать второй транспозер, который будет менять конденсаторы с конца

Я так понимаю, ты неосознанно намекаешь на многопоточность, но к сожалению нормальной многопоточности, в прямом понимании этого термина в OC вроде как нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...