Exemple #1
0
def blip_activation_nico(sensors, context, network, parameters):
	"""
	Teste si on doit activer la BLIP en temporisant jusqu'à la fin du cycle de feux en cours pour le contrôleur de feux indiqué
	"""
	result = False
	
	# on regarde si un véhicule prioritaire est détecté
	vehicule_prioritaire_present = sensors[parameters["capteur"]]["nombre_vehicules"] > 0
	
	# Si on a pas déjà une activation en cours, on en déclenche une si un véhicule est détecté
	if "instant_activation" not in context.keys():
		if vehicule_prioritaire_present:
			cdf = network.GetTrafficLightControllerFromID(parameters["cdf"])
			time_fin_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf)
			context["instant_activation"] = float(time_fin_pdf.hour*3600 + time_fin_pdf.minute*60 + time_fin_pdf.second)
	else:
		# Si pas de véhicule mais activation en cours, le véhicule prioritaire est déjà sorti : on annule l'activation
		if not vehicule_prioritaire_present:
			context.clear()
		
	# Si l'instant d'activation est arrivé, on active la condition
	if "instant_activation" in context.keys():
		simu_start_time = network.GetSimuStartTime()
		if context["instant_activation"] <= network.InstSimu + float(simu_start_time.hour*3600 + simu_start_time.minute*60 + simu_start_time.second):
			context.clear()
			result = True
	
	context["result"] = result
	return result
Exemple #2
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)
Exemple #3
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)