def test_three_level_flying_cap_leg(load_and_compile, VDC1,VDC2, iR1_expected): # Set source value hil.set_source_constant_value(name='VDC1', value=VDC1) hil.set_source_constant_value(name='VDC2', value=VDC2) for switch in range(1, 5): hil.set_pe_switching_block_control_mode(blockName='SwCapLeg7', switchName="S_" + str(switch), swControl=True) hil.set_pe_switching_block_software_value(blockName='SwCapLeg7', switchName="S_" + str(switch), value=1) # Start capture start_capture(duration=0.04, signals=['iR1'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iR1 = capture['iR1'] # Tests sig.assert_is_constant(iR1, during=(0.03 - 0.0001, 0.03 + 0.0001), at_value=around(iR1_expected, tol_p=0.01)) # Stop simulation hil.stop_simulation()
def test_synchronous_machine(convert_compile_load, Vsin_sm, f, Vf, torque, Ism_exp, nr_exp): # Set source value hil.set_source_sine_waveform(name='Vsin_sm', rms=Vsin_sm, frequency=f) hil.set_source_constant_value(name='Vf', value=Vf) # Set machine torque hil.set_machine_constant_torque(name='SM', value=torque) # Start capture start_capture(duration=0.1, signals=['Ism', 'machine mechanical speed'], executeAt=1.0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) Ism = capture['Ism'] nr = capture['machine mechanical speed'] # Stop simulation hil.stop_simulation() # Tests sig.assert_is_constant(Ism, at_value=around(Ism_exp, tol_p=0.01)) sig.assert_is_constant(nr, at_value=around(nr_exp, tol_p=0.01))
def test_diode(convert_compile_load, Vd1, Vd2, Vd3, f): # Set source value. hil.set_source_constant_value(name='Vd1', value=Vd1) hil.set_source_constant_value(name='Vd2', value=Vd2) hil.set_source_sine_waveform(name='Vd3', rms=Vd3, frequency=f) # Start capture start_capture(duration=0.1, signals=['Id1', 'Id2', 'Id3'], executeAt=0.2) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) Id1 = capture['Id1'] Id2 = capture['Id2'] Id3 = capture['Id3'] # Expected currents R = 10 Id1_exp = Vd1/R Id2_exp = 0 Id3_exp = Vd3/R/np.sqrt(2) # Tests sig.assert_is_constant(Id1, at_value=around(Id1_exp, tol_p=0.01)) sig.assert_is_constant(Id2, at_value=around(Id2_exp, tol_p=0.01)) sig.assert_is_constant(Id3, at_value=around(Id3_exp, tol_p=0.01)) # Stop simulation hil.stop_simulation()
def test_synchronous_machine(convert_compile_load, Vsin_sm, f, Vf, torque, Ism_exp, nr_exp): # Set source value hil.set_source_sine_waveform(name='Vsin_sm', rms=Vsin_sm, frequency=f) hil.set_source_constant_value(name='Vf', value=Vf) # Set machine torque hil.set_machine_constant_torque(name='SM', value=torque) # Start capture start_capture(duration=0.1, signals=['Ism', 'machine mechanical speed'], executeAt=1.0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) Ism = np.mean(capture['Ism']) nr = np.mean(capture['machine mechanical speed']) # Stop simulation hil.stop_simulation() # Tests assert Ism == pytest.approx(expected=Ism_exp, rel=1e-2) assert nr == pytest.approx(expected=nr_exp, rel=1e-3)
def test_diode(convert_compile_load, Vd1, Vd2, Vd3, f): # Set source value. hil.set_source_constant_value(name='Vd1', value=Vd1) hil.set_source_constant_value(name='Vd2', value=Vd2) hil.set_source_sine_waveform(name='Vd3', rms=Vd3, frequency=f) # Start capture start_capture(duration=0.1, signals=['Id1', 'Id2', 'Id3'], executeAt=0.2) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) Id1 = np.mean(capture['Id1']) Id2 = np.mean(capture['Id2']) Id3 = np.mean(capture['Id3']) # Expected currents R = 10 Id1_exp = Vd1 / R Id2_exp = 0 Id3_exp = Vd3 / R / np.sqrt(2) # Tests assert Id1 == pytest.approx(Id1_exp, rel=1e-2) assert Id2 == pytest.approx(Id2_exp, abs=0.1) assert Id3 == pytest.approx(Id3_exp, rel=1e-2) # Stop simulation hil.stop_simulation()
def test_three_phase_T_type_converter(load_and_compile, VDC1, VDC2, iA_expected, iB_expected, iC_expected): # Set source value hil.set_source_constant_value(name='VDC1', value=VDC1) hil.set_source_constant_value(name='VDC2', value=VDC2) for switch in range(1, 5): hil.set_pe_switching_block_control_mode(blockName='Ttype', switchName="Sa_" + str(switch), swControl=True) hil.set_pe_switching_block_software_value(blockName='Ttype', switchName="Sa_" + str(switch), value=1) hil.set_pe_switching_block_control_mode(blockName='Ttype', switchName="Sb_" + str(switch), swControl=True) hil.set_pe_switching_block_software_value(blockName='Ttype', switchName="Sb_" + str(switch), value=1) hil.set_pe_switching_block_control_mode(blockName='Ttype', switchName="Sc_" + str(switch), swControl=True) hil.set_pe_switching_block_software_value(blockName='Ttype', switchName="Sc_" + str(switch), value=1) # Start capture start_capture(duration=0.04, signals=['iA', 'iB', 'iC'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iA = capture['iA'] iB = capture['iB'] iC = capture['iC'] # Tests sig.assert_is_constant(iA, during=(0.015 - 0.001, 0.015 + 0.001), at_value=around(iA_expected, tol_p=0.01)) sig.assert_is_constant(iB, during=(0.015 - 0.001, 0.015 + 0.001), at_value=around(iB_expected, tol_p=0.01)) sig.assert_is_constant(iC, during=(0.03 - 0.001, 0.03 + 0.001), at_value=around(iC_expected, tol_p=0.01)) # Stop simulation hil.stop_simulation()
def test_resistor_divider(convert_compile_load, VDC, Vin, Vout, I): # Start simulation hil.start_simulation() # Set source value hil.set_source_constant_value(name='VDC', value=VDC) hil.wait_msec(1.0) # Tests assert capture.read('VDC') == VDC assert capture.read('Vin') == Vin assert capture.read('Vout') == Vout assert capture.read('I') == I # Stop simulation hil.stop_simulation()
def test_resistor(load_and_compile, VDC, iR1_expected, Vout_expected, Vin_expected): # Set source value hil.set_source_constant_value(name='VDC', value=VDC) # Start capture start_capture(duration=0.2, signals=['iR1', 'Vout', 'Vin'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iR1 = capture['iR1'] Vout = capture['Vout'] Vin = capture['Vin'] # Tests sig.assert_is_constant(iR1, during=(0.005 - 0.000001, 0.005 + 0.000001), at_value=around(iR1_expected, tol_p=0.01)) sig.assert_is_constant(iR1, during=(0.01 - 0.000001, 0.01 + 0.000001), at_value=around(iR1_expected, tol_p=0.01)) sig.assert_is_constant(Vout, during=(0.005 - 0.000001, 0.005 + 0.000001), at_value=around(Vout_expected, tol_p=0.01)) sig.assert_is_constant(Vout, during=(0.01 - 0.000001, 0.01 + 0.000001), at_value=around(Vout_expected, tol_p=0.01)) sig.assert_is_constant(Vin, during=(0.005 - 0.000001, 0.005 + 0.000001), at_value=around(Vin_expected, tol_p=0.01)) sig.assert_is_constant(Vin, during=(0.01 - 0.000001, 0.01 + 0.000001), at_value=around(Vin_expected, tol_p=0.01)) # Stop simulation hil.stop_simulation()
def test_inductor_dc(convert_compile_load, VDC1, L1, IL1_0): # Set sources before starting the simulation hil.set_source_constant_value(name='VDC1', value=VDC1) # Start capture channel_list = ["IL1"] capture_time = 0.01 # Expected current IL1_expected = VDC1 * capture_time / L1 + IL1_0 capture.start_capture(duration=capture_time, rate=1000, signals=channel_list, trigger_source="Forced", trigger_use_first_occurence=True, fileName="") # Start simulation hil.start_simulation() # Wait capture to finish() capture.wait_capture_finish() # Stop simulation hil.stop_simulation() # Evaluate capture results meas_res = capture.get_capture_results() measurements = meas_res["IL1"] # Calculate the measured current after one second IL1_measured = measurements[-1] # Check if captured current ise the ramp with the last value equal to the I_l_expected slope = VDC1 / L1 # slope of the linear voltage growth tolerance = 0.01 * IL1_expected assert signal.is_ramp(measurements, slope=slope, tol=tolerance) assert IL1_measured == pytest.approx(IL1_expected, abs=tolerance)
def test_1ph_core_coupling(load_and_compile, VDC, iR1_expected): # Set source value hil.set_source_constant_value(name='VDC', value=VDC) # Start capture start_capture(duration=0.04, signals=['iR1'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iR1 = capture['iR1'] # Tests # Peak sig.assert_is_constant(iR1, during=(0 + 0.000001, 0.04), at_value=around(iR1_expected, tol_p=0.001)) # Stop simulation hil.stop_simulation()
def test_capacitor_electrolytic_dc(convert_compile_load, IDC2, C_el1, VC_el1_0): # Set sources before starting the simulation hil.set_source_constant_value(name="IDC2", value=IDC2) # Set capture channel_list = ["VC_el1"] capture_time = 0.01 # Expected voltage VC_el1_expected = VC_el1_0 + IDC2 / C_el1 * capture_time capture.start_capture(duration=capture_time, rate=1000, signals=channel_list, trigger_source="Forced", trigger_use_first_occurence=True, fileName="") # Start simulation hil.start_simulation() # Wait capture to finish capture.wait_capture_finish() # Stop simulation hil.stop_simulation() # Evaluate capture results meas_res = capture.get_capture_results() measurements = meas_res["VC_el1"] # Calculate the measured voltage after one second VC1_measured = measurements[-1] assert VC1_measured == pytest.approx(VC_el1_expected, rel=0.01)
def test_igbt_leg(load_and_compile, VDC1, iR1_expected): # Set source value hil.set_source_constant_value(name='VDC1', value=VDC1) hil.set_pe_switching_block_control_mode('SwitchingLeg', "S_top", swControl=True) hil.set_pe_switching_block_software_value('SwitchingLeg', "S_top", value=1) hil.set_pe_switching_block_control_mode('SwitchingLeg', "S_bot", swControl=True) hil.set_pe_switching_block_software_value('SwitchingLeg', "S_bot", value=1) start_capture(duration=0.04, signals=['iR1'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iR1 = capture['iR1'] # Tests sig.assert_is_constant(iR1, during=(0.01 - 0.0001, 0.01 + 0.0001), at_value=around(iR1_expected, tol_p=0.01)) # Stop simulation hil.stop_simulation()
def test_5ph_core_coupling(load_and_compile, VDC1, iRA_expected, VDC2, iRB_expected, VDC3, iRC_expected, VDC4, iRD_expected): # Set source value hil.set_source_constant_value(name='VDC1', value=VDC1) hil.set_source_constant_value(name='VDC2', value=VDC2) hil.set_source_constant_value(name='VDC3', value=VDC3) hil.set_source_constant_value(name='VDC4', value=VDC4) # Start capture start_capture(duration=0.04, signals=['iRA', 'iRB', 'iRC', 'iRD'], executeAt=0) # Start simulation hil.start_simulation() # Data acquisition capture = get_capture_results(wait_capture=True) iRA = capture['iRA'] iRB = capture['iRB'] iRC = capture['iRC'] iRD = capture['iRD'] # Tests sig.assert_is_constant(iRA, during=(0 + 0.000001, 0.04), at_value=around(iRA_expected, tol_p=0.001)) sig.assert_is_constant(iRB, during=(0 + 0.000001, 0.04), at_value=around(iRB_expected, tol_p=0.001)) sig.assert_is_constant(iRC, during=(0 + 0.000001, 0.04), at_value=around(iRC_expected, tol_p=0.001)) sig.assert_is_constant(iRD, during=(0 + 0.000001, 0.04), at_value=around(iRD_expected, tol_p=0.001)) # Stop simulation hil.stop_simulation()