异星工厂吧 关注:63,670贴子:414,613

品质产线与迷你超市的终极通解——浅谈配方切换电路与产能保护

只看楼主收藏回复

配方切换电路镇楼
混料产能插件产线

品质装备产线

单组装机迷你超市——可制造63种物品,核心功能只需要2个运算器
爆炸物单组装机产线。背景有彩蛋


IP属地:中国香港1楼2025-10-25 11:23回复
    二楼自占


    IP属地:中国香港2楼2025-10-25 11:25
    收起回复
      2026-01-20 07:59:47
      广告
      不感兴趣
      开通SVIP免广告
      前言:
      自从2.0引入了组装机信号控制后,无数玩家前赴后继,研发了各种各样的配方切换电路。配方切换电路在空间有限的飞船以及品质物品有限的品质启动工厂中具有重要应用,完美解决了组装机闲置的问题,并且解决了部分混料物流问题。但广为流传的蓝图中的电路大多体积臃肿且扩展性差。
      本帖将介绍一种最低仅需一个常量运算器以及一个判断运算器即可存储无限多种配方的配方切换电路,以及与之配套的产能条保护电路,抓取限制电路,并将该电路应用到品质升级产线以及迷你超市中。
      如图为仅具有基础配方切换功能的电路。只需要一个常量运算器以及一个判断运算器,你就可以实现无限种配方的存储与自动切换。镇楼图中的电路附加了其他功能,但至多也只需要5个左右的运算器,即可实现配方切换,产能条保护,配方禁用,抓取限制,配方优先级排序等功能。

      本文还会介绍如何使用参数化蓝图自行配置配方切换电路,以及使用蓝图转json来合并多组配方的方法,方便诸位蓝图作者把这一技巧用于自己的蓝图。
      前排提示,该电路不一定是lz首创,但鉴于这么好用的东西一直没有人系统性介绍与使用,lz认为有必要专门出一篇教程来推广这一电路。


      IP属地:中国香港3楼2025-10-25 11:37
      回复
        那么该从什么地方说起呢?
        当然是从2.0的单运算器锁存说起啦
        下面是一个最基础的单运算器锁存。其作用为:当铁板小于50时,锁存铜板信号,之后直到铁板大于100,铜板信号会一直锁存在绿线中。

        2.0的多条件判断运算器允许我们将多个运算器的功能合并,搭配上红绿线隔离,我们就可以实现这种在1.0时代至少需要两个运算器的锁存功能。


        IP属地:中国香港4楼2025-10-25 11:52
        收起回复
          锁存器最常见的应用是什么?当然是裂解控制电路了
          为了防止控制电路因油料波动反复鬼畜,我们可以在裂解中设计油料的上限与下限,并使用锁存器控制裂解。当油料值下降到下限以下,锁存器就会发出裂解开始的信号,直到油料值回到上限以上。这种程度的应用在1.0就有很多,另外一个典型例子就是蒸汽储能:

          简单来说,锁存器的基础功能就是:当输入信号满足某些条件时,锁存某一信号,直到另外一个条件终止信号锁存。将这些条件设置成一套自反馈的条件(即锁存的某一信号可以主动终止自身的锁存),我们就可以得到不鬼畜的控制电路。


          IP属地:中国香港5楼2025-10-25 12:00
          收起回复
            快马加编


            IP属地:广东来自Android客户端6楼2025-10-25 12:15
            回复
              2.0时代,由于组装机控制电路的出现,使用锁存器控制组装机进行配方切换首次成为可能。
              将多个类似上面的锁存器并联,并分别将锁存的信号设置为某一配方,设定好配方开启的上下限,我们就得到了最简单的配方切换组装机电路:
              如图是一个配方切换铸造厂的电路:

              两个锁存器条件如下:
              铁小于100时开始浇筑,大于200停止。

              钢小于100时停止浇筑,大于200停止。


              IP属地:中国香港7楼2025-10-25 12:20
              收起回复
                最终效果:

                可以看到,任意一种材料小于100后,铸造厂就会开始补货,直到产物数量大于200。实际缓存上限高于200的原因是铸造厂具有内部缓存。
                有了这个小技巧,我们可以把很多可铸造零件全部合并到一个铸造厂来处理,也不用担心配方鬼畜切换,因为我们有锁存器


                IP属地:中国香港8楼2025-10-25 12:23
                回复
                  2026-01-20 07:53:47
                  广告
                  不感兴趣
                  开通SVIP免广告
                  那么问题来了:你标题里说可以用一个锁存器存多种配方,可是你现在给我们看的是每个配方一个锁存器的方案啊?rnm,退钱!
                  是的,配方切换电路当然不可能给每一个配方都单独配一个判断运算器,然后全部并联起来,那样占地面积太大,还不如我直接多放几个组装机呢。问题来了,我们怎么把多种配方锁存进同一个锁存器呢?
                  答案是通配符——每个信号!

                  描述字怎么这么多?不想看
                  简单来说,“每个信号”会把每个输入信号平行处理,分别判断并分别输出。这完美符合了我们对于多配方锁存器的期望——多个平行的配方信号分别判断是否满足条件,再分别输出。改版后“每个信号”的平行图标也暗示了这个通配符平行处理信号的特点


                  IP属地:中国香港9楼2025-10-25 12:30
                  回复
                    严肃支持


                    IP属地:江苏来自Android客户端10楼2025-10-25 12:57
                    回复
                      欸!新问题来了!平时我们用“每个信号”通配符一般是用来设置条件过滤信号的,这种情况下所有平行输入信号都可以用一组条件来判断是否输出。典型例子:过滤大于0的信号:

                      那么我们如何给每个不同的信号设置不同的条件呢?
                      自然,我们想到了新版电路AND和OR的功能:

                      好像还是有什么地方不对......如何判断输入的“每个信号”是不是浇筑铁或者浇筑钢呢?
                      答案是“每个信号”=配方信号的额外条件!
                      在这种情况下,如果从红线输入的信号等于浇筑铁或者等于浇筑钢,它们就会分别进入两套锁存逻辑进行处理,互不干扰,平行运作。似乎到了这里,我们的切配方电路就大功告成了?


                      IP属地:中国香港11楼2025-10-25 13:00
                      回复
                        但是等等!运算器的“=”运算符到底是什么意思?
                        我去!这玩意居然是数值相等,而不是信号类型相等!哎woc这Wube怎么这么坏啊
                        这意味着,如果输入的浇筑铁和浇筑钢信号大小相等,那么他们会同时满足所有AND条件组的判断条件,从而扰乱整个系统:

                        更气人的是,假如我们引入了其他信号,并且这些信号一不小心和配方信号大小一致,他们也会瞎触发各种写好的条件。比如这里的铜浇筑信号。
                        细心的吧友可能也发现了,我们的各种判断条件信号都是从红线输入的,配方信号也是。在实际应用中,假如哪个物品的数量变成了1,上面的bug就有可能触发。这该怎么解决呢?


                        IP属地:中国香港12楼2025-10-25 13:09
                        回复
                          答案是百万位配方编码
                          只要我们输入的配方信号数值大到离谱,永远不会和常规输入信号大小一致就行了。所以具体是百万位还是千万位不重要,重要的是在极大的数位进行编码,这样也可以有效区分各个配方信号。

                          这也是为什么我们的配方切换电路需要一个常量运算器,这就是我们的配方列表,用来存储所有配方的百万位编码。


                          这种情况下,能够与浇筑铁相等的信号只有浇筑铁,能够与浇筑铁相等的信号也只有浇筑钢。通过这种方式,我们真正实现了在一个运算器内切换无数种配方。


                          IP属地:中国香港13楼2025-10-25 13:20
                          收起回复
                            前排支持


                            IP属地:浙江来自Android客户端14楼2025-10-25 13:26
                            回复
                              2026-01-20 07:47:47
                              广告
                              不感兴趣
                              开通SVIP免广告
                              好的,第二个问题:如果我的某一个配方是另一个配方的原料呢?
                              在这种情况下,我们设置锁存条件上下限时需要注意百万位编码带来的影响:
                              这个运算器负责控制第三张镇楼图中的组装机配方切换。黄爪和红爪分别编码为1M和2M,那么黄爪数量作为红爪的判断条件时,应当以1M为基准,在此基础上加上你想要的阈值。

                              例如这里的条件:黄爪数量大于1M+50,启动红爪生产。
                              这样我们的配方就可以在基本原料与高级产物之间切换了


                              IP属地:中国香港15楼2025-10-25 13:28
                              回复