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]"
);
_images/power_example_5_0.png

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
_images/power_example_7_1.png

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]"
);
_images/power_example_9_0.png

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