Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
XyFreak

Big Reactors Grid Control

Recommended Posts

2 hours ago, XyFreak said:

Ok first of all I'm jelly at your 230fps in minecraft (and a texture pack). Just letting you know :P

Next I'm really really confused about this whole thing not starting up. How did you set up your computer (aka what components are in there) and are you using a modpack? If I'd have to guess it's the direwolf20 one but...just making sure.

 

-XyFreak

haha my fps is only a peek normal it's around 150 +- 10 fps xD

and yes we play direwolf20 at 1.10.2 

Link to post
Share on other sites

i get the same error like MaSch

After the turbines stop callibrating in a feaw minutes the game crashes ( i think that the problem is with turbinecontrol not reactorcontrol .. because it is working while turbine are calibrating and no crash until they're done) 

i have direwolf20 1.10.2 with a few extra mods (mekanism, roots, enderzoo) 

and error is similar

Description: Exception in server tick loop

java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)
    at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
    at java.util.AbstractCollection.toArray(AbstractCollection.java:141)
    at com.google.common.collect.ImmutableSet.copyOf(ImmutableSet.java:374)
    at elec332.core.grid.internal.GridEventInputHandler.tickEnd(GridEventInputHandler.java:91)
    at elec332.core.grid.internal.GridEventHandler.serverTick(GridEventHandler.java:49)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_433_GridEventHandler_serverTick_ServerTickEvent.invoke(.dynamic)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:185)
    at net.minecraftforge.fml.common.FMLCommonHandler.onPostServerTick(FMLCommonHandler.java:261)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:657)
    at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:240)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:471)
    at java.lang.Thread.run(Thread.java:745)

 

i removed deepresonance form the pack  and it still errors out

Description: Exception ticking world

java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)
    at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
    at net.minecraft.server.management.PlayerChunkMap.func_72693_b(SourceFile:114)
    at net.minecraft.world.WorldServer.func_72835_b(WorldServer.java:222)
    at WorldServerOF.func_72835_b(WorldServerOF.java:37)
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:698)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:613)
    at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:240)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:471)
    at java.lang.Thread.run(Thread.java:745)

The opencomputer  computer is tier 3 server with a tier 3 video/cpu/hdd/data card, 4 x tier 3.5 memory, internet and network card and the script doesn't autostart if i add it in rc.cfg (enabled = {brgc_reactor, brgc_turbines}) i have to start them manually using " brgcctrl service all start" 

 

 

 

Link to post
Share on other sites

It take longer to crash without deepresonance .. but it still does. 

Also i have this in server console "CONSOLE: thread/WARN] [OpenComputers]: A component of type 'br_turbine' disappeared (b8fa7f53-2cb0-4ae6-911a-a11da367a2fc)! This usually means that it didn't save its node." could this have something to do with it?

Link to post
Share on other sites

@vik2or Thanks for your input. As I said before the lua program should not be able to kill the server.

We're either triggering a bug with OpenComputers or a bug with Extreme Reactors.

I'm going to have a look once I'm done refacturing/rewriting some compoments of BRGC that'll allow you to include external storage devices into your grid.

If I have a surefire way to reproduce it (I think with your input it can be done quite easily...I hope...) I'll also file a few bug reports or support already existing ones to the best of my abilities.

 

I'm aware of the autostart issues and the config issues btw. In my latest dev snapshot the config issues are pretty much gone and the code is a lot simpler. Give me a week or so to get everything polished up.

 

-XyFreak

Link to post
Share on other sites

Hi guys,

it's time for a status update.

Obviously I didn't manage to get everything ready within the timeframe I hoped to do it. So instead I'll post a quick status update.

 

I'm done refactoring BRGC. BRGC is now caching and calculating a lot more in advance. The caching allowed me to eliminate a LOT of API calls into Big Reactors/Extreme Reactors which should lower the overall load of your actual game server a bit. While this shouldn't matter in practice (it's not like it had any noticable impact to begin with) I'm hoping that this will stop triggering those server crash bugs. Anyways... the code is a bit nicer now and easier for me to work with/extend.

The grid controller for when you have capacitors attached is about half way done (maybe more). It already works perfectly fine if you don't consume more energy than you can produce at your optimal max. This includes running turbines and passive reactors simultaneously. Turbines are always prefered to passive reactors.

So here's what's left:

  • Balance the "overload" in case you need more energy than you can produce at optimal levels (LOAD)
  • Figure out a good way to decide when to switch over to LOAD mode. I'm currently considering a dynamic threshold based on how much more RF/t you're consuming in relation to how much you can produce at an absolute max. More on that later.
  • Write a small GUI for the grid controller itself (It'll be a widget like what I did for the reactors/turbines)
  • Finally have the GUI automatically refresh its components. Right now you need to restart the GUI for additional turbines/reactors to show up.

 

If you're not interested in the ideas and are just here for the status update, you can skip to the end of the post now ;)

 

Now regarding the LOAD mode switch ideas.

The main idea behind energy storage is to buffer energy when you don't need much of it and to provide energy when you need more than you can provide. BRGC takes this one step further and tries to optimize your energy production at all times so it is as efficient as possible at any given time while providing enough power for whatever you want to power with it. If this means your reactors have to run inefficiently in order to generate enough power, then that's what it's going to make your reactors do.

This is perfectly fine if you don't have (a lot of) energy storage because you're most likely going to run out of power very quickly if your reactor is not producing enough energy. This may not be fine if you have a large energy storage which can buffer extreme energy needs over a short or even extended period of time (e.g. you're creating a new RFTools World with large draconium ore spheres). So I've got to figure out a way to decide when it is ok for BRGC to abandon efficiency in order to make sure your energy grid stays saturated when more energy is required than your grid can generate efficiently / generate at all.

The simplest idea is: Choose a threshold. If energy falls below that point, start generating more energy. This is what BRGC does right now with passive reactors in AUTO mode. If more energy is required than the reactor can provide efficiently and if the internal storage falls below 50% it will start squeezing more power out of the reactor at the cost of efficiency. I never felt that this solution is very satisfying and it's really bad when you add larger storage. If you have 1TRF energy stored and you're consuming 10kRF/t more than you can produce, having the reactors run inefficiently is a waste of fuel. However if you only have 10 MRF storage, then 50% might be way too low. Having the user set this value means that there is manual configuration required which I want to avoid at all cost (it needs to be Plug&Play).

Idea 1: Use a percentage based thershold based on how much more energy is consumed than can be generated. E.g.: Threshold = 0.0001 * more energy consumed then generated. This is really easy to implement and automatically adapt to whatever setup you have. It does require a lot of experimentation though.

Idea 2: This is a refinement of Idea 1. Calculate how long the energy storage is going to last at the current energy consumption. If the energy storage is going to be depleted within an hour (real time) then produce more energy.

Both of this ideas are easy to implement but have the disadvantage that they can (and will) overreact pretty easily when large power spikes occur.

Idea 3: Use idea 2. Instead of using the current power consumption, use a weighted average that is only slowly approaching the current value. This will prevent the controller from overreacting when it's not neccessary but it will also prevent it from doing so when it is neccessary.

Idea 4: Use idea 3 but make the weight based on how much energy (percentage based) is left in storage. This will prevent overreactions when the storage is full and may allow it when storage is empty.

 

If you're still reading this ( ;) ) then please let me know what you think and what you want to see implemented.

I've got some time off from work at the end of this month/start of the next month so I'll be getting things done then for sure.

 

-XyFreak

Link to post
Share on other sites

I usually use a kinda low threshold on other power gen like 30%-40% or so ... (especially on IME diesel generators, because i don't wanna hear them going on and off constantly), and because the active extreme reactor take a while to start, i would go with idea 4 (don't really want the reactor to start and waste fuel while it gets the turbines to optimal rpm, just to fill 10% of battery and then stop or waste power. When it starts i want it to work for a while).

btw, is the new code available to download? on your site it still says ver,4.1.

As a side note, could you make so that if you have multiple gpus/screens  to show the gui on all so i can select one to show detailed reactor inf and another or 2 to show detailed turbine info or other combinations. I looked through the gui code a bit, you do search for a gpu/screen to bind them, but i'm new to lua and opencomp.

Link to post
Share on other sites

@vik2or

Thanks for your input. I talked about this with a friend yesterday and we also came to the conclusion that idea 4 is the best way to do it without doing any statistical analysis (which would be way over the top).

The gui is currently set up in a way where it will bind an unused monitor to an unused gpu if it finds multiple of them. So if you have two monitors/gpu then it will draw on the second one and fall back to shell on your "primary" monitor. Unfortunately I never intended libGUI to draw on multiple screens so I would have to rework parts of that. It's propably not gonna happen, sorry.

The code is not done yet btw. There's still some stuff to do.

Link to post
Share on other sites

Hey, just wondering if anyone has any advice...

This is what I setup.

1 reactor, with two 80 blade turbines attached, the reactor can output 20% more steam than I need to run the two turbines at 1600RPM, and the capacitors have billions of RF to fill.

What happens, is the turbines get set to 800RPM instead of 1600RPM and the reactor gets under utilized.

What do I need to do?
1. Just attach the reactor to the computer?
2. Attach the Reactor and Turbines?
3 or just Turbines?

I simply want the reactor to run at optimal to feed the turbines the steam required to run at 1600RPM / optimal power output.
I'd like the option to simply manage the on/off myself with perhaps another computer managing the switch based on the capacitor capacity, or at least to be able to say, I don't care if my caps are full, I just want optimal turbine output.

TIA.

 

 

Link to post
Share on other sites

@sedstr

Do both turbines get set to 800ish RPM? If so, can you make sure the controller managed to calibrate your reactor correctly? As in: what steam inputs are your turbines set to and how much steam is actually produced by the reactor.

For the usual setup you are required to connect both turbines and reactor so the controller knows how much steam it has to produce (i need to optimize that code a "bit").

What YOU want is propably:

  1. Connect the reactor only
  2. Do NOT start the turbine controller
  3. Manually set the "steamtarget" to 4000 with "brgcctrl steamtarget 4000"

The thing where you want to switch on/off the turbines based on capacity is going to be implemented in the next release. If you really want to do it yourself you don't need another computer to do it. Just make sure you don't start the turbine controller and do it on the same computer as you are running brgc. Should work just fine AND you can hook into the reactor api to set the steamtarget to lower the reactors output or shut it down if you turn off turbines.

local reactor_api = require("brgc/reactor_ctrl")
reactor_api.setSteamProductionTarget(4000)

 

Link to post
Share on other sites

Well the reactor outputs 3.53 B/t, which is obviously not 4 B/t.

What I'd like to know is whether the actual generation rate is too low (e.g. the steam tank in the reactor being empty) or if the steam isn't transfered fast enough.

I don't know how fast RS can transfer liquids so...

 

There's also a possibility that the energy extraction from the turbines to the capacitors is too low and the controller adjusts the output.

Link to post
Share on other sites

I can't install it!

Error:

/home # brgc_install.lua

/lib/process.lua:61 attempt to index a nil value:

stack traceback

          /lib/process.lua:61: in function </lib/process.lua:47>

         (...tail calls...)

         [C]: in funktion 'xpcall'

         macine:752: in function 'xpcall'

         /lib/process.lua:84: in funktion </lib/process.lua:80>

/home #

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.