CockroachQB 0 Опубликовано: 15 августа Описание: Требуется программа для замены поврежденных охлаждающих стержней реактора из IC2. Оборудование: ПК любой конфигурации, монитор 4х6, МЭ интерфейс, трубы из EnderIO (В т.ч. OC трубы). Требования к ПО: Программа должна считывать прочность охлаждающего стержня. При падении прочности до 25%, стержень должен быть заменен новым (100% прочности) из МЭ интерфейса (При этом требуется его именно заменить, а не извлечь и поместить новый); старый стержень должен быть отправлен в МЭ интерфейс (Подключен ко всем реакторам предметными трубами), в любой свободный слот. Необходима одновременная поддержка до 50 реакторов в сети. Cхема реактора выглядит следующим образом: Реактор Так же следует учесть кейс, при котором топливные стержни отработают и покинут занятые слоты. В этом случае трубы автоматически поместят новые топливные стержни через готовую систему, но охлаждающие стержни в эти слоты попасть не должны. P.S. Все реакторы расположены на сервере, в 5 разных чанках (В чанк по 2 реактора). Перезагрузка сервера не должна ломать работу программы. P.P.S. При извлечении одного охлаждающего стержня, с поправкой на ТПС сервера произойдет неминуемый взрыв. Требование к замене охлаждающего стержня следует из этой проблемы. Связь: Писать в личку или этот топик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 16 августа 19 часов назад, CockroachQB сказал: При этом требуется его именно заменить, а не извлечь и поместить новый Не понимаю эту фразу. Извлечение старого и установка нового разве не является заменой? А вот тут противоречивые условия: 19 часов назад, CockroachQB сказал: Необходима одновременная поддержка до 50 реакторов в сети. ... Все реакторы расположены на сервере, в 5 разных чанках (В чанк по 2 реактора). Для устойчивой работы управляющий компьютер должен находиться в чанке с реакторами. Иначе может оказаться, что чанк с реактором загрузится, а с компьютером — нет. А когда загрузится чанк с компьютером, реактор к тому времени может уже взорваться или даже уничтожить компьютер в соседнем чанке. Или одновременная загрузка чанков гарантирована? 19 часов назад, CockroachQB сказал: При извлечении одного охлаждающего стержня, с поправкой на ТПС сервера произойдет неминуемый взрыв. Требование к замене охлаждающего стержня следует из этой проблемы. А тут снова что-то говорится про замену. Требуется пояснение. И почему взрыв неминуем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CockroachQB Автор темы 0 Опубликовано: 16 августа (изменено) 14 минуты назад, eu_tomat сказал: Не понимаю эту фразу. Извлечение старого и установка нового разве не является заменой? Замена есть наведение на слот реактора с предметом в руке и последующим кликом. В данном случае предмет заменяется предметом в руке. В случае если сначала извлечь предмет, то перед помещением следующего схема дестабилизируется, и с учетом просадок по ТПС на сервере, нагрев реактора сразу улетит в предел, последует взрыв. Т.е. есть буквально два тика на загрузку пустого слота, причем это распространяется не на одну загрузку, но и на все последующие. P.S. Если замена невозможна, то необходимо отключать реактор на момент извлечения стержней. 14 минуты назад, eu_tomat сказал: А вот тут противоречивые условия: Для устойчивой работы управляющий компьютер должен находиться в чанке с реакторами. Иначе может оказаться, что чанк с реактором загрузится, а с компьютером — нет. А когда загрузится чанк с компьютером, реактор к тому времени может уже взорваться или даже уничтожить компьютер в соседнем чанке. Или одновременная загрузка чанков гарантирована? В центре базы стоит загрузчик чанков, прогружает 5х5. Так же персонаж прогружает 5х5 чанков, думаю этого достаточно. Так же прошу учесть то, что охлаждающие стержни стакаются, так что в руку они берутся по 64шт. Но можно обойти через костыли уже в игре, не сильно критично. Изменено 16 августа пользователем CockroachQB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 16 августа 19 минут назад, CockroachQB сказал: Замена есть наведение на слот реактора с предметом в руке и последующим кликом. В данном случае предмет заменяется предметом в руке. У роботов и компьютеров нет такой же руки как у игрока. Получится лишь сначала вытащить предмет из слота, а затем поместить в этот слот другой предмет. Потребуется или укладываться в реакторный такт, либо приостанавливать реактор на время замены. 21 минуту назад, CockroachQB сказал: В случае если сначала извлечь предмет, то перед помещением следующего схема дестабилизируется А как происходит замена отработанного топлива? Трубы, отвечающие за пополнение реактора топливом, привязаны к конкретным слотам, или суют его в первую свободную ячейку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CockroachQB Автор темы 0 Опубликовано: 16 августа 28 минут назад, eu_tomat сказал: У роботов и компьютеров нет такой же руки как у игрока. Получится лишь сначала вытащить предмет из слота, а затем поместить в этот слот другой предмет. Потребуется или укладываться в реакторный такт, либо приостанавливать реактор на время замены. Да, похоже что придется приостанавливать реактор. Можете ли выдать прогноз по длительности остановки, необходимой для замены охл. стержней? 28 минут назад, eu_tomat сказал: А как происходит замена отработанного топлива? Трубы, отвечающие за пополнение реактора топливом, привязаны к конкретным слотам, или суют его в первую свободную ячейку? Трубы суют в первую свободную ячейку новое топливо, без привязки к конкретным слотам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 16 августа 30 минут назад, CockroachQB сказал: Можете ли выдать прогноз по длительности остановки, необходимой для замены охл. стержней? На одну замену требуется 2 такта. И по такту на включение и выключение. Если сервер не лагает, а реактор один, то можно синхронизироваться на начало его такта, который длится одну секунду (20 майнкрафтовких тактов) и спокойно заменить до 9 элементов даже без останова реактора и без потери в энергогенерации. Не помню, можно ли успеть заменить 10. На лагающем сервере, где игроками активно используются роботы и компьютеры, проблема будет заключаться в вечно запаздывающем возврате управления компьютеру. И какова будет суммарная длительность операции замены стержней, заранее сказать невозможно. В самом плохом случае может возникнуть ситуация, когда замены потребуют все охлаждающие ячейки во всех реакторах, и тогда компьютер попросту не успеет заменить их все. И прежде чем браться за эту задачу, стоит оценить, насколько она осуществима хотя бы в теории. А в теории на нелагающем сервере для безопасной замены всех охлаждающих ячеек во всех 50 реакторах потребуется 95 секунд. При этом типичное время жизни охлаждающих ячеек в этой схеме составляет всего 105 секунд. Получаем запас времени 10 секунд. То есть теоретически такая схема работы в целом жизнеспособна. Но это минимально необходимое время с учётом того, что компьютер не проверяет состояние ячеек, а действует исключительно на основе своих прогнозов. А если проверять износ ячеек, то потребуются ещё 2.5 секунды, и от запаса времени останется всего 7.5. Пока будет выполнен весь цикл замены ячеек, и мы закончим обработку последнего реактора, оставшийся ресурс охлаждающих ячеек в первом составит 7%. А по условию задачи замена требуется при остатке ресурса 25%. Выходит, это условие невыполнимо даже в теории. Тогда износ ячеек можно не проверять, а сразу заменять все подряд; так мы сэкономим немного времени. Тогда износ ячеек составит 9% — это немного лучше, но всё равно не сходится с условиями задачи. На лагающих серверах время замены стержней может увеличиться в несколько раз, всё зависит от текущей игровой ситуации. Запаса времени у нас, скорее всего, не будет вовсе, и некоторые из реакторов потребуется держать постоянно остановленными, без энергогенерации. Вот такая получилась грустная арифметика. А кроме прочего у нас ещё и трубы норовят засунуть топливо в свободную ячейку, что осложняет задачу ещё сильнее: 1 час назад, CockroachQB сказал: Трубы суют в первую свободную ячейку новое топливо, без привязки к конкретным слотам. Это значит, что трубам доверять столь тонкую задачу нельзя. Компьютер легко справится с ней, но, конечно же, при наличии времени, которого ему и так мало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LucianGod 0 Опубликовано: 17 августа (изменено) @eu_tomat А как насчет многопоточности ? Если запускать хотя бы в двух потоках по 25 ректоров. Как я понимаю, потоки == процессы в моде. И они должны работать асинхронно. Приведет это к таким же задержкам ? Или под капотом, они выполняются все аля v8 схеме ? Мне бы хотелось знать оценку рентабельности. update: По подсчетам, тактов для обработки ~25 реакторов должно быть хватать с запасом, поэтому кол-во может варьироваться. update 2: Нельзя согласно этому треду Изменено 17 августа пользователем LucianGod Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 17 августа 20 минут назад, LucianGod сказал: А как насчет многопоточности ? Если запускать хотя бы в двух потоках по 25 ректоров. Как я понимаю, потоки == процессы в моде. И они должны работать асинхронно. Приведет это к таким же задержкам ? Проблема в том, что потоки на одном компьютере не выполняются параллельно. Хочешь относительной асинхронности — ставь больше компьютеров. Кстати, а что мешает установить по компьютеру в каждом чанке? 27 минут назад, LucianGod сказал: По подсчетам, тактов для обработки ~25 реакторов должно быть хватать с запасом, поэтому кол-во может варьироваться. А на чём основаны подсчёты? Теоретически можно больше 50 реакторов обслужить с запасом, но для конкретного сервера в конкретный период времени нужны замеры. Ещё одно важное замечание: на лагающих серверах приоритетной задачей компьютера является не замена компонентов, а отключение реактора. А когда реакторов много, то начинать отключение реакторов приходится сильно заранее, что приводит к их простою. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LucianGod 0 Опубликовано: 17 августа 6 минут назад, eu_tomat сказал: А на чём основаны подсчёты? Теоретически можно больше 50 реакторов обслужить с запасом, но для конкретного сервера в конкретный период времени нужны замеры. Все согласно вашим подсчетам, из сообщения выше. 20 тактов = 1 секунда, по такту на включение выключение, по ~36 на изъятие\вставку новых элементов. итого ~38 тактов на реактор * 50 / 20 = 95 секунд. на смену всех. Соответственно если система работает на 25 реакторов, то затраты на время будут в 2 раза меньше. +- затраты лагов сервера. Насчет больше 50 реакторов, то тут я не в курсе, но по цифрам - это почти предел. Если обрабатывать их линейно. 20 минут назад, eu_tomat сказал: Ещё одно важное замечание: на лагающих серверах приоритетной задачей компьютера является не замена компонентов, а отключение реактора. А когда реакторов много, то начинать отключение реакторов приходится сильно заранее, что приводит к их простою. Тут не вижу проблемы, если отключать реактор непосредственно перед заменой. Пока остальные работают. 26 минут назад, eu_tomat сказал: . . .Кстати, а что мешает установить по компьютеру в каждом чанке? Ограничение в кол-во функциональных блоков на юзера Ограниченная территория Однако думаю, что это не проблемы. Итого я свожу к тому, что необходимо ставить больше компьютеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 17 августа 2 минуты назад, LucianGod сказал: Все согласно вашим подсчетам, из сообщения выше. ... Соответственно если система работает на 25 реакторов, то затраты на время будут в 2 раза меньше. +- затраты лагов сервера. В том-то и дело, что лагов сервера без замеров мы не знаем. Поэтому не знаем, сможет ли их покрыть сокращение реакторов в 2 раза. 5 минут назад, LucianGod сказал: Тут не вижу проблемы, если отключать реактор непосредственно перед заменой. Пока остальные работают. Проблема в том, что при сильных лагах, пока происходит замена охлаждающих ячеек в одних реакторах, остальные могут взорваться, не дождавшись своевременной замены. 7 минут назад, LucianGod сказал: Ограничение в кол-во функциональных блоков на юзера Ограниченная территория Что за ограничения территории и функциональных блоков? Для 50 реакторов территория с функциональными блоками нашлись, а для компьютеров — нет? О чём тут вообще речь? На каком сервере такие ограничения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LucianGod 0 Опубликовано: 17 августа 33 минуты назад, eu_tomat сказал: Что за ограничения территории и функциональных блоков? Для 50 реакторов территория с функциональными блоками нашлись, а для компьютеров — нет? О чём тут вообще речь? На каком сервере такие ограничения? Я не помню, есть ли ограничения на компьютеры, я к этому. 35 минут назад, eu_tomat сказал: Проблема в том, что при сильных лагах, пока происходит замена охлаждающих ячеек в одних реакторах, остальные могут взорваться, не дождавшись своевременной замены. Да. теперь дошло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Taoshi 55 Опубликовано: 17 августа (изменено) Не будет оно работать как ожидает топикстартер, можете не браться за задачу: 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.: При одномоментной замене всех охладителей можно обойтись вовсе без контроля ОС машины, но это уже совсем другая история Изменено 20 августа пользователем Taoshi Пишу, читаю без лампадки. С планшета, да, но как мне быть? Ведь лень пароль мне в ноут вбить, вот и сижу в седом упадке с трудом свершая текст эдить :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LucianGod 0 Опубликовано: 17 августа а что если . . . Захардкодить замену стержней ? И Привязать их к времени. Иначе говоря, жестко менять стержни, по истечении времени (время определим опытным путем). Запуск реакторов делать последовательно с задержкой. 48 минут назад, Taoshi сказал: Действительно, почти предел для сервера с 3-мя компонентными шинами. Но это при условии, что ядерный реактор с картинки всё ещё поддерживает включение/выключение сигналом красного камня. В ином случае нужен не только контроллер красного камня, но и адаптер на каждый реактор. А это уже 100 устройств и минимум 2а сервера. А если память не изменяет, то интерфейс включения\выключения доступен и без редстоун сигнала (но это не точно). 50 минут назад, Taoshi сказал: 1. В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell. А работает ли транспозер стандартно на сервере? Он бы мог заменить, но выставлено условие замены трубами, а у них нет такого функционала. Думаю, что можно заменять и МЭ сетью, а не трубами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 18 августа 1 час назад, Taoshi сказал: В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell. А что за отдельный механизм? Как он работает? Почему у него получается работать с конденсаторами и что ему мешает работать с охлаждающими капсулами? 1 час назад, Taoshi сказал: выставлено условие замены трубами, а у них нет такого функционала. Там вроде речь о другом шла: требовалось кинуть отработанную капсулу в МЭ-интерфейс, а из него уже трубы заберут куда-то. 1 час назад, Taoshi сказал: проверить 50*27(27 это среднее к-во топливных / охлаждающих стержней в реакторе, в используемой схеме 50*36) позиций за 1000 милисекунд с одного компа не удастся. Ты хочешь сказать, что на том сервере используется древняя версия OpenComputers, которая не умеет читать содержимое всего инвентаря за один такт? Тогда да, задача из ТЗ дважды нерешаемая. 2 часа назад, Taoshi сказал: К тому же бесконечное включение/выключение реактора при замене каждого стержня само по себе займёт дополнительно уйму времени А зачем включать-выключать реактор при замене каждого стержня? Разве ТЗ имело такое требование? Один раз выключили, заменили все разом и снова включили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 18 августа 1 час назад, LucianGod сказал: Захардкодить замену стержней ? И Привязать их к времени. Иначе говоря, жестко менять стержни, по истечении времени (время определим опытным путем). Запуск реакторов делать последовательно с задержкой. Захардкодить — конечно, да. Другого-то выбора всё равно нет. При столь жёстких лимитах времени компьютер только и должен делать, что непрерывно останавливать очередной реактор, выбрасывать из него все без разбора капсулы, загружать новые, запускать реактор и переходить к следующему, и так далее по кругу. Даже в этом случае мы не вписываемся в ТЗ и вынуждены выбрасывать капсулы с 9% остатком прочности, а не 25% как хочет заказчик. И это, конечно, при условии, что управляющий комп не лагает. Учитывая, что за включение реакторов отвечает компьютер, то реакторы и будут запущены с задержкой относительно друг друга. Нет смысла включать их как-то иначе. Это получится само собой. Ну, а время работы каждого реактора после замены стержней надо считать в любом случае. Точнее говоря, каждый реактор имеет дедлайн до взрыва — 105 секунд от момента последнего включения. Заменяя стержни в очередном реакторе, проверяем, укладываемся ли в дедлайн следующего с некоторым запасом времени, который зависит от лагов. Если не успеваем заменить все капсулы, то запоминаем для этого реактора количество оставшихся для замены капсул и, не включая его, переходим к следующему. В следующем цикле замены капсул продолжим заменять то, что не успели в предыдущем. И если снова не опоздаем, то сможем включить этот реактор и установить новый дедлайн. Тут особых сложностей нет кроме того, что реакторы будут иногда простаивать. И тем чаще, чем сильнее лагает управляющий компьютер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Taoshi 55 Опубликовано: 18 августа 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() Впрочем, это не более чем пример сохранившийся от давно не существующей на том сервере сборки модов, поэтому является не более чем вариантом возможной реализции без уточнений о перезапуске программы, автовключении компьютера, и внешней обвязке реактора. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 18 августа 5 минут назад, Taoshi сказал: Хочу сказать, что запрос типа getAllStacks был лимитирован временным интервалом 59 секунд. Ого! Вот это тирания на сервере! Видимо, игроки понастроили лагодромов, бессмысленно проверяющих свои сундучки каждый тик. 9 минут назад, Taoshi сказал: 6 часов назад, eu_tomat сказал: вроде речь о другом шла: требовалось кинуть отработанную капсулу в МЭ-интерфейс, а из него уже трубы заберут куда-то Прямым текстом написано В 15.08.2024 в 23:40, CockroachQB сказал: требуется его именно заменить, а не извлечь и поместить новый А на это из известных мне механизмов способен как раз транспозер. И ещё робот. Извиняюсь за длинное цитирование, но не хотелось терять контекст. Я говорил о том, что не нашёл в задании требования заменять трубами, как выходило из твоего предыдущего высказывания: 9 часов назад, Taoshi сказал: А работает ли транспозер стандартно на сервере? Он бы мог заменить, но выставлено условие замены трубами, а у них нет такого функционала. Ну, а с транспозерами всё понятно. Но про них в ТЗ тоже не было сказано ничего. Может, они на сервере заказчика нормально работают. Так что по этому пункту я бы не делал преждевременных выводов о нереалистичности задачи. 24 минуты назад, Taoshi сказал: Не имея возможности получить предварительные данные о рестарте сервера программа в энный момент времени оказывалась перед фактом отсутствия запрашиваемых методов и происходило это в рандомный момент выполнения кода, зачастую сразу же после проверки на наличие компонента реактор. Да, там самое трудное — отследить все варианты нештатного поведения после перезагрузки. Отладка сводится к тому, что надо ждать рестарта и смотреть, какие проявились новые странности, и думать не проявятся ли в будущем какие-то другие, пока не сумевшие проявиться с силу вероятностного характера. Редкостная мутотень, но такова жизнь программиста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Taoshi 55 Опубликовано: 18 августа 40 минут назад, eu_tomat сказал: Извиняюсь за длинное цитирование, но не хотелось терять контекст. Я говорил о том, что не нашёл в задании требования заменять трубами, как выходило из твоего предыдущего высказывания Неявно указано в описании: В 16.08.2024 в 01:40, CockroachQB сказал: старый <охлаждающий> стержень должен быть отправлен в МЭ интерфейс (Подключен ко всем реакторам предметными трубами), в любой свободный слот. Впрочем, можно абсолютизировать до "система извлечения охлаждающих стержней" если не придерживаться канона в ТЗ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CockroachQB Автор темы 0 Опубликовано: 18 августа Отвечая на имеющиеся вопросы: 1. Жесткой привязки к трубам нет, мне показалось это наиболее удобным вариантом. 2. Транспозер на сервере работает, можно использовать его. 3. Требование к 25% прочности стержня выставлено на веру, чтоб быть уверенным в том, что он не сломается. На деле требование только в том, чтоб стержень покидал реактор до поломки. 4. Все охлаждающие стержни ломаются равномерно во всех реакторах. Более того, я готов переработать существующую систему под все требования для работы программы (Отказаться от труб, интерфейсов и т.п.). Ну и немного опишу саму идею программы: Схема является нестабильной, отчего использовать ее можно только на лазуритовых конденсаторах, которые тратят внушительное количество лазурита. Так как сервере есть механизм для починки стержней, возникла идея реализовать реактор на нестабильной схеме без затрат миллионов лазурита используя охлаждающие стержни на 1080К (108000 прочности). Схема работает на 16х МОКС топливных стержнях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 19 августа @Taoshi Ты не ответил на вопрос. Поясни, что ты имел в виду: В 18.08.2024 в 00:57, Taoshi сказал: В ТЗ указана задача "заменить", для неё существует отдельный механизм, правда работающий с 100к lzh-конденсаторами, а не с 60к coolant cell. Что за отдельный механизм? Как он работает? Почему у него получается работать с конденсаторами и что ему мешает работать с охлаждающими капсулами? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах