📜 ⬆️ ⬇️

PRT Transport Management System

Hi, Habr.
PRT stands for personal rapid transit. This is an automatic transport, controlled by a computer and moving along special paths. Here are links to Wikipedia in English and in Russian . In London, at Heathrow Airport, the current system has been operating for a couple of years. And the Japanese made such transport back in the 70s, but then they banned it. As Wikipedia says: the CVS (Computer-controlled Vehicle System) project was closed after the Japanese Ministry of Territory, Infrastructure and Transport stated that the system is unsafe and does not comply with the existing minimum distance rules. Therefore, for the introduction of this type of transport will need to adopt a special law.

First, I want to say how I see PRT-transport - this is a brilliant invention, which allows you to get to the destination station without stopping at intersections and stations. I believe that the wheels should be rubber, as in the London version, like a car. But the power should not be from the batteries, but from the contact rail. And the booths should not be 4-seater, but single and double (one after the other), which will make it possible to make narrower paths.

It says here that the PRT transport control system is synchronous, asynchronous, trans-synchronous, quasi-synchronous and Asynchronous Point Follower. As I understand it, the way I see PRT transport is the synchronous control system. And I see it this way: the vehicles (TC) or their absence move strictly according to the instructions and at a given distance. So to say electrons and holes, when compared with semiconductor devices. When boarding, the passenger indicates the destination station. The central computer receives this information, generates the path of movement and sends it to the vehicle.

To simplify the program, we assume that we have three stations A, B, and C (see figure).
')
image

There are also 4 control points: 2 points of flow confluence (B2, B4) and 2 forks (B1, B3). Suppose also that the vehicle is moving at a speed of 60 km / h, the distance between the noses of the vehicle is 8.33 meters (60 / 3.6 / 2). Then on the sections with a speed of 60 km / h the vehicle will pass 2 times per second. And at the station of the vehicle they move at a speed of 10 km / h, the distance between the noses of the vehicle is 2.77 (10 / 3.6) meters (vehicles will travel 1 time per second).

Let's try to write a program that defines the path. For the system depicted in the figure, we need two arrays, one array for each of the merging points B2 and B4, which store information about the vehicles passing through them. The dimension of the arrays will be 7200 = 60 * 60 * 2 (60 minutes * 60 seconds * 2 times / second). The array will store information about the vehicles passing through this merging point for the nearest hour. If 0 is stored in the array for a certain time, then the place is free (this is a hole). If this moment is booked by some vehicle, then you can store in the array the number of this vehicle.

I am writing to javascript, but I think there is no problem to do it in C.

B2.length = 7200; B4.length = 7200; //    for( i=0; i<7200; i++ ){ B2[i]=0; B4[i]=0; } //   TaktovOtBDoB2 = 20;//   0,5              B2 TaktovOtADoB2 =200;//   0,5          A    B2 TaktovOtBDoB4 = 20;//   0,5              B4 TaktovOtCDoB4 =200;//   0,5          C    B4 //        TekTakt: //   if( startTakt + TekTakt + TaktovOtADoB2 > 7200 )   7200: function nahodim_puti(S1,S2,NTC){//S1- , S2- , NTC-   if(S1=='A' && S2=='C'){ //    A    startTakt=0; //  ,   :    . do{ startTakt++; T = startTakt + TekTakt + TaktovOtADoB2; if( T >= 7200 ) T = T - 7200; }while( B2[T] != 0 ) //      () B2[T] = NTC; } if(S1=='B' && S2=='C'){//       startTakt=0; //  ,   :    . do{ startTakt++; T = startTakt + TekTakt + TaktovOtBDoB2; if( T >= 7200 ) T = T - 7200; }while( B2[T] != 0 ) //      () B2[T] = NTC; } if(S1=='C' && S2=='A'){//   C   A startTakt=0; //  ,   :    . do{ startTakt++; T = startTakt + TekTakt + TaktovOtCDoB4; if( T >= 7200 ) T = T - 7200; }while( B4[T] != 0 ) //      () B4[T] = NTC; } if(S1=='B' && S2=='A'){//      A startTakt=0; //  ,   :    . do{ startTakt++; T = startTakt + TekTakt + TaktovOtBDoB4; if( T >= 7200 ) T = T - 7200; }while( B4[T] != 0 ) //      () B4[T] = NTC; } return startTakt; } setInterval( OpredeliaemTekTakt, 500 ); function OpredeliaemTekTakt()//   TekTakt  1    ,     { B2[TekTakt]=0; B4[TekTakt]=0; TekTakt++; if(TekTakt==7200)TekTakt=0;} 


If there are several parking places at the station, then more merging points will be added for each parking place. Then to calculate the start of the vehicle, it is necessary to apply recursion.

Source: https://habr.com/ru/post/220179/


All Articles