Skip to content

Commit

Permalink
Finish PBS programming
Browse files Browse the repository at this point in the history
WenSimEHRP committed Aug 21, 2024
1 parent f48956f commit 69c3231
Showing 40 changed files with 160 additions and 20 deletions.
125 changes: 122 additions & 3 deletions Kale/basic_pbs_programming.md
Original file line number Diff line number Diff line change
@@ -15,23 +15,36 @@

## 如何配置

![alt text](images/basic_pbs/image-000.png)

![alt text](images/basic_pbs/image-001.png)

![alt text](images/basic_pbs/image-002.png)

首先要介绍的就是分区功能当中的一个选项。
你可以在分区选项中设置高亮寻路限制信号,这样就可以快速找到你特别设置过的信号灯。[^remove_signal]
防止你误操作删除你设置过的信号
防止你误删除设置过的信号

[^remove_signal]: 译注:实际上如果完全使用 8bpp 图像,且信号灯的灯杆是灰色或蓝灰色,在开启“寻路限制信号使用蓝色灯柱”时,
游戏会自动将这些信号的灯柱替换为蓝色,所以可以不使用文中所述分区功能。不过,“启用蓝色灯柱”不适用于这些情形:
灯柱不是蓝色的,或图像不是 8bpp 的(即图像为 32bpp)。

为了给信号灯编制寻路限制程序,你需要点选信号灯菜单中的齿轮图标。
点选后,点击你所需编程的信号。

这就是寻路限制菜单了。

![alt text](images/basic_pbs/image-003.png)

![alt text](images/basic_pbs/image-004.png)

## 简单信号路径优先

寻路限制信号编程的一大作用是*确定优先级*。这里是一个优先级的例子。
具体实现优先级需要这两种操作当中的一种,不过我个人认为接续预留的效果最好:
具体实现优先级需要这两种操作当中的一种,我个人认为接续预留的效果最好:

```{figure} images/basic_pbs/image-005.png
*使用接续预留的例子*
```

* [延续预留](../Features/Signalling.md#延续预留)(Reserve through)

@@ -50,5 +63,111 @@
如果你想要把范围缩小一点,比如不包括在主线上运行的货运列车,你可以通过添加一个“如果”声明,
专门用于针对特定种类的列车。

```{figure} images/basic_pbs/image-006.png
*添加了如果声明的程序*
```

比如,如果你只想让客运列车获得优先级,你可以将“如果”的条件改为“列车可以运载旅客”。

![alt text](images/basic_pbs/image-007.png)

```{tip}
你可以复制寻路限制程序以节省时间。
在编制程序时,你可以通过使用“复制”按钮
从其他信号复制程序。[^share_rr]
```

[^share_rr]: 译注:实际上在这里也可以共享命令,在“复制”按钮的右侧是“共享”按钮,
按住{kbd}`Ctrl`即可共享信号程序。

![alt text](images/basic_pbs/image-008.png)

如果你注意力敏锐的话,你肯定会发现这些操作一次只能让一列火车优先通过。
如果有两班优先列车连续通过(比如在繁忙线路上),后通过的列车仍会被截停。
这个时候就要使用[槽位](../Features/Signalling.md#槽位)了。

另一方面,延续预留防止拥堵的效果很好。
举例来说,如果有一列超长货车要通过一座车站,并且站台长度比列车长度要短,
站台的每一条到发线都是一个独立的信号区间。
如果放任列车进入而不做任何调整,列车容易卡在车站咽喉区从而堵住整座车站。
为了防止这种情况,你可以在寻路限制中使用延续预留。

现在超长列车再也不会卡在车站信号前了。

![alt text](images/basic_pbs/image-009.png)

## 使用拒绝通过与惩罚引导列车

“拒绝通过”在列车分类上至关重要——我最喜欢的例子就是将列车分流至快慢线路上。
列车分类可以用极少的工作量极大地提升路网效率。

假设你有一条复复线铁路[^fufuxian],并希望慢车在外侧轨道上运行,快车在内部轨道上运行,
你可以在线路开始的地方设置寻路限制程序。在程序里,你可以添加一个条件判断,
根据列车的最高速度决定允许或拒绝列车通过。

![alt text](images/basic_pbs/image-010.png)

[^fufuxian]: 译注:~~fufu 线~~四线铁路

在“插入”选项卡中选择“如果”,选择“最高速度”作为判断的条件。
在输入目标速度 120 千米/时后就需要选择判断范围。
我这里不想让最高速度在这个数值以上的列车进入轨道,所以选择“大于等于”作为判断范围。

![alt text](images/basic_pbs/image-011.png)

![alt text](images/basic_pbs/image-012.png)

![alt text](images/basic_pbs/image-013.png)

![alt text](images/basic_pbs/image-014.png)

输入完成后,再选中“判断结束”插入“拒绝通过”。

![alt text](images/basic_pbs/image-015.png)

最终的结果就是这样:

```{line-block}
开始
如果最高速度 ≥ 120 千米/小时,则
拒绝
结束判断
结束
```

![alt text](images/basic_pbs/image-016.png)

现在,任何速度大于 120 千米/小时的列车都无法进入外侧轨道。

同理,你需要给内侧轨道的信号附加类似的程序。这次需要做出一些改变,
拒绝所有最高速度低于 120 千米/小时的列车。

![alt text](images/basic_pbs/image-017.png)

在配置完成之后,你就得到了一条快慢分离的复复线线路。
快慢分离可以预防列车拥堵的潜在风险,
因此在启用直通运转并且你的线路上有其他公司的慢车运行时非常重要,反之亦然。

![alt text](images/basic_pbs/image-018.png)

拒绝通过还有千万种使用方式。通过使用拒绝通过,你可以完全控制线路上列车的去向,
同时也允许你为列车分类来提高运营效率。

惩罚与拒绝通过类似,不过惩罚并不会“立即拒绝通过”——
如果你想要分流列车,同时又想要留有余地,不直接拒绝通过,
你就可以使用“添加惩罚”来保证回转的空间。

比如,在这个情景中,假设铁路上有运转中的快车和慢车,
同时列车都希望进入站台,
但是又不希望在站台被占用的时候直接让列车在信号机前等候导致堵车,
就可以将程序当中的“拒绝”替换为“添加惩罚”。

![alt text](images/basic_pbs/image-019.png)

可见慢车没有驶入快车专用站台,
但并不妨碍慢车在慢车站台全部被占用的情况下驶入快车站台。

![alt text](images/basic_pbs/image-020.png)

这些简易寻路限制编程技巧可以帮助你控制列车混合运行,
也有助于提升路网管理技术和公司间列车管理能力。
Binary file added Kale/images/basic_pbs/image-000.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-001.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-002.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-003.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-004.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-005.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-006.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-007.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-008.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-009.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-010.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Kale/images/basic_pbs/image-011.png
Binary file added Kale/images/basic_pbs/image-012.png
Binary file added Kale/images/basic_pbs/image-013.png
Binary file added Kale/images/basic_pbs/image-014.png
Binary file added Kale/images/basic_pbs/image-015.png
Binary file added Kale/images/basic_pbs/image-016.png
Binary file added Kale/images/basic_pbs/image-017.png
Binary file added Kale/images/basic_pbs/image-018.png
Binary file added Kale/images/basic_pbs/image-019.png
Binary file added Kale/images/basic_pbs/image-020.png
28 changes: 14 additions & 14 deletions Kale/scheduled_dispatch.md
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
我个人习惯单独制定停站时长,所以行车时间相对而言较为重要。
之后开启“自动时刻表”并让列车运行即可。

![alt text](images/60_Minute_timetabling_image-000.png)
![alt text](images/60min_timetabling/image-000.png)

[^3]: 译注:两者在名称上极为相似,但“计划调度”(Scheduled Dispatch)是 JGRPP 独有的功能,
允许制定更复杂的时刻表,
@@ -27,7 +27,7 @@
列车运行时会自动填充时刻表,同时也设立车站间运行的标准时间。
时刻表窗口的右侧栏中就是确切的到发时间。

![alt text](images/60_Minute_timetabling_image-001.png)
![alt text](images/60min_timetabling/image-001.png)

你可以在列车的时刻表填充完成之后查看列车的运行时间。
确定所有运行时间之后就可以制定计划调度时刻表了。
@@ -37,19 +37,19 @@
我在样例中规定每个站点的停站时间为一分钟。
在修改完之后就可以打开计划调度页面了。

![alt text](images/60_Minute_timetabling_image-002.png)
![alt text](images/60min_timetabling/image-002.png)

在启用计划调度之后,你还需要将时刻表指定到一项命令。
这里我们将时刻表指定到“吉和北站”,也是东侧的终点站。

![alt text](images/60_Minute_timetabling_image-003.png)
![alt text](images/60min_timetabling/image-003.png)

![alt text](images/60_Minute_timetabling_image-004.png)
![alt text](images/60min_timetabling/image-004.png)

我们已经设置完毕了计划调度指令,可以添加发车时间[^4]了。
遵循这个时刻表的列车在该站时只会在发车时间发车。

![alt text](images/60_Minute_timetabling_image-005.png)
![alt text](images/60min_timetabling/image-005.png)

[^4]: 译注:旧版译名为“出发条目”。

@@ -59,11 +59,11 @@
不过制定 24 小时时刻表的时候你就需要手动添加发车时间了[^6]
在这里我将时刻表设定为从 0000 开始到 0100 结束,每 5 分钟一班。

![alt text](images/60_Minute_timetabling_image-006.png)
![alt text](images/60min_timetabling/image-006.png)

![alt text](images/60_Minute_timetabling_image-007.png)
![alt text](images/60min_timetabling/image-007.png)

![alt text](images/60_Minute_timetabling_image-008.png)
![alt text](images/60min_timetabling/image-008.png)

[^5]: 译注:游戏时间。
[^6]: 译注:实际上在 24 小时时刻表中也可以使用批量功能,
@@ -74,21 +74,21 @@
计划调度时刻表窗口还提供了一些额外信息,
如“本时刻表需要 3 辆载具”说明使用 3 部载具恰好完全利用所有出发时间。

![alt text](images/60_Minute_timetabling_image-009.png)
![alt text](images/60min_timetabling/image-009.png)

这里我又购买了两列列车(在复制列车时按住 Ctrl 键点击就可以共享调度计划)
来保证可以完全利用所有出发时间。

![alt text](images/60_Minute_timetabling_image-010.png)
![alt text](images/60min_timetabling/image-010.png)

我们的系统已经开始运作了。列车每 5 分钟从吉和北站发车,在走完全程后又折回终点站,
再次等候发车。如果操作正确,一次只应该有一列车在车站等候发车时间。

![alt text](images/60_Minute_timetabling_image-011.png)
![alt text](images/60min_timetabling/image-011.png)

---

![alt text](images/60_Minute_timetabling_image-012.png)
![alt text](images/60min_timetabling/image-012.png)

这里有一个来自 Reddit JGR Server 3 的例子。LHAM 08 是一列普通列车,各站停车,
而 EHAM 04 是一列快车,不在所有站点停靠。诚然,快车的路线可能比慢车短,
@@ -99,7 +99,7 @@

---

![alt text](images/60_Minute_timetabling_image-013.png)
![alt text](images/60min_timetabling/image-013.png)

这是另外一个例子,同样来源于 Reddit JGR Server 3。图中是滨松市的铁路系统,
其中淡蓝色意味着每小时三班车(即 20 分/班),红色是每小时六班车(10 分/班),
24 changes: 22 additions & 2 deletions _static/css/kai.css
Original file line number Diff line number Diff line change
@@ -30,6 +30,26 @@ span.cm-em, /* 实时预览下 */
font-family: "wenkai";
}

@font-face {
font-family: "sarasa_lline";
src: url(fonts/SarasaGothicSC-Regular.woff2) format("woff2"),
url(fonts/SarasaGothicSC-Regular.woff) format("woff");
/* regular */
font-weight: 400;
/* unicode range */
unicode-range: U+2014-2014;
}

@font-face {
font-family: "sarasa_lline";
src: url(fonts/SarasaGothicSC-Bold.woff2) format("woff2"),
url(fonts/SarasaGothicSC-Bold.woff) format("woff");
/* bold */
font-weight: 700;
/* unicode range */
unicode-range: U+2014-2014;
}

body,
textarea,
input[type="button"],
@@ -50,7 +70,7 @@ input[type="time"],
input[type="url"],
input[type="submit"],
.btn {
font-family: Lato,"sarasa",proxima-nova, Helvetica Neue, Arial, sans-serif;
font-family: "sarasa_lline",Lato,"sarasa",proxima-nova, Helvetica Neue, Arial, sans-serif;
}

.rst-content .sidebar .sidebar-title,
@@ -62,5 +82,5 @@ h4,
h5,
h6,
legend {
font-family: Roboto Slab,"sarasa", ff-tisa-web-pro, Georgia, Arial, sans-serif;
font-family: "sarasa_lline",Roboto Slab,"sarasa", ff-tisa-web-pro, Georgia, Arial, sans-serif;
}
1 change: 1 addition & 0 deletions index.md
Original file line number Diff line number Diff line change
@@ -46,6 +46,7 @@ extras.md
:hidden:
:caption: 外部链接
百科地址 <https://github.com/wensimehrp/jgrpp-wiki>
项目地址 <https://github.com/jgrennison/openttd-patches>
NML 文档 <https://jgrennison.github.io/OpenTTD-patches/newgrf-additions-nml.html>
NFO 文档 <https://jgrennison.github.io/OpenTTD-patches/newgrf-additions.html>
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
@@ -3,6 +3,6 @@
[![Documentation Status](https://readthedocs.org/projects/jgrzh/badge/?version=latest)](https://ottdzh.readthedocs.io/projects/jgrpp/latest/?badge=latest)
[![Action status](https://github.com/WenSimEHRP/JGRPP-wiki/actions/workflows/build_doc.yml/badge.svg)](https://github.com/wensimehrp/jgrpp-wiki/actions)

这是 OpenTTD JGRPP 中文百科的 Repository,你可以在 Readthedocs.io 上查看相关文档。
这是 OpenTTD JGRPP 中文百科的 Repository,你可以在 [Readthedocs.io](https://ottdzh.readthedocs.io/projects/jgrpp) 上查看相关文档。

[GitHub 地址](https://github.com/wensimehrp/jgrpp-wiki)

0 comments on commit 69c3231

Please sign in to comment.