BIDS Specifications
※2020年9月1日追記 : 現在の最新版はv202です. 仕様関係はGitHubの方に載せますので, しばらくお待ちください.
ここでは、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日 | 新規公開 |