76 lines
2.0 KiB
JSON
76 lines
2.0 KiB
JSON
{
|
|
"version": "v0.1",
|
|
"hils": [
|
|
{
|
|
"name": "power_grid_hil",
|
|
"warmup_s": 2.0,
|
|
"init": {
|
|
"bus_voltage": 230.0,
|
|
"bus_frequency": 50.0,
|
|
"generator_power": 0.0,
|
|
"load_power": 0.0,
|
|
"grid_stable": 1,
|
|
"generator_cmd": 0,
|
|
"generator_setpoint": 0.0,
|
|
"load_demand": 500.0
|
|
},
|
|
"params": {
|
|
"nominal_voltage": 230.0,
|
|
"nominal_frequency": 50.0,
|
|
"voltage_tolerance": 10.0,
|
|
"frequency_tolerance": 0.5,
|
|
"generator_max": 1000.0,
|
|
"load_sensitivity": 0.01
|
|
},
|
|
"tasks": [
|
|
{
|
|
"type": "loop",
|
|
"name": "grid_dynamics",
|
|
"dt_s": 0.1,
|
|
"actions": [
|
|
{
|
|
"if": "generator_cmd > 0.5",
|
|
"then": [
|
|
{"set": ["generator_power", "clamp(generator_setpoint, 0, generator_max)"]}
|
|
],
|
|
"else": [
|
|
{"set": ["generator_power", "0"]}
|
|
]
|
|
},
|
|
{"set": ["load_power", "load_demand"]},
|
|
{
|
|
"set": ["bus_frequency", "nominal_frequency + (generator_power - load_power) * load_sensitivity"]
|
|
},
|
|
{
|
|
"set": ["bus_voltage", "nominal_voltage * (0.95 + 0.1 * (generator_power / max(generator_max, 1)))"]
|
|
},
|
|
{
|
|
"if": "abs(bus_frequency - nominal_frequency) < frequency_tolerance and abs(bus_voltage - nominal_voltage) < voltage_tolerance",
|
|
"then": [
|
|
{"set": ["grid_stable", "1"]}
|
|
],
|
|
"else": [
|
|
{"set": ["grid_stable", "0"]}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "playback",
|
|
"name": "load_variation",
|
|
"dt_s": 1.0,
|
|
"target": "load_demand",
|
|
"profile": {
|
|
"kind": "gaussian",
|
|
"height": 500.0,
|
|
"mean": 0.0,
|
|
"std": 50.0,
|
|
"entries": 100
|
|
},
|
|
"repeat": true
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|