コード例 #1
0
def change_traffic_light_cycle(conditions, context, network, parameters):
    """
	Change de plan de feux pour le contrôleur spécifié
	"""
    cdf = network.GetTrafficLightControllerFromID(parameters["cdf"])

    # index de la tranche
    index_tranche = conditions.values()[0]["tranche"]

    # construction du plan de feux à partir des paramètres reçus
    lstPlans = parameters["PLANS_DE_FEUX"][0]["PLAN_DE_FEUX"]
    for plan in lstPlans:
        if int(plan["index_tranche"]) == index_tranche:
            paramsPlan = plan
            break

    print u"plan a mettre en place : " + paramsPlan["id"]

    # instanciation de l'objet plan de feux à mettre en place
    pdf = symuvia.CreateTrafficLightCycle(str(paramsPlan["id"]),
                                          symuvia.STime())
    # ajout de chaque séquence
    seqNum = 0
    for sequence in plan["SEQUENCES"][0]["SEQUENCE"]:

        newSeq = symuvia.CreateSequence(float(sequence["duree_totale"]),
                                        seqNum)
        # définition de la séquence ...
        for signal in sequence["SIGNAUX_ACTIFS"][0]["SIGNAL_ACTIF"]:
            tuyau_entree = network.GetLinkFromLabel(signal["troncon_entree"])
            tuyau_sortie = network.GetLinkFromLabel(signal["troncon_sortie"])
            newSignal = symuvia.CreateActiveSignal(
                tuyau_entree, tuyau_sortie, float(signal["duree_vert"]), 0.0,
                float(signal["duree_retard_allumage"]))
            newSeq.AddActiveSignal(newSignal)

        pdf.AddSequence(newSeq)
        seqNum = seqNum + 1

    # détermination de la date à laquelle démarrer le nouveau plan de feux
    time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf)

    # mise en place du plan de feux
    cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, pdf)
コード例 #2
0
def change_sequence_length(conditions, context, network, parameters):
    """
	Change la durée d'une séquence
	"""
    if len(context) == 0:
        context["index_sequence"] = int(parameters["num_sequence"]) - 1
        context["nouvelle_duree"] = float(parameters["nouvelle_duree"])

    cdf = network.GetTrafficLightControllerFromID(parameters["cdf"])

    # récupération du plan de feux actif
    timeSpan = symuvia.STimeSpan()
    pdf = cdf.GetTrafficLightCycle(network.InstSimu, timeSpan)

    # recopie du plan de feux en modifiant la durée de la nouvelle séquence
    new_pdf = symuvia.CreateTrafficLightCycle("", symuvia.STime())
    seqNum = 0
    for seq in pdf.GetLstSequences():

        if seqNum == context["index_sequence"]:
            duree_seq = context["nouvelle_duree"]
        else:
            duree_seq = seq.GetTotalLength()
        newSeq = symuvia.CreateSequence(duree_seq, seqNum)

        # création des signaux
        for signal in seq.GetLstActiveSignals():
            newSignal = symuvia.CreateActiveSignal(signal.GetInputLink(),
                                                   signal.GetOutputLink(),
                                                   signal.GreenDuration,
                                                   signal.OrangeDuration,
                                                   signal.ActivationDelay)
            newSeq.AddActiveSignal(newSignal)

        new_pdf.AddSequence(newSeq)
        seqNum = seqNum + 1

    # détermination de la date à laquelle démarrer le nouveau plan de feux
    time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf)

    # mise en place du plan de feux
    cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, new_pdf)