示例#1
0
    for i in range(0, pub_count):
        pubid[i] = h.helicsFederateGetPublicationByIndex(fed, i)
        pub_name = h.helicsPublicationGetKey(pubid[i])
        logger.debug(f'\tRegistered publication---> {pub_name}')

    ##############  Entering Execution Mode  ##################################
    h.helicsFederateEnterExecutingMode(fed)
    logger.info('Entered HELICS execution mode')

    # Definition of charging power level (in kW) for level 1, 2, 3 chargers
    charge_rate = [1.8, 7.2, 50]

    hours = 24 * 7  # one week
    total_interval = int(60 * 60 * hours)
    update_interval = int(
        h.helicsFederateGetTimeProperty(fed, h.HELICS_PROPERTY_TIME_PERIOD))
    grantedtime = 0

    # Generate an initial fleet of EVs, one for each previously defined
    #   endpoint. This gives each EV a unique link to the EV controller
    #   federate.
    numLvl1, numLvl2, numLvl3, EVlist = get_new_EV(end_count)
    charging_voltage = calc_charging_voltage(EVlist)
    currentsoc = {}

    # Data collection lists
    time_sim = []
    power = []

    # Blocking call for a time request at simulation time 0
    initial_time = 60
示例#2
0
        pub_name[i] = h.helicsPublicationGetKey(pubid[i])
        logger.debug(f'\tRegistered publication---> {pub_name[i]}')





    ##############  Entering Execution Mode  ##################################
    h.helicsFederateEnterExecutingMode(fed)
    logger.info('Entered HELICS execution mode')


    hours = 24*7 # one week
    total_interval = int(60 * 60 * hours)
    update_interval = int(h.helicsFederateGetTimeProperty(
                                fed,
                                h.HELICS_PROPERTY_TIME_PERIOD))
    grantedtime = 0

    # Define battery physics as empirical values
    socs = np.array([0, 1])
    effective_R = np.array([8, 150])

    batt_list = get_new_battery(pub_count)

    current_soc = {}
    for i in range (0, pub_count):
        current_soc[i] = (np.random.randint(0,60))/100


示例#3
0
    # Define battery physics as empirical values
    socs = np.array([0, 1])

    # 8 ohms to 150 ohms
    effective_R = np.array([8, 150])

    batt_list = get_new_battery(end_count)

    current_soc = {}
    for i in range (0, end_count):
        current_soc[i] = (np.random.randint(0,60))/100

    hours = 24 * 7
    total_interval = int(60 * 60 * hours)
    update_interval = 60*int(h.helicsFederateGetTimeProperty(
                                fed,
                                h.helics_property_time_period))
    update_offset = int(h.helicsFederateGetTimeProperty(
                                fed,
                                h.helics_property_time_offset))
    grantedtime = 0

    # Data collection lists
    time_sim = []
    total_current = []
    soc = {}

    # As long as granted time is in the time range to be simulated...
    while grantedtime < total_interval:

        # Time request for the next interval to be simulated
示例#4
0
    # Define battery physics as empirical values
    socs = np.array([0, 1])

    # 8 ohms to 150 ohms
    effective_R = np.array([8, 150])

    batt_list = get_new_battery(end_count)

    current_soc = {}
    for i in range(0, end_count):
        current_soc[i] = (np.random.randint(0, 60)) / 100

    hours = 24 * 7
    total_interval = int(60 * 60 * hours)
    update_interval = int(
        h.helicsFederateGetTimeProperty(fed, h.helics_property_time_period))
    update_offset = int(
        h.helicsFederateGetTimeProperty(fed, h.helics_property_time_offset))
    grantedtime = 0

    # Data collection lists
    time_sim = []
    total_current = []
    soc = {}

    # As long as granted time is in the time range to be simulated...
    while grantedtime < total_interval:

        # Time request for the next interval to be simulated
        requested_time = (grantedtime + update_interval + update_offset)
        logger.debug(f'Requesting time {requested_time}')
示例#5
0
def test_messagefederate_timing_tests():

    broker = createBroker(1)
    vFed1, fedinfo1 = createMessageFederate(1, "fed0")
    vFed2, fedinfo2 = createMessageFederate(1, "fed1")

    h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 0.1)
    h.helicsFederateSetTimeProperty(vFed2, h.HELICS_PROPERTY_TIME_PERIOD, 0.1)

    h.helicsFederateSetTimeProperty(vFed2, h.HELICS_PROPERTY_TIME_INPUT_DELAY,
                                    0.1)

    h.helicsFederateSetFlagOption(vFed1,
                                  h.HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS,
                                  True)
    h.helicsFederateSetFlagOption(vFed2,
                                  h.HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS,
                                  True)

    ept1 = h.helicsFederateRegisterGlobalEndpoint(vFed1, "e1", "")
    h.helicsFederateRegisterGlobalEndpoint(vFed2, "e2", "")

    h.helicsFederateEnterExecutingModeAsync(vFed1)
    h.helicsFederateEnterExecutingMode(vFed2)
    h.helicsFederateEnterExecutingModeComplete(vFed1)
    h.helicsFederateRequestTimeAsync(vFed2, 2.0)
    gtime = h.helicsFederateRequestTime(vFed1, 1.0)
    # check that the request is only granted at the appropriate period
    assert gtime == 1.0

    assert h.helicsFederateGetIntegerProperty(
        vFed1, h.HELICS_PROPERTY_INT_CONSOLE_LOG_LEVEL) == -1
    assert h.helicsFederateGetIntegerProperty(
        vFed2, h.HELICS_PROPERTY_INT_CONSOLE_LOG_LEVEL) == -1

    assert h.helicsFederateGetFlagOption(
        vFed1, h.HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS) is True
    assert h.helicsFederateGetFlagOption(
        vFed2, h.HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS) is True

    h.helicsEndpointSendMessageRaw(ept1, "e2", "test1".encode())
    h.helicsFederateRequestTimeAsync(vFed1, 1.9)
    gtime = h.helicsFederateRequestTimeComplete(vFed2)
    assert gtime >= 1.1  # the message should show up at the next available time point after the impact window
    h.helicsFederateRequestTimeAsync(vFed2, 2.0)
    gtime = h.helicsFederateRequestTimeComplete(vFed1)
    assert gtime >= 1.9

    tres = h.helicsFederateGetTimeProperty(vFed1,
                                           h.HELICS_PROPERTY_TIME_PERIOD)
    assert tres == 0.1

    # m = h.helicsEndpointGetMessage(ept1)
    # @show h.helicsMessageGetRawData(m)
    # TODO: null pointer received from C

    gtime = h.helicsFederateRequestTimeComplete(vFed2)
    assert gtime == 2.0
    h.helicsFederateFinalize(vFed1)
    h.helicsFederateFinalize(vFed2)

    destroyFederate(vFed1, fedinfo1)
    destroyFederate(vFed2, fedinfo2)
    destroyBroker(broker)