Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

小田急PI互換機能追加 #101

Merged
merged 3 commits into from
May 1, 2023
Merged

Conversation

susLine2320
Copy link
Contributor

お世話になっております。Line-16です。
#11 にて上げられていた「D-ATS-P」地上子への対応を行ってみたバージョンとなります。動作確認済みですが、もしよろしければそちらでも動作を確認していただければと思います。
もしお気に召されましたら、fetchしていただけると嬉しいです。何卒御検討ください。

Copy link
Owner

@magicant magicant left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

プルリクありがとうございます。

コードは概ね問題なさそうなのですが、自分でも試験用路線を作って動作確認してみたいとか、この件以外にもタスクがあって十分な時間がすぐに取れなそうとかいった事情があり、マージするのは少し先になりそうです。

コードを読んでいる時に少し気になった点がいくつかあるので、コメントに返信いただけると助かります。

@@ -29,26 +29,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

プラットフォームツールセットの設定が Visual Studio 2019 相当のバージョンにもどってますが、いまさら古いものを使う意義はないと思うので v143 を維持してもらえるとありがたいです

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これは弊環境がVS2019なのです......まだ更新できておらず......
特にこだわりがあるわけではないので、ぜひ戻したいのですが、2022を入れるのも面倒でやっていないという感じなのです。申し訳ありません。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

わかりました。ではマージするときに私の方で書き換えますね

Comment on lines +110 to +113
case 21:
//case 22:(小田急PIのATSと干渉するため暫定コメントアウト)
case 23:// TASC 目標停止位置設定(追加:メトロ対応TASC互換)
if (状態.互換モード() == 互換モード型::メトロ総合) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

21~23番地上子での停止位置設定ってどのプラグインで使われている仕様ですか?
自分が知らない仕様なので、教えていただけないでしょうか。
可能ならドキュメントとかへのリンクをいただけると助かります。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらは10年前に公開されていたメトロATO/TASCプラグインで使われていた仕様になります。
新規設定は非推奨ですが、すでにこの地上子が置かれている路線もあるので、メトロ総合互換で使える仕様としています。(なお、当方のSのプラグインでは、既に対応済みです)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます! 参考になります。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いただいた資料を見たところ、以下の記述が気になっています。

*3 TASC第1パターン発生地上子(21)のオプション
送信値の一万の位でTASC急行運転の設定を行います。
これは、副都心線などの急行運転で通過駅のTASC地上子をスルーするための機能です。
列車種別表示器に「2:急行」または「5:通勤準急」を設定した場合、
プラグインでは自列車を速達列車として処理します。
急行列車の通過駅のTASC第1パターン発生地上子の送信値に+20000することで、
この機能を使用できます。

こちらのプラグインでは列車種別の切り替えを車両プラグイン側で行う想定のようです。
一方、bve-autopilot は列車種別ごとにマップ内の地上子設置方法を変えてもらう想定の仕様になっているので、急行運転時には通過駅の停止位置地上子を認識させないようにする必要があります。
この食い違いを容易に解決する方法が思い浮かばず、どうしようかと考えています。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いろいろ考えましたが、以下のようにしたいと思います。

  • 互換モードに以下の3種類を新たに追加する
    • 小田急プラグインに対応した CS-ATC 路線用のモード
    • 小田急プラグインに対応した D-ATS-P 路線用のモード
    • メトロ TASC プラグインに対応した CS-ATC 路線用のモード
  • 現行のメトロ総合プラグイン互換モードに新たな次停車駅位置設定地上子は追加しない
  • メトロ TASC プラグインの通過駅用設定には (少なくとも今は) 対応しない

判断の理由としては

  • 一つのメトロ総合プラグイン互換モードで微妙に異なる複数のプラグインに対応しようとすると今回の22番地上子のようにコンフリクトが起きることがあります。将来的にさらに別のプラグインが登場してコンフリクトが増える可能性もあるので、プラグインごとに別々のモードに分けた方が良いと思いました。
  • メトロ TASC プラグインの通過駅用設定に対応するには21番地上子で行った通過駅判定を22番と23番の地上子にも適用する必要があり、そのためのコーディングが必要になりそうです。とはいえ、そもそも21番地上子での通過駅設定を実際に使っている路線データが現存するのか私は良く知らないのですが……。もし bve-autopilot でこれに対応するとしても、その時にコードを後から足せばよいので、今は気にしないことにします。

私の方でコードを整理してからマージしようと思うのでもうしばらくお待ちください。

Comment on lines +87 to +88
case 200: // TASC 目標停止位置設定(追加:小田急PIのATO互換)
if (状態.互換モード() == 互換モード型::メトロ総合 || 状態.互換モード() == 互換モード型::小田急PI) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一見、やっていることが互換モードの名前と合ってないような気がして「ん?」と思いましたが、以下のような使い分けを意図しているという理解で良いでしょうか。

  • 互換モード型::メトロ総合 → CS-ATC の路線で使う
  • 互換モード型::小田急PI → D-ATS-P の路線で使う

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

その通りになります。元々、D-ATS-Pの地上子というよりは小田急PI全般の地上子なので、「小田急PIのCS-ATC路線」を見越した仕様ということになります。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ですよね。

後で enum の名前を変えさせてもらうかもしれません。
何となく、 互換モード型::小田急PI よりも 互換モード型::d_ats_p とかの方が紛らわしくなさそうな気がしています。
OM-ATS の場合はどうするのかみたいな論点もあり。
(と言ってもまだ深く検討していません)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他も「メトロ総合」や「swp2」のような書き方だったので、それに揃えてこのようにしたのですが、こだわりがあるわけではないです。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本当に 状態.互換モード() == 互換モード型::メトロ総合 に対して200番地上子をサポートしてよいのか? 小田急プラグイン以外のプラグインと干渉する可能性があるのでは? (現に22番地上子は小田急プラグインとメトロTASCプラグインとで被っている)

となると、やはり 互換モード型::メトロ総合 とは別に「メトロ総合プラグインと小田急プラグインを同時利用するためのモード」を設けるべき?

@susLine2320
Copy link
Contributor Author

互換モードの22番地上子では、senddataに信号機の灯数が出力されているので、それを利用し前方現示予測を行うコードを追加しました。これで、停止定位駅を出発するときにもきちんと現示が受信できていることを確認しました。

Comment on lines +172 to +180
制限区間追加(
_制限速度6, 送信電文, { 直前位置, 状態.現在位置() },
4.0_kmph);
}
break;
case 5: //制限速度設定
制限区間追加(
_制限速度9, 地上子.Optional, { 直前位置, 状態.現在位置() },
5.0_kmph);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この 4.0_kmph5.0_kmph は何か意図がありましたか?
(自分の印象だと小田急は割と制限ギリギリまで出す運転士が多いイメージがありますが)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

D-ATS-Pの速度照査は、JR系のATSと異なり、制限速度ぴったりで行われます(あくまでプラグイン上の話です)。そのため、いくらかはマージンを入れておく必要があると思い、設定しましたが、おっしゃる通りこれでは緩く、ダイヤについていけないので、マージンはもう少し小さくてもよいかもしれません。ただ、多かれ少なかれ設定する必要はあると思います。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

もともと全ての速度制御に 0.5 km/h のマージンを入れているので、ここでさらにマージンを足すとしても 0.5~1 km/h 程度で良さそうな気がしますね。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

手元で小田急PIとbve-autopilot両方積んだ車両でちょっと実験しましたがここはマージン 0 でもいけそうな感触です

Comment on lines +110 to +113
case 21:
//case 22:(小田急PIのATSと干渉するため暫定コメントアウト)
case 23:// TASC 目標停止位置設定(追加:メトロ対応TASC互換)
if (状態.互換モード() == 互換モード型::メトロ総合) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いただいた資料を見たところ、以下の記述が気になっています。

*3 TASC第1パターン発生地上子(21)のオプション
送信値の一万の位でTASC急行運転の設定を行います。
これは、副都心線などの急行運転で通過駅のTASC地上子をスルーするための機能です。
列車種別表示器に「2:急行」または「5:通勤準急」を設定した場合、
プラグインでは自列車を速達列車として処理します。
急行列車の通過駅のTASC第1パターン発生地上子の送信値に+20000することで、
この機能を使用できます。

こちらのプラグインでは列車種別の切り替えを車両プラグイン側で行う想定のようです。
一方、bve-autopilot は列車種別ごとにマップ内の地上子設置方法を変えてもらう想定の仕様になっているので、急行運転時には通過駅の停止位置地上子を認識させないようにする必要があります。
この食い違いを容易に解決する方法が思い浮かばず、どうしようかと考えています。

@magicant
Copy link
Owner

地上子仕様を更新しました。 21, 23 番地上子以外を記載しています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants