BIDS Specifications

en_US en_USja ja

スポンサーリンク

ここでは、BIDSの仕様について書いておきたいと思います。なお、掲載時点で未実装の機能があるほか、β版等でリリースされているもの、専用仕様を採用しているものなどと仕様が異なる場合があります。この仕様書のバージョンは「v201」です。

略記一覧

本ページにおいて、以下の表のように略記する場合があります。

略記 意味
csdll BIDScs.dll(特記なき限りクライアントモードを指す)
Sv BIDS_Server.exe(サーバーモードのcsdllを組み込んだ表示ソフトも含む)
SvCp BVEとBIDS_Server.exeをともに起動したコンピュータ
ClCp SvCpのBIDS_Server.exeとの通信を確立させたSvを起動させたコンピュータ
OpeReq Operation Requestの略

System Link Image

BIDSがどのようにして機器の連動を実現しているかのイメージ図です。開発を進めていくうちに接続方式等が変更になる場合があります。
コミュニケーションの詳細については、後日作成予定です。

Sender : Mother Side

Sender : Client Side

Request Process

Sv-Sv通信

Sv間での通信には主にTCP/IPを用います。オプション設定として、UDP/IPにて通信することも可能です。
BVEの運転情報を独自の構造をしたbyte配列へと変換したものを、SvCpのSvからClCpのSvへと情報を送信しています。BVEを操作するためにClCpのSvからSvCpのSvへと情報を送信することはできますが、PanelやSoundの値を書き換えることはできません。
Sv-Sv通信には、以下の5つのモードがあります。デフォルトはFullですが、回線に余裕がない場合や必要な情報が限られている場合は、Full以外のモードを選択することができます。

Num Mode Basic Panel Sound Security
0 Full
1 Old(※1) ※2 ※3 ※4 ×
2 Lite+ × ×
3 Lite × × ×
4 Req

※1 : 旧世代互換対応用のデータ構造です。
※2 : 一部の情報が制限される場合があります。
※3 : Panel[0]~Panel[255]までの256個のデータのみ取得できます。
※4 : Sound[0]~Sound[255]までの256個のデータのみ取得できます。

但し、BIDS_Server.exeではOldモード、Reqモードへの対応はしておりません。

Basic情報群

Basic情報群では、速度情報や位置情報などの基本的な情報をグループ化して送信します。
送信する情報は、以下の通りです。送信情報のインデックス番号は、INum*4を利用してください。

固定数値グループ

このグループは、Basic情報群のうち数値が固定されているものを扱います。

INum Type Name Unit Info
0 byte[4] Header 中身は {0x54, 0x52, 0x62, 0x01} です。
1 UInt16[2] Version 送信元のVersion情報(前2Byte)と、送信元の情報(後2Byte)です。この仕様書に準拠している場合は、前2Byteには201(0x00C9)が入ります。
2 UInt16[2] Handles1 (段) Brake, Powerそれぞれのハンドルの段数です。前2ByteがBrake、後2ByteがPowerです。
3 UInt16[2] Handle2 (段) 前2ByteがATS確認に必要な最低段数で、後2Byteが常用最大ブレーキにあたるB段数です。
4 UInt16[2] Others (両,段) 前2Byteが編成両数、後2Byteが単弁の割り当て段数です。
5~ (var) CarInfo こちらのページ(準備中)にて解説します。
(Last) byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。情報の後尾4byteに入ります。

なお、INum.1の「送信元の情報」は、以下の通りです。この番号は、Versionに依らずに随時追加されます。

Num Info
0 不明
1 BIDS_Server.exe(BIDSppと接続中)
2 BIDS_Server.exe(OBIDSid.dllと接続中)
3 BIDS_Server.exe(ClCpで起動中)
4 BIDS_toSkyWay.exe(公開予定品)

共通変数グループ

このグループは、BVE5とopenBVEで共通して設定されている変数を扱います。将来的に扱われることを私が望んでいる変数も格納されてる可能性があります。

INum Type Name Unit Info
0 byte[4] Header 中身は {0x54, 0x52, 0x62, 0x02} です。
1 double MyLocation [m] 自列車の位置です。8byteを使用します
3 single MySpeed [km/h] 自列車の現在速度です。
4 single MyCurrent [A] 自列車に流れる電流(主電動機電流)です。
5 single MyWireVolt [kV] 自列車の架線電圧です。(2018.3.1現在未実装)
6 UInt NowTime [ms] 現在時刻です。24時以降も加算されると思われます
7 single MyBCPressure [kPa] 自列車のブレーキシリンダー(BrakeCylinder)圧
8 single MyMRPressure [kPa] 自列車の元空気ダメ(Main air Reservoir)圧
9 single MyERPressure [kPa] 自列車の釣合空気ダメ(Equalizing air Reservoir)圧
10 single MyBPPressure [kPa] 自列車のブレーキ管(Brake Pipe)圧
11 single MySAPPressure [kPa] 自列車の直通管(Straight Air Pipe)圧
12 int MySignalNum 自列車のいる閉塞の信号現示番号
13 bit[8] MyDoor 自列車のドア状態
14 byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

ドア状態に関しては、以下の表を参考にしてください。

Num Info 0 1
0 パイロットランプ点灯状態
1 左ドア開扉状態
2 右ドア開扉状態
3 左ドア動作状態
4 右ドア動作状態
5 1ドア開扉実施状態 F T
6 半自動扱い実施状態 F T
7 ドアバックアップ実施 F T

なお、開扉状態は動作が完全に終わった後に値が変化する仕様にする予定です。また、一部機能は実装されていない場合があります。

Bvets5独自変数グループ

BVE5独自の変数は2019年3月1日現在存在しないため、予約領域扱いとなります。

INum Type Name Unit Info
0 byte[4] Header 中身は {0x54, 0x52, 0x62, 0x03} です。
1 byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

openBVE独自変数グループ

現在openBVEの仕様を確認中です。仕様の正式策定まで今しばらくお待ちください。

INum Type Name Unit Info
0 byte[4] Header 中身は {0x54, 0x52, 0x62, 0x04} です。
1 byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

ハンドルグループ

このグループでは、各ハンドルの位置を設定しています。

INum Type Name Info
0 byte[4] Header 中身は {0x54, 0x52, 0x62, 0x05} です。
1 Int32 Power マイナスで抑速段に入ります。
2 Int32 Brake ブレーキハンドル位置(正の整数)
3 Int32 Reverser レバーサー位置(SLの場合は逆転機H位置-10000 ≦ x ≦ +10000)
4 Int32 SelfBrake 単弁位置(正の整数)
5 byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

一部機能は実装されていない場合があります。

Panel情報群

BVEのPanel配列です。Panel配列を128個ずつに区切り、50ms~500ms(Svで指定 デフォルト200ms)ごとにローテーションで送信します。但し、区切った後の配列内に1つでの値の更新を検出すると、即座に送信されます。
データは、1送信あたりヘッダの4Byteと終末記号の4Byteを含めた520Byteを、BIDSから送信します。但し、実際はこれに加えて様々な情報が自動で付加されるため、通信量はこれよりも多くなります。

データ構造は、以下の通りです。なお、HeaderとTail以外のすべての変数はInt32型です。

Num Name Info
0 Header 中身は {0x54, 0x52, 0x70, n} です。
1 Panel[0 + 128 * n] (128*n)番目のPanelの情報
(省略)
128 Panel[127 + 128 * n] (127 + 128 * n)番目のPanelの情報
129 Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

nには0~255までのグループ番号が整数で入ります。BVE5の場合0か1のみですが、openBVEの場合は最大で128 * 256 = 2^15個の要素を扱うことができます。なお、存在しない要素の情報には「0」が入ります。

Sound情報群

Panel情報群と同じく、128個の要素を1まとめにして送信します。
データ構造は、以下の通りです。なお、HeaderとTail以外のすべての変数はInt32型です。

Num Name Info
0 Header 中身は {0x54, 0x52, 0x73, n} です。
1 Sound[0 + 128 * n] (128*n)番目のSoundの情報
(省略)
128 Sound[127 + 128 * n] (127 + 128 * n)番目のSoundの情報
129 Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。

nには0~255までのグループ番号が整数で入ります。BVE5の場合0か1のみですが、openBVEの場合は最大で128 * 256 = 2^15個の要素を扱うことができます。なお、存在しない要素の情報には「0」が入ります。

Security情報群

保安装置の機能ごとに情報領域を割り当てています。詳しい割り当ては、専用ページ(後日作成予定)を参照してください。

INum Type Name Info
0 byte[4] Header 中身は {0x54, 0x52, 0x68, n} です。 n で保安装置の種類を表します。
1~ Securities 中身は保安装置によって異なります。
m byte[4] Tail 中身は {0xFE, 0xFE, 0xFE, 0xFE} です。保安装置により m の値は変化します。

OpeReq

BIDSには、csdllからのBVE操作要求をSvCpのBVEに対して送る機能があります。それがOpeReqです。
OpeReqは、Sv-Sv間通信、Sv-csdll間通信いずれにも用いることができます。
OpeReqはShift-JISでエンコードされたstring文字列で構成されます。コマンドの返答もstringで行われます。

コマンドは 接頭辞(+ 識別子)(Head) + 命令内容(Order) + 接尾辞(Tail) で構成されます。

利用できる機能は以下の通りです。

識別子

Char Target Action
R Reverser 操作要求を出す
S Power & Brake Lever 操作要求を出す
P Power Lever 操作要求を出す
B Brake Lever 操作要求を出す
K ATS Keys 操作要求を出す
I BIDS 情報送信要求を出す
A BIDS 情報自動送信の開始要求を出す
D BIDS 情報自動送信の停止要求を出す
V BIDS 対話先Svのバージョンを取得する
E BIDS エラー発生を通告する(主に対話先から送られる)
H BIDS 保安装置状態の送信要求を出す

R : レバーサー操作要求

レバーサーのハンドル位置を、指定位置に変更する命令です。3種類の命令をそれぞれ2~3種ずつあるコマンドのいずれかで実行できます。

コマンドは以下の7つです。なお、SLの逆転機を操作する必要が出てきた際は、お問い合わせください。
接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRR F 前進位置
1
N 中立位置
0
R 後進位置
B
-1

なお、同じ意味を持つコマンドいずれを使用しても結果は同じです。お好みのコマンドを使用してください。
操作が受理されると、0が返ります。

S : ワンハンドル型マスコン操作要求

ワンハンドル型マスコンのレバー位置を変更する命令を出します。このコマンド自体にリミッタはなく、車両の持つ段数以上のコマンドも受理されますが、必ずしも操作がBVEに反映されるわけではないことに注意してください。

コマンドは、以下のように任意の段数位置の数字と組み合わせて構成されます。接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRS -x レバー位置を-xに設定する(x∈ℕ)
-1 レバー位置を-1に設定する(B1位置に設定されます)
0 レバー位置を0に設定する(N位置に設定されます)
1 レバー位置を1に設定する(P1位置に設定されます)
x レバー位置をxに設定する(x∈ℕ)

なお、ℕは自然数全体の集合を表しますが、ハンドル位置を指定する変数としてint型が用いられているため、最大でも”2,147,483,647″(約20億)となります。BVEがそこまでの段数をサポートしているかは知りませんが。
操作が受理されると、0が返ります。

P : 力行ハンドル操作要求

接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRP -x レバー位置を-xに設定する(x∈ℕ)
-1 レバー位置を-1に設定する(抑速1段位置に設定されます)
0 レバー位置を0に設定する(P0位置に設定されます)
1 レバー位置を1に設定する(P1位置に設定されます)
x レバー位置をxに設定する(x∈ℕ)

なお、ℕは自然数全体の集合を表しますが、ハンドル位置を指定する変数としてint型が用いられているため、最大でも”2,147,483,647″(約20億)となります。BVEがそこまでの段数をサポートしているかは知りませんが。
操作が受理されると、0が返ります。

B : 制動ハンドル操作要求

接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRB 0 レバー位置を0に設定する(B0位置に設定されます)
1 レバー位置を1に設定する(B1位置に設定されます)
x レバー位置をxに設定する(x∈ℕ)

なお、ℕは自然数全体の集合を表しますが、ハンドル位置を指定する変数としてint型が用いられているため、最大でも”2,147,483,647″(約20億)となります。BVEがそこまでの段数をサポートしているかは知りませんが。
操作が受理されると、0が返ります。

K : ATSキー操作要求

ATSキーとは、BVEのATSプラグインに対するボタン操作に用いられるキーのことで、BVEの標準機能です。
BIDSでは、このほかにBVEのウィンドウに対して直接キー入力イベントを発生させるコマンドも実装していますが、思わぬトラブルが発生する可能性があるので、使用は推奨しておりません。

コマンドの構成は以下の通りです。接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRK Ux x番ボタンをUpさせる
Dx x番ボタンをDownさせる
Py yに対応するキーのPressイベントを発生させる
Ry yに対応するキーのReleaseイベントを発生させる

(それぞれ 0≦x≦19 y∈ℕ)
なお、yに入る数字についてはMicrosoftのこちらのページをご覧ください。
xに入る数字については以下の表を参考にしてください。

0 : Horn1 4 : ATS_S 8 : ATS_B2 12 : ATS_E 16 : ATS_I
1 : Horn2 5 : ATS_A1 9 : ATS_C1 13 : ATS_F 17 : ATS_J
2 : Music Horn 6 : ATS_A2 10 : ATS_C2 14 : ATS_G 18 : ATS_K
3 : Const. Speed 7 : ATS_B1 11 : ATS_D 15 : ATS_H 19 : ATS_L

また、openBVE向けには、以下の番号もサポートしております。
Commandは”OpenBveApi.Interface.Translations.Command“(20以上のもの)に準拠しております。

Num Command Meaning
22 DoorsLeft 左側ドアを開閉する
23 DoorsRight 右側ドアを開閉する
30 PlayMicSounds マイクからの音声入力を有効化する
31 CameraInterior カメラ位置を運転台にする
32 CameraInteriorNoPanel カメラ位置を運転台にし、運転台Panelを消す
33 CameraExterior カメラ位置を車両の外観を見れるような位置にする
34 CameraTrack カメラ位置を線路付近にする
57 TimetableToggle 時刻表の表示/非表示を切り替える
58 TimetableUp 時刻表を上にスクロールさせる
59 TimetableDown 時刻表を下にスクロールさせる
60 MiscClock 画面内の時計の表示/非表示を切り替える
61 MiscSpeed 画面内の現在速度の表示/非表示を切り替える
62 MiscGradient 画面内の勾配状態の表示/非表示を切り替える
63 MiscDistanceToNextStation 画面内の次駅までの距離の表示/非表示を切り替える
64 MiscFps 画面内のfpsの表示/非表示を切り替える
65 MiscAI AI運転(自動運転)の有効/無効を切り替える
66 MiscInterfaceMode Interfaceモードを切り替える
67 MiscBackfaceCulling Backface Cullingモードの有効/無効を切り替える
68 MiscCPUMode CPUモードの高低を切り替える
69 MiscTimeFactor 時の進みを加速させるか否かを切り替える
70 MiscPause 一時停止する。もしくは復帰する
71 MiscMute ミュートにする。もしくは復帰する
72 MiscFullscreen フルスクリーン表示の有効/無効を切り替える
73 MiscQuit openBVEを終了する
74 MenuActivate メニューを表示する
75 MenuUp メニューの選択項目を1つ上げる
76 MenuDown メニューの選択項目を1つ下げる
77 MenuEnter サブメニューに入る
78 MenuBack サブメニューから離脱する
79 DebugWireframe Wire Frame表示の有効/無効を切り替える
80 DebugNormals Normal Renderingモードに切り換える(?)
81 DebugBrakeSystems ブレーキのデバッグ用画面の表示/非表示を切り替える
82 DebugATS ATSのデバッグ用画面の表示/非表示を切り替える
83 ShowEvents Event表示画面の表示/非表示を切り替える
103 SecurityM ATS PI用 Mボタン(後方互換性確保用)
104 SecurityN ATS PI用 Nボタン(後方互換性確保用)
105 SecurityO ATS PI用 Oボタン(後方互換性確保用)
106 SecurityP ATS PI用 Pボタン(後方互換性確保用)
107 WiperSpeedUp ワイパーの往復速度を加速させる
108 WiperSpeedDown ワイパーの往復速度を減速させる
109 FillFuel 燃料を補給する(エンジン車用)
110 Headlights ヘッドライトの点灯/滅灯を切り替える
111 LiveSteamInjector Live Steam Injectorを操作する(?)(蒸気動車用)
112 ExhaustSteamInjector Exhaust Steam Injectorを操作する(?)(蒸気動車用)
113 IncreaseCutoff Cutoffを増やす(?)(蒸気動車用)
114 DecreaseCutoff Cutoffを減らす(?)(蒸気動車用)
115 Blowers ブロワーを起動/停止(?)する
116 EngineStart エンジンを起動する(エンジン車用)
117 EngineStop エンジンを停止する(エンジン車用)
118 GearUp ギアを上げる(エンジン車用)
119 GearDown ギアを下げる(エンジン車用)
120 RaisePantograph パンタグラフを上げる(電気車用)
121 LowerPantograph パンタグラフを下げる(電気車用)
122 MainBreaker 主シャ断器を入れる/落とす
123 RouteInformation 路線の情報の表示/非表示を切り替える

なお、記載されていない番号の入力も受け付けますが、正常な動作は一切保証できません。

I : 運転情報送信要求

各種情報を取得できます。現在仕様策定中につき、将来的にコマンドが追加される可能性があります。
接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Order Meaning
TRI C 0 車両のBノッチ数
1 車両のPノッチ数
2 ATS確認段
3 B67に相当する段
4 編成車両数
5 単弁の段数
6~ その他車両情報(専用ページへ)(準備中)
E 0 自列車位置[m]
1 自列車速度[km/h]
2 現在時刻[ms]
3 BC圧[kPa]
4 MR圧[kPa]
5 ER圧[kPa]
6 BP圧[kPa]
7 SAP圧[kPa]
8 電流[A]
9 (予約)架線電圧[V]
10 現在時刻(HH)[時]
11 現在時刻(MM)[分]
12 現在時刻(SS)[秒]
13 現在時刻(MS)[ミリ秒]
H 0 Bノッチ位置
1 Pノッチ位置
2 レバーサー位置(SLの場合は逆転機ハンドル位置-10000 ≦ x ≦ +10000)
3 (予約)定速状態情報
4 単弁ハンドル位置
P 0 Panel[0]の値
n Panel[n]の値
-1 Panel配列の配列長を返します。負の数であれば、数字は何を送っても構いません。
S 0 Sound[0]の値
n Sound[n]の値
-1 Sound配列の配列長を返します。負の数であれば、数字は何を送っても構いません。
D 0 ドア状態(0:閉, 1:開, 2:左開, 3:右開, 4:両開)
1 ドア特殊扱い(0:なし, 1:3/4(2/3)閉実施, 2:半自動扱い実施)
2 ドアバックアップ実施TF

A : 運転情報自動送信開始要求

指定する運転情報に変更があった際に自動で送信するように登録するコマンドです。
多重登録は受け付けません。多重登録を要求されても、前回登録が上書きされるだけです。

登録方法は、”TRAxxx\n”とコマンドを送るだけです。正常に登録されると”TRAxxxX0\n”と返答が来ます。
xxxに入る文字列は、識別子”I”の運転情報送信要求で用いる文字列と同一です。

D : 運転情報自動送信停止要求

念のために用意しておりますが、自動送信登録は次回接続時に持ち越されず、また接続ごとに独立したリストを持っているため、機器接続中に情報が要らなくなった際くらいしか用途がありません。登録のない情報の自動送信を停止するよう要求された場合も、正常に登録が解除されたように返答が来るので、注意して下さい。

登録を解除する方法は、”TRDxxx\n”とコマンドを送るだけです。正常に登録が解除されると”TRDxxxX0\n”と返答が来ます。
xxxに入る文字列は、識別子”I”の運転情報送信要求で用いる文字列と同一です。

E : エラー発生通告

これは他のコマンドと違い、通常は要求側が送信することはありません。他の要求を処理する段階で何らかのエラーが発生した際に、返答側がこのコマンドを使用してエラーの発生を通告します。

エラーコマンドは以下の通りです。接尾辞の”\n”は、表中では省略しています。実際の運用時に忘れないように注意してください。

Head Num Meaning
TRE 0 原因不明
1 BIDSpp.dll(もしくはOBIDS.dll)と接続できていない
2 コマンドの数値部が不正(存在しない数字)
3 コマンドの記号部が不正(存在しない記号)
4 コマンドの識別子が不正(存在しない識別子)
5 数値変換がオーバーフローした
6 要求情報の数値部に数字以外が混入している
7 コマンドが不正(原因特定不可)
8 BVEのウィンドウハンドル取得失敗

H : 保安装置状態情報送信要求

現在仕様策定中につき、しばらくお待ちください。

参考文献

JIS E 4010:1985 鉄道車両及び鉄道車両部品の記号

更新履歴

2019年2月28日 obve向けATS_Keyの参照先へのリンクを追加
obve向けATS_KeyのMeaning追加宣言を削除
システム連携イメージを追加
2019年2月27日 新規公開

Posted by Tetsu Otter