openttd吧 关注:3,024贴子:10,826

引入:铁路逻辑控制相关

只看楼主收藏回复

主要工具:复合信号灯、轨道、逻辑用火车
先说一下复合信号灯和信号传输
因为入口信号灯同时检测下一个区间和下X个出口信号灯
而复合=入口+出口
所以在单路一一对应情况复合信号灯会保持与下一个复合信号灯相同的状态,这让信号传输变为可能

一旦末端被占用,则全变为红色。我们可以看到信号传导是可以多个输出以及跨介质的。
注意信号灯面对的方向,即我们平时火车来的方向为输出端,火车去往的方向为输入端。因为信号传递方向是跟火车方向相反的。

所以铁路逻辑控制的基本用法就是从主干道导出分支,处理后返回结果并在主干道上设置一个复合信号灯进行信号读取来控制列车运行。如下图。部分情况下可不返回结果,只做信息读取用。

如果收到不予通过信号,则可控制主干道不予通过

以下内容涉及四个部分:逻辑门、缓存、边缘检测、简单应用 有时间慢慢码(


IP属地:重庆1楼2021-04-16 16:32回复
    首先是基本概念 逻辑信号的定义
    不可通行状态设定为1,或者True状态,可通行设定为0,或者False状态


    青铜星玩家
    百度移动游戏玩家均可认证(限百度账号),去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:重庆2楼2021-04-16 17:41
    回复
      第一部分:基础逻辑门
      1.与门(AND)
      最简单的设计,连接两个输入端,输出端加个复合信号灯即可,仅当输入都为true时输出才为true,其他情况都是false,很好理解,两边都被占用时才会阻止列车进入,即true状态。


      青铜星玩家
      百度移动游戏玩家均可认证(限百度账号),去领取
      活动截止:2100-01-01
      去徽章馆》
      IP属地:重庆3楼2021-04-16 17:42
      回复
        2.非门(NOT)

        这里涉及到一个比较复杂的小结构,详细搭建如下
        首先提供一个弯道并画个圈


        输入输出

        弯道中间设置一个出口信号灯
        (注意这里必须为出口,因为出口信号灯只检测下一个区间而不管下一个信号灯。如果是复合则会直接读取输入信号而无法实现功能)

        输入侧边放一个入口信号灯检测输入端的复合信号。

        其余部分放置三个普通的通过信号灯将圈化为长度为2的4段
        提供两列2车厢的火车 即可形成一个循环。
        我们可以看到现在已经实现一个默认状态的非门效果

        因为在这个状态下,如下图,红色的两个区间始终被占据至少一个。
        若下方靠近输出的区间被占用,那么输出端的复合灯就会检测到下一个区间被占用,保持红色。
        若上方靠近输入的区间被占用,那么中间放置的出口信号灯就会检测到,所以出口信号灯变为红色,而输出端的复合信号灯只对应一个出口信号灯,所以也会保持红色。

        下图,若输入端输入为true,即不可通行,那么我们放置的那个入口信号灯就会检测到他对应的唯一一个出口信号灯(复合)为红色,所以它就会阻挡火车的持续运行,就会将火车堵在左边。这样一来,红色区间不再被占用。中间的出口信号灯只检测下一个区间,所以变成绿色,而输出检测到对应的出口信号灯是可用状态,所以自己也会变成绿色,即false状态。


        青铜星玩家
        百度移动游戏玩家均可认证(限百度账号),去领取
        活动截止:2100-01-01
        去徽章馆》
        IP属地:重庆4楼2021-04-16 17:49
        回复
          为了降低延迟,这里的火车速度越快越好,所以优先选择专用的逻辑引擎(NUTS newGRF)


          青铜星玩家
          百度移动游戏玩家均可认证(限百度账号),去领取
          活动截止:2100-01-01
          去徽章馆》
          IP属地:重庆5楼2021-04-16 17:51
          回复
            有了与和非,就已经可以组成其它所有逻辑门了。
            3.与非门(NAND)
            与门接个非门即可,仅当所有输入都为true时输出为false,其他情况都为true


            青铜星玩家
            百度移动游戏玩家均可认证(限百度账号),去领取
            活动截止:2100-01-01
            去徽章馆》
            IP属地:重庆6楼2021-04-16 17:53
            回复
              4.或门(OR)
              或门有两种设计
              第一种按照逻辑公式。
              OR=NOT((NOT A)AND(NOT B))
              两输入只要至少一个为true,输出都为true。

              第二种设计 看起来简单很多
              注意中间是两个双向入口信号。这个设计存在隐患,就是当输入从(1,0)变为(1,1)变为(0,1)交换的时候,会有一个极短的false输出。所以建议使用上一个

              5.或非门(NOR)
              或门加个非门即可,因为OR本身就有个终端非门,相当于不加,OR这个岔道就是或非


              青铜星玩家
              百度移动游戏玩家均可认证(限百度账号),去领取
              活动截止:2100-01-01
              去徽章馆》
              IP属地:重庆7楼2021-04-16 17:57
              收起回复
                6. 异或门(XOR)
                还是套公式
                XOR=((NOT A)AND B)OR(A AND(NOT B))
                这里偷懒用的那个比较简单的或门 主要还是展示最终状态(
                异或顾名思义是只要两输入信号相反输出为true,输入相同输出为false

                7.同或门(XNOR)
                异或取非即为同或
                上图末尾加个非即可。仅当两输入相同时取true

                第一部分结束。


                青铜星玩家
                百度移动游戏玩家均可认证(限百度账号),去领取
                活动截止:2100-01-01
                去徽章馆》
                IP属地:重庆8楼2021-04-16 18:00
                回复
                  第二部分 缓存
                  概念:绝对真(Absolute Red/Absolute True)就是一个存在火车的区间 轨道信号的第三种状态(或者说输入形式)

                  举个例子,作为与门的输入,绝对真和false向与,结果为true并且不管与上几个false都为true,因为火车直接占用了复合信号灯下一个区间,所以绝对真拥有最高判定优先级


                  青铜星玩家
                  百度移动游戏玩家均可认证(限百度账号),去领取
                  活动截止:2100-01-01
                  去徽章馆》
                  IP属地:重庆9楼2021-04-16 18:14
                  收起回复
                    绝对真最常用的地方就是配合缓存(memory)了,接下来看一下缓存。
                    缓存的作用就是记录信号并保持信号,其实叫锁存器/记忆体比较好点。它的结构很简单:

                    两个互相检测的复合信号灯,默认为false状态。
                    false状态时:
                    输入false ,保持false
                    输入true,保持false
                    输入绝对真,变为true状态


                    true状态时:
                    输入绝对真 保持true状态
                    输入true 保持true状态
                    输入false 重置为false状态

                    综上所述,控制缓存的信号:
                    绝对真(检测到直接通过火车)使缓存从false变为true;
                    true值不影响缓存的状态;
                    false可以把true重置为false状态。


                    青铜星玩家
                    百度移动游戏玩家均可认证(限百度账号),去领取
                    活动截止:2100-01-01
                    去徽章馆》
                    IP属地:重庆10楼2021-04-16 18:26
                    回复
                      一个简单的应用模型:

                      先提一下边缘检测,功能是检测到火车通过时的信号变化来提供一个瞬时信号,因为地方太小才用了(
                      如图是一个周期控制,在定好的周期内最多只允许一列火车通过。
                      左下的火车前区间的分支连接了一个缓存(分支前的复合信号灯是这个缓存的输出),连接到边缘检测器再连接到一个计时器,我们可以把这个计时器和检测装置看做一个大计时器,功能是每隔一段时间发送一次false信号给缓存让他重置。
                      当火车通过时,绝对真使缓存变为true,所以下一列火车将不能立刻通过直到计时器发送一个false重置缓存让分支前信号灯变为false为止。


                      青铜星玩家
                      百度移动游戏玩家均可认证(限百度账号),去领取
                      活动截止:2100-01-01
                      去徽章馆》
                      IP属地:重庆11楼2021-04-16 18:38
                      收起回复
                        正常人类都看不懂


                        IP属地:湖南来自Android客户端12楼2021-04-17 01:34
                        收起回复
                          楼主是编程高手!


                          IP属地:广西来自Android客户端13楼2021-04-17 04:02
                          回复
                            看不懂


                            IP属地:广东来自Android客户端14楼2021-04-17 07:55
                            回复
                              第三部分:单稳态电路/边缘检测器(monostable circuit/edge detector)
                              前者是它的特性,后者是它的效果。
                              作用就是仅当检测到输入信号发生一次脉冲变化(直连干线就是火车经过)时发出一个极短的脉冲信号。一般用于计数。

                              如图是一个简单的列车计数器。
                              很好理解,每当干线(假定红色为干线)火车经过,x1的边缘检测器提供一个极短的false脉冲使x1计数环上8(9外任意位置都可)位置处有一个可通行的复合信号灯,则会有一个极短的全线可通行状态,使计数环上的火车前进一个区间。下一个x10的边缘检测器则会检测个位9到0的区间火车通过,若通过则会发送false信号使x10计数环上的火车前进一个区间。X100同理,以此类推。


                              青铜星玩家
                              百度移动游戏玩家均可认证(限百度账号),去领取
                              活动截止:2100-01-01
                              去徽章馆》
                              IP属地:重庆15楼2021-04-17 09:03
                              收起回复