Skip to content

Commit

Permalink
v1.5.0. Add new function to get basic and user meter value in STEPS k…
Browse files Browse the repository at this point in the history
…ernel and stepspy. Add additional parameter vbase to bus_name2number in case multi buses have the same bus name. Add some variables and interface for short circuit analysis.
  • Loading branch information
changgang committed Dec 22, 2020
1 parent f3f5c9c commit 787783c
Show file tree
Hide file tree
Showing 25 changed files with 1,314 additions and 128 deletions.
112 changes: 56 additions & 56 deletions code/steps/STEPS.depend

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions code/steps/header/STEPS.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,12 @@ class STEPS
char current_alphabeta;

unsigned int thread_number;
unsigned int generator_thread_number, wt_generator_thread_number, pv_unit_thread_number, energy_storage_thread_number,
load_thread_number, fixed_shunt_thread_number, line_thread_number, transformer_thread_number, hvdc_thread_number, vsc_hvdc_thread_number,
equivalent_device_thread_number;
unsigned int generator_thread_number, wt_generator_thread_number,
pv_unit_thread_number, energy_storage_thread_number,
load_thread_number, fixed_shunt_thread_number,
line_thread_number, transformer_thread_number,
hvdc_thread_number, vsc_hvdc_thread_number,
equivalent_device_thread_number;
unsigned int dynamic_model_db_size;

};
#endif // STEPS_H
5 changes: 4 additions & 1 deletion code/steps/header/apis/steps_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ EXPORT_STEPS_DLL unsigned int api_get_overshadowed_bus_count(unsigned int toolki
EXPORT_STEPS_DLL void api_show_device_data(const char* device_type, unsigned int toolkit_index=INDEX_NOT_EXIST);


EXPORT_STEPS_DLL unsigned int api_bus_name2bus_number(const char* bus_name, unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL unsigned int api_bus_name2bus_number(const char* bus_name, double vbase=0.0, unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL const char* api_bus_number2bus_name(unsigned int bus_number, unsigned int toolkit_index=INDEX_NOT_EXIST);


Expand Down Expand Up @@ -370,6 +370,9 @@ EXPORT_STEPS_DLL void api_run_simulation_to_time(double t_end, unsigned int tool
EXPORT_STEPS_DLL void api_run_a_step(unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL bool api_get_system_angular_stable_flag(unsigned int toolkit_index=INDEX_NOT_EXIST);

EXPORT_STEPS_DLL double api_get_basic_meter_value(const char* meter_name, unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL double api_get_user_meter_value(int index, unsigned int toolkit_index=INDEX_NOT_EXIST);

EXPORT_STEPS_DLL void api_set_bus_fault(unsigned int bus, char* fault_type, double fault_G, double fault_B, unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL void api_clear_bus_fault(unsigned int bus, char* fault_type, unsigned int toolkit_index=INDEX_NOT_EXIST);
EXPORT_STEPS_DLL void api_trip_bus(unsigned int bus, unsigned int toolkit_index=INDEX_NOT_EXIST);
Expand Down
25 changes: 24 additions & 1 deletion code/steps/header/device/generator.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,29 @@ class GENERATOR : public SOURCE

void set_generator_bus(unsigned int bus);
void set_generator_impedance_in_pu(const complex<double>& z_pu);
void set_positive_sequence_resistance_in_pu(double r);
void set_positive_sequence_syncronous_reactance_in_pu(double x);
void set_positive_sequence_transient_reactance_in_pu(double x);
void set_positive_sequence_subtransient_reactance_in_pu(double x);
void set_negative_sequence_resistance_in_pu(double r);
void set_negative_sequence_reactance_in_pu(double x);
void set_zero_sequence_resistance_in_pu(double r);
void set_zero_sequence_reactance_in_pu(double x);
void set_grounding_resistance_in_pu(double r);
void set_grounding_reactance_in_pu(double x);

unsigned int get_generator_bus() const;
complex<double> get_generator_impedance_in_pu() const;

double get_positive_sequence_resistance_in_pu() const;
double get_positive_sequence_syncronous_reactance_in_pu() const;
double get_positive_sequence_transient_reactance_in_pu() const;
double get_positive_sequence_subtransient_reactance_in_pu() const;
double get_negative_sequence_resistance_in_pu() const;
double get_negative_sequence_reactance_in_pu() const;
double get_zero_sequence_resistance_in_pu() const;
double get_zero_sequence_reactance_in_pu() const;
double get_grounding_resistance_in_pu() const;
double get_grounding_reactance_in_pu() const;
virtual void clear();

virtual DEVICE_ID get_device_id() const;
Expand Down Expand Up @@ -69,5 +88,9 @@ class GENERATOR : public SOURCE

bool sync_generator_model_disabled, compensator_model_disabled, exciter_model_disabled,
stabilizer_model_disabled, turbine_governor_model_disabled, turbine_load_controller_model_disabled;

double R1, X1_sync, X1_transient, X1_subtransient;
double R2, X2, R0, X0;
double Rground, Xground;
};
#endif // GENERATOR_H
5 changes: 5 additions & 0 deletions code/steps/header/device/generator_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ class GENERATOR_TEST : public Test::Suite
void test_set_get_stabilizer_model();
void test_set_get_turbine_governor_model();

void test_set_get_positive_sequence_impedance();
void test_set_get_negative_sequence_impedance();
void test_set_get_zero_sequence_impedance();
void test_set_get_grounding_impedance();

void test_copy_with_operator_equal();

void test_get_device_id();
Expand Down
10 changes: 8 additions & 2 deletions code/steps/header/device/load.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ class LOAD : public NONBUS_DEVICE
void set_owner_number(unsigned int num);
void set_flag_interruptable(bool flag);
void set_load_manually_scale_factor_in_pu(double scale);
void set_negative_sequence_load_in_MVA(const complex<double>& s);
void set_zero_sequence_load_in_MVA(const complex<double>& s);

unsigned int get_load_bus() const;
BUS* get_bus_pointer() const;
Expand All @@ -41,6 +43,8 @@ class LOAD : public NONBUS_DEVICE
unsigned int get_zone_number() const;
unsigned int get_owner_number() const;
bool get_flag_interruptable() const;
complex<double> get_negative_sequence_load_in_MVA() const;
complex<double> get_zero_sequence_load_in_MVA() const;

virtual bool is_valid() const;
virtual void check();
Expand Down Expand Up @@ -98,8 +102,8 @@ class LOAD : public NONBUS_DEVICE
string identifier;
bool status;
complex<double> s_constant_power_in_MVA,
s_constant_current_in_MVA,
s_constant_impedance_in_MVA;
s_constant_current_in_MVA,
s_constant_impedance_in_MVA;
unsigned int area_number, zone_number, owner_number;
bool interruptable;

Expand All @@ -113,5 +117,7 @@ class LOAD : public NONBUS_DEVICE
LOAD_MODEL* load_model;
LOAD_VOLTAGE_RELAY_MODEL* load_voltage_relay_model;
LOAD_FREQUENCY_RELAY_MODEL* load_frequency_relay_model;

complex<double> s_negative_sequence_in_MVA, s_zero_sequence_in_MVA;
};
#endif // LOAD_H
2 changes: 2 additions & 0 deletions code/steps/header/device/load_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class LOAD_TEST : public Test::Suite
void test_set_get_owner_number();
void test_set_get_flag_interruptable();
void test_set_get_load_manually_scale();
void test_set_get_negative_sequence_load();
void test_set_get_zero_sequence_load();

void test_is_valid();
void test_clear();
Expand Down
2 changes: 1 addition & 1 deletion code/steps/header/power_system_database.h
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ class POWER_SYSTEM_DATABASE
unsigned int get_zone_index(const unsigned int no) const;
unsigned int get_owner_index(const unsigned int no) const;

unsigned int bus_name2bus_number(const string& name) const;
unsigned int bus_name2bus_number(const string& name, double vbase=0) const;
unsigned int area_name2area_number(const string& name) const;
unsigned int zone_name2zone_number(const string& name) const;
unsigned int owner_name2owner_number(const string& name) const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ class DYNAMICS_SIMULATOR
METER get_meter(unsigned int i);
void update_all_meters_value();
vector<double> get_all_meters_value();
double get_user_meter_value(unsigned int i);
double get_basic_meter_value(string meter_name);
void clear_meters();

void set_output_file(string filename);
Expand Down
4 changes: 3 additions & 1 deletion code/steps/source/STEPS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ STEPS::STEPS(const string& name, const string& log_file) : power_system_db(*this
ostringstream osstream;
std::this_thread::sleep_for(std::chrono::milliseconds(10));

log_file_name = string2upper(log_file);
// log_file_name = string2upper(log_file);
if(log_file!="")
open_log_file(log_file, false);

Expand Down Expand Up @@ -313,6 +313,8 @@ void STEPS::open_log_file(const string& file, bool log_file_append_mode)
if(log_file.is_open())
close_log_file();

log_file_name = string2upper(file);

if(file!="" and log_file_name!="BLACKHOLE")
{
if(log_file_append_mode==false)
Expand Down
14 changes: 14 additions & 0 deletions code/steps/source/apis/steps_api_dynamic_simulation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,20 @@ bool api_get_system_angular_stable_flag(unsigned int toolkit_index)
return ds.get_system_angular_stable_flag();
}

double api_get_basic_meter_value(const char* meter_name, unsigned int toolkit_index)
{
STEPS& toolkit = get_toolkit(toolkit_index);
DYNAMICS_SIMULATOR& ds = toolkit.get_dynamic_simulator();
return ds.get_basic_meter_value(meter_name);
}

double api_get_user_meter_value(int index, unsigned int toolkit_index)
{
STEPS& toolkit = get_toolkit(toolkit_index);
DYNAMICS_SIMULATOR& ds = toolkit.get_dynamic_simulator();
return ds.get_user_meter_value(index);
}

void api_set_bus_fault(unsigned int bus, char* fault_type, double fault_G, double fault_B, unsigned int toolkit_index)
{
STEPS& toolkit = get_toolkit(toolkit_index);
Expand Down
4 changes: 2 additions & 2 deletions code/steps/source/apis/steps_api_search_devices.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
#include <iostream>
using namespace std;

unsigned int api_bus_name2bus_number(const char* bus_name, unsigned int toolkit_index)
unsigned int api_bus_name2bus_number(const char* bus_name, double vbase, unsigned int toolkit_index)
{
STEPS& toolkit = get_toolkit(toolkit_index);
POWER_SYSTEM_DATABASE& psdb = toolkit.get_power_system_database();
return psdb.bus_name2bus_number(bus_name);
return psdb.bus_name2bus_number(bus_name, vbase);
}

const char* api_bus_number2bus_name(unsigned int bus_number, unsigned int toolkit_index)
Expand Down
5 changes: 1 addition & 4 deletions code/steps/source/apis/steps_api_utilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,8 @@ unsigned int api_get_const_INDEX_NOT_EXIST()

void api_set_toolkit_log_file(char* log_file, bool log_file_append_mode, unsigned int toolkit_index)
{
string log_file_name = "";
if(log_file!=NULL)
log_file_name = log_file;
STEPS& toolkit = get_toolkit(toolkit_index);
return toolkit.open_log_file(log_file_name, log_file_append_mode);
return toolkit.open_log_file(log_file, log_file_append_mode);
}

unsigned int api_generate_new_toolkit(char* log_fie)
Expand Down
126 changes: 126 additions & 0 deletions code/steps/source/device/generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,70 @@ void GENERATOR::set_generator_bus(unsigned int bus)
void GENERATOR::set_generator_impedance_in_pu(const complex<double>& z_pu)
{
set_source_impedance_in_pu(z_pu);
set_positive_sequence_resistance_in_pu(z_pu.real());
set_positive_sequence_subtransient_reactance_in_pu(z_pu.imag());
}

void GENERATOR::set_positive_sequence_resistance_in_pu(double r)
{
R1 = r;
if(get_negative_sequence_resistance_in_pu()!=0.0)
set_negative_sequence_resistance_in_pu(r);
if(get_zero_sequence_resistance_in_pu()!=0.0)
set_zero_sequence_resistance_in_pu(r);
}

void GENERATOR::set_positive_sequence_syncronous_reactance_in_pu(double x)
{
X1_sync = x;
}

void GENERATOR::set_positive_sequence_transient_reactance_in_pu(double x)
{
X1_transient = x;
}

void GENERATOR::set_positive_sequence_subtransient_reactance_in_pu(double x)
{
X1_subtransient = x;
if(get_positive_sequence_syncronous_reactance_in_pu()==0.0)
set_positive_sequence_syncronous_reactance_in_pu(x);
if(get_positive_sequence_transient_reactance_in_pu()==0.0)
set_positive_sequence_transient_reactance_in_pu(x);
if(get_negative_sequence_reactance_in_pu()==0.0)
set_negative_sequence_reactance_in_pu(x);
if(get_zero_sequence_reactance_in_pu()==0.0)
set_zero_sequence_reactance_in_pu(x);
}

void GENERATOR::set_negative_sequence_resistance_in_pu(double r)
{
R2 = r;
}

void GENERATOR::set_negative_sequence_reactance_in_pu(double x)
{
X2 = x;
}

void GENERATOR::set_zero_sequence_resistance_in_pu(double r)
{
R0 = r;
}

void GENERATOR::set_zero_sequence_reactance_in_pu(double x)
{
X0 = x;
}

void GENERATOR::set_grounding_resistance_in_pu(double r)
{
Rground = r;
}

void GENERATOR::set_grounding_reactance_in_pu(double x)
{
Xground = x;
}

unsigned int GENERATOR::get_generator_bus() const
Expand All @@ -43,6 +107,57 @@ complex<double> GENERATOR::get_generator_impedance_in_pu() const
return get_source_impedance_in_pu();
}

double GENERATOR::get_positive_sequence_resistance_in_pu() const
{
return R1;
}

double GENERATOR::get_positive_sequence_syncronous_reactance_in_pu() const
{
return X1_sync;
}

double GENERATOR::get_positive_sequence_transient_reactance_in_pu() const
{
return X1_transient;
}

double GENERATOR::get_positive_sequence_subtransient_reactance_in_pu() const
{
return X1_subtransient;
}

double GENERATOR::get_negative_sequence_resistance_in_pu() const
{
return R2;
}

double GENERATOR::get_negative_sequence_reactance_in_pu() const
{
return X2;
}

double GENERATOR::get_zero_sequence_resistance_in_pu() const
{
return R0;
}

double GENERATOR::get_zero_sequence_reactance_in_pu() const
{
return X0;
}

double GENERATOR::get_grounding_resistance_in_pu() const
{
return Rground;
}

double GENERATOR::get_grounding_reactance_in_pu() const
{
return Xground;
}


void GENERATOR::clear()
{
SOURCE::clear();
Expand All @@ -60,6 +175,17 @@ void GENERATOR::clear()
stabilizer_model_disabled = false;
turbine_governor_model_disabled = false;
turbine_load_controller_model_disabled = false;

set_positive_sequence_resistance_in_pu(0.0);
set_positive_sequence_syncronous_reactance_in_pu(0.0);
set_positive_sequence_transient_reactance_in_pu(0.0);
set_positive_sequence_subtransient_reactance_in_pu(0.0);
set_negative_sequence_resistance_in_pu(0.0);
set_negative_sequence_reactance_in_pu(0.0);
set_zero_sequence_resistance_in_pu(0.0);
set_zero_sequence_reactance_in_pu(0.0);
set_grounding_resistance_in_pu(0.0);
set_grounding_reactance_in_pu(0.0);
}

DEVICE_ID GENERATOR::get_device_id() const
Expand Down
Loading

0 comments on commit 787783c

Please sign in to comment.