61阅读

火车头采集教程-OpenTTD火车教程

发布时间:2018-03-25 所属栏目:openttd

一 : OpenTTD火车教程

前言

以前玩过TTD,觉得很好玩,近来发现OpenTTD,玩了一个多月的火车,颇有心得,并独创了一些设计,在此写出来,供大家开阔思路。[www.61k.com)

本人通常玩1024×1024无故障模式12格车站的地图,以采石油为主,因此后面提到的一些经验参数值,是指lev4磁悬浮(最大速度643)车头拖22节满载油罐车(总长度12格)的情况下。如果你所玩的场景与此不同,那这些参数值也会不同,需要你自己去摸索了。

基础篇

第一章 信号灯

信号灯共有六种,分上下两排,其实功能是一样的,只是样式不同罢了。现从左至右依次说明

1、 标准灯

? 方向性

当你使用标准灯在铁轨上点击时,铁轨的两边出现标准灯,再次点击则只在一边有,再次点击则跑另一边去了。如果你再仔细观察,可以看到,这个灯是有朝向的,这个朝向使得火车只能看见右边的灯(沿火车行驶方向的右边),因为只有这个灯是朝向它的,另一边的灯则是背向它。背向火车的灯,火车看不见,就只能把它当作永远的红灯处理,也就是不能通过。

利用这一点,我们就可以实现火车的单向行驶,例如下图:

openttd OpenTTD火车教程

如果有火车从左至右开进上面那条道,它将会遇到背向它的信号灯,于是不能通过,因此它的路由必然是下面那条道。[www.61k.com]

? 区间性

通过铁轨相连的几个信号灯,围成一个区间,例如下图:

AB之间的铁轨是一个区间,CDEFG所包围的铁轨是一个区间,HIJK之间也是一个。 当一个区间里有火车时,属于该区间的标准灯变红灯,从而确保一个区间里只有一列火车,这就是标准灯的作用。例如,有车进入AB区间,并抛锚停在那里,此时A是红灯,尾随而至的下一列车,会因此停在A灯前,等待抛锚列车走出AB区间。

信号灯把铁轨分成两段,它自己也就与两段铁轨相连,也就属于两个区间,分别叫做前区间和后区间(以列车行进方向来看)。

如果你仔细观察,可以看到,当列车车头通过D灯时,会把所有前区间与D相同的灯(也就是CDE)置红,当车尾通过F灯时,把F后区间的所有灯(也就是CDE)置绿。这就是标准灯的工作方式。

总之,标准灯的作用就是确保一个区间里只有一列火车。

? 停止位

标准灯还有个特性就是停止位,即列车可以在该灯前停止(红灯时)。

2、 入口灯

入口灯同样具备标准灯的三个特性,但是红是绿,依赖于它的前区间的出口灯,当它前区间中有一个出口灯为绿时,它就为绿。这个规则的效果就是说,该灯的前区间是不宜停留的,如果有出路(有一个出口灯为绿),就允许列车进入该区间,并让列车赶紧从出口灯离

openttd OpenTTD火车教程

开此区间,否则列车就在后区间候着吧。(www.61k.com)

像前面那个图中,就可以把CDE换成入口灯,把FG换成出口灯。

3、 出口灯

出口灯就是一个标准灯,只是兼具触发入口灯的功能。

4、 复合灯

工具栏的提示信息说,“复合灯可以完全担当入口灯和出口灯的功能”,其实就是说,复合灯对于其前区间里的出口灯来说,它相当于入口灯,而对于它后区间里的入口灯来说,它相当于出口灯(即能触发这些入口灯)。

出口灯和入口灯,只能形成两级的控制关系,把复合灯往出口灯和入口灯中间加,就能形成多级控制关系,最终形成一种树形的铁路分支系统。最终效果就是,如果存在一条通过这个树形铁路区域的通路,就让列车通行,否则让列车在入口灯处等待。

由于后来出的高级灯已涵盖了这种树形控制功能,因此,这三种灯很少使用了,这里也不再多讲。

5、 单向高级灯

这是一个工作方式不同于前几种的灯,它不是依靠静态的红绿灯来指示列车的行止,而是列车到达灯前时,在前区间里为列车寻找一条通路,如果找到,就锁定这条通路,并让列车通行。列车通过时,会逐段释放锁定的铁轨,让别的列车使用。如果找不到通路,列车就得在灯前停下来,系统每隔一段时间会为该车重新寻找通路。

从这个工作方式来看,高级灯会额外消耗系统资源(指你的电脑),当车多灯多的时候,可以看到车有时在高级灯前会突然一顿。所以能不用高级灯的地方尽量不要用。

高级灯的这种工作方式带来一个好处,即允许多列车同时进入一个区间。例如下图:

两列火车分别从自左向右行驶,上面那列到达C灯时,它锁定的铁轨是CF,下面那列到达E时锁定的是EG,于是两列车可以同时进入区间CDEFG,各行其道。这是标准灯所不能的。

单向高级灯同样具备标准灯的方向性、区间性和停止位,只不过它的区间性是指它可以

openttd OpenTTD火车教程

和其它灯构成区间,但已不再依据前区间是否有车来决定自己的红绿。(www.61k.com)

打开高级设置里的“显示预留的轨道”,你就可以看到列车锁定的铁轨,看着列车走几下,并留意锁定的铁轨,你就能理解这种工作方式了。

6、 双向高级灯

双向高级灯在信号灯工具栏里的位置是第五个,单向高级灯才是第六个。把单向灯放前面是为了方便讲解,大家操作时要注意。

双向高级灯具有单向高级灯的功能,同时,它允许列车从其背面通过,这就意味着放置双向高级灯的铁轨不是单行道。

但是,其背面不具备停止位的,例如下图:

图中ABCDE全是双向高级灯,C灯对右边那列车来说,是背面,没有停止位,因此它只能在E灯前停下等待。当它通过E灯时,可以看到它的锁定路线是EA,而不只是EC。

另外,其背面是具有区间性的,可以和其它标准灯构成区间,只是永远是绿灯。 总之,双向高级灯的正面是单向高级灯,背面是不具备停止位的常绿灯。

第二章 路点

路点的功能,大家应该很好理解,它相当于一个没有停止位的车站,即列车不能在路点前停下来,高级灯的锁定路线会穿过它。

另外,路点也不具备区间性,即它不可以与信号灯构成区间。

说到这里,大家可能还是很茫然,到底路点有什么用,或者说在什么情况下用。

openttd OpenTTD火车教程

路点的作用就是指示列车必须经过某地,看下图:

假设我用一个三站台的小站向外运旅客和邮件,不想混装,邮件车采用有货就装的策略,旅客车则是满载策略,投放6列旅客车和2列邮件车进行运输。(www.61k.com)这会出现一种情况,有三列旅客车占满了三个站台,但是客流量小,迟迟无法满载,阻塞了后面到来的邮件车。因此,我希望旅客车不要占满三个站台,空出一个给邮件车用。于是,就可以如图在两个站台前设置路点,让旅客车经过该路点进站满载(路点相当于车站,可以在执行计划中选择“前往”,然后点击路点,即可强制列车经过该路点),于是最左边那道就空出来给邮件车用了。

扩展:openttd 火车线路 / openttd教程 / openttd

有人可能会说,这样一来,岂不是相当于分成两个站了,建两个站一样可以解决这个问题。其实是不一样的,当两列邮件车同时到达该站时,如果旅客那两站台有空,它们是可以进去的,特别的,邮件车不是2列,也是6列时,这个效果就与分站大大不同了。

也有人可能会说,如果有第三列旅客车到达,不让它进站满载,那它会停在干线上,同样会阻塞后面到来的邮件车。这就是另外的问题了,后面会给出解决方案,这里讲路点,就只拿路点来说,一步一步来。

OK,路点用的地方确实不多,就说到这吧。

第三章 车库

大家不要以为车库不过是个购买火车和保养火车的地方,它的用处可大着呢。

从理论上说,车库相当于两个信号灯,中间并列无限多个停止位,这无限多个停止位,可以收容列车,这就是我们要用的地方。

再拿上章的例子来说,加个车库如图

openttd OpenTTD火车教程

把旅客车的执行计划改改,先进车库,再过路点,然后才进站满载,这样的话,第三列旅客车就会停在车库里等待空余站台,而不是停在干线上阻碍邮件车进站。[www.61k.com)

车库还有个用处,是帮助转弯,如果不够空间让列车急转弯,可以先用车库收容列车,再按需要的方向驶出去。当然,这样做会造成列车减速到0,但如果空间不够,那也是无可奈何之举。

第四章 执行计划

1、 命令

在上图左边点击光标处,会弹出右边的调度计划窗口,在这里可以设定列车的计划,经过哪些站点,卸货还是装货等。

如果你的计划是从A站到B站,但这两站之间的线路上有个C站,那么列车行驶到C站时,会自动进行装卸货,即使你的计划中并没有C站装卸货。这时可以使用“不停车”,让列车经过C站时不装卸货。

装满任意货是针对混装列车的,只要有一种货物装满了,列车就会执行计划的下一步。 卸载这个下拉框里有个“联运”比较重要,联运是指往该站卸货,却不给该站使用(即使它需要),然后再由该站的其它列车运往其它站。我们可以在一片空地建个大型车站,然后用联运的方式把周边的各种货物运过来,集中在一起,然后再用车统一运往远方。

“跳过”是让列车跳过当前指令,执行下一条。这是人为干预列车执行计划的做法。

openttd OpenTTD火车教程

“前往”这个我就不说了。[www.61k.com)

选择“共享调度计划”后,再去点击别的列车,会使当前列车与目标列车的执行计划一致。共享计划后,两列车实行相同的执行计划,无论从哪列车进行计划的修改,都将影响另一列。如果不想共享了,可以点击“调度计划结束”(计划表的白字那行),然后选择退出即可。

“条件性命令跳过”给执行计划增加了条件判断,这就使得可以设计复杂的计划来完成高级的功能。选择“条件性命令跳过”之后,不是去点列车和车站,而是要点命令,想跳到哪条命令,就点哪条。

还拿上章的例子来说,虽然用车库收容了第三列旅客车,但是如果这列车上的旅客迟迟不能卸货,价值就会下降,影响收入,因此我们希望能先卸货,再进车库。那么,我们可以这样设置执行计划

1) 进站卸货,若有货就装

2) 跳到6(装载度大于40)

3) 前往车库

4) 前往路点

5) 进站满载

6) 。。。。。

这样的话,第三列旅客车就会先进站卸货并装货,如果能装到40%以上的货物时,就开出去了,否则如前策略,到车库里候着,满载再走。

2、 时间表

在点出调度计划时按住ctrl键,或者点击前图中右边执行计划窗右上角的“时间表”,会弹出时间表如下图。

时间表可以对执行计划中的车站设定停留时间,在这个停留时间里,列车会执行装卸货的。要注意的是,使用了时间表,车站的选项就不要设成满载,否则列车的停留时间以满载而定,而不是时间表了。

还有就是,只有车站可以设定停留时间,路点和车库是不允许的。

如果列车到达某站时晚点2天,而该站设置的停留时间是5天,那么实际只会停留3天,相反,如果早到2天(在命令窗口使用“跳过”往往会造成),则会停留7天。点击“清除晚点计数器”,可以让列车在该站正好停留5天。

openttd OpenTTD火车教程

概念篇

第一章 发车

指当列车由于进站、拐弯、或者在道口停下来之后,再次启动发出。[www.61k.com]

发车时,往往是不只一列车,而是一队车在等候发车,这里讨论的则是这一队车先后发出的关系。

? 连发

例如在十字道口由于红灯停下来的一队车,当绿灯到来时,第一列车开出,那么第二列是何时开出的呢?显然是第一列车开出一个信号灯区间的距离,第二列车前信号灯由红变绿时,第三列又是等第二列开出一个信号灯区间的距离才开出,依次类推。这种方式,称为连发。

显然连发方式发车时的列车间距(发车间距)是一个信号灯区间,如果我们把信号灯区间设置为最小(1格),就可以获得最高效率。

连发的特点就是这队车是连动发出的,而不需要等待前车完全过了道口,因此称为连发。 ? 轮发

假设这队车全部收容在车库里,现在前区间有空余轨道了,于是第一列车发出,那么第二列是何时开出的呢?显然是第一列车完全通过前区间时,第三列也要等第二列完全通过前区间,后面依次类推。这种方式,称为轮发。

轮发的发车间距是列车的车身长度加上前区间的长度,也就是说大于车身长度。 轮发的特点就是前车完全通过了指定区间,后车才发出,它们是轮流执行这个流程,因此称为轮发。

拿前面车库那章的车站图来看,如果站台上三列车都装满了货(或者卸完了货),等待发车,显然,每列车都得等前车开出第一个信号灯之外才能发车,所以,这种车站就属于轮发。

第二章 装卸货

车站的装卸货是对处于站台内的每节车厢同时进行的,所以不管列车有多长,只要不超出站台长度,它们的装卸货时间都等于一节车厢满载(卸载)所需的时间。一旦列车长度超过站台长度,就会受到惩罚,装卸货时间变得非常长了,所以,列车长度尽量不要超过站台长度。

虽然一节车厢满载和满卸的时间相同,但是由于车站对装载和卸载的策略不同,使得运营中的火车装货和卸货效率是不一样的。

扩展:openttd 火车线路 / openttd教程 / openttd

假设一个六站台的车站,同时来了六列车进行卸货,这六列车是可以同时卸货的。而装货不同,是先装满一列,再装第二列,按先来后到的顺序依次装载,只有在货物已超过第一列车的装载能力的情况下,第二列才会同时进行装载,所以有时可以看到两列车同时装载的情况,而三列同时装载就更罕见了。所以,从这个意义上说,三站台车站对装载已足够用了,但实际上,从其它方面考虑,三站台是不够的,初期可用。

列车的满载或满卸时间是4天,进站和出站时间分别是2天(指lev4磁悬浮车头拖22节满载油罐车的情况),而车站是轮发式的,所以对于只卸货的列车,要占用站台4+2+2=8

openttd OpenTTD火车教程

天,只装货的列车则还需加个等待装货的时间,假设是5天,那就需要13天,又卸货又装货的则需17天,所以一个站台一个月只能处理2至3列车。(www.61k.com]据此,你可以根据产量估算出需要多少站台。

第三章 稳流准则

观察河流,可以发现在河面宽广的地方,水流速度慢,狭窄的地方水流急,因为只有这样才能保证河流的每个截面上的流量相等。如果某段河流的流量比其上游小,那势必造成这段积水,从而增宽河面,或者抬高水位,造成向下游流水速度增加,最终达到与上游流量相等的稳定状态。

对于车流也是一样的,如果在某段线路流量小于其它段,必然会造成堵车。但是车流是不会像河流那样自动调整的,只能靠我们人为设计来处理了。

稳流准则可以这样描述:要使我们的车流稳定,就必须在列车减速的地方(例如进站点、上坡、急转弯等)增加道路数(相当于河面增宽)。而在狭窄的地方(例如二进一的道口),就应该让列车尽量高速通过。

稳流准则是指导我们设计的一个准则。

第四章 车间距准则

游戏中,大家设计出各种复杂漂亮的车站和道路,但是这些设计效率如何,何时需要对站台和道路进行改造,何时需要增加道路数,这条运营线路是否还能再增加火车,或者是否需要改造运营中的火车,给它们增加车头,这些都只能依靠感觉来。下面就给出个定量的依据。

一条线路上跑的车越多,显然效率越高,但还要看线路的长度,以及是否堵车的情况来,这使得我们难以车多少来做效率依据。如果一条运营线路达到了稳流状态(各段车流量相等),并且干线上的列车都是以最大速度行驶,我们可以干线上的列车平均间距作为效率的评判标准。

车间距具有稳定、可测量、直观、易用等特点,因此很适合做为效率标准,不过要注意的是,必须是在稳流状态,且干线列车全速行驶。下面举个例子来说。

假设在相距600格的两站使用30列火车进行运输,两头滞留站台和车库的列车为10,那么干线上则是20,使用复线(就是一来一回的单行线),因此干线长1200,车身长度为12,于是车间距=1200/20-12=48,所以车间距是车身长度的4倍,我们把这个效率记为4X。

再拿前面提到的连发来看,列车发车间距是1格,能不能说效率就是1/12X呢。我们说过,必须是稳流且最大速度,所以这个效率不能算是1/12X,经过实际测算,连发车达到最大速度时,它们的间距大约为1倍车身长度(指lev4磁悬浮车头拖22节满载油罐车的情况),因此这个效率是1X。

连发是最优的发车方式,已不可能找到比这高效的了,因此1X可以说是线路的理论极限效率,只有在两头不装卸货,并完美解决掉头问题才有可能达到,因为一旦停下来装卸货就有效率的损失,并且再发车时效率又不可能超过连发。

除此之外,1X也可以看着行车的安全距离,对于1X的车间距,8格的隧道就有可能出

openttd OpenTTD火车教程

问题(因为8格内无法设置信号灯)。(www.61k.com]

说完连发,我们来看轮发。轮发的发车间距是车身长度+1(前区间长度),达到最大速度时的实测车间距大约为8倍车身长度,也就是说它的效率是8X。轮发是原始的,不需什么处理的,再考虑些效率损失,我们可以定义10X为自然效率。这个效率的意义是指,无需对线路做优化,自然就能达到的效率。拿前面600格30列火车的例子来说,如果使用列车少于20,你不需要对线路做优化,想咋建就咋建。如果产量提升了,投入运营列车超过了20,你就要考虑优化线路了。

有了理论极限效率和自然效率这两个基准点,这里我再根据经验,给几个中间点,当然,这是指lev4磁悬浮车头拖22节满载油罐车,并在无故障模式下。

5X是个良好的效率,必须对自然线路做适当优化才能达到。

3X是个优秀的效率,必须对线路做特殊处理,使用高级手段才能达到。

2X是完美的效率,我也不知道如何达到,目前我通常能达到3X,最好达到2.8X。

以上讨论都是指在一条线路上的,我知道自己只能做到3X,所以当产量造成超过3X时,我就会增加道路,使用四线(两去两回)进行运输。

应用篇

第一章 地道进站

在高效运营的线路中,车间距很小,一列车有稍微的减速,都有可能被后面的列车追上,造成后车停止,从而引发一系列的停车,这种现象称之为追尾。追尾不会向现实生活中那样造成车祸,但是所有车停下来再启动,对效率造成很大的损失,在高效线路中,是绝对不允许的。

很多人为了避免线路交叉,喜欢使用桥来进站,我早期也是如此,下图就是我早期使用的。

但是玩过这游戏的人都知道,上坡和上桥对列车的速度影响是非常大的。像这个图,列车虽然上了桥,但是它的尾巴还在干线上,依然会阻碍10X外的列车,形成追尾。其实这样

openttd OpenTTD火车教程

效率还不如直接交叉

实际上,应该使用如下图的地道进站的方法,让列车在不减速的情况下完全离开主干道,不留尾巴在干线上。(www.61k.com]另外,这里毕竟有几个弯道,会造成减速,根据稳流准则,应该增加道路数,所以每条线路都分成两道。

这样的地道需要两边铁轨有两格的间距,如果只有一个,那就必须挖2格深度的地道了。这种地道我就不画了,大家自己去试吧。不过有一点要提醒的,挖地道是不能低于海平面的,如果海拔高度小于2,那就无法挖2格深的地道了。

第二章 推挽车库

前面提到过,车库可以用来收容等待进站的列车,免得它们占着干线,影响后车。但是车库的三个引线中,只要有一个在用,其它两个就都不能使用,也就是说车库正在出车时,是无法让其它车进库的,如果此时刚好有车到来,就只能在干线上等待了。这个问题该如何解决呢。请看下图:

扩展:openttd 火车线路 / openttd教程 / openttd

如果把两个车库如图那样对接起来,会是怎样呢。显然,一个车库在出车时,另一个必然不能出,但是可以进,反之亦然,一个车库在进车时,另一个不能进,但可出。所以这样的车库组合,就可以同时进出了。因为两个车库刚好工作在不同的状态,形成互补,我借用电子电路里的术语,称之为推挽车库。

推挽车库必须在高级信号灯下才能,使用标准灯是不可能同时进出的。而且这个高级信号灯要尽量的靠近车库的入口处,因为放得远了,在繁忙时,列车在灯前会有突然一顿的现象,关于这点,我不知道准确的原因,这里就不做解释了,总之,大家记住,使用推挽车库要尽量在入口处最近的地方放置高级灯,这是经验。

了解了推挽车库的工作原理,就应该知道,只要两个车库在高级信号灯下,拥有同一个

openttd OpenTTD火车教程

出口点和入口点,就可以算是推挽车库。[www.61k.com]如下图,左边那个是推挽车库的变形,右边那个不是,因为两个车库可以同时出车,造成干线上的车无法进库。

下图的两个也都不是。左边那个没有共一个出口点,造成可以同时出车;右边那个没有共一个入口点,也不能算是。

前一章地道进站法的车站图里,全部是推挽车库。

第三章 分时器

在游戏中,我们经常会遇到多道并一道的情况,特别是出站,由多个站台最后并成一道或两道开往远方。下图是两道并一道的场景,最前面那列是下路车,当它车尾通过C灯时,后一列下路车往往未能到达B灯,而上路车已在A灯前等待,于是接下来是上路车过道口。最终结果是两路车交替通过道口,并且都是低速通过,都是以0的速度开始通过。这个情况相当于前面说的轮发。根据前面提的稳流准则,在这种“狭窄”的地方,我们应该提高列车通过道口时的速度。

openttd OpenTTD火车教程

现实生活中,十字路口通常采用分时制,在一个红灯时间内,另一条路上的车是以连发方式通过路口,只在红绿灯切换的一小段时间里是轮发,因此效率大大提高。(www.61k.com]然而,游戏中没有按时间变化的信号灯,这怎么办。没有,我们就给它创造出来,请看下图:

用一列小车(仅一个车头),在两个小站间来回奔跑,当小车停在上站时,A是红灯,停在下站时,B是红灯,我们只要通过时间表设置小车在上下两站的停留时间,就能实现上下两道的分时通行。

图中的车库是给小车用的,如果车流少,不需要分时了,可以把小车收回去。C处是个高级双向灯,它作用是隔离信号灯AB,没有它,小车无论在上站还是下站,AB都是红灯。另外,还需注意的是,小车的行走的线路(称为控制线路)要尽量与运营线路正交,防止串道。小车在上站和下站的停留时间可以不一样,可以根据实际车流情况,采取非平衡制。下图两个也是分时器

openttd OpenTTD火车教程

使用分时器重要的一点是,后面必须有一条长的、无分支的道路,在红灯时用来“存放”列车,这条道路称为跑道。(www.61k.com]我一般习惯使用5X(即5倍车身长度)的跑道,小车在上下站停留的时间设成刚好够5列车通过,让我们看看这个效率是多少。车流是如下通过的:先是上道以连发方式通过5列车,这5列车的总共车间距是4X,然后上下道切换,第六列车与第五列是轮发,车间距为8X,接下来下道连发5列车,车间距4X,所以最后总的车间距=4X+8X+4X=16X,一共过了10列车,平均车间距就是1.6X,这就是分时器的效率,够高的吧。

前面分析中,第五第六列车之间为8X,很是浪费,按前面提的行车安全距离为1X,这8X之间还可以插入三列车,那是否可以做到呢。这8X是发生在上下道切换时,如果切换时,仍然允许上道通行,只到过了三列车,才掐断上道。也就是说,多了个中间状态,允许上下道同时通行,这个很好实现,看下图,增加一个中间站,小车在此时,上下通行。另外,前面要增加一段跑道AB,后面跑道要从5X增加到8X。不过,不推荐使用这种分时器,因为这种分时器一旦出问题,会在AB段积留列车,造成分时器失效,而且恢复困难。况且,1.6X已足够,效率瓶颈不在这里。

最后,再发一个三路分时器,这种分时器不常用,就不做解释了。只提示两点:1、路点是用来调头的;2、箭头处的高级灯是用来隔离的。这个图还有个缺点,就是中路比两旁有优势。其它的,大家就自己思考,自己改进吧。

openttd OpenTTD火车教程

第四章 齿轮

如上图,两个路点用来设置小车的执行计划,使得小车以逆时针在圆环转圈。[www.61k.com)小车每转一圈,最多放过一列车。而小车是否放过列车,取决于A灯,也就取决于输入端过来的控制信号。同时,小车是否在AC区间这个信号可从输出端输出。D灯是隔离用的。

小车每转一圈,精确的放过一列车,并且能够传动(输入输出控制信号),因此称之为齿轮。

下图是无输入端的齿轮,通过设置小车在小站的停留时间来确定放车间隔。要注意的是,小车要够长,因为停在小站时,是靠它的尾巴阻挡干线上的列车。

openttd OpenTTD火车教程

齿轮的变化和应用,大家可根据自己的需要来设计。[www.61k.com)

第五章 状态机

通过CTRL,把AD建为一个站,BC为一个,把小车的执行计划设置为在这两个小站间来回运动。当小车在C站时,根据执行计划,它可以去A站,也可以去D站,但是去A站要走弧线,路程远,它是不会去的,因此它会选择CD段。这样一来,小车有两个稳定的运动状态,要么在AB间运动,要么在CD间运动。当EF间有车通过时,CD和AB受阻,这时小车只好从C运动到A。列车通过后,AB段解除阻碍,于是小车就在AB间运动,不会返回C站。有车再次通过EF时,AB受阻,小车返回CD运动。也就是说,每当有一列车通过EF,小车状态翻转一次。

为了不让小车影响主干道的列车运行,E处要使用高级灯。

当小车从C运动到A时,如果列车还未能完全通过EF,则AB段仍然处于阻塞状态,小车就会由A走弧线返回C,造成失调。所以EF要尽量短。

openttd OpenTTD火车教程

当小车刚好运行到CD信号灯之间时,主干道有列车通过,此时控制失效,只有等小车到达D站后,控制才重新有效,如果此时列车已完全通过了EF,就会造成遗漏,所以从这里来说,列车通过EF的时间要比小车通过CD的时间长才行,所以EF又不能太短。[www.61k.com)

扩展:openttd 火车线路 / openttd教程 / openttd

实践发现,当有车通过EF时,偶尔会出现小车在AB处等待红灯的情况(几率小于5%),这应该系统的BUG。

这个状态机最大的缺点就是,小车的状态信息难以完整取出利用,这就使得它没有什么实用价值。但它的意义在于,是利用红灯触发事件。我在这里给出这个图的目的,是让大家开阔思路。

第六章 卡位法

假设从甲地到乙地有一条主干道,沿途有几个小站,小站上的车装满了货就会进到主干道,然后运往乙地。刚从小站出来的列车,速度是很低的,直接让它进主干道,很容易被主干道上的快车追上,造成追尾,因此,我们可以在小站前加一跑道,让列车在跑道上跑到最大速度时才进主干道,这样可以避免追尾。但是,当列车走到进主干道的道口时,有可能刚好主干道上也有一列车走到这里,于是造成停车,这种现象称之为碰撞,在车多时是很容易发生。卡位法就是用来解决碰撞问题的。

卡位法基于以下思想,如下图,假设主干道上车流中有两列车之间的距离超过3X,那么我们可以在中间插入一列虚拟列车,如图中间那列。虚拟列车以最大速度,随着车流运动,对车流无任何影响。假设某时刻,小站从O点出发出一列车,此时虚拟列车处于B点处,过了一段时间后,小站车跑到了A点,并达到最大速度,并且虚拟列车刚好走到C点,那么小站车此时进入主干道将与虚拟列车重合,对主干道的车流不造成任何影响。

要实现卡位法,关键就是要找到AB点的位置。利用一点物理知识,可以推出OA=OB,这里我就不做推导了。OA是列车从0加速到最大速度的距离,这个可以通过试验得出,对于lev4磁悬浮车头拖22节满载油罐车,这个距离是130格,可以通过增加车头来减少这个距离。

下图是个实现图。先确定O点位置,然后往两头找AB点位置。找到B点后,分别向前后延伸一段距离,作为探测区间,然后在探测区间范围内,向主干道伸出探测线(如图中所示)。

openttd OpenTTD火车教程

当探测区间的主干道上有列车时,O为红灯,小站不能出车。[www.61k.com]只有探测区间无车时,小站才能出车,这就确保小站车在A点进主干道时不会发生碰撞。实践发现,探测区间为4X(B点向前1.5X,向后2.5X(含虚拟列车自身长度))时,才能确保安全。所以当运营效率高于4X时,小站会被压制,难以出车。

主干道的探测区间段上的信号灯必须全部使用高级灯,这样,主干道的车才不会受小站车影响。

第七章 周期法(时隙法)

卡位法有缺点,需要很长跑道OA和控制线路OB,需要精确的探测区间,并且在高于4X的效率时不好用。为了解决这个碰撞问题,我们可以换一种思路。

假设从甲地往乙地运输货物,沿途有abcedfg七个小站,每个小站都采用跑道把列车速度提到最大才进主干道,这个进主干道的位置分别为ABCDEFG点。如果能保证bcdefg六个站的车到达A点时不会是周一,那么,只要能让a站的列车在到达A点时正好是周一,那它就不会与其它站的列车发生碰撞。同样,B对应周二,C对应周三。。。

拿上一章的实现图来说,小站的起跑点O是可以在跑道上任意挪动的,只要确保OA够达到最大速度即可。所以,对于bdcefg小站,我们可以改变起跑点位置,来确保它们发出的列车到达A点时不会是周一。

要让a站列车在周一到达A点,就要用到前面介绍的无输入端齿轮。无输入端齿轮图中的B点就对应小站的起跑点O。

最后则是七个小站齿轮的时钟同步问题。这个很好解决,控制小车是采用时间表来实现定期放车的,这个时间表里有个“起始时间”,通过设定这个,就能解决同步问题。

这个方法我还没来得及实现,但从上面分析看,应该是可行的,不过实现起来恐怕很麻烦,需要多次的测试和调整。这里只是提出个思路,供大家参考。

openttd OpenTTD火车教程

第八章 跑步进站法

我们通常都是使用静止进站法,即让进站车在站台最进的地方(图中B灯)等候,等前车完全出站(车尾通过A灯),B灯变绿,后车才能进站。[www.61k.com]这种方式是轮发,效率为8X,我们不能做成连发,是因为AB间是车站,不能像跑道一样,每格放置信号灯。

但是,前车一出站,车头通过A,就会使A灯变红,如果我们能够利用红灯触发,使等待在C处的后车启动,那么前车车尾通过A时,后车刚好到达B处进站,与前面静止进站法不同的时,此时后车是带着速度的。这种方法,称为跑步进站法。

跑步进站法的关键是要能红灯触发,前面的状态机就是我在考虑这个问题是得到的,但还是不成功的,因此,跑步进站法我也没有实现,这里也是把思路提出来供大家参考。 最后,让我们再来看看跑步进站法的效率。后车在C处等候,前车一动,后车也就跟着动,这是连发方式。但是,它们的发车距离是BC,而不是跑道上连发方式时的1格。因此,这个效率可不是1X。假设静止进站法进站所花时间为t,可以推导出跑步进站法为()=0.414t,所以跑步进站法的效率大约为0.4*8X=3.2X,再考虑一些效率损失,可以看做是4X。

结束语

我的介绍就到此结束了,但设计之路还远未止于此。看了本教程,难道你就没有自己的想法吗,还不赶快动手,设计一些精巧实用的东西出来。

扩展:openttd 火车线路 / openttd教程 / openttd

二 : 惨痛教训:还在用火车头采集的站长们请住手吧

  这是一个真实的教训,献给还在采集的新手站长们。

  手头的有个txt电子书下载网站http://www.txtbz.com是在08年10月份建立的,以前的数据很多都是用动易的插件采集的,修改过标题和关键字,递交百度google收录网站,将近4个月后百度收录一直很好,原先百度有1800多页 google有2400多点。

  后来看论坛上许多站长在用火车头软件,就学习了几天,发觉是非常好用,就想省点力气在自己网站更新电子书,就采集了一次后,我发布的时候还是修改过内容和标题的,但是过了几天发现百度收录突然减少到890页,一开始我不太相信这是火车头采集的原因,因为在网上我看到很多站长都是这么做的。

  心有不甘的我就接着采集了一次,发布还是修改过标题和内容,这次我没有直接发布,先进入审核状态,再一个一个审核后发布 ,但是这几天一看百度把我的网站k的只有首页了,google收录也下降到了1400。损失巨大,流量锐减到只有几百了。

  现在我只能怀疑是火车头采集的原因了,希望我这个惨痛教训能给新站长们提个醒了,也希望有和我共同遭遇的站长们及时和我联系,共同分析原因。

三 : 火车头采集淘客商品教程:日采集万商品

  我们都知道用dede淘宝客自带的采集很慢且浪费时间。本人亲侧自带的一天也就采集几百个商品。你还要一直守着它,因为它只能一个页面的区采集。而火车头则就显的方便很多。用火车头采集一般一天采集几千甚至一万商品也不算多。网上有人在卖这个教程,很鄙视这些人。有点技术就收钱。再厉害的高手也是从菜鸟走过来的。

  首先我们新建个站点 ,给该站点导入淘宝客采集模块。编辑该任务,选择手动填写规则。接着不用说 批量添加网址。

  

 

  然后在第三步里依次点 启用---添加---导入模块。接着我们在火车头内置的浏览器里输入你的网站的后台登陆地址。

  成功登陆后可以点获取栏目列表,选择你要发布的那个栏目。然后确定-----回到第二步,在左上那里双击《推广》

  修改你的mmpid----更新----开始采集

  

 

  因为我没有上传附件的权限。这里采集模块我就不发了。

  算了,淘客采集模块可以像我要,我的网站是 www.lirenj.com

四 : 火车头基础采集教程

五 : locoy火车头采集教程与实例

火车头采集教程

火车头采集基本流程:

系统设置?新建站点?新建任务?采集网址?采集内容?发布内容?抓数据。

1.新建站点:

据你自己的需求为任务建立统一的站点,以方便管理。

点击菜单上:站点?新建站点 打开如下图:

火车头采集器教程 locoy火车头采集教程与实例

可以填写站点名,站点地址,网址深度(0,代表根据地址直接采内容。1,代表根据地址采内容地址,然后根据内容地址采内容。2,代表根据地址采列表地址,然后根据列表地址采内容地址,再根据内容地址采内容。),站点描述。

2.新建任务:

任务是采集器采集数据时的基本工作单元,它一定是建立在站点中的。采集器通过运行任务来采集发布数据。任务工作的步骤总体可以分为三步:采网址,采内容,发内容。一个任务的运行可以任意选择哪几步。而采集器又可以同时运行多个任务(默认设置是同时最多运行3个任务)。

选择站点 点击右键选择“从该站点新建任务” 。任务的编辑界面如图:

火车头采集器教程 locoy火车头采集教程与实例

3.采集网址:

采网址,就是从列表页中提取出内容页的地址。

从页面自动分析得到地址连接:以页面为例。我们来采集这个网址上的书信息。这个页面中有很多书信息的链接,要采集每个链接中书内容.首先需要将每个书信息的链接地址抓取到也就是抓取内容页的地址。

先将该列表页地址添加到采集器里。点击“<<向导添加”后弹出“添加开始采集地址”对话框。我们选择“单条网址” 如图:

火车头采集器教程 locoy火车头采集教程与实例

采集器的使用最主要的就是对任务的设置。而采集数据可以分为两步,第一步是:采网址,第二步:采内容。

点击添加把地址添加到下面框中,点击完成即实现增加列表地址。

如果我们选择 “批量/多页” ,如图:

火车头采集器教程 locoy火车头采集教程与实例

可用通配符:(*) 可以代替页码变化时的地址之间的差异。数字变化可以设置你要爬取该列表页多少页。 间隔倍数可以数字页码变化的倍数。你也可以设置字母变化。设置完之后点击添加按钮把列表地址添加到下框中,点击完成即可完成列表地址设置。

你也可以选择 文本导入 和 正则提取 在这里就不一一讲了,因为这二种基本用的很少。

手动填写连接地址规则是将需要的网址用参数来获得并组合成我们需要的网址。这个好处是处理网址那块有规律的网址很好处理,但要是没规律,和周围的一样的话,就不好处理了。我们以 为例. 看图里的设置:

火车头采集器教程 locoy火车头采集教程与实例

这样设置就可以获得内容页网址了,这个网址是从摘要那块获得的,那一块的代码都是一个样式,所以可以。 你看上图的话,会发现在参数那里有个缩略图,因为有的文章是将缩略图放在列表里的。现在我们举个例子。看这个http://www.61k.comdz/,这个是电影的,有小图的,我们看一下怎么获得这个图片。注意,这里是同时获得网址和缩略图的。

这样设置就可以获得真实网址了,这个网址是从摘要那块获得的,那一块的代码都是一个样式,所以可以。 你看上图的话,会发现在参数那里有个缩略图,因为有的文章是将缩略图放在列表里的。现在我们举个例子。看这个http://www.61k.comdz/,这个是电影的,有小图的,我们看一下怎么获得这个图片。注意,这里是同时获得网址和缩略图的。

在脚本规则里输入 [缩略图] 下边即出现无缩略图的提取内容中的第一张选项,将该项选中即可,再将[缩略图] 这几个字符去掉。如果您需要下载该图片,请选中将缩略图下载到本地。如果您不使用手动链接地址规则

获取网址,将启用自定义格式得到地址选项去掉即可。 注意事项:该功能只提取内容标签中的图片,所以请确保您要提取的图片在内容标签中。同时。如果内容标签中选了下载图片,则提取的图片也是下载到本地的图片地址。

火车头采集器教程 locoy火车头采集教程与实例

因为网址和缩略图那块的样子就是下边的,是有规律的,所以可以获得网址

火车头采集器教程 locoy火车头采集教程与实例

如果我们遇到那些用脚本做栏目列表时怎么办呢?用自动识别是不行的了。这时,该使用手动设置链接格式这个功能起作用了,这也是针对脚本类网址最好的解决办法。下边我们以腾讯Flash频道_作品列表为例来讲一下你用自动获取网址是得不到什么地址的

火车头采集器教程 locoy火车头采集教程与实例

.

我们仔细分析地址:源码后就会发现,这个是这个样子的网址http://flash.qq.com/cgi-bin/viewwork?id=727749 ,只有最后的数字是不同的,而这数字就包含在脚本里边,我们看一下源码:

火车头采集器教程 locoy火车头采集教程与实例

注意:new Array("727749",后边就有我们要的网址,还有缩略图,我们可以这样写规则:

火车头采集器教程 locoy火车头采集教程与实例

这样就可以了,看一下效果

火车头采集器教程 locoy火车头采集教程与实例

OK了。

4.采集内容:

当所有网址抓取完后就可以开始抓取内容。抓取内容就是采集器请求到内容页后分析内容页的HTML源代码并依据在采集器中的标签规则设置匹配出相应的数据。在测试到的地址中,任意选择一个子地址,双击选中的地址或者点击“测试该页”按钮。如图:

火车头采集器教程 locoy火车头采集教程与实例

将会跳转到任务中的“第二步:采集内容规则”如图:

在典型页面中会出现刚才选中的网址,这里就是测试采集内容。左边的标签名下面有:标题,出版社,图片,图片地址共四个标签,可以对标签进行添加、删除和编辑等操作。每个标签就是采集后得到的一段内容,可以是从页面中截取的内容,也可以是设置的一个固定的值或其他方式得到的值。

现在让我抓取地址中的标题,查看该页的HTML源代码。在源代码中可以找到页面中的问题部分。如图:

火车头采集器教程 locoy火车头采集教程与实例

可以从网页HTML源代码里得到需要的标题(工程硕士研究生英语基础教程(学生用书))。

复制页面HTML中“<span class="black000"><a name="top_bk"></a>”后在文本中向上查找发现查找不到与该段相同的代码,说明此处是该段代码第一次出现的地方。如图:

火车头采集器教程 locoy火车头采集教程与实例

火车头采集器教程 locoy火车头采集教程与实例

选择标题标签 ,点击右边的“编辑标签”按钮 打开如下图:

复制这段代码到“内容标签编辑框”的“开始字符串处”。 “</span>”是“<span class="black000"><a name="top_bk"></a>”后面第一次出现的地方。复制“</span>”到“结束字符串”处。如图:

火车头采集器教程 locoy火车头采集教程与实例

如果发现标题中含有“<ca><pre><pre><ca>”像这样的HTML代码,可以在标签设置里将这些没用的代码排除。设置如图:

火车头采集器教程 locoy火车头采集教程与实例

在此对话框中可以设置 标签内容必须包含什么和标签内容不得包含什么。

上面的 (*)可以代表为任何字符。

在这里还可以设置汉英翻译,简繁体互转:

火车采集器可以将抓取的汉字翻译成英语,方便一些朋友翻译用或做国外网站.同时支持将简体和繁体进行转化,方便简繁体用户交流. 汉译英,简体转繁体使用很简单,只要在标签内选中即可.

火车头采集器教程 locoy火车头采集教程与实例

如果“使用正则匹配模式”采集数据 :

正则表达式很强大,利用它我们可以获得一定格式的数据,比如网址,E-mail地址,数字,字母等等.可喜的是,从3.2版开始,火车采集器就支持正则规则的编写了,这给喜欢用正则来实现不同需求的朋友带来福音。火车采集器里支持两种正则,一个纯正则,一个参数正则。我们下边分开讲一下:

1.纯正则:

火车头采集器教程 locoy火车头采集教程与实例

在标签中用正则表达式采内容的格式是这样:开始代码(?<content>正则表达式)结束代码,其中在开始代码和结束代码中如有需要转义的字符就要用转义。比如我们要获取火车论坛的版块,我们从首页获取,正则可以这样写

火车头采集器教程 locoy火车头采集教程与实例

火车头采集器教程 locoy火车头采集教程与实例

然后就可以获得我们需要的版块名称了。

2.参数正则:

这个不算是正则,和网址采集那块的参数使用原理是一样的,可以对采到的内容进行组合。输入框两边都不得为空,后边的组合结果 [参数N] 是按匹配内容的顺序来写的,我们还是以http://bbs.locoy.com/为例,来获得栏目ID和栏目名称。

火车头采集器教程 locoy火车头采集教程与实例

测试一下,是可以获得我们需要的结果了。正则基本就这样,主要是写表达式的问题。如果您对这有兴趣,可以下载相关一些资料研究一下。

设置完之后点击“确定”按钮后点“测试”按钮得到页面中的数据。如图:

火车头采集器教程 locoy火车头采集教程与实例

看下面我们怎么样下载图片到本地来:

现在让我抓取http://product.dangdang.com/product.aspx?product_id=9188924&ref=book-02-L地址中的图片。查看该页的HTML源代码。在源代码中可以找到页面中的问题部分。如图:

火车头采集器教程 locoy火车头采集教程与实例

发现“<div class="book_pic">“是唯一的 ,复制这段代码到“内容标签编辑框”的“开始字符串处”。 “</div>”是“<div

class="book_pic">”后面第一次出现的地方。复制“</div>”到“结束字符串”处。

火车采集器的所有版本均支持下载图片。这里所说的图片是 源代码里的有<img标签的图片地址。所以只要您采集的源代码里有这这样的图片代码,采集器会将其中的图片下载到本地。如果是一个直接的图片地址,如http://www.61k.comlogo.gif ,采集器是会做为文件下载。下载文件是需要收费版本支持。图片的下载设置如下: 1.在内容页标签编辑框中选中下载图片。

火车头采集器教程 locoy火车头采集教程与实例

2.任意格式文件下载及保存设置

收费版本的程序支持任意文件的下载。具体是使用时选中探测文件并下载即可。 需要注意的是:

火车头采集器教程 locoy火车头采集教程与实例

火车头采集器教程 locoy火车头采集教程与实例

这个功能可以下载论坛附件或要下载站的文件,比如论坛附件下载地址是d.asp?id=1,那么只要在下载文件地必须包含里写上d.asp就可以下载源码里包含这个字符串链接中的附件了。 注意这个在有些站是需要你登陆后才可以下载。所以有时下载不了,请注意您是否登陆或是有权限下载那些文件。 还有的情况是你获取的登陆信息不正确,相当于没登陆.也会导致下载不成功。

如果使用单一的地址,比如直接是一个文件的地址,程序会自动去下载并判断文件类型。 如果是多个文件实际地址请用分隔符 #||# 相连,程序会分别进行下载.

在下载前请做好测试。具体在规则测试那里可以看到下载结果。

火车头采集器教程 locoy火车头采集教程与实例

3.设置保存目录:

文件的命名:为了防止同一目录下保存太多的文件,采集器支持随机目录保存方式,默认按时间按一定的规则生成目录保存文件。

看图,注意这里的绿色符号都是用特殊含义的,yyyy代表是年,如最后产生的就是2009,MM是月,其它类推,如果你要命名为yyyy,则需要对绿色字符进行转义,即yyyy,前一个斜杠即可.文件保存地址也一样.可以设置同步(边下内容边下图片),异步(下完内容在下图片)。

火车头采集器教程 locoy火车头采集教程与实例

设置好图片保存目录后,便可以点击“确定”按钮后点“测试”按钮可以把图片下载到本地来,如图:

火车头采集器教程 locoy火车头采集教程与实例

测试之后得到的图片保存在DataTestOnly文件下。采集保存到 你设置的目录下面。看下图:

火车头采集器教程 locoy火车头采集教程与实例

在上面也可以选择“使用自定义固定格式的数据”

火车头采集器教程 locoy火车头采集教程与实例

具体怎么实现这这里不讲了 ,因为很少选择它。

“页面内容标签定义”有个“同时采集多页页面“ 什么意思呢 ?

看下图:

火车头采集器教程 locoy火车头采集教程与实例

点击“同时采集多页页面“ 按钮 便进入如下图:

火车头采集器教程 locoy火车头采集教程与实例

何为多页?本来我们是从网址采集那块采集到网址,再对这个网址(也叫默认页)进行采集。但是有时有许多信息他并不在一个页面上,而是和这个默认页有一定的关系,要不他网址在默认页里,要不他网址和默认页网址有联系。我们就这个问题来讲一下具体的解决办法。

这里有两种途径获得第三个网址,我们先讲从默认页网址替换得到新网址。我们以http://data.movie.xunlei.com/movie/39843 这个页面为例,比如我们要获得全部的”剧情简介“,就得进入一下页,刚好这两页有关系,”剧情简介“页面的地址是 http://movie.xunlei.com/movie/39843/introduction,只是多了一个 introduction ,这里可以使用普通替换,也可以使用正则。我们看一下。

火车头采集器教程 locoy火车头采集教程与实例

这样就可以获得所需要的了。当然这里组合也可以有多个$的,比如$1,$2。

下边我们说一下用默认页源代码中获得网址的方法来处理上边的网址,

火车头采集器教程 locoy火车头采集教程与实例

这样就可以获得和上边一样的效果了。

通过上面的 标题和图片标签设置 并测试之后没有问题了,还不能确定对于其他的内容地址是可行的,因此你要多测试几个内容页地址,测试其它地址和上面一样。测试完之后便可以进行发布内容了。

5.发布内容:

如下图:方式一,方式三,方式四 都需要收费,在这里便不讲了。

火车头采集器教程 locoy火车头采集教程与实例

导出采集数据为txt,csv,sql格式:

除了能将采集的数据Web发布到网站,直接导入数据库,采集器还可以将数据保存到本地。目前采集器支持的文件格式有:

火车头采集器教程 locoy火车头采集教程与实例

1.csv 您只需要选择一下csv文件夹的目录,采集器会生成一个csv文件,文件里的标签次序和在任务编辑里的标签排序是一致的。

2.html 您需要指定html模板,该模板的内容和web发布模块的方式基本一致。比如[火车头采集器教程]locoy火车头采集教程与实例将会被替换成实际采集的内容。

3.txt 程序将所有的记录保存在一个txt文本里,每个标签之间用换行间隔。

注意:本地文件的编码需要注意,默认的保存方式是和采集源一样的编码。如果您指定了某种编码,请将html文件也保存成相应的编码文件。 请按下图进行设置。

火车头采集器教程 locoy火车头采集教程与实例

设置完之后便可以采数据了。

6.抓数据:

点击该站点下要执行的任务 ,右击选择“开始任务采集” 便出现如图:

火车头采集器教程 locoy火车头采集教程与实例

当运行完之后便产生一个文件,打开文件便是抓取下来的内容。 如果你抓取了图片,便会出现 :

火车头采集器教程 locoy火车头采集教程与实例

图片保存在你设置的图片路径。看下图:

火车头采集器教程 locoy火车头采集教程与实例

本文标题:火车头采集教程-OpenTTD火车教程
本文地址: http://www.61k.com/1101254.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1