模拟火车中国站

 找回密码
 加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

用百度帐号登录

只需两步,快速登录

模拟火车中国站欢迎您的到来
查看: 5169|回复: 2
收起左侧

对MSTS信号系统和道岔调度的理解(转)

  [复制链接]

该用户从未签到

我爱模拟火车 发表于 2010-4-17 19:58 | 显示全部楼层 |阅读模式

请登陆后查看,谢谢!

您需要 登录 才可以下载或查看,没有帐号?加入 用百度帐号登录

x
我对MSTS信号系统和道岔调度的理解[第二版]

昨天晚上我跑了下贵昆,自由驾驶模式,开着开着前方黄灯,我想那下一个红灯前面不就到头了吗?结果继续向前开的时候又变成绿灯了,我想自由驾驶没有其它车,灯没理由变啊?又想了下明白了,是SignalNumClearAhead设置不够,没早为我扳动前方道岔,等我靠近了才扳道岔,导致信号改变。

------------------------------------

本文的目标读者是任务制作者、线路信号脚本设计者和线路作者。

MSTS的信号状态是完全由轨道拓扑、道岔走向和车辆对信号区间的占用这三个因素决定的,也就是这三者的状态唯一决定了信号的显示结果,不存在其它中间状态变量。一个线路的轨道拓扑是固定不变的,而车辆位置(包括AI车)在某个具体时刻是确定的,所以信号变化的关键在于道岔走向。这里就有个看不见的因素:道岔占用和自动扳道。

MSTS的车辆在前行时,信号会尝试为车辆占用前方道岔并在必要时扳动道岔,这一过程并不直接影响信号显示,而是通过扳动后道岔走向的改变来影响信号显示的。反过来,MSTS的信号除指示本务机操作外,也影响AI车的运作,调度最终还是通过信号来体现的,但调度的核心是道岔改变。

MSTS的信号状态有8种,对于AI车来说,其实只分3类:对于STOP信号,AI车会在前面停下来;对于STOP_AND_PROCEED信号,AI车会先停车再通过;而其余信号对于AI车来说只是限速不同的通过信号。当然除了受信号影响,AI车还有一种情况会停车,就是前方的道岔不是向自己开放(铁轨汇合),开过去必定会出轨,这时候AI车也会自己停车,即使完全没有设信号系统。除了上述因素,AI车完全不检测是否会和其它车碰撞,因此任务编辑者需自己防止AI车进同一个信号区间,要避免用STOP_AND_PROCEED分割AI车。

基本上说,MSTS中实际上不存在集中式智能调度,因此申请占用某段区间或那种到发车时间为你开放信号(除非用特殊用车挡方式)是无法实现的。MSTS信号状态其实是完全由线路道岔的走向和车辆对轨道的占用计算出来的的。调度实际通过道岔根据车辆的运动改变占用状态而改变道岔走向,继而改变信号显示来实现。信号状态计算具体由信号脚本决定,大致是由前方下一个信号机状态、前方到下一个信号机之间是否有车占道,到下一个信号机之间前方道岔是否可通过(比如前方铁轨汇合而道岔方向不向你开放)这3种因素决定。

从编程的角度设想下MSTS的道岔调度:每当车辆跨越一个道岔或信号机,或路径上的折返点,或新放置一个AI车,或车辆改变运行方向,MSTS都会对道岔调度进行计算。道岔计算完毕后再计算信号状态。每个道岔的数据结构中都有一个布尔值(或列车编组ID)字段,记录该道岔是否已经被车辆占用,这点非常重要,因为火车刹车距离长,其它车辆抢占道岔导致绿灯突然变红灯是不可接受的。MSTS会根据Sigcfg.dat脚本中信号的SignalNumClearAhead值为所有车向前方扫描指定信号机数长度内的自动道岔,尝试占用,并必要时扳动道岔。已经被占用的道岔是不可扳动的,因此车辆接近只会显示红灯(假定信号机放置正确)。但是对于一次全局扫描计算中,如果有多个编组同时尝试占用一个1未被占用的道岔,这时候就有优先级问题了,已知玩家操纵列车和AI车的优先级不同,AI车中双机重联和普通列车也不同,这里具体的算法尚不很清楚,只是推测优先级高的先占上道岔(可能是优先级高的先扫描)。当列车通过道岔或列车改变方向,列车就会释放自己对道岔的占用,只要道岔占用状态改变,这时候就进行新一轮的道岔占用扫描。

对于线路来说,还有一点需要注意的就是通过信号的SignalFlags ( ABS )设置,这里的ABS应该是指Auto Block System 即自动闭赛。当信号有这个标志时,该信号机将不计数入SignalNumClearAhead的信号机数(或若干个连续的信号机只计1个),因为通过信号区间一般是无分岔的,只占用一段而不是全部占用连续的通过信号无意义,特别是单线容易造成列车头对头死锁。当然这点还是推测,尚未得到完全验证。MSTS信号代码还存在不少bug,以上描述只是原则性的,具体实现可能还有很多例外。

本文描述了MSTS信号系统和道岔调度的基本工作过程。未包括的是在STOP停止信号前按TAB键申请通过的工作机制,从了解到的情况看,允许通过并没有改变信号和道岔,所以其实没有改变什么,只是允许玩家过红灯而不会Game Over;但是MSTS根据什么拒绝申请尚不清楚,应该不是根据信号脚本,有可能是“到下一个信号机之间前方道岔是否可通过”。
模拟火车中国站 - Www.Trainsimchina.Com - 国内最大的模拟火车游戏基地
回复

使用道具 举报

该用户从未签到

michellecomcn 发表于 2010-11-10 16:13 | 显示全部楼层
我来坐沙发。
模拟火车中国站 - Www.Trainsimchina.Com - 国内最大的模拟火车游戏基地
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2024-4-2 09:32
  • 签到天数: 1262 天

    连续签到: 1 天

    [LV.10]QD-超级会员Ⅰ

    China-渴望 发表于 2012-12-5 23:50 来自手机 | 显示全部楼层
    太深奥了,学习了。
    模拟火车中国站 - Www.Trainsimchina.Com - 国内最大的模拟火车游戏基地
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入 用百度帐号登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    QQ|申请友链|小黑屋|手机版|Archiver|模拟火车中国站 ( 粤ICP备14026763号-4 )

    GMT+8, 2024-4-18 19:32 , Processed in 0.213678 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表