PRT輸送管理システム

こんにちは、Habr。

PRTは個人の高速輸送の略です。 これはコンピューターによって制御され、特別なルートに沿って移動する自動トランスポートです。 ここに英語ロシア語のウィキペディアへのリンクがあります。 ロンドンのヒースロー空港では、機能するシステムが数年間稼働しています。 そして、日本人は70年代にそのような輸送を行ったが、その後禁止された。 Wikipediaに記載されているように、CVS(コンピューター制御車両システム)プロジェクトは、日本の領土交通省がシステムは安全ではなく、既存の最小距離規則に準拠していないと述べたため、閉鎖されました。 したがって、このタイプのトランスポートを実装するには、特別な法律を採用する必要があります。



そもそも、PRT輸送の見方をお話したいと思います。これは、交差点や駅で止まることなく、目的地の駅に着くことができる独創的な発明です。 ロンドン版のように、車のように車輪はゴム製でなければならないと思います。 しかし、電力はバッテリーからではなく、コンタクトレールからでなければなりません。 また、キャビンは4人乗りではなく、シングルとダブル(次々に)にする必要があります。これにより、狭い道を作ることができます。



ここは、PRT-トランスポート制御システムは、同期、非同期、トランス同期、準同期、および非同期ポイントフォロワーになることができると書かれています。 私が理解しているように、PRTトランスポートの見方は同期制御システムです。 しかし、私はそれをこのように見ます:車両(車両)またはその不在は、所定の距離および所定の距離でルートに沿って厳密に移動します。 つまり、半導体デバイスと比較すると、電子と正孔です。 搭乗するとき、乗客は目的地の駅を示します。 中央コンピューターはこの情報を受信し、移動経路を作成して車両に送信します。



プログラムを簡素化するために、3つのステーションA、B、Cがあると仮定します(図を参照)。



画像



4つの制御点もあります。フローの2つの合流点(B2、B4)と2つの分岐点(B1、B3)です。 また、車両が60 km / hの速度で移動し、車両の鼻の間の距離が8.33メートル(60 / 3.6 / 2)であるとします。 その後、時速60 kmの速度で、車両は1秒間に2回運転します。 駅では、車両は10 km / hの速度で移動し、車両の機首間の距離は2.77(10 / 3.6)メートルです(車両は1秒間に1回移動します)。



パスを定義するプログラムを作成してみましょう。 図に示すシステムの場合、2つの配列が必要です。1つの配列は、マージポイントB2とB4のそれぞれに対応し、通過する車両に関する情報を格納します。 配列の次元は、7200 = 60 * 60 * 2(60分* 60秒* 2回/秒)になります。 配列には、指定された合併ポイントを最も近い時間通過する車両に関する情報が格納されます。 特定の時点で0が配列に格納されている場合、場所は空いています(これは穴です)。 この瞬間が何らかの車両によって予約されている場合、この車両の番号を配列に保存できます。



私はjavascriptで書いていますが、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;}
      
      







駅に駐車場が複数ある場合、各駐車スペースの合流点が追加されます。 次に、車両が始動する瞬間を計算するには、再帰を適用する必要があります。



All Articles