MHKiT Power Module
The following example uses the MHKiT power module to compute power, instantaneous frequency, and harmonics from time-series of voltage and current.
Start by importing the necessary python packages and MHKiT module.
[1]:
import numpy as np
import pandas as pd
from mhkit import power, utils
Load Power Data
We will begin by reading in time-series data of measured three phase (a, b, and c) voltage and current.
Note: IEC TS 62600-30 requires power quality assessments on a minimum of 10 minute time-series data, but for this example a shorter time-series is used.
[2]:
# Read in time-series data of voltage (V) and current (I)
power_data = pd.read_csv(
"data/power/2020224_181521_PowRaw.csv", skip_blank_lines=True, index_col="Time_UTC"
)
# Convert the time index to type "datetime"
power_data.index = pd.to_datetime(power_data.index)
# Display the data
power_data.head()
[2]:
MODAQ_Va_V | MODAQ_Vb_V | MODAQ_Vc_V | MODAQ_Ia_I | MODAQ_Ib_I | MODAQ_Ic_I | |
---|---|---|---|---|---|---|
Time_UTC | ||||||
2020-02-24 18:15:21.499998208 | 10652.764496 | -8499.446320 | -1850.166138 | -23.213654 | 19.219666 | 4.023438 |
2020-02-24 18:15:21.500018208 | 10691.122620 | -8428.702576 | -1927.626526 | -23.404846 | 19.181671 | 4.289856 |
2020-02-24 18:15:21.500038209 | 10732.961151 | -8364.997162 | -2001.269318 | -23.493042 | 19.033966 | 4.478912 |
2020-02-24 18:15:21.500058210 | 10775.892639 | -8304.582245 | -2071.241791 | -23.680115 | 18.917847 | 4.858246 |
2020-02-24 18:15:21.500078210 | 10818.297028 | -8248.074066 | -2138.016785 | -23.737946 | 18.702087 | 5.092468 |
Power Characteristics
The power.characteristics
submodule is used to compute quantities of interest from voltage and current time-series. In this example, we will calculate active AC power and instantneous frequency.
Active AC Power
To compute the active AC power, the user must provide a power_factor
for the efficency of the device.
[3]:
# First seperate the voltage and current time-series into seperate dataFrames
voltage = power_data[["MODAQ_Va_V", "MODAQ_Vb_V", "MODAQ_Vc_V"]]
current = power_data[["MODAQ_Ia_I", "MODAQ_Ib_I", "MODAQ_Ic_I"]]
# Set the power factor for the system
power_factor = 0.96
# Compute the instantaneous AC power in watts
ac_power = power.characteristics.ac_power_three_phase(voltage, current, power_factor)
# Display the result
ac_power.Power.plot(figsize=(15, 5), title="AC Power").set(
xlabel="Time", ylabel="Power [W]"
);
Instantaneous Frequency
Calculate the instantaneous frequency of the voltage time-series using the 3 phase voltage measurements. The time-varying instantaneous frequency is a required metric for power quality assessments.
[4]:
# Compute the instantaneous frequency
inst_freq = power.characteristics.instantaneous_frequency(voltage)
# Display the result
inst_freq.plot(figsize=(15, 5), ylim=(0, 100), title="Instantaneous Frequency").set(
xlabel="Time [s]", ylabel="Frequency [Hz]"
)
inst_freq.head()
[4]:
MODAQ_Va_V | MODAQ_Vb_V | MODAQ_Vc_V | |
---|---|---|---|
Time_UTC | |||
2020-02-24 18:15:21.499998208 | 902.215367 | 1218.092331 | 433.063162 |
2020-02-24 18:15:21.500018208 | 8.397956 | 12.601184 | 28.651291 |
2020-02-24 18:15:21.500038209 | 509.904722 | 671.800108 | 268.237845 |
2020-02-24 18:15:21.500058210 | 10.176332 | 15.101179 | 26.504936 |
2020-02-24 18:15:21.500078210 | 404.436745 | 531.019439 | 220.218222 |
Power Quality
The power.quality
module can be used to compute current or voltage harmonics and current distortions following IEC/TS 62600-30 and IEC/TS 61000-4-7. Harmonics and harmonic distortion are required as part of a power quality assessment and characterize the stability of the produced power.
[5]:
# Set the nominal sampling frequency
sample_freq = 50000 # [Hz]
# Set the frequency of the grid the device would be conected to
grid_freq = 60 # [Hz]
# Set the rated current of the device
rated_current = 18.8 # [Amps]
# Calculate the harmonics
harmonics = power.quality.harmonics(current, sample_freq, grid_freq)
# Plot the results
harmonics.plot(figsize=(15, 5), xlim=(0, 900), title="Current Harmonics").set(
ylabel="Harmonic Amplitude", xlabel="Frequency [Hz]"
);
Harmonic Subgroups
The harmonic subgroups calculations are based on IEC/TS 62600-30. We can calculate them using our grid frequency and harmonics.
[6]:
# Calcualte Harmonic Subgroups
h_s = power.quality.harmonic_subgroups(harmonics, grid_freq)
# Display the results
h_s.head()
[6]:
MODAQ_Ia_I | MODAQ_Ib_I | MODAQ_Ic_I | |
---|---|---|---|
frequency | |||
0 | 0.247401 | 1.948879 | 1.991755 |
60 | 29.761108 | 29.305038 | 29.127020 |
120 | 1.870176 | 1.291483 | 1.206478 |
180 | 1.007562 | 0.648012 | 0.535090 |
240 | 0.727466 | 0.437456 | 0.370414 |
Total Harmonic Current Distortion
Compute the THCD from harmonic subgroups and rated current for the device
[7]:
# Finally we can compute the total harmonic current distortion as a percentage
THCD = power.quality.total_harmonic_current_distortion(h_s)
THCD
[7]:
MODAQ_Ia_I 8.972511
MODAQ_Ib_I 6.096617
MODAQ_Ic_I 5.929491
dtype: float64