/
1.py
108 lines (76 loc) · 6.93 KB
/
1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import math
import ast
from math import e
from decimal import *
getcontext().prec = 28
def toList(NestedTuple):
return list(map(toList, NestedTuple)) if isinstance(NestedTuple, (list, tuple)) else NestedTuple
def Init():
global FreightVehicles
global vehsAttributes
global vehsAttNames
vehsAttributes = []
vehsAttNames = []
vehTypesAttributes = Vissim.Net.VehicleTypes.GetMultipleAttributes(['No', 'IsFreight'])
FreightVehicles = [x[0] for x in vehTypesAttributes if x[1] == True]
def GetVissimDataVehicles():
global vehsAttributes
global vehsAttNames
vehsAttributesNames = ['No', 'VehType\No','Lane\Link', 'Speed','DistanceToSigHead']
vehsAttributes = toList(Vissim.Net.Vehicles.GetMultipleAttributes(vehsAttributesNames))
vehsAttNames = {}
cnt = 0
for att in vehsAttributesNames:
vehsAttNames.update({att: cnt})
cnt += 1
def Signal():
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('Seconds',Vissim.Net.Simulation.SimulationSecond)
Seconds = Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue('Seconds')
GetVissimDataVehicles()
if Seconds<=1:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('teg',10.5)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('ContrByCOM',True)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('ContrByCOM',True)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenTimeDuration',31+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('teg'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenTimeDuration',11)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenStart',4)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenTimeDuration'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenStart',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')+4)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenTimeDuration'))
for vehAttributes in vehsAttributes:
if vehAttributes[vehsAttNames['VehType\No']] in FreightVehicles:
Lane = vehAttributes[vehsAttNames['Lane\Link']]
if Lane == '1' or Lane == '4':
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('teg',10.5)
break
if Lane != '1' or Lane != '4':
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('teg',0)
continue
if vehAttributes[vehsAttNames['VehType\No']] not in FreightVehicles:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('teg',0)
continue
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenTimeDuration',31+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('teg'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenTimeDuration',11)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenTimeDuration'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenStart',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')+4)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenTimeDuration'))
if Seconds >= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenStart')-1:
if Seconds <= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')-1:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('SigState','GREEN')
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('SigState','RED')
if Seconds >= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')-1:
if Seconds < Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')+3:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('SigState','RED')
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('SigState','RED')
if Seconds >= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenStart')-1:
if Seconds <= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenEnd')-1:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('SigState','GREEN')
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('SigState','RED')
if Seconds >= Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenEnd')-1:
if Seconds < Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenEnd')+3:
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('SigState','RED')
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('SigState','RED')
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenStart',4+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenEnd'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenTimeDuration'))
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenStart',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).AttValue ('GreenEnd')+4)
Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).SetAttValue ('GreenEnd',Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenStart')+Vissim.Net.SignalControllers.ItemByKey(1).SGs.ItemByKey(2).AttValue ('GreenTimeDuration'))