-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathisgfunc.c
More file actions
2754 lines (2559 loc) · 140 KB
/
isgfunc.c
File metadata and controls
2754 lines (2559 loc) · 140 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* isgfunc.c - gegenereerd met TLCGen 12.4.0.19 */
#include "isgfunc.h"
mulv TNL_type[FCMAX][FCMAX]; /* type naloop */
mulv FK_type[FCMAX][FCMAX]; /* type fictief conflict */
mulv TISG_PR[FCMAX][FCMAX]; /* interstartgroentijd primair */
mulv TVG_basis[FCMAX];
mulv TVG_AR[FCMAX];
mulv TISG_AR[FCMAX][FCMAX]; /* interstartgorentijd altenatief */
mulv TISG_AR_los[FCMAX][FCMAX];
mulv TVG_PR[FCMAX];
mulv TVG_old[FCMAX];
mulv TVG_AR_old[FCMAX];
mulv REALISATIETIJD_max[FCMAX];
mulv TIGR[FCMAX][FCMAX];
mulv PRIOFC[FCMAX]; /* aanwezigheid prioriteitsaanvragen */
boolv NietGroentijdOphogen[FCMAX];
mulv twacht[FCMAX];
mulv twacht_AR[FCMAX];
mulv twacht_afkap[FCMAX];
mulv REALISATIETIJD[FCMAX][FCMAX];
boolv Volgrichting[FCMAX];
boolv AfslaandDeelconflict[FCMAX] = { 0 };
extern mulv TISG_rgv[FCMAX][FCMAX];
extern mulv TISG_basis[FCMAX][FCMAX];
extern mulv TVG_rgv[FCMAX];
extern mulv init_tvg;
extern mulv TISG_afkap[FCMAX][FCMAX];
boolv PAR_los[FCMAX];
/* BEPAAL RESULTERENDE INTERGROENTIJDEN - TIGR[][] */
/* ----------------------------------------------- */
/* void BepaalIntergroenTijden(void) bepaalt de initiele waarden van de resulterende intergroentijden matrix TIGR[][] en
* maakt hiervoor een kopie van de integroentijden matrix TIG[][].
* de resulterende intergroentijden TIGR[][] dienen in de regelapplicatie te worden gecorrigeerd voor naloop richtingen met
* de functie corrigeerTIGRvoorNalopen(count fc1, count fc2, mulv tnleg, mulv tnlegd, mulv tvgnaloop).
* BepaalIntergroenTijden() wordt aangeroepen door de applicatiefunctie BepaalRealisatieTijden().
* BepaalRealisatieTijden(void) wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*/
void BepaalIntergroenTijden(void)
{
count fc1, fc2;
for (fc1 = 0; fc1 < FCMAX; ++fc1)
{
for (fc2 = 0; fc2 < FCMAX; ++fc2)
{
TIGR[fc1][fc2] = TIG_max[fc1][fc2];
}
}
}
/* CORRIGEER TIGR[][] VOOR NALOPEN */
/* ------------------------------- */
/* void corrigeerTIGRvoorNalopen(count fc1, count fc2, count tnleg, count tnlegd, count tvgnaloop) kan in de regelapplicatie worden gebruikt
* voor de correctie van de de resulterende intergroentijden TIGR[][] voor de conflicten van EG-naloop richtingen; na initialisatie van
* de resulterende intergroentijden matrix TIGR[][].
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fc1 - index fasecyclus van de voedende richting
* fc2 - index fasecyclus van de nalooprichting
*
* tnleg - index T_max[] - Naloop op einde groen van fc1 naar fc2; NG indien niet gebruikt.
* tnlegd - index T_max[] - Detectieafhankelijke naloop op einde groen van fc1 naar fc2; NG indien niet gebruikt.
* tvgnaloop - index T_max[] - Maximale verlengtijd op eigen detectie na aflopen nalooptijden voor de naloop richting.
*
* voorbeeld: BepaalIntergroenTijden(); // startwaarden voor TIGR[][]
* corrigeerTIGRvoorNalopen(fc02, fc62, tnleg0262, tnlegd0262, tvgnaloop0262); // EG-naloop van fc02 naar fc62
* corrigeerTIGRvoorNalopen(fc08, fc68, tnleg0868, tnlegd0868, tvgnaloop0868); // EG-naloop van fc08 naar fc68
*
* corrigeerTIGRvoorNalopen() wordt aangeroepen vanuit de applicatiefunctie BepaalRealisatieTijden().
*
*/
void corrigeerTIGRvoorNalopen(count fc1, count fc2, mulv tnleg, mulv tnlegd, mulv tvgnaloop)
{
/* Uitgangspunt is dat tnleg de maatgevende nalooptijd is */
int fc3, n;
for (n = 0; n < KFC_MAX[fc2]; ++n)
{
fc3 = KF_pointer[fc2][n];
if (tnleg != NG) TIGR[fc1][fc3] = max(TIGR[fc1][fc3], T_max[tnleg] + T_max[tvgnaloop] + TIGR[fc2][fc3]);
if (tnlegd != NG) TIGR[fc1][fc3] = max(TIGR[fc1][fc3], T_max[tnlegd] + TGL_max[fc1] + T_max[tvgnaloop] + TIGR[fc2][fc3]);
}
}
/* INITIALISATIE REALISATIETIJDEN */
/* ------------------------------ */
/* void InitRealisatieTijden(void) bepaalt de initiele waarden van de REALISATIETIJD[][] en zet alle waarden op NG (niet gebruikt).
* de REALISATIETIJD[][]-en dienen in de regelapplicatie te worden bepaald en gecorrigeerd voor de synchronisaties o.a naloop richtingen.
*
* InitRealisatieTijden(void) wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void).
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*/
void InitRealisatieTijden(void)
{
count fc1, fc2;
for (fc1 = 0; fc1 < FC_MAX; fc1++)
{
for (fc2 = 0; fc2 < FC_MAX; fc2++)
{
REALISATIETIJD[fc1][fc2] = NG;
}
}
}
/* REALISATIETIJDEN VUL HARDE CONFLICTEN IN */
/* ---------------------------------------- */
/* void RealisatieTijden_VulHardeConflictenIn(void) vult de REALISATIETIJD[][] in voor de aanwezige harde conflicten (TIG[fc1][fc2] is waar (TRUE)).
*
* RealisatieTijden_VulHardeConflictenIn(void) bepaalt de waarde van REALISATIETIJD[][] voor de harde conflicten van de gerealiseerde fasecycli.
* RealisatieTijden_VulHardeConflictenIn(void) wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na InitRealisatieTijden().
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
*
*/
void RealisatieTijden_VulHardeConflictenIn(void)
{
count fc1, fc2, n;
for (fc1 = 0; fc1 < FCMAX; ++fc1)
{
for (n = 0; n < KFC_MAX[fc1]; ++n)
{
fc2 = KF_pointer[fc1][n]; /* bepaal de index van de conflicterende fasecyclus */
if (TIG[fc1][fc2]) /* aanwezig conflict - lopende intergroentijd */
{
if (PR[fc1] || BR[fc1])
{
REALISATIETIJD[fc1][fc2] =
(VS[fc1]) ? TFG_max[fc1] + TVG_max[fc1] + TIG_max[fc1][fc2] :
(FG[fc1]) ? TFG_max[fc1] - TFG_timer[fc1] + TVG_max[fc1] + TIG_max[fc1][fc2] :
(WG[fc1]) ? TVG_max[fc1] + TIG_max[fc1][fc2] :
(VG[fc1] && (TVG_max[fc1] > TVG_timer[fc1])) ? TVG_max[fc1] - TVG_timer[fc1] + TIG_max[fc1][fc2] :
(VG[fc1] && (TVG_max[fc1] <= TVG_timer[fc1])) ? TIG_max[fc1][fc2] :
(MG[fc1]) ? TIG_max[fc1][fc2] : TIG_max[fc1][fc2] - TIG_timer[fc1];
}
else /* AR */
{
REALISATIETIJD[fc1][fc2] =
(VS[fc1]) ? TFG_max[fc1] + TVG_AR[fc1] + TIG_max[fc1][fc2] :
(FG[fc1]) ? TFG_max[fc1] - TFG_timer[fc1] + TVG_AR[fc1] + TIG_max[fc1][fc2] :
(WG[fc1]) ? TVG_AR[fc1] + TIG_max[fc1][fc2] :
(VG[fc1] && (TVG_AR[fc1] > TVG_timer[fc1])) ? TVG_AR[fc1] - TVG_timer[fc1] + TIG_max[fc1][fc2] :
(VG[fc1] && (TVG_AR[fc1] <= TVG_timer[fc1])) ? TIG_max[fc1][fc2] :
(MG[fc1]) ? (TIG_max[fc1][fc2]) : TIG_max[fc1][fc2] - TIG_timer[fc1];
}
}
else
{
REALISATIETIJD[fc1][fc2] = 0;
}
}
}
}
/* REALISATIETIJDEN VUL GROEN-GROEN CONFLICTEN IN */
/* ---------------------------------------------- */
/* void RealisatieTijden_VulGroenGroenConflictenIn(void) vult de REALISATIETIJD[][] in voor de aanwezige groen/groen conflicten (TIG[fc1][fc2] is waar (TRUE)).
*
* RealisatieTijden_VulGroenGroenConflictenIn(void) bepaalt de waarde van REALISATIETIJD[][] voor de groen/groen conflicten van de gerealiseerde fasecycli.
* RealisatieTijden_VulHardeConflictenIn(void) wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na InitRealisatieTijden() en
* RealisatieTijden_VulHardeConflictenIn().
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
* RealisatieTijden_VulGroenGroenConflictenIn();
*/
void RealisatieTijden_VulGroenGroenConflictenIn(void)
{
count fc1, fc2, n;
for (fc1 = 0; fc1 < FCMAX; ++fc1)
{
for (n = GKFC_MAX[fc1]; n < FKFC_MAX[fc1]; ++n)
{
fc2 = KF_pointer[fc1][n]; /* bepaal de index van de conflicterende fasecyclus */
if (TIG[fc1][fc2]) /* aanwezig conflict - lopende intergroentijd */
{
if (PR[fc1] || BR[fc1])
{
REALISATIETIJD[fc1][fc2] =
(VS[fc1]) ? TFG_max[fc1] + TVG_max[fc1] :
(FG[fc1]) ? TFG_max[fc1] - TFG_timer[fc1] + TVG_max[fc1] :
(WG[fc1]) ? TVG_max[fc1] :
(VG[fc1] && (TVG_max[fc1] > TVG_timer[fc1])) ? TVG_max[fc1] - TVG_timer[fc1] :
(MG[fc1] || VG[fc1] && (TVG_max[fc1] <= TVG_timer[fc1])) ? 1 : 0;
}
else /* AR[] */
{
REALISATIETIJD[fc1][fc2] =
(VS[fc1]) ? TFG_max[fc1] + TVG_AR[fc1] :
(FG[fc1]) ? TFG_max[fc1] - TFG_timer[fc1] + TVG_AR[fc1] :
(WG[fc1]) ? TVG_AR[fc1] :
(VG[fc1] && (TVG_AR[fc1] > TVG_timer[fc1])) ? TVG_AR[fc1] - TVG_timer[fc1] :
(MG[fc1] || VG[fc1] && (TVG_AR[fc1] <= TVG_timer[fc1])) ? 1 : 0;
}
}
else
{
REALISATIETIJD[fc1][fc2] = 0;
}
}
}
}
/* CORRIGEER REALISATIETIJDEN OP BASIS VAN GARANTIETIJDEN */
/* ------------------------------------------------------ */
/* void CorrigeerRealisatieTijdenObvGarantieTijden(void) corrigeert de REALISATIETIJD[][] indien de fasecyclus zelf wordt afgewikkeld (realisatietijd naar zichzelf).
* een fasecyclus mag na groenrealisatie niet direct weer realiseren; eerst geel (GL[]) en garantierood (TRG[]).
* de waarde wordt ingevuld in de realisatietijd naar de fasecylus zelf; REALISATIETIJD[fc1][fc1].
*
* CorrigeerRealisatieTijdenObvGarantieTijden(void) wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na InitRealisatieTijden(),
* RealisatieTijden_VulHardeConflictenIn() en RealisatieTijden_VulGroenGroenConflictenIn().
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
* RealisatieTijden_VulGroenGroenConflictenIn();
* CorrigeerRealisatieTijdenObvGarantieTijden(); // een richting mag na groen niet direct weer realiseren (eerst GL en TRG)
*
*/
void CorrigeerRealisatieTijdenObvGarantieTijden(void)
{
count fc1;
for (fc1 = 0; fc1 < FCMAX; ++fc1)
{
REALISATIETIJD[fc1][fc1] = GL[fc1] ? (TGL_max[fc1] - TGL_timer[fc1] + TRG_max[fc1]) : TRG[fc1] ? TRG_max[fc1] - TRG_timer[fc1] : 0;
if ((REALISATIETIJD[fc1][fc1] <= 0) && RV[fc1]) REALISATIETIJD[fc1][fc1] = 1; // De waarde is 1 omdat de richting altijd nog door RA moet
}
}
/* REALISATIETIJD NALOOP OP EINDE GROEN (NLEG) */
/* ------------------------------------------- */
/* void Realisatietijd_NLEG(count i, count j, count tnlfg, count tnlfgd, count tnleg, count tnlegd, count tvgnaloop) bij een naloop EG.
* voor de harde en groen-groen conflicten van de volgrichting/nalooprichting worden de REALISATIETIJD[][]-en bepaald t.o.v. de voedende richting REALISATIETIJD[i][k[],
* dit zijn vaak fictieve conflicten van elkaar.
*
* i ----> j ---> i: index-voedende richting en j: index-nalooprichting
* ^
* |
* k - index van conflict van de nalooprichting
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* i - index fasecyclus van de voedende richting
* j - index fasecyclus van de nalooprichting
* tnlfg - index tijdelement - Vaste nalooptijd voor (eerste) voertuig(en) tijdens vastgroen (FG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnlfgd - index tijdelement - Detectie afhankelijke nalooptijd voor (eerste) voertuig(en) tijdens vastgroen (FG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnleg - index tijdelement - Vaste nalooptijd voor voertuig(en) tijdens groen (G[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnlegd - index tijdelement - Detectie afhankelijke nalooptijd voor voertuig(en) tijdens groen of geel (G[fc1] || GL[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tvgnaloop - index T_max[] - Maximale verlengtijd op eigen detectie na aflopen nalooptijden voor de naloop richting.
*
* void Realisatietijd_NLEG() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie en vullen van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
* RealisatieTijden_VulGroenGroenConflictenIn();
* CorrigeerRealisatieTijdenObvGarantieTijden(); // een richting mag na groen niet direct weer realiseren (eerst GL en TRG)
*
* //Pas Realisatietijden aan voor nalopenEG
* Realisatietijd_NLEG(fc02, fc62, tnlfg0262, tnlfgd0262, tnleg0262, tnlegd0262, tvgnaloop0262);
* Realisatietijd_NLEG(fc08, fc68, tnlfg0868, tnlfgd0868, tnleg0868, tnlegd0868, tvgnaloop0868);
* Realisatietijd_NLEG(fc11, fc68, tnlfg1168, tnlfgd1168, tnleg1168, tnlegd1168, tvgnaloop1168);
* Realisatietijd_NLEG(fc22, fc21, tnlfg2221, tnlfgd2221, tnleg2221, tnlegd2221, tvgnaloop2221);
* Realisatietijd_NLEG(fc82, fc81, tnlfg8281, tnlfgd8281, tnleg8281, tnlegd8281, tvgnaloop8281);
*
*/
void Realisatietijd_NLEG(count i, count j, count tnlfg, count tnlfgd, count tnleg, count tnlegd, count tvgnaloop)
{
int k, n;
for (n = 0; n < KFC_MAX[j]; n++) /* doorloop de conflicten van de naloop richting */
{
k = KF_pointer[j][n]; /* bepaal de index van de conflicterende fasecyclus */
if (!AR[i])
{
if (CV[i] && !RA[i])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnleg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + TGL_max[i] + T_max[tnlegd] + T_max[tvgnaloop] + TIG_max[j][k]);
}
else if (TIG[j][k])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnleg] - T_timer[tnleg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TGL_max[i] - TGL_timer[i] + T_max[tnlegd] - ((G[i] || GL[i]) ? 0 : T_timer[tnlegd]) + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
}
}
else
{
if (CV[i] && !RA[i] && !(TVG_timer[i] > TVG_AR[i]))
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnleg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + TGL_max[i] + T_max[tnlegd] + T_max[tvgnaloop] + TIG_max[j][k]);
}
else if (TIG[j][k])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnleg] - T_timer[tnleg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TGL_max[i] - TGL_timer[i] + T_max[tnlegd] - ((G[i] || GL[i]) ? 0 : T_timer[tnlegd]) + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
}
}
}
for (n = KFC_MAX[j]; n < GKFC_MAX[j]; n++)
{
k = KF_pointer[j][n]; /* bepaal de index van de conflicterende fasecyclus */
if (!AR[i])
{
if (CV[i] && !RA[i])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnleg] + T_max[tvgnaloop]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + TGL_max[i] + T_max[tnlegd] + T_max[tvgnaloop]);
}
else if (G[j])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnleg] - T_timer[tnleg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TGL_max[i] - TGL_timer[i] + T_max[tnlegd] - (GL[i] ? 0 : T_timer[tnlegd]) + T_max[tvgnaloop] - T_timer[tvgnaloop]);
}
}
else
{
if (CV[i] && !RA[i] && !(TVG_timer[i] > TVG_AR[i]))
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnleg] + T_max[tvgnaloop]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + TGL_max[i] + T_max[tnlegd] + T_max[tvgnaloop]);
}
else if (G[j])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnleg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnleg] - T_timer[tnleg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlegd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TGL_max[i] - TGL_timer[i] + T_max[tnlegd] - ((G[i] || GL[i]) ? 0 : T_timer[tnlegd]) + T_max[tvgnaloop] - T_timer[tvgnaloop]);
}
}
}
}
/* REALISATIETIJD NALOOP OP EINDE VERLENGGROEN (NLEVG) */
/* --------------------------------------------------- */
/* void Realisatietijd_NLEVG(count i, count j, count tnlfg, count tnlfgd, count tnlevg, count tnlevgd, count tvgnaloop) bepaalt de REALISATIETIJD[][] bij een NaloopEVG
* voor de harde en groen-groen conflicten van de volgrichting/nalooprichting worden de REALISATIETIJD[][]-en bepaald t.o.v. de voedende richting REALISATIETIJD[i][k[],
* dit zijn vaak fictieve conflicten van elkaar.
*
* i ----> j ---> i: index-voedende richting en j: index-nalooprichting
* ^
* |
* k - index van conflict van de nalooprichting
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* i - index fasecyclus van de voedende richting
* j - index fasecyclus van de nalooprichting
*
* tnlfg - index tijdelement - Vaste nalooptijd voor (eerste) voertuig(en) tijdens vastgroen (FG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnlfgd - index tijdelement - Detectie afhankelijke nalooptijd voor (eerste) voertuig(en) tijdens vastgroen (FG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnlevg - index tijdelement - Vaste nalooptijd voor voertuig(en) tijdens groen en geen meeverlenggroen (G[fc1] && !MG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tnlevgd - index tijdelement - Detectie afhankelijke nalooptijd voor voertuig(en) tijdens groen en geen meeverlenggroen (G[fc1] && !MG[fc1]) van de voedende richting;
* rijtijd tot de detectie van de volgrichting; NG indien niet gebruikt.
* tvgnaloop - index T_max[] - Maximale verlengtijd op eigen detectie na aflopen nalooptijden voor de naloop richting.
*
* void Realisatietijd_NLEVG() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie en vullen van de REALISATIETIJD[][]-en
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
* RealisatieTijden_VulGroenGroenConflictenIn();
* CorrigeerRealisatieTijdenObvGarantieTijden(); // een richting mag na groen niet direct weer realiseren (eerst GL en TRG)
*
* //Pas Realisatietijden aan voor nalopenEG
* Realisatietijd_NLEG(fc02, fc62, tnlfg0262, tnlfgd0262, tnleg0262, tnlegd0262, tvgnaloop0262);
* Realisatietijd_NLEG(fc08, fc68, tnlfg0868, tnlfgd0868, tnleg0868, tnlegd0868, tvgnaloop0868);
* Realisatietijd_NLEG(fc11, fc68, tnlfg1168, tnlfgd1168, tnleg1168, tnlegd1168, tvgnaloop1168);
* Realisatietijd_NLEG(fc22, fc21, tnlfg2221, tnlfgd2221, tnleg2221, tnlegd2221, tvgnaloop2221);
* Realisatietijd_NLEG(fc82, fc81, tnlfg8281, tnlfgd8281, tnleg8281, tnlegd8281, tvgnaloop8281);
*
*/
void Realisatietijd_NLEVG(count i, count j, count tnlfg, count tnlfgd, count tnlevg, count tnlevgd, count tvgnaloop)
{
int k, n;
for (n = 0; n < KFC_MAX[j]; n++) /* doorloop de conflicten van de nalooprichting */
{
k = KF_pointer[j][n]; /* bepaal de index van de conflicterende fasecyclus */
if (!AR[i])
{
if (CV[i] && !RA[i])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnlevg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnlevgd] + T_max[tvgnaloop] + TIG_max[j][k]);
}
else if (TIG[j][k])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevg] - T_timer[tnlevg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevgd] - T_timer[tnlevgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
}
}
else
{
if (CV[i] && !RA[i] && !(TVG_timer[i] > TVG_AR[i]))
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnlevg] + T_max[tvgnaloop] + TIG_max[j][k]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnlevgd] + T_max[tvgnaloop] + TIG_max[j][k]);
}
else if (TIG[j][k])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevg] - T_timer[tnlevg] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevgd] - T_timer[tnlevgd] + T_max[tvgnaloop] - T_timer[tvgnaloop] + TIG_max[j][k] - TIG_timer[j]);
}
}
}
for (n = KFC_MAX[j]; n < GKFC_MAX[j]; n++) /* doorloop de conflicten van de nalooprichting */
{
k = KF_pointer[j][n]; /* bepaal de index van de conflicterende fasecyclus */
if (!AR[i])
{
if (CV[i] && !RA[i])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnlevg] + T_max[tvgnaloop]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + (((TVG_max[i] - TVG_timer[i]) > 0) ? (TVG_max[i] - TVG_timer[i]) : 0) + T_max[tnlevgd] + T_max[tvgnaloop]);
}
else if (G[j])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevg] - T_timer[tnlevg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevgd] - T_timer[tnlevgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
}
}
else
{
if (CV[i] && !RA[i] && !(TVG_timer[i] > TVG_AR[i]))
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + T_max[tnlfgd] - (FG[i] ? 0 : T_timer[tnlfgd]) + T_max[tvgnaloop]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnlevg] + T_max[tvgnaloop]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], TFG_max[i] - TFG_timer[i] + TVG_AR[i] - TVG_timer[i] + T_max[tnlevgd] + T_max[tvgnaloop]);
}
else if (G[j])
{
if (!(tnlfg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfg] - T_timer[tnlfg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlfgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlfgd] - T_timer[tnlfgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlevg == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevg] - T_timer[tnlevg] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
if (!(tnlevgd == NG)) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlevgd] - T_timer[tnlevgd] + T_max[tvgnaloop] - T_timer[tvgnaloop]);
}
}
}
}
/* REALISATIETIJD NALOOP OP STARTGROEN (NLSG) */
/* ------------------------------------------ */
/* void Realisatietijd_NLSG(count i, count j, count tnlsg, count tnlsgd) bepaalt de REALISATIETIJD[][] bij een NaloopSG.
* voor de harde en groen-groen conflicten van de volgrichting/nalooprichting worden de REALISATIETIJD[][]-en bepaald t.o.v. de voedende richting REALISATIETIJD[i][k[] - dit zijn vaak fictieve conflicten van elkaar.
*
* i ----> j ---> i: index-voedende richting en j: index-nalooprichting
* ^
* |
* k - index van conflict van de nalooprichting
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* i - index fasecyclus van de voedende richting
* j - index fasecyclus van de nalooprichting
* tnlsg - index tijdelement - vaste nalooptijd voor (eerste) voetganger vanaf startgroen (SG[fc1]) van de voedende richting; NG indien niet gebruikt.
* tnlsgd - index tijdelement - detectie aanvraag afhankelijke nalooptijd voor (eerste) voetganger vanaf startgroen (SG[fc1]) van de voedende richting;
* NG indien niet gebruikt
*
* void Realisatietijd_NLSG() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie en vullen van de REALISATIETIJD[][]-en
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door de applicatiefunctie application().
*
* //Realisatietijden
* InitRealisatieTijden();
* RealisatieTijden_VulHardeConflictenIn();
* RealisatieTijden_VulGroenGroenConflictenIn();
* CorrigeerRealisatieTijdenObvGarantieTijden(); // een richting mag na groen niet direct weer realiseren (eerst GL en TRG)
*
* // Pas Realisatietijden aan voor nalopenEG
* Realisatietijd_NLEG(fc02, fc62, tnlfg0262, tnlfgd0262, tnleg0262, tnlegd0262, tvgnaloop0262);
* Realisatietijd_NLEG(fc08, fc68, tnlfg0868, tnlfgd0868, tnleg0868, tnlegd0868, tvgnaloop0868);
* Realisatietijd_NLEG(fc11, fc68, tnlfg1168, tnlfgd1168, tnleg1168, tnlegd1168, tvgnaloop1168);
* Realisatietijd_NLEG(fc22, fc21, tnlfg2221, tnlfgd2221, tnleg2221, tnlegd2221, tvgnaloop2221);
* Realisatietijd_NLEG(fc82, fc81, tnlfg8281, tnlfgd8281, tnleg8281, tnlegd8281, tvgnaloop8281);
*
* // Pas Realisatietijden aan voor nalopenSG
* Realisatietijd_NLSG(fc31, fc32, tnlsg3132, tnlsgd3132);
* Realisatietijd_NLSG(fc32, fc31, tnlsg3231, tnlsgd3231);
* Realisatietijd_NLSG(fc33, fc34, NG, tnlsgd3334);
* Realisatietijd_NLSG(fc34, fc33, NG, tnlsgd3433);
*
*/
void Realisatietijd_NLSG(count i, count j, count tnlsg, count tnlsgd)
{
int k, n;
for (n = 0; n < KFC_MAX[j]; n++) /* doorloop de conflicten van de nalooprichting */
{
k = KF_pointer[j][n]; /* bepaal de index van de conflicterende fasecyclus */
if (VS[i])
{
if (!(tnlsg == NG) && (RT[tnlsg] || T[tnlsg])) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlsg] + TIG_max[j][k]);
if (!(tnlsgd == NG) && (RT[tnlsgd] || T[tnlsgd])) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlsgd] + TIG_max[j][k]);
}
else
{
if (!(tnlsg == NG) && T[tnlsg]) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlsg] - T_timer[tnlsg] + TIG_max[j][k]);
if (!(tnlsgd == NG) && T[tnlsgd]) REALISATIETIJD[i][k] = max(REALISATIETIJD[i][k], T_max[tnlsgd] - T_timer[tnlsgd] + TIG_max[j][k]);
}
}
}
/* REALISATIETIJD BIJ HARD MEEVERLENGEN MET EEN DEELCONFLICT */
/* --------------------------------------------------------- */
/* void Realisatietijd_HardMeeverlengenDeelconflict(count fc1, count fc2) bepaalt de REALISATIETIJD[][] bij toepassing van hard meeverlengen
* van een deelconflict richting.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fc1 - index fasecyclus van de richting die hard meeverlengt
* fc2 - index fasecyclus van de richting
*
* void Realisatietijd_HardMeeverlengenDeelconflict() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void)
* na de initialisatie en vullen van de REALISATIETIJD[][]-en BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* //Pas Realisatietijden aan voor hard meeverlengen deelconflict
* Realisatietijd_HardMeeverlengenDeelconflict(fc05, fc22);
* Realisatietijd_HardMeeverlengenDeelconflict(fc11, fc26);
* Realisatietijd_HardMeeverlengenDeelconflict(fc05, fc32);
*/
void Realisatietijd_HardMeeverlengenDeelconflict(mulv fc1, mulv fc2)
{
count fc;
for (fc = 0; fc < FCMAX; fc++)
{
if (TIGR[fc2][fc] >= 0)
{
if (G[fc1])
{
if (!AR[fc1])
{
REALISATIETIJD[fc1][fc] = max(REALISATIETIJD[fc1][fc], TFG_max[fc1] - TFG_timer[fc1] + ((((TVG_max[fc1] - TVG_timer[fc1]) && !MG[fc1]) > 0) ? (TVG_max[fc1] - TVG_timer[fc1]) : 0) + TIGR[fc2][fc]);
}
else
{
REALISATIETIJD[fc1][fc] = max(REALISATIETIJD[fc1][fc], TFG_max[fc1] - TFG_timer[fc1] + TVG_AR[fc1] - (((TVG_AR[fc1] > TVG_timer[fc1]) && !MG[fc1]) ? TVG_timer[fc1] : 0) + TIGR[fc2][fc]);
}
}
}
}
}
/* REALISATIETIJD ONTRUIMING VOORSTART */
/* ----------------------------------- */
/* void Realisatietijd_Ontruiming_Voorstart(count fcns, count fcvs, count tfo) bepaalt de REALISATIETIJD[][] bij (fictief) ontruimende deelconflicten met een voorstart;
* REALISATIETIJD[fcns][fcvs] wordt zonodig aangepast.
* Realisatietijd_Ontruiming_Voorstart() herstart de fictieve ontruimingstijd.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fcns - index fasecyclus die als laatste start
* fcvs - index fasecyclus die als eerste start
* tfo - index tijdelement fictieve ontruimingstijd
*
* void Realisatietijd_Ontruiming_Voorstart() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* // Pas realisatietijden aan voor (fictieve) ontruiming deelconflicten met Voorstart
* Realisatietijd_Ontruiming_Voorstart(fc05, fc22, tfo0522);
* Realisatietijd_Ontruiming_Voorstart(fc05, fc32, tfo0532);
*/
void Realisatietijd_Ontruiming_Voorstart(count fcns, count fcvs, count tfo)
{
RT[tfo] = G[fcns]; /* hertart de fictieve ontruimingstijd */
if (T[tfo] && !G[fcvs])
{
REALISATIETIJD[fcns][fcvs] = TFG_max[fcns] - TFG_timer[fcns] + (((TVG_max[fcns] - TVG_timer[fcns]) > 0) ? (TVG_max[fcns] - TVG_timer[fcns]) : 0) + T_max[tfo] - T_timer[tfo];
}
}
/* REALISATIETIJD ONTRUIMING GELIJKSTART */
/* ------------------------------------- */
/* void Realisatietijd_Ontruiming_Gelijkstart(count fc1, count fc2, count tfo12, count tfo21) bepaalt de REALISATIETIJD[][] bij (fictief) ontruimende deelconflicten
* met een gelijkstart; REALISATIETIJD[fc1][fc2] en REALISATIETIJD[fc2][fc1] worden zonodig aangepast.
* Realisatietijd_Ontruiming_Gelijkstart() herstart de fictieve ontruimingstijden.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fc1 - index fasecyclus deelconflict
* fc2 - index fasecyclus deelconflict
* tfo12 - index tijdelement fictieve ontruimingstijd
* tfo21 - index tijdelement fictieve ontruimingstijd
*
* void Realisatietijd_Ontruiming_Gelijkstart() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* //Pas realisatietijden aan voor (fictieve) ontruiming deelconflicten met Gelijkstart
* Realisatietijd_Ontruiming_Voorstart(fc05, fc11, tfo0511, tfo1105);
*/
void Realisatietijd_Ontruiming_Gelijkstart(count fc1, count fc2, count tfo12, count tfo21)
{
RT[tfo12] = G[fc1]; /* hertart de fictieve ontruimingstijd */
if (T[tfo12] && !G[fc2])
{
REALISATIETIJD[fc2][fc1] = TFG_max[fc1] - TFG_timer[fc1] + (((TVG_max[fc1] - TVG_timer[fc1]) > 0) ? (TVG_max[fc1] - TVG_timer[fc1]) : 0) + T_max[tfo12] - T_timer[tfo12];
}
RT[tfo21] = G[fc2]; /* hertart de fictieve ontruimingstijd */
if (T[tfo21] && !G[fc1])
{
REALISATIETIJD[fc1][fc2] = TFG_max[fc2] - TFG_timer[fc2] + (((TVG_max[fc1] - TVG_timer[fc1]) > 0) ? (TVG_max[fc1] - TVG_timer[fc1]) : 0) + T_max[tfo21] - T_timer[tfo21];
}
}
/* REALISATIETIJD ONTRUIMING LATERELEASE */
/* ------------------------------------- */
/* void Realisatietijd_Ontruiming_LateRelease(count fcvs, count fclr, count tlr, count tfo) bepaalt de REALISATIETIJD[][] bij (fictief) ontruimende deelconflicten
* met een LateRelease; REALISATIETIJD[fclr][fcvs] wordt zonodig aangepast.
* Realisatietijd_Ontruiming_LateRelease() herstart de fictieve ontruimingstijden.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fcvs - index fasecyclus deelconflict die als eerste start
* fclr - index fasecyclus deelconflict die als laatste start met LateRelease
* tlr - index tijdelement LateRelease
* tfo - index tijdelement fictieve ontruimingstijd
*
* void Realisatietijd__Ontruiming_LateRelease() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* //Pas realisatietijden aan voor (fictieve) ontruiming deelconflicten met LateRelease
* Realisatietijd_Ontruiming_LateRelease(fc11, fc26, tlr2611, tfo2611);
*/
void Realisatietijd_Ontruiming_LateRelease(count fcvs, count fclr, count tlr, count tfo)
{
RT[tfo] = G[fcvs] && (TG_timer[fcvs] > T_max[tlr]); /* hertart de fictieve ontruimingstijd */
if (T[tfo] && !G[fclr])
{
REALISATIETIJD[fclr][fcvs] = TFG_max[fcvs] - TFG_timer[fcvs] + (((TVG_max[fcvs] - TVG_timer[fcvs]) > 0) ? (TVG_max[fcvs] - TVG_timer[fcvs]) : 0) + T_max[tfo] - T_timer[tfo];
}
}
/* REALISATIETIJD VOORSTART CORRECTIE */
/* ---------------------------------- */
/* boolv Realisatietijd_Voorstart_Correctie(count fcvs, count fcns, count tvs) corrigeert de REALISATIETIJD[][] bij deelconflicten met een Voorstart. //@PSN andere volgorde fcns en fcvs bij void Realisatietijd_Ontruiming_Voorstart()
* Realisatietijd_Voorstart_Correctie() vergelijkt alle REALISATIETIJD[n][fcvs] met REALISATIETIJD[n][fcns] en past indien nodig REALISATIETIJD[n][fcns] aan,
* en/of past REALISATIETIJD[fcvs][fcns] aan.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fcvs - index fasecyclus die als eerste start
* fcns - index fasecyclus die als laatste start
* tvs - index tijdelement voorstarttijd
*
* void Realisatietijd_Voorstart_Correctie() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* // Pas realisatietijden aan voor deelconflicten met Voorstart die nog groen moeten worden //@PSN Deze correcties zouden toch ook in TIGR[][] kunnen worden geplaatst.
* do
* {
* wijziging = FALSE;
*
* // Voorstart deelconflicten
* wijziging |= Realisatietijd_Voorstart_Correctie(fc22, fc05, tvs2205);
* wijziging |= Realisatietijd_Voorstart_Correctie(fc32, fc05, tvs3205);
*
* wijziging |= CorrectieRealisatieTijd_Add();
*
* } while (wijziging); //@PSN Let op! functie zou in theorie oneindig kunnen doorgaan!!
*/
boolv Realisatietijd_Voorstart_Correctie(count fcvs, count fcns, count tvs)
{
count n;
boolv result = FALSE;
if ((A[fcvs] || !(PG[fcvs] & PRIMAIR_OVERSLAG) || TRUE) && !G[fcvs]) //@PSN || TRUE is altijd waar; //@@## warning C4127: conditional expression is constant
{
for (n = 0; n < FCMAX; ++n)
{
if ((REALISATIETIJD[n][fcns] < (REALISATIETIJD[n][fcvs] + T_max[tvs])) && REALISATIETIJD[n][fcvs] > 0)
{ /* @PSN is testen op REALISATIETIJD[n][fcvs] > 0 wel goed? >=0?? extra haakjes (REALISATIETIJD[n][fcvs] > 0) */
REALISATIETIJD[n][fcns] = REALISATIETIJD[n][fcvs] + T_max[tvs]; /* @PSN bij REALISATIETIJD[n][fcvs] == 0 moet toch worden verhoogd met T_max[tvs]; */
result = TRUE;
}
}
}
if (G[fcvs] || RA[fcvs] && (REALISATIETIJD_max[fcvs] <= 1)) //@PSN G[fcvs] er wordt toch ook tijdens groen aangepast!
{
if (TG[fcvs])
{
if (REALISATIETIJD[fcvs][fcns] < (T_max[tvs] - TG_timer[fcvs]))
{
REALISATIETIJD[fcvs][fcns] = T_max[tvs] - TG_timer[fcvs];
result = TRUE;
}
}
else
{
if (REALISATIETIJD[fcvs][fcns] < T_max[tvs])
{
REALISATIETIJD[fcvs][fcns] = T_max[tvs];
result = TRUE;
}
}
}
return result;
}
/* REALISATIETIJD GELIJKSTART CORRECTIE */
/* ------------------------------------ */
/* boolv Realisatietijd_Gelijkstart_Correctie(count fc1, count fc2) corrigeert zonodig de REALISATIETIJD[][] bij deelconflicten met een gelijkstart.
* de realisatietijden REALISATIETIJD[n][fc1] en REALISATIETIJD[n][fc2] moeten gelijk aan elkaar zijn (grootste is maatgevend).
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fc1 - index eerste fasecyclus
* fc2 - index tweede fasecyclus
*
* void Realisatietijd_Gelijkstart_Correctie() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* // Pas realisatietijden aan voor deelconflicten met Gelijkstart die nog groen moeten worden
* do
* {
* wijziging = FALSE;
*
* // Gelijkstart deelconflicten
* wijziging |= Realisatietijd_Gelijkstart_Correctie(fc05, fc11);
*
* wijziging |= CorrectieRealisatieTijd_Add();
*
* } while (wijziging); //@PSN Let op! functie zou in theorie oneindig kunnen doorgaan!!
*/
boolv Realisatietijd_Gelijkstart_Correctie(count fc1, count fc2)
{
count n;
boolv result = FALSE;
// @PSN TODO vergt uitwerking indien een van de twee gelijkstartende richtingen niet komt
// if ((A[fc1] || !(PG[fc1] & PRIMAIR_OVERSLAG)) && (A[fc2] || !(PG[fc2] & PRIMAIR_OVERSLAG)) && !G[fc1] && !G[fc2])
// {
for (n = 0; n < FCMAX; ++n)
{
if (REALISATIETIJD[n][fc1] < REALISATIETIJD[n][fc2])
{
REALISATIETIJD[n][fc1] = REALISATIETIJD[n][fc2];
result = TRUE;
}
else
{
if (REALISATIETIJD[n][fc1] != REALISATIETIJD[n][fc2]) /* @PSN REALISATIETIJD[n][fc1] > REALISATIETIJD[n][fc2] */
{
REALISATIETIJD[n][fc2] = REALISATIETIJD[n][fc1];
result = TRUE;
}
// }
}
}
return result;
}
/* REALISATIETIJD LATERELEASE CORRECTIE */
/* ------------------------------------ */
/* boolv Realisatietijd_LateRelease_Correctie(count fclr, count fcvs, count tlr) corrigeert de REALISATIETIJD[][] bij deelconflicten met een LateReleas. //@@## andere volgorde fclr en fcvs bij void Realisatietijd_Ontruiming_LateRelease()
* Realisatietijd__LateRelease_Correctie() vergelijkt alle REALISATIETIJD[n][fcvs] met REALISATIETIJD[n][fclr] en past indien nodig REALISATIETIJD[n][fcvs] aan,
* en/of past REALISATIETIJD[fcvs][fcns] aan.
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* fclr - index fasecyclus deelconflict die als laatste start met LateRelease
* fcvs - index fasecyclus deelconflict die als eerste start
* tlr - index tijdelement LateRelease
*
* boolv Realisatietijd_LateRelease_Correctie() wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie van de REALISATIETIJD[][]-en.
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*
* // Pas realisatietijden aan voor deelconflicten met LateRelease die nog groen moeten worden
* do
* {
* wijziging = FALSE;
*
* // Inlopen / inrijden nalopen
* wijziging |= Realisatietijd_LateRelease_Correctie(fc62, fc02, txnl0262);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc68, fc08, txnl0868);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc68, fc11, txnl1168);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc21, fc22, txnl2221);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc32, fc31, txnl3132);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc31, fc32, txnl3231);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc34, fc33, txnl3334);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc33, fc34, txnl3433);
* wijziging |= Realisatietijd_LateRelease_Correctie(fc81, fc82, txnl8281);
*
* wijziging |= CorrectieRealisatieTijd_Add();
*
* } while (wijziging); //@PSN Let op! functie zou in theorie oneindig kunnen doorgaan!!
*/
boolv Realisatietijd_LateRelease_Correctie(count fclr, count fcvs, count tlr)
{
count n;
boolv result = FALSE;
if (A[fclr] || !PG[fclr] || TRUE) //@PSN || TRUE is altijd waar; warning C4127: conditional expression is constant
{
if (!G[fcvs])
{
for (n = 0; n < FCMAX; ++n)
{
if (REALISATIETIJD[n][fcvs] < REALISATIETIJD[n][fclr] - T_max[tlr])
{
REALISATIETIJD[n][fcvs] = REALISATIETIJD[n][fclr] - T_max[tlr];
if (REALISATIETIJD[n][fcvs] < 0) REALISATIETIJD[n][fcvs] = 0;
result = TRUE;
}
}
}
}
return result;
}
/* BEPAAL REALISATIETIJD PER RICHTING */
/* ---------------------------------- */
/* void Bepaal_Realisatietijd_per_richting(count i) bepaalt de waarde van REALISATIETIJD_max[], de grootste Realisatietijd in REALISATIETIJD[][] is bepalend.
*
* void Bepaal_Realisatietijd_per_richting(i) wordt aangeroepen vanuit de applicatiefunctie void BepaalRealisatieTijden(void) na de initialisatie en correctie
* van de de REALISATIETIJD[][]-en.
*
* BepaalRealisatieTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden().
*/
void Bepaal_Realisatietijd_per_richting(count i)
{
int j;
REALISATIETIJD_max[i] = 0;/* @PSN moet de intiele waarde niet NG zijn? */
for (j = 0; j < FCMAX; ++j) /* zoek de hoogste waarde voor de realisatietijd */
{
if (REALISATIETIJD_max[i] < REALISATIETIJD[j][i]) REALISATIETIJD_max[i] = REALISATIETIJD[j][i];
}
}
/* MEEVERLENGEN - YM_MAX_TIG_REALISATIETIJD */
/* ---------------------------------------- */
/* boolv ym_max_tig_Realisatietijd(count i, count prmomx) is een aangepaste ym_max_tig() voor de specificatie van het meeverlengen (YM[]) die gebruikt maakt
* van de REALISATIETIJD[][] en REALISATIETIJD_max[].
*
* bij aanroep van de functie dienen de volgende argumenten te worden meegegeven:
* i - index fasecyclus voor meeverlengen
* prmomx - index parameter voor maximaal ontruimingsverschil
*
* ym_max_tig_Realisatietijd() wordt aangeroepen vanuit de applicatiefunctie Meeverlengen().
*
* void Meeverlengen(void)
* {
* int fc; //@PSN int wijzigen in count.
*
* for (fc = 0; fc < FC_MAX; ++fc)
* {
* YM[fc] &= ~BIT1; // reset BIT-sturing
* YM[fc] &= ~BIT4; // reset BIT-sturing
* }
*
* YM[fc02] |= SCH[schmv02] && ym_max_tig_Realisatietijd(fc02, prmmv02) && hf_wsg_nlISG() ? BIT4 : 0;
* YM[fc03] |= SCH[schmv03] && ym_max_tig_Realisatietijd(fc03, prmmv03) && hf_wsg_nlISG() ? BIT4 : 0;
* YM[fc05] |= SCH[schmv05] && ym_max_tig_Realisatietijd(fc05, prmmv05) && hf_wsg_nlISG() ? BIT4 : 0;
* YM[fc08] |= SCH[schmv08] && ym_max_tig_Realisatietijd(fc08, prmmv08) && hf_wsg_nlISG() ? BIT4 : 0;
* YM[fc09] |= SCH[schmv09] && ym_max_tig_Realisatietijd(fc09, prmmv09) && hf_wsg_nlISG() ? BIT4 : 0;
* YM[fc11] |= SCH[schmv11] && ym_max_tig_Realisatietijd(fc11, prmmv11) && hf_wsg_nlISG() ? BIT4 : 0;
* }
*
*/
boolv ym_max_tig_Realisatietijd(count i, count prmomx) /* @PSN: todo fc22 moet met 5 meeverlengen als 11 groen is. */
{
register count n, j, k, m;
boolv ym;
if (prmomx == NG) prmomx = 0;
if (MG[i])
{ /* let op! i.v.m. snelheid alleen in MG[] behandeld */
ym = TRUE;
for (n = 0; n < FKFC_MAX[i]; ++n)
{
k = KF_pointer[i][n]; /* bepaal de index van de conflicterende fasecyclus */
if ((RA[k] || AAPR[k]) && !(FK_type[i][k] == FK_SG) && !(FK_type[i][k] == FK_EVG) && (REALISATIETIJD_max[k] >= 0))
{
ym = FALSE;
for (j = 0; j < FKFC_MAX[k]; j++)
{
m = KF_pointer[k][j]; /* bepaal de index van de fictief conflicterende fasecyclus */
if ((REALISATIETIJD[m][k] > REALISATIETIJD[i][k] + prmomx) && !(TNL_type[m][i] == TNL_EG))
{
ym = TRUE;
break;
}
}
if (!ym) break;
}
}
}
else
{
ym = FALSE;
}
return ym;
}
/* TEGENHOUDEN DOOR REALISATIETIJDEN */
/* --------------------------------- */
/* void TegenhoudenDoorRealisatietijden(void) wordt gebruikt voor het tegenhouden van de groenrealisatie van de richtingen m.b.v de instructies
* 'tegenhouden groenrealisatie' (X[]-BIT1) en 'herstart rood voor aanvraag' (RR[]-BIT1)
* op basis van de waarde(n) van de REALISATIETIJD[][].
*
* TegenhoudenDoorRealisatietijden() wordt aangeroepen vanuit de applicatiefunctie Synchronisaties().
* Synchronisaties(d) wordt aangeroepen vanuit de applicatiefunctie application()
*
* void Synchronisaties(void)
* {
* TegenhoudenDoorRealisatietijden();
*
* Synchronisaties_Add();
* }
*/
void TegenhoudenDoorRealisatietijden()
{
count i, j;
for (i = 0; i < FCMAX; ++i)
{
X[i] &= ~BIT1; /* reset instructie BIT1 van X[i] */
RR[i] &= ~BIT1; /* reset instructie BIT1 van RR[i] */
}
for (i = 0; i < FCMAX; ++i)
{
for (j = 0; j < FCMAX; ++j)
{
if (REALISATIETIJD[i][j] > 0) X[j] |= BIT1; /* Als er een realisatietijd loopt van (fictief) conflict i, wordt richting j nog tegengehouden */
if (REALISATIETIJD[i][j] > 150) RR[j] |= BIT1; /* @PSN 150 tijdelijk moet afhankelijk gemaakt worden van de tijd die een richting eerder mag starten dan de volgrichting */
}
}
}
/* INITIALISATIE INTERSTARTGROENTIJDEN */
/* ----------------------------------- */
/* void InitInterStartGroenTijden(void) bepaalt de initiele waarden van de InterStartGroenTijden matrix TISG_PR[][] en TISG_AR[][] en zet alle waarden op NG (niet gebruikt).
* de TISG_PR[][] en TISG_AR[][] dienen in de regelapplicatie te worden bepaald en gecorrigeerd voor o.a naloop richtingen //@@@@ verder aanvullen
*
* In een TLCGen-regelapplicatie wordt InitInterStartGroenTijden(void) aangeroepen vanuit de applicatiefunctie void BepaalInterStartGroenTijden(void).
* BepaalInterStartGroenTijden() wordt aangeroepen vanuit de applicatiefunctie Verlenggroentijden(), die wordt aangeroepen door application().
*/
void InitInterStartGroenTijden(void)
{