Перейти к содержимому
CockroachQB

Автоматическая замена охлаждающих стержней в реакторе.

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

  • Описание: Требуется программа для замены поврежденных охлаждающих стержней реактора из IC2.
  • Оборудование: ПК любой конфигурации, монитор 4х6, МЭ интерфейс, трубы из EnderIO (В т.ч. OC трубы).
  • Требования к ПО: 
    Программа должна считывать прочность охлаждающего стержня. При падении прочности до 25%, стержень должен быть заменен новым (100% прочности) из МЭ интерфейса (При этом требуется его именно заменить, а не извлечь и поместить новый); старый стержень должен быть отправлен в МЭ интерфейс (Подключен ко всем реакторам предметными трубами), в любой свободный слот. Необходима одновременная поддержка до 50 реакторов в сети.
     
    Cхема реактора выглядит следующим образом:
    Реактор

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

    P.S. Все реакторы расположены на сервере, в 5 разных чанках (В чанк по 2 реактора). Перезагрузка сервера не должна ломать работу программы.

    P.P.S. При извлечении одного охлаждающего стержня, с поправкой на ТПС сервера произойдет неминуемый взрыв. Требование к замене охлаждающего стержня следует из этой проблемы.
     
  • Связь: Писать в личку или этот топик. 

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


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

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

Не понимаю эту фразу. Извлечение старого и установка нового разве не является заменой?

 

А вот тут противоречивые условия:

19 часов назад, CockroachQB сказал:

Необходима одновременная поддержка до 50 реакторов в сети.

...
Все реакторы расположены на сервере, в 5 разных чанках (В чанк по 2 реактора).

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

 

19 часов назад, CockroachQB сказал:

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

А тут снова что-то говорится про замену. Требуется пояснение.

И почему взрыв неминуем?

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


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

Не понимаю эту фразу. Извлечение старого и установка нового разве не является заменой?

Замена есть наведение на слот реактора с предметом в руке и последующим кликом. В данном случае предмет заменяется предметом в руке. В случае если сначала извлечь предмет, то перед помещением следующего схема дестабилизируется, и с учетом просадок по ТПС на сервере, нагрев реактора сразу улетит в предел, последует взрыв. Т.е. есть буквально два тика на загрузку пустого слота, причем это распространяется не на одну загрузку, но и на все последующие.
P.S. Если замена невозможна, то необходимо отключать реактор на момент извлечения стержней.

 

14 минуты назад, eu_tomat сказал:

А вот тут противоречивые условия:

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

В центре базы стоит загрузчик чанков, прогружает 5х5. Так же персонаж прогружает 5х5 чанков, думаю этого достаточно. 



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

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

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


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

Замена есть наведение на слот реактора с предметом в руке и последующим кликом. В данном случае предмет заменяется предметом в руке.

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

 

21 минуту назад, CockroachQB сказал:

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

А как происходит замена отработанного топлива? Трубы, отвечающие за пополнение реактора топливом, привязаны к конкретным слотам, или суют его в первую свободную ячейку?

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


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

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

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

28 минут назад, eu_tomat сказал:

А как происходит замена отработанного топлива? Трубы, отвечающие за пополнение реактора топливом, привязаны к конкретным слотам, или суют его в первую свободную ячейку?

Трубы суют в первую свободную ячейку новое топливо, без привязки к конкретным слотам. 

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


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

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

На одну замену требуется 2 такта. И по такту на включение и выключение. Если сервер не лагает, а реактор один, то можно синхронизироваться на начало его такта, который длится одну секунду (20 майнкрафтовких тактов) и спокойно заменить до 9 элементов даже без останова реактора и без потери в энергогенерации. Не помню, можно ли успеть заменить 10.

 

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

 

А в теории на нелагающем сервере для безопасной замены всех охлаждающих ячеек во всех 50 реакторах потребуется 95 секунд. При этом типичное время жизни охлаждающих ячеек в этой схеме составляет всего 105 секунд. Получаем запас времени 10 секунд. То есть теоретически такая схема работы в целом жизнеспособна. Но это минимально необходимое время с учётом того, что компьютер не проверяет состояние ячеек, а действует исключительно на основе своих прогнозов. А если проверять износ ячеек, то потребуются ещё 2.5 секунды, и от запаса времени останется всего 7.5.

 

Пока будет выполнен весь цикл замены ячеек, и мы закончим обработку последнего реактора, оставшийся ресурс охлаждающих ячеек в первом составит 7%. А по условию задачи замена требуется при остатке ресурса 25%. Выходит, это условие невыполнимо даже в теории. Тогда износ ячеек можно не проверять, а сразу заменять все подряд; так мы сэкономим немного времени. Тогда износ ячеек составит 9% — это немного лучше, но всё равно не сходится с условиями задачи.

 

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

 

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

1 час назад, CockroachQB сказал:

Трубы суют в первую свободную ячейку новое топливо, без привязки к конкретным слотам.

Это значит, что трубам доверять столь тонкую задачу нельзя. Компьютер легко справится с ней, но, конечно же, при наличии времени, которого ему и так мало.

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


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

@eu_tomat А как насчет многопоточности ? Если запускать хотя бы в двух потоках по 25 ректоров.
Как я понимаю, потоки == процессы в моде. И они должны работать асинхронно. Приведет это к таким же задержкам ?
Или под капотом, они выполняются все аля v8 схеме ? 
Мне бы хотелось знать оценку рентабельности.  

update:
По подсчетам, тактов для обработки ~25 реакторов должно быть хватать с запасом, поэтому кол-во может варьироваться. 

update 2:
Нельзя согласно этому треду

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

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


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

А как насчет многопоточности ? Если запускать хотя бы в двух потоках по 25 ректоров.
Как я понимаю, потоки == процессы в моде. И они должны работать асинхронно. Приведет это к таким же задержкам ?

Проблема в том, что потоки на одном компьютере не выполняются параллельно. Хочешь относительной асинхронности — ставь больше компьютеров. Кстати, а что мешает установить по компьютеру в каждом чанке?

 

27 минут назад, LucianGod сказал:

По подсчетам, тактов для обработки ~25 реакторов должно быть хватать с запасом, поэтому кол-во может варьироваться. 

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

 

Ещё одно важное замечание: на лагающих серверах приоритетной задачей компьютера является не замена компонентов, а отключение реактора. А когда реакторов много, то начинать отключение реакторов приходится сильно заранее, что приводит к их простою.

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


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

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

Все согласно вашим подсчетам, из сообщения выше.
20 тактов = 1 секунда, по такту на включение выключение, по ~36 на изъятие\вставку новых элементов.
итого ~38 тактов на реактор * 50 / 20 = 95 секунд. на смену всех.
Соответственно если система работает на 25 реакторов, то затраты на время будут в 2 раза меньше. 
+- затраты лагов сервера.

Насчет больше 50 реакторов, то тут я не в курсе, но по цифрам - это почти предел. Если обрабатывать их линейно.
 

20 минут назад, eu_tomat сказал:

Ещё одно важное замечание: на лагающих серверах приоритетной задачей компьютера является не замена компонентов, а отключение реактора. А когда реакторов много, то начинать отключение реакторов приходится сильно заранее, что приводит к их простою.

Тут не вижу проблемы, если отключать реактор непосредственно перед заменой. Пока остальные работают.

 

26 минут назад, eu_tomat сказал:

. . .Кстати, а что мешает установить по компьютеру в каждом чанке?

  1. Ограничение в кол-во функциональных блоков на юзера
  2. Ограниченная территория

Однако думаю, что это не проблемы. 


Итого я свожу к тому, что необходимо ставить больше компьютеров.

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


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

Все согласно вашим подсчетам, из сообщения выше.

...
Соответственно если система работает на 25 реакторов, то затраты на время будут в 2 раза меньше. 
+- затраты лагов сервера.

В том-то и дело, что лагов сервера без замеров мы не знаем. Поэтому не знаем, сможет ли их покрыть сокращение реакторов в 2 раза.

 

5 минут назад, LucianGod сказал:

Тут не вижу проблемы, если отключать реактор непосредственно перед заменой. Пока остальные работают.

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

 

7 минут назад, LucianGod сказал:
  1. Ограничение в кол-во функциональных блоков на юзера
  2. Ограниченная территория

Что за ограничения территории и функциональных блоков? Для 50 реакторов территория с функциональными блоками нашлись, а для компьютеров — нет? О чём тут вообще речь? На каком сервере такие ограничения?

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


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

Что за ограничения территории и функциональных блоков? Для 50 реакторов территория с функциональными блоками нашлись, а для компьютеров — нет? О чём тут вообще речь? На каком сервере такие ограничения?

Я не помню, есть ли ограничения на компьютеры, я к этому.
 

35 минут назад, eu_tomat сказал:

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

Да. теперь дошло.

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


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

 

Не будет оно работать как ожидает топикстартер, можете не браться за задачу:

1. В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell. А работает ли транспозер стандартно на сервере? Он бы мог заменить, но выставлено условие замены трубами, а у них нет такого функционала.

2. Так же трубам нет возможности указать слот работы, а реакторы соединены с интерфейсами именно посредством труб.

3. Количество запросов к реакторам на единицу времени ограничено (а я догадываюсь по к-ву реакторов на чанк где это). По этой причине проверить 50*27(27 это среднее к-во топливных / охлаждающих стержней в реакторе, в используемой схеме 50*36) позиций за 1000 милисекунд с одного компа не удастся.

4. К тому же бесконечное включение/выключение реактора при замене каждого стержня само по себе займёт дополнительно уйму времени, не говоря уже о задержках на активацию/деактивацию обслуживающих труб redstone сигналом. Что рушит на корню все смелые ожидания таковой возможности. Поэтому остаётся заменять охладители партиями.

 

В 17.08.2024 в 15:48, LucianGod сказал:

Насчет больше 50 реакторов, то тут я не в курсе, но по цифрам - это почти предел линейной обработки.

Итого я свожу к тому, что необходимо ставить больше компьютеров.

Действительно, почти предел для сервера с 3-мя компонентными шинами. Но это при условии, что ядерный реактор с картинки всё ещё поддерживает включение/выключение сигналом красного камня. В ином случае нужен не только контроллер красного камня, но и адаптер на каждый реактор. А это уже 100 устройств и минимум 2а сервера.

 

Как итог: Синхронная обработка - ключ к решению задачи малыми средствами. Можно проверять всего 3 охлаждающих стержня(1й с краю 2й и 3й)и заменять сразу все coolant'ы групп 1,2,3. А на подающие топливные стержни трубы подавать запирающий сигнал на время замены охладителей. Но даже в этом случае одно только включение / выключение реакторов... (даже не хочу писать об этом). Впрочем, полное время жизни центральных охлаждающих стержней составляет 178 секунд от свежих 100% до потраченных 0% прочности, или 133 секунды до 25% прочности по ТЗ. (Так же это повод не делить на 3 группы, а заменить все)

 

P.S.: При одномоментной замене всех охладителей можно обойтись вовсе без контроля ОС машины, но это уже совсем другая история

Изменено пользователем Taoshi
Пишу, читаю без лампадки. С планшета, да, но как мне быть? Ведь лень пароль мне в ноут вбить, вот и сижу в седом упадке с трудом свершая текст эдить :-)

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


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

а что если . . . 

Захардкодить замену стержней ? И Привязать их к времени. 
Иначе говоря, жестко менять стержни, по истечении времени (время определим опытным путем).
Запуск реакторов делать последовательно с задержкой.

 

48 минут назад, Taoshi сказал:

Действительно, почти предел для сервера с 3-мя компонентными шинами. Но это при условии, что ядерный реактор с картинки всё ещё поддерживает включение/выключение сигналом красного камня. В ином случае нужен не только контроллер красного камня, но и адаптер на каждый реактор. А это уже 100 устройств и минимум 2а сервера.

А если память не изменяет, то интерфейс включения\выключения доступен и без редстоун сигнала (но это не точно).
 

 

50 минут назад, Taoshi сказал:

 

1. В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell. А работает ли транспозер стандартно на сервере? Он бы мог заменить, но выставлено условие замены трубами, а у них нет такого функционала.

 

 Думаю, что можно заменять и МЭ сетью, а не трубами.

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


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

В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell.

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

 

1 час назад, Taoshi сказал:

выставлено условие замены трубами, а у них нет такого функционала.

Там вроде речь о другом шла: требовалось кинуть отработанную капсулу в МЭ-интерфейс, а из него уже трубы заберут куда-то.

 

1 час назад, Taoshi сказал:

проверить 50*27(27 это среднее к-во топливных / охлаждающих стержней в реакторе, в используемой схеме 50*36) позиций за 1000 милисекунд с одного компа не удастся.

Ты хочешь сказать, что на том сервере используется древняя версия OpenComputers, которая не умеет читать содержимое всего инвентаря за один такт? Тогда да, задача из ТЗ дважды нерешаемая.

 

2 часа назад, Taoshi сказал:

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

А зачем включать-выключать реактор при замене каждого стержня? Разве ТЗ имело такое требование? Один раз выключили, заменили все разом и снова включили.

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


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

Захардкодить замену стержней ? И Привязать их к времени. 
Иначе говоря, жестко менять стержни, по истечении времени (время определим опытным путем).
Запуск реакторов делать последовательно с задержкой.

Захардкодить — конечно, да. Другого-то выбора всё равно нет. При столь жёстких лимитах времени компьютер только и должен делать, что непрерывно останавливать очередной реактор, выбрасывать из него все без разбора капсулы, загружать новые, запускать реактор и переходить к следующему, и так далее по кругу. Даже в этом случае мы не вписываемся в ТЗ и вынуждены выбрасывать капсулы с 9% остатком прочности, а не 25% как хочет заказчик. И это, конечно, при условии, что управляющий комп не лагает.

 

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

 

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

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


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

а что если . . . 

Фактически я так и делал на сборке с gregtechнесколько лет назад. Менял все стержни с помощью ме шин, а не труб, выключая на время замены охладителей подачу топливных стержней. Но дописывать программу для вылавливания момента рестарта сервера мне было откровенно лень. А поскольку после рестарта реактор сперва отсутствовал, а потом превращался в 7 реакторов с другими адресами на время до его самосборки в монолитную структуру с опять же новым адресом, недоделанная программа без обработки таких событий не могла продолжить работу. И пару раз реактор бахнул. Не имея возможности получить предварительные данные о рестарте сервера программа в энный момент времени оказывалась перед фактом отсутствия запрашиваемых методов и происходило это в рандомный момент выполнения кода, зачастую сразу же после проверки на наличие компонента реактор. 

 

6 часов назад, eu_tomat сказал:

хочешь сказать, что на том сервере используется древняя версия OpenComputers, которая не умеет читать содержимое всего инвентаря за один такт? Тогда да, задача из ТЗ дважды нерешаемая.

Хочу сказать, что запрос типа getAllStacks был лимитирован временным интервалом 59 секунд.

 

6 часов назад, eu_tomat сказал:

вроде речь о другом шла: требовалось кинуть отработанную капсулу в МЭ-интерфейс, а из него уже трубы заберут куда-то

Прямым текстом написано

В 16.08.2024 в 01:40, CockroachQB сказал:

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

А на это из известных мне механизмов способен как раз транспозер. И ещё робот.

 

Предвосхищая возможный вопрос сразу скину то, что сохранилось от программы. Ёмкость охладителей которые использовал была 1080к. Контролировался один реактор, остальные, а их было штук 6 подключённых к фризеру, были паралельной цепью.

--nuccontrol
--1сверху-минус фризер (15) - задействовать
--2сзади - плюс фризер (15) - задействовать
--5слева - минус топливо(15) - задействовать
--0снизу - плюс топливо (0) -включить факел
local math,component,nuclear_item,error = require('math'),require('component'),{},0
local event,nuclear_scheme,iter = require('event'),{},1
local u,c,m = 'ic2stuff:hexadeca_uranium_fuel_rod','ic2stuff:coolant_cell_1080k','ic2stuff:hexadeca_mox_fuel_rod'
local depleted,vent = 'depleted','heat_vent'
--составим таблицу расположений элементов в реакторе
for f = 1,9 do
	nuclear_scheme[f]=m nuclear_scheme[f+18]=m nuclear_scheme[f+27]=m
	nuclear_scheme[f+45]=m nuclear_scheme[f+9]=c nuclear_scheme[f+36]=c
end
component.gpu.setResolution(30,15)
------------------------------------------
reFreezer = function()----заменить охладители
  component.redstone.setOutput(1,15)
  while component.reactor_chamber.getStackInSlot(14) == c do
  computer.pullSignal(0.5) end computer.pullSignal(1)
  component.redstone.setOutput(1,0)
  computer.pullSignal(1)
  component.redstone.setOutput(2,15)
  while component.reactor_chamber.getStackInSlot(14) ~= c do
  computer.pullSignal(0.5) end computer.pullSignal(1)
  component.redstone.setOutput(2,0)
  return true
end

reFuel = function()----заменить топливо
  component.redstone.setOutput(5,15)
  while component.reactor_chamber.getStackInSlot(5) == dm do
  computer.pullSignal(0.5) end computer.pullSignal(1)
  component.redstone.setOutput(5,0)
  computer.pullSignal(1)
  component.redstone.setOutput(0,15)
  while component.reactor_chamber.getStackInSlot(5) == m do
  computer.pullSignal(0.5) end computer.pullSignal(1)
  component.redstone.setOutput(0,0)
  return true
end
------------------------------------------
compareStacks=function()
error=0
	for f = 1,54 do 
		nuclear_item[f]=component.reactor_chamber.getStackInSlot(f)
		if not(nuclear_item[f].name:find('vent') or nuclear_item[f].name:find'fuel_rod' or nuclear_item[f].name:find'coolant_cell')

			--~=nuclear_scheme[f] and nuclear_item[f].name~=vent and nuclear_item[f].name~=vent
			then error=error+1
		end
	end
	return true
end
----реактор проверить целостность схемы
reactor_compare_elements=function()
	compareStacks() if error > 0 then return error end
	--если охладители изношены отправить к их замене
    if nuclear_item[14].damage > 920000 then
    	reFreezer()
    end
  compareStacks() if error > 0 then return error end
    --если топливо выгорело - заменить
    if nuclear_item[5].name:find('depleted')then
    	component.gpu.set(2,9,'depleted')
      reFuel()
    end
  compareStacks()
  return error
end
-----реактор включить выключить
nuc = function(flag)
	if flag==component.reactor_chamber.isReactorWorking() then return true
	end
	if flag then component.reactor_chamber.startReactor()
		else component.reactor_chamber.stopReactor()
	end
	--ждём 
	while(not(component.reactor_chamber.isReactorWorking() == flag))do
		computer.pullSignal(0.1)
	end
	return true
end
--реактор работать до замены охладителей
work = function()
	while component.reactor_chamber.getStackInSlot(14).damage<920000 do 
		component.gpu.set(2,11,'damage: '..tostring(component.reactor_chamber.getStackInSlot(14).damage)..'      ')
		computer.pullSignal(1)
		local output=component.reactor_chamber.getReactorEUOutput()
    component.gpu.set(2,12,'reactor output: '..tostring(output)..'     ')
	end
	return true
end
------------------------------
function main()
	---выключить реактор
	nuc(false) reactor_compare_elements()
	if error > 0 then
	  component.gpu.setResolution(80,40)
		component.gpu.set(2,2,'схема не верна')
		return "Схема не верна"
	end
	---включить реактор
	if component.reactor_chamber.getStackInSlot(14).damage < 920000 
		and component.reactor_chamber.getStackInSlot(14).label == c 
		or component.reactor_chamber.getStackInSlot(14).label:find(vent)
		then
		component.gpu.set('Охладители готовы. Запуск  '..tostring(iter))
		iter=iter+1
	  nuc(true)
	else
		component.gpu.set(2,2,'Что-то пошло не так...')
		return false
	end
	work()
	return main()
end
main()

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

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


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

Хочу сказать, что запрос типа getAllStacks был лимитирован временным интервалом 59 секунд.

Ого! Вот это тирания на сервере! Видимо, игроки понастроили лагодромов, бессмысленно проверяющих свои сундучки каждый тик.

 

 

9 минут назад, Taoshi сказал:
6 часов назад, eu_tomat сказал:

вроде речь о другом шла: требовалось кинуть отработанную капсулу в МЭ-интерфейс, а из него уже трубы заберут куда-то

Прямым текстом написано

В 15.08.2024 в 23:40, CockroachQB сказал:

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

А на это из известных мне механизмов способен как раз транспозер. И ещё робот.

Извиняюсь за длинное цитирование, но не хотелось терять контекст. Я говорил о том, что не нашёл в задании требования заменять трубами, как выходило из твоего предыдущего высказывания:

9 часов назад, Taoshi сказал:

А работает ли транспозер стандартно на сервере? Он бы мог заменить, но выставлено условие замены трубами, а у них нет такого функционала.

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

 

 

24 минуты назад, Taoshi сказал:

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

Да, там самое трудное — отследить все варианты нештатного поведения после перезагрузки. Отладка сводится к тому, что надо ждать рестарта и смотреть, какие проявились новые странности, и думать не проявятся ли в будущем какие-то другие, пока не сумевшие проявиться с силу вероятностного характера. Редкостная мутотень, но такова жизнь программиста.

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


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

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

Неявно указано в описании:

В 16.08.2024 в 01:40, CockroachQB сказал:

 старый <охлаждающий> стержень должен быть отправлен в МЭ интерфейс (Подключен ко всем реакторам предметными трубами), в любой свободный слот.

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

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


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

Отвечая на имеющиеся вопросы:
1. Жесткой привязки к трубам нет, мне показалось это наиболее удобным вариантом. 
2. Транспозер на сервере работает, можно использовать его.
3. Требование к 25% прочности стержня выставлено на веру, чтоб быть уверенным в том, что он не сломается. На деле требование только в том, чтоб стержень покидал реактор до поломки. 

4. Все охлаждающие стержни ломаются равномерно во всех реакторах.

Более того, я готов переработать существующую систему под все требования для работы программы (Отказаться от труб, интерфейсов и т.п.).

Ну и немного опишу саму идею программы:
Схема является нестабильной, отчего использовать ее можно только на лазуритовых конденсаторах, которые тратят внушительное количество лазурита. Так как сервере есть механизм для починки стержней, возникла идея реализовать реактор на нестабильной схеме без затрат миллионов лазурита используя охлаждающие стержни на 1080К (108000 прочности). Схема работает на 16х МОКС топливных стержнях.

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


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

@Taoshi Ты не ответил на вопрос. Поясни, что ты имел в виду:

В 18.08.2024 в 00:57, Taoshi сказал:

В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell.

Что за отдельный механизм? Как он работает? Почему у него получается работать с конденсаторами и что ему мешает работать с охлаждающими капсулами?

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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