= 创作分享 =
MOD技术讨论
我的Mod游玩心得 篇四:我的超级模块仓库(四更 尚未竣 ...

我的Mod游玩心得 篇四:我的超级模块仓库(四更 尚未竣工)

craftkuro 于 2020-8-7 14:14 ( 10月前 ) [教程] 分类。  [复制链接] [显示全部楼层] [打印]
本帖最后由 craftkuro 于 2020-12-10 01:43 编辑

本文尚未完工!但是我实在太兴奋了!
在本文完工后记得从头再看一遍!
现在内容大概只写了5/10,等完工还需要相当长的一段时间。我还需要一些时间来验证后面的部分实验性内容。


2020年12月10日的内容已发布完毕。
2020年12月6日的内容已发布完毕。
2020年8月11日的内容已发布完毕。
2020年8月7日的内容已发布完毕。后续内容等我再写一部分后发布。


-------------------------------正文开始------------------------------------

许可证CC-BY-NC-SA。最初作于2020年7月-?年?月。

目录目录目目录

暂时只列出已发表的内容。


-1 前言

0 基础组件
0.1 能源组件

0.2 物流组件
0.2.1 管道
0.2.2 ME管道
0.2.3 物品均匀分发
0.2.3.1 方案一:传统方案
0.2.3.2 方案二:ME接口方案

0.3 信息组件

1 AE
1.1 福鲁伊克斯水晶合成
1.2 高纯水晶合成
1.3 充能赛特斯水晶合成
1.4 合成处理器(多方块)(2020年12月10日有更新
1.5 主网络存储
1.6 分子装配室
1.7 逻辑、运算和工程处理器的合成
1.8 物品数量控制 (2020年12月10日有更新
1.9 地皮设计
1.10 排线
1.11 事务合并
1.12 自恢复量子隧道
1.13 伪配方
1.13.1 处理样板的本质
1.13.2 伪配方 in Action
1.14 自刷新缓存
1.15 代理合成 Part 1

2 物品处理阵列

2.1 物品分发侧
2.1.1 适用于多样种类物品的廉价方案
2.1.2 适用于固定种类物品的ME接口方案
2.1.3 适用于多样种类物品的多通道低阻塞方案
2.1.4 适用于多样种类物品的存储抽屉方案
2.1.5 适用于多样种类物品的P2P方案

2.2 物品收集侧
2.2.1 若机器支持自动输出
2.2.2 若机器不支持自动输出

2.3 整体解决方案
2.3.1 固定物品种类+自动输入+自动输出
2.3.2 多通道方案的典型应用
2.3.3 多通道方案的非典型应用
2.3.4 多样物品种类+无自动输入+无自动输出
2.3.5 魔法物品栏 vs 头秃科技

3 矿物开采装置

4 矿物处理系统

4.1 The IC2 Way
4.2 The Tinkerers’ Way
4.3 The TE Way
4.4 The MEK Way
4.5 The EIO Way
4.6 The GTCE Way

4.7 My Way - 基于物品路由的模块化矿物处理系统

4.7.1 Easy难度 - 概念介绍

4.7.2 Normal难度 - 非常成熟的固定种类矿物处理系统
4.7.2.1 架构
4.7.2.2 实施
4.7.2.3 样板间

4.7.3 Hard难度 - 包容一切的矿物处理系统
4.7.3.1 新架构
4.7.3.2 模块:路由器
4.7.3.3 模块:矿物处理捷径
4.7.3.4 模块:GT(CE) 矿物前处理
4.7.3.5 模块:普通单流程处理
4.7.3.6 模块:特殊流程处理
4.7.3.7 模块:普通电解机
4.7.3.8 模块:特殊电解机
4.7.3.9 模块:内部循环生产线
4.7.3.10 模块:小撮/小堆粉合并
4.7.3.11 速度自适应
4.7.3.12 样板间二号和三号

4.7.4 番外篇 - 史海钩沉:我的首套GT矿物处理(2020年12月10日进度到这里






前言
这篇文章里的内容实在是太爆炸性了。我自己都兴奋到打字停不下来。

好,咱们开始!
thread_2904.jpg


我们约定:
模块间关系 >>
上游:将物品投放进模块的装置。视具体使用场景而确定。可以是来自主网络的合成任务,可以是其他组件的输出,也可以是玩家。
下游:文中所讨论的模块的产品输出对象。可以是主网络,可以是其他组件的输入端,也可以是任何一个兼容的物品栏,比如箱子。

输入输出类型 >>
标准输入:以固体原料本体的形式输入。
标准输出:以固体产品本体的形式输出。
标准能源:在整合包中可转换为其他任何能源种类的能源(实践意义上一般是RF/FE)。

固体原料本体指的是,固体并非以“被存储在其他容器中”的状态输入,比如装在ME存储元件里的一整份原料。


样板类型 >>
标准样板:和NEI/JEI里看到的最终产品的配方内容完全相同的样板。
输入输出关系:样板的输入和输出内容,是对应模块的输入和输出内容,这样的配方可能在JEI/NEI中不存在。标准样板可以认为是这种样板的一种特殊情况。

标准样板定义中的“完全相同”,指的是上一篇提到的输入输出关系,而不是具体的生产流程。比如AE的高纯水晶种子,合成过程是从种子到高纯水晶,那么配置一个从种子到水晶的合成样板,就是标准样板。尽管实际的合成可能不会有水或晶体催生器的参与。

标准输入/输出和标准样板并不冲突。比如一个有流体合成的GT组装机配方,需要的流体量刚好等于一个锭融化出来的流体量。那么我们就可以在合成样板中加入一个这样的锭,然后在工作模块内部融化成流体参与合成。这样实际向模块输入的,都是固体,符合标准输入。但是此时所用的样板不是标准样板。


其他 >>
即插即用:模块内部设计与上下游的具体输入输出无关。在上下游配置正确后,直接对接模块即可使用;上下游更改配置时,也无需更改模块配置。

并行粒度:将一个较大的任务分成很多小份,每个小份包含的单个任务数量即是并行粒度。




0 基础组件
基础组件是几乎每个工作模块都会用到的东西。
它们结构简单,我们直接开讲。

0.1 能源组件

只要兼容,直接拉线也是可以的。

在大多数情况下推荐在前面加一个单方块或多方块的储能设备,这样可以获得以下优点:
- 固定的能量流向,有利于减少能源网络的不确定性(详见篇一)
- 模块专属的能源缓存,在部分情况下还可以实现不同模组能源的转换
- 管道与方块连接可获得较好的稳定性,尤其是在基于capabilities的压缩机器上(直接连接也可以,目前没有发现问题)

注意储能方块的负载能力。

对于原生GT,在这个地方还可以使用变压器以解决上游的电流问题。

article4.chapter0.img1.png

设计没有定式,可freestyle。

不推荐将不同等级的导线直接相连,即使这种做法能够兼容。TE的不同等级导线之间会尝试平衡能量水平,导致连接处的能量传输能力被大量消耗,最终吞吐量比标称会下降很多很多。

0.2 物流组件

0.2.1 管道

不得不说管道的出现是MC物流界的一次革命。
本文主要讨论TE(TD),EIO和MEK的管道,和它们的独特之处。

TE管道:

- 需要额外伺服器等(高级的不太便宜),但兼容TE机器的自动输出,此时不需要伺服器
- 管道本身有延迟,主要与管道长度有关
- 有检索器来四两拨千斤
- 可精确控制单次抽取数量(0-64连续可调)
- 高性能,尤其是不透明管道
- 管道集成的红石信号需要通过红石信号中继器,需要至少2个方块的体积

EIO管道:

- 自带抽取功能,1.12没有逆向抽取的检索器功能,兼容EIO机器自动输出,管道本身无延迟
- 由于单个方块中可通过多个管道,可以非常方便地将物品和红石管道集成
- 单次抽取数量只能是1或4n,抽取时间间隔不固定,随着活动时间增加而逐渐缩短
- 管道使用方块实体渲染,在主世界等地方不可大量部署,但压缩机器可以,因只会渲染一个区块
- 稳定性稍差,历史上遇到过2次让游戏崩溃的问题,开发者的锅

MEK管道:

- 自带抽取功能,管道本身有延迟,MEK的路由功能用的少,但看起来也兼容自家机器的特殊功能
- 管道本身没有过滤器功能,没有目的地轮询等功能,好像也没有红石控制功能
- 无法控制单次抽取数量
- 使用方块实体渲染,即使关掉透明管道渲染也是,在主世界等地方不可大量部署
- MEK的气体和气体管道是异端!

0.2.2 ME管道

这是重点。ME管道是我的很多模块的重要物流组件。

咱们从一个简单的情景开始。
这里有一个ME网络,包含一个ME接口和一个贴着箱子的ME存储总线。


article4.chapter0.img2.png
我们丢若干物品进这个ME接口,那么在非常短的时间内,丢进去的物品就进了箱子。
这不就是管道么!

√延迟非常低,并且与物理距离无关
√无限吞吐量(只要给足电,ME网络传输物品需要消耗能源)
√可安装多个输入和输出端,每个输出端都可独立配置
√若配合输入总线,可实现主动抽取

咱们来看看一个简单的实用方案:


article4.chapter0.img3.png

从两个矿机来的物品分别进入两个ME接口,然后符合ABC的物品的矿物词典的物品(因为模糊卡)分别进入右边对应的三个箱子,其他的物品进入最下面的那个箱子。
输出侧的存储总线建议配置为【只写】。

但是这个方案有两个潜在问题。
其一:一旦目标容器满了或出故障,那么物品要么堆积在输入端的ME接口等待下游腾出空来,要么全部涌向不标记物品的存储总线从而失去物品分类路由的意义。不过,堆在输入侧的问题有时可以当作一个特性,来协调上下游的生产速度平衡。单一目标容器的堵塞不会影响其他无关线路的运行。
其二:当输出侧的ME接口连接其他ME网络时,这个连接有时会失效。触发一次方块更新(比如重新摆方块,或者在存储总线的界面里点清除配置)可解决问题。这个可能是AE的bug,暂无解决方案。在移动压缩机器时这种问题特别明显。

关于模糊卡,见github issue 1603:Fuzzy also matches any oredict entry as well as ignoring NBT data.
但是,刚才我看了看ItemComparisonHelper.java,发现矿物词典部分的代码被注释掉了……
所以模糊卡究竟能否匹配矿词,请根据自己使用的版本做实验确定。模糊卡的其他功能应该没有问题。

这里还有一个小小的创意:
众所周知,ME网络有且只有一个控制器时才能正常工作。
而且存储总线不支持红石卡。
那么如何控制ME管道的启用和禁用呢?
摆上第二个控制器就行了。这样网络瘫痪,面向上游的ME接口虽然仍能接受物品,但不会传输到下游。要恢复工作,只需用方块破坏器等装置把多余的控制器挖掉。
这个“特性”似乎只有在这有用。
下文出现的【ME管道】或【ME导管】指的都是这种物流装置,而不是EIO中传输AE频道的导管。

0.2.3 物品均匀分发


在上一篇中我们提到,在单机吞吐量有限的情况下,提高总体吞吐量的方法就是多台机器并行处理,并且需要平衡好吞吐、延迟和性能。

0.2.3.1 方案一:传统方案
这个原理非常简单。管道抽取一侧配置成列表循环(TE)或者循环(EIO),投放侧连接机器即可。
这个循环是对每次抽取来说的,因此单次抽取的物品通常会投放到同一个容器里。

article4.chapter0.img4.png

在这个装置上,我比较偏好EIO管道,因为延迟较低。

但是,如何匹配好上下游配置,让整体实现高吞吐低延迟,是非常有讲究的。

设以下几个变量:
抽取侧每次抽取个数n
抽取侧每次抽取间隔d
执行装置单次执行耗时t
目标容器个数x

则有下图:
(我真的没有更好的方法来描述这个场景了,其实做成可交互的图,效果更好)


抽取时间轴v2.jpg

于是执行装置的有效工作时间就是图中带有红色的区域。我们希望让这个区域最大化。
有以下几种方法:
- 缩短抽取间隔d。这将使图中左下角的三角形面积减小——降低启动阶段的机器闲置率。大多数情况下,玩家不能随意控制这个变量。
- 增加执行装置数量x。每加一个执行装置就能多一行,成倍增加总体吞吐量。
- 升级执行装置以缩短t。单个机器运行得更快,只要配置合理,很明显总体吞吐量更高。

但这些方法还需要额外的配置。
缩短抽取间隔,将会使图中的红色条条初始端的间隔缩短,最终它们将重叠在一起。这意味着管道循环完一个周期时,执行装置内的物品仍未处理完毕。这将造成物品在执行装置输入侧的堆积,不利于物品处理特性(包括切换工作内容和吞吐量-时间曲线,在后面的内容会提及)。此时应当减少n,让红条条的长度变短从而不重叠。
增加执行装置数量,除了在图上加上一行,还会使得每个执行装置从上游接收物品的间隔增加一个抽取周期。于是红色条条初始端的间隔将增加一个周期。这时候应当增加n来充分利用执行装置。
升级执行装置,会使得t缩短,导致红色条条缩短。此时应增加n来充分利用执行装置。

据此,假设瞬间向装置输入足量所需物品,我们可以画出理想状态下这套装置的吞吐量-时间曲线
(本文中的所有此类曲线仅展示概念,不能保证准确性)


article4.chapter0.img6.png

若存在物品堆积,在执行装置输入侧的物品无法再次进行均匀分配,只能慢慢处理,这将大大增加整体任务完成所需的时间,并拖累后续其他任务的进行。因此我建议尽量避免发生这种情况。
(图中斜线部分是为了忽略具体执行装置数量的细节,实际上这部分是一个x阶的阶梯)

诚然,我们不会始终进行史诗级的合成。对于在这个装置上进行的较小规模合成,我们还可以画出吞吐量峰值-队列长度曲线


article4.chapter0.img7.png

越小的合成总体上越慢。没有办法解决。但是我们可以改变n,将整套装置配置成“为大型合成优化”或者“为小型合成优化”。

这套方案的最大优势是,无需标记任何物品类型,故可以用于几乎所有用途。
同时,它也不需要机器支持自动输入。

0.2.3.2 方案二:ME接口方案

上一个方案虽然相当有效,但仍有一些局限性,比如:
- 单个管道抽取的能力仍然有限,当执行装置数量足够多时,需要进行分组。
- 管道不够智能,经常只抽取箱子物品栏的第一个格子,从而大大降低有效抽取速率。
- 吞吐量和并行粒度不可兼得。单次抽取数量较多时,并行粒度会很低,从而影响小规模合成速度。

为了解决这些问题,以实现最大程度的有效并行,我又设计了一套方案。

众所周知ME接口GUI的上半部分,标记物品后ME接口里会出现对应数量的标记物品(如果网络里有的话)。
将一个支持自动输入的执行装置贴着它摆放,这些机器就可以从接口主动获取物品来进行处理。如果在ME接口里只标记1个物品,那么并行粒度就是最理想的1个物品。这个物品被机器拿走后,若网络里还有相应物品,在很短时间内这里又会出现一个物品。

这套装置的结构如下图:


article4.chapter0.img8.png

然而ME接口里标记的物品可以不止一个,直到一组都可以。
那么,假设上图装置里每个接口里都标记4个物品A,然后往ME接口里放10个物品A,那么这10个物品会在哪些接口里出现,每个接口里又出现几个呢?
实验结果是随机出现,大多数情况下2个接口里出现4个,一个接口里出现2个。偶尔还会出现4+3+2+1的情况。
几乎是非常理想的并行。

于是这套装置就是一个并行粒度可调的物品均匀分发装置。
它的吞吐量-时间曲线几乎就是一个非常理想的方块形。
而它的吞吐量峰值-队列长度曲线就非常有趣,取决于ME接口里标记的物品数量(假设所有接口里标记的物品数量都相同)。


article4.chapter0.img9.png
于是,标记较少物品,能够增加并行性,但承受上游流量尖峰的能力较差,此时会造成物品在ME驱动器里堆积(但在驱动器满之前没有副作用)。标记较多物品,并行程度较低,但能够有效吸收上游流量尖峰。

单种物品的标记数量可以根据自己的需求来确定,我的偏好是4,可以达到并行程度和抗波动能力的平衡。

这套方案并不是没有代价的。最大的代价就是,一个ME接口只能标记9种物品。这限制了这套装置在很多场合的实用价值。
另一个代价是,ME接口的配置比较麻烦。虽然有内存卡协助复制,但一个满配的超级机器可多达128个ME接口,配置完还要逐个检验内容是否正确,这确实比较费精力。
此装置要求执行装置支持自动输入。TE的机器就非常合适。


0.3 信息组件

其实信息组件只有一个,就是ME功能适配器。
压缩机器的里外各需要一个,用于直接将ME网络从压缩空间壁穿过。
一对适配器可以把里面的网络往外传,或者把外面的往里传。

需要的时候用就行了。

稳定性稍差,有时会导致令人费解的问题而且没有合适的解决方案。

但是它的功能实在独特,没有东西可以替代。


1 AE

1.1 福鲁伊克斯水晶合成
——真·新兴矿业
AE必备组件。

方案一:有AE2 Stuff时的方案

对于这种情况,一个输出总线怼进晶体催生仓就行了。
输出总线的物品配置为合成这个水晶的三种原料,加一个容量卡,加两个加速卡(不要多),输出总线模式配置为循环输出模式。放进去的原料不会被自动提取,故也是一个输入总线怼上去就行了。
这样每次输出的物品都会尽快合成为产品。切勿设置成一种物品输出完后再输出其他物品,要是执行一次大合成,空间占满了,就得手动去拿走多余的物品。
速度不必担心,基本上够用。加速卡加三个的话,物品填充的速度太快可能会占满所有的格子,然后机器就会停止工作了。晶体催生仓每tick消耗一份物品合成两个水晶,那么我们输入物品的总体速度不能超过这个速度太多。

模块的逻辑结构:
article4.chapter1.img1.png

在模块内部,用于接收上游合成原料的临时存储装置,这里称为缓存。
缓存大小由存储装置内的存储元件决定,视当前发展程度可灵活变化。通常情况下可以使用任何大小的缓存,后文若不特别说明均如此。
逻辑结构中不考虑能源和频道等问题。后文均如此。
此方案不能用存储总线代替催生仓输入侧的输出总线,因为执行大合成时存储总线可能会很快占满所有格子使机器停止工作。
此方案的物理结构略。

很不幸,这个装置是少数不能扩展的装置之一。我暂时没有办法在保证性能和吞吐量的前提下,保证每个晶体催生仓里都始终能分配到整份物品。

方案二:没有AE2 Stuff时的方案(不完全原创)

没有了晶体催生仓,在不考虑整合包魔改的情况下,我们就只能用AE原生的合成方法了。
于是这个问题可以分为两部分,一部分是怎么把原料丢出去,另一部分是怎么把产品收回来。
原料丢出去很简单,用成型面板。
至于产品怎么收回来,如果有虚空箱子之类的工具,那么加上一个白名单过滤器就可以搞定。如果选择纯AE的方案,那么有一个特性可以利用,此方法来自贴吧:
在存储元件里配置白名单,然后用连着一个装着该存储元件的ME箱子的破坏面板来接收这些物品,这样只有存得进去的产品可以进入网络,然后再用输出总线等方法送出去即可。

纯AE方案的逻辑结构:

article4.chapter1.img2.png


此方案的物理结构略。

总结一下,这两套装置的模块特性:
输入方式:标准输入
输出方式:标准输出
能源需求:AE,或标准能源
样板类型:标准样板
任意数量合成:是
乱序合成:是
尺寸:N/A
(由于这两个方案的特性相同,故拿出来一起合并了)


1.2 高纯水晶合成
一样是AE必备。一样有两种方案。
需要注意的是,加满加速卡的话,此装置的耗能比较可观。

方案一:有AE2 Stuff时的方案

这次没有整份物品投放的问题,于是我们可以放心大胆地摆上一堆晶体催生仓。
催生仓无论放多少物品都是一样的速度,我们也无需在意均匀投放的问题。
此方案的逻辑结构:

article4.chapter1.img3.png 物理结构略。


方案二:没有AE2 Stuff时的方案

和刚才福鲁伊克斯水晶的方案二一样,我们在下面配置的白名单里增加三种高纯水晶,就可以达成一样的目的。
当然,没有催生器也是不行的,在一格水边上围上一圈4个催生器即可。
如果觉得闲置时还开着催生器比较费电,那么可以使用ME标准发信器的“合成时发出红石信号”模式,配合触发总线,来控制催生器的开关。

逻辑结构和物理结构均略。

模块特性:
输入方式:标准输入
输出方式:标准输出
能源需求:AE,或标准能源
样板类型:标准样板
任意数量合成:是
乱序合成:是
尺寸:N/A


1.3 充能赛特斯石英水晶合成
充能赛特斯石英水晶的主要用途就是合成福鲁伊克斯水晶了。
前期大多是小合成,故要求此装置的延迟尽可能低。

那么延迟最低的物流装置是什么呢?除去难以驯服的存储总线,剩下的就是原版漏斗了。虽然它的吞吐量相当差,但用在充能器上还是绰绰有余的。

这个装置也没必要讨论结构,直接两个漏斗中间夹一个充能器就行。

1.4 合成处理器(多方块)
这其实就是个怎么摆好看又好用的问题。
所有的合成处理器最终都是直连主网络,或者用ME功能适配器搭个桥。
因此这个模块也没有值得说的逻辑结构,直接看物理结构。

廉价的合成处理器
这个主要是前期做不起大的合成处理器时用的。当然,后期在物品数量控制等自动创建的小合成任务中也很有用。建议在后期也留着,以避免一个只用到1k的合成占据一个1M合成处理器的状况。
在压缩机器里不多不少正好32个。还是对称的。

article4.chapter1.img4.png

平凡的合成处理器
很明显,这些主要是用于普通的手动合成的。容量适中,一般的大合成都没问题。并行处理单元很重要,数量要给足。

article4.chapter1.img5.png

史诗的合成处理器
史诗的合成需要史诗的基础设施。处理器不要钱的时候,做就是了。

article4.chapter1.img6.png
需要注意的是,对于1.12的AE版本,由合成卡添加的合成会选择能装下的最小的合成处理器,而手动发起的合成,默认会选择可用的最大的合成处理器,无论它消耗多少空间。这个问题不太好解决,而不用时断开这些史诗级合成处理器又太费事。


1.5 主网络存储
这个其实也是平淡无奇。驱动器一连就是了。
于是,在一个5x5x5的压缩机器里摆上两板4x4的驱动器,是一个价廉物美的选择。注意频道路径。

article4.chapter1.img7.png

如果需要将物品分类存储,那么可能还需要在里面加上一点装置,比如元件工作台和IO端口什么的。它们可能占用频道,只能从驱动器里抠几个下来了。

article4.chapter1.img8.png


1.6 分子装配室
和刚才两个模块一样,这个也是怎么好看又好用的问题。
我偏好的方案是像下图一样将接口和装配室交错排列成4x4的一板。正好8个频道。(这种场景下只有接口占频道)
这个方案不是最高速的,也不是空间利用率最高的,但在出现奇怪问题时,这个方案可以让你能够访问每一个接口和装配室,以解决问题。
如果希望每个接口都能访问到4个装配室,可以在每一板的外圈对应位置再加8个装配室。
至于加速卡,等做得起的时候,就加满吧。

奇怪的问题,包括有人把【处理】样板放进贴着分子装配室的ME接口,AE自己的bug导致装配室缺电,等等。有的时候不遍历一下真的查不出来为什么。

和其他相关教程里提到的一样,接口终端里的合成样板建议乱序摆放,这样可以将合成任务分摊到不同的接口和对应的装配室中以提高总体处理速度。想找什么东西直接用搜索就行。

article4.chapter1.img9.png


1.7 逻辑,运算和工程处理器的合成(检查:在后面的第4种方案)
——又称压印器自动化。
还是AE必备。

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

我们是谁?          流水线!
゚ ∀゚)ノ           \( ゚∀゚\( ゚∀゚\( ゚∀゚
我们要什么?        高吞吐低延迟!
゚ ∀゚)ノ          \( ゚∀゚\( ゚∀゚\( ゚∀゚
什么时候要?       现在!
゚ ∀゚)ノ          \( ゚∀゚\( ゚∀゚\( ゚∀゚

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

困扰无数新人的压印器,是AE的核心生产设备之一。手动生产太费精力,自动生产难度不低。
可是人生苦短,自动化生产再难也得上。

在不同的发展阶段,我们的可用资源差异很大。于是这里也有若干方案,适用于不同的情况。

方案一:廉价且实用的方案(并非原创)
——压印器并没有那么贵,不是吗

这个方案是在别人的视频中看到的(来源忘了)。看到它的第一眼就感觉非常实用。、
直接上图。

2020-08-06_13.22.51.jpg

注意所有压印器都是旋转了90度“竖着”放的。

左边3个压印器分别放逻辑运算工程三个压印模板,最右边一个放硅压印模板,中间靠下的那个什么模板都不放。
5个朝天的漏斗从左向右分别输入金锭,高纯赛特斯水晶,钻石,红石,硅。当然,在这些漏斗上方放上箱子是可以的。

让我们简单分析一下这个装置是怎么工作的:
左边3个压印器从上面输入原料,从下面抽出产品(三种电路板),一起挤在标记为A的漏斗上,然后输入进压印器Y的输入侧。
红石的路径不要太明显,略。
右边硅板的路径类似,被漏斗抽出来后输入进压印器Y的另一个输入侧。
然后压印器Y进行合成,产品被漏斗送进图中唯一的箱子。

执行最后生产步骤的压印器只有一个,虽然生产速度有限,但只需要保证最上面输入的原料数量正确,就能在最终正确合成出所有产品,符合乱序合成的定义。
此装置的基础延迟是两个压印器的合成时间+2至3个漏斗周期。考虑到漏斗是延迟最低的物流装置之一,这套装置在延迟上的表现还不错。

总的来说造价还算便宜。可以用木漏斗代替原版漏斗。还可以在外围加上配置正确的管道以根据输入输出模型来接入ME网络。

方案二:差不多廉价也差不多实用的方案
——虽然看起来跟方案一很像,但它面世的时间更早

总的来说处理器的合成分为3个步骤:合成XX电路板,合成硅板,把两个板压一块。

前两个步骤相互独立,可以同时进行。第三个步骤同时需要前两个步骤的产品。

那么摆法也很简单了,跟上一个方案大同小异,拆掉边上的两组压印器就行。
至于朝天的3个漏斗分别输入啥,也和上一个方案一样。
箱子换成(属于上游网络的)ME接口来让产品输入回去完成合成任务。

2020-08-06_13.44.37.png

AE有3种处理器怎么办?那就做三套装置啊。还能解决方案一的瓶颈。

如果想让这套装置接入AE的自动合成,也很简单。只需要注意物品的正确投放就
行了。
咱们用一个纯AE的紧凑方案来作为例子。

2020-08-06_13.53.56.png

物品通过被遮住一部分的那个接口根据样板发送到相邻的ME接口,然后被ME箱子存到内部。然后再被输出总线(分别配置为金锭{仅供举例},红石,硅)输出到3个漏斗中。
然后按照 在方案一里解释过的流程 合成出来,通过漏斗返回发送物品的那个ME接口,完成合成。

ME箱子里的存储元件可以是任意大小。虽然在后期建议换成足够大的存储元件。
输出总线的延迟相当显著。建议在输出总线里放入至少一个加速卡,然后由漏斗进行低延迟的投放。
去掉箱子缓存并将输出总线改为存储总线,也是可行的。

将这套装置抽象一下可以了解其逻辑结构——跟下面提到的方案,其实还是大同小异。

article4.chapter1.img10.png

模块特性:
输入方式:标准输入
输出方式:标准输出
能源需求:AE,或标准能源
样板类型:物品输入输出关系
任意数量合成:是
乱序合成:是(但一套装置只有一个配方,乱序在此没有意义)
尺寸:长3 宽2 高4


方案三:正式的超级处理器工厂

基地产能稳步提升,64k的存储元件已经不够用了。我们想一步到位升级到16M(16384k)。
但是生产它需要海量的各种处理器。前面提到的小巧玲珑的生产线已经完全不能满足需求了。
既然我们在基地建设里强调“可扩展”这个核心理念,那么生产线也应当具有充分的可扩展性。

那么就来扩展!

前面所有方案的瓶颈在于一种生产流程只有一个压印器参与。
那么就改成每个生产流程都允许有N个压印器参与。
对于原料压制成板的流程,因为每个合成过程都是互相独立的,实现起来比较简单:

article4.chapter1.img11.png

然而,对于最后把两个板和红石压成处理器的流程,如果需要平摊到多个压印器中执行,需要解决一个问题:如何才能保证,每个压印器始终能恰好获得整份的物品?
如果不解决这个问题,这个合成所需的3个原料可能被投放到了多个不同的压印器中,合成自然就不能继续下去。

当然,解决这个问题的办法是有的,见后文:分包处理(实验性内容)。
但是这个分包合成的问题是延迟很高,不适用于本生产线。AE的小合成很多,低延迟非常重要。

那么该怎么办呢?
最终,我们决定不正面解决问题。

对于最后一个流程,我们发现,三种处理器,始终都需要红石和硅板,区别仅在于电路板的种类不同。
于是,我们在所有的压印器中,都预先将红石和硅板填至饱和,那么在任何一个压印器中进入任何种类的电路板,都能正确完成合成。
缺点只有浪费了n或64n(AE2 Stuff高级压印器)个红石和硅板。这些又不贵,浪费就浪费吧,而且它们在某种意义上是不消耗的。
这里的“不消耗”,是因为每一个被用于后续合成的红石或硅(板),都对应着从上游投放来的配方物品中的一个红石或硅(板)。因此这些预先投放的原材料,就永远被困在这条生产线上了,但是数量始终是那么多,若不手动改变就不会再变化。

现在,我们来看看,整个工厂该如何设计:
article4.chapter1.img12.png


这个只是作为一个概念性的参考。在付诸实施之前,我们还需要修饰一下细节,来解决诸如管道太过冗长之类的问题。

于是经过一番修饰,这就是我们目前正在使用的方案:

article4.chapter1.img13.png
这里用ME网络本身实现了跨子模块间的物流功能。上面压印机阵列的产品通过ME接口剩余的8个物品槽位(剩下一个用于标记金锭等原料)进入ME网络,然后从下面的3个ME接口中的某一个输出。
因此这里的缓存容量必须足够大,一旦满了这个物流就无法工作。

物品从进入ME接口到存入ME网络,需要一点时间。故在采用这种输入和输出共享同一个接口的做法时,管道需要配置白名单。若不想配置白名单,则需要将输入和输出在两个接口上分开处理。

这里还有了一个问题,就是ME接口里的物品该标记几个。
对于连接上面4个阵列的接口和下面提供红石和硅板的接口,标记的物品就是一组(64个),多多少少其实关系不大。
而对于标记输出三种电路板的接口,就有一点微妙。如果每种都标记一组,那么管道抽取的时候,可能就会始终从第一格抽取物品,导致在很长一段时间内这个生产线都只输出一种产品。这本没有错,但AE的很多合成常常需要多种处理器。于是我们希望能让这个生产线“同时”输出不同种类的处理器。
从实践结果来看,标记数量跟抽取物品的管道单次抽取数量一致即可。多了没用,少了不能充分利用管道容量。管道一般单次抽取在4(如果压印器数量少)到16(如果数量多)比较合适。
这样抽取完一次后,由于ME接口重新装填延迟的存在,管道有机会从其他的格子里抽取物品,从而让生产线在一段时间内输出多种产品。

另外,我们还可以调整不同压印器阵列的压印器数量比例。比如说3种电路板各8个压印器,硅板有12个压印器,最后流程有16个压印器。这样在同时合成多种处理器时可以在一定程度上改善物品积压的状况。

至于预先将红石和硅板填充饱和的做法,很简单——往缓存里面使劲放红石和硅板(或硅,反正前面的压印器会帮你压好),放完等一会,如果终端里物品没了,那么再加,继续观察,加到物品不再被抽走为止。
就像配制饱和溶液一样。

于是我们终于把整个生产线做出来了。
延迟是重要的指标,故eio管道是必然的选择。
至于选择AE的压印器还是AE2Stuff的高级压印器,我的实践结果是在常用的数量下(8-16个),使用高级压印器时总吞吐量更佳。原生的压印器因为物品不能堆叠,很多时间被浪费在了等待管道循环输入上,即使eio管道可以一次投放物品到4n个压印器里。
2020-08-06_21.27.58-edited.jpg
很明显,你可以无限扩展这个装置——记得正确配置管道以充分利用产能。
上图中生产线的基准测试结果是:1000个逻辑处理器耗时119秒。

模块特性:
输入方式:标准输入
输出方式:标准输出
能源需求:AE,或标准能源
样板类型:物品输入输出关系
任意数量合成:否,但数量很大,取决于缓存容量
乱序合成:是
尺寸:N/A,示例为长13 宽11 高?(取决于放多少压印器)

在写这一节的时候,我忽然想出了彻底解决同时输出多种类产品的有效方法。咱们在第_章继续讨论。

1.8 物品数量控制
——在其他人的教程中又称:常在自动化

在上一篇中,我们提到,生产线的核心概念是对物品输入输出关系的抽象。
这样建造下去,最终的结果就是,我们需要的每种物品(当然,矿物除外)在AE中都有可以下单的配方。

总的来说,物品数量控制的工作流程,就是在某种物品过多的时候做点什么,在某种物品过少的时候做点什么。
这套装置的典型应用场景之一,就是保持网络里始终存有一定数量的AE2处理器和ME玻璃线缆等。这样在进行手动合成时就不必花时间等待生产线,而是有立等可取的物品。

那么,在本文所使用的基地架构下,我们离实现这个目标只有一步之遥:用某种装置来“点击”终端里的合成。
当然,用玩家来点击是可以的。不过这很明显不是设计目标。

有什么能“点击”合成呢?想来想去只有一个东西:合成卡。
那么合成卡有哪些功能呢?
- ME接口/输出总线:使用已存储或合成物品/只使用合成物品
- ME标准发信器:合成物品时发出红石信号/发出红石信号以合成物品

这么来看,方案就非常明显了:
用一个红石控制的安装合成卡(只使用合成物品)的输出总线,来点击合成。
合成完的产品再传输回主网络。

切记要标记输出总线里面的物品。每个总线应当只标记一个物品。如果不标记,则输出总线相当于完全闲置。
单次合成的数量由加速卡的数量控制。由于合成卡和红石卡占据了2个槽位,故最多2个加速卡——单次合成数量可以是1或8或32。
单个输出总线不能同时“点击”多个或同一物品的多次合成。因此若想继续提高这方面的速度,只能做多个这种装置。

2020-08-06_22.51.22.png
缺点大概就是有点费频道。
不过存储总线之类的骚操作一上,就可以省下不少用于标准发信器和接口的频道。代价是存储总线并不始终工作稳定,因为主网络经常会因为组件改变而重启。

前面提到的合成处理器中,“廉价的合成处理器”即是为这种情况而准备。32个物品的合成不需要多少容量和并行处理单元,让它占据更加昂贵的单元并不划算。

在1.12.2的较新版本里,这种自动触发的合成会自动选择能装得下的最小的合成处理器,但手动添加的合成仍然会默认使用可用的最大合成处理器,即使它可能只需要1K。对于其他的AE版本,这方面的行为尚不明确。如果自动触发的合成也会使用最大的合成存储器,这种情况下只能建造大量容量相同的合成处理器,以避免这些小合成影响玩家安排的合成。


---------------------------
本楼层字数已达到合理限制(我还要补前言的内容),后续内容请在接下来的楼层阅读。可以使用【只看楼主】功能。

















评分

参与人数 5RF +40 Vis +13 收起 理由
light000 + 5 + 2 认真读书ing
重生是希望 + 20 + 5 祖国需要你
QQ酱42337 + 5 + 2 给大佬递分
绯村剑心 + 5 + 2 给大佬递分
youyihj + 5 + 2 触我一脸血

查看全部评分

发表于 2020-8-7 14:14:15 | 显示全部楼层 |阅读模式

回复 | 举报

该帖共收到 14 条回复!
本帖最后由 craftkuro 于 2020-12-10 12:18 编辑

1.9 地皮设计

这一节主要是为了兑现上一篇的承诺来写的。
后来想了想,这个地方确实是自由发挥比较合适,提供现成方案反而不利于展现创意。

总之,简单介绍一下目前我常用的一些设计。

对于不是烧炼磨粉轧线等基础流程的生产线,它的配方数通常不会那么多。一个ME接口提供的9个配方差不多够用。
那么根据生产线的输入输出关系,每个生产线我们通常只需要提供2个ME接口——一个投放原料一个接收产品。当然投放和接收共享一个接口也可以,但是要让它兼容压缩空间机器比较麻烦。
于是有了这样的设计:
2020-08-07_16.51.22.png
正好一个区块。左半边和右半边刚好各32个频道。阻挡模式可用,兼容后文提到的“锁”。

所有的接口都使用相同的摆法,目的是在一定程度上实现标准化,方便可能的迁移和升级。是否指定方向其实没有影响,不过有指定方向的很明显是用于投放的接口。
这里的例子是北面输入南面输出。

中间的方块是RFTools和RFTools Power的能量单元,用来实现无线供电。

这个设计的摆放如此整齐,“线怎么接”这个问题的答案也是呼之欲出了。
2020-08-07_16.53.25.png
然而对于磨粉等基础流程,配方远不止9种,怎么办呢?
当然为每9种配方做一个工作模块是可以的……不过这……方向错了。

那么得想一种办法让来自多个接口的物品能够投放进同一个工作模块。
这个做法也很简单。

如果没有ME功能适配器,用好我们熟悉的ME管道就可以了,如图:
2020-08-07_16.59.07.png
但是这个方案会遇到之前提到过的存储总线的迷之Bug。出现这种问题时在这个存储总线上点清除配置触发一下更新就行。

如果有ME功能适配器,那么就可以直接把接收端的若干ME接口直接通进压缩机器里面:
2020-08-07_16.58.49.png
这样就摆脱了这个bug。

需要注意的是,上方来自主网络的ME接口必须指定正确的方向(这里是朝下),以分割网络边界,否则这些ME接口会连接成为同一个网络,然后导致网络存在多个控制器等问题。

部分版本的RS(精致存储)的接口,不会分割网络边界,故此方案完全不兼容这些版本的RS。类似地,本文中大部分方案都未考虑过是否能兼容此模组。

这种设计不兼容阻挡模式,故只适用于烧炼磨粉等单物品参与的处理流程。

将若干模块放在一个地皮里,会是这个样子:
2020-08-07_16.57.41.png
也是挺优雅的。
32个频道去掉下面6个还有26个可用,平均每个工作模块4个多一点。差不多够用。
万一真的有那么多配方,可以再拉一条致密线缆嘛。

如果还想要刚才提到的无线供电,可以在边上让出一点位置来摆放rftools能量单元。


1.10 排线

这个也是,根据实际情况灵活安排最好。
排线做得整齐的话真的很养眼。
还拿上一篇的图来做例子。
2019-08-17_00.44.46.png
虽然表面一盖就看不见了……

布线时应当充分考虑其他人理解线路设计的方便程度,和可维护性。否则就会像修路一样,各种挖坏不应该挖坏的线路。需要特别提出的一点是,埋在地下的隐藏线路最好有迹可循。


1.11 事务合并

对于从各生产线向主网络输出的物品,我们通常期望物品传输越快、延迟越短越好。
但是当物流太多太频繁时,会造成非常显著的性能消耗。

我们即将在后文讨论的矿物处理系统就是一个例子。
在经过无数次迭代设计之后,我们的矿物处理产能超过了100个原矿每tick。
然后服务器那叫一个卡啊。

在VisualVM里分析了一番之后,发现稳居cpu消耗榜首的是SAG磨粉机阵列(此问题已在篇二:性能调优里提到),而排第二的就是AE的物品存储。

每tick处理数十种物品,然后在大量ME驱动器里找位置放,确实不是一件很轻松的事情。

那么怎么办呢?放弃产能当然不是最佳方式。

让我们稍微想一想,这个性能消耗的来源,还是在于需要处理的物流事件过于频繁。放100个物品进网络,可以每次放1个放100次,也可以一次放100个。而对于AE的存储,1次放1个物品和1次放100个同类物品,所需要的cpu时间应该是相当接近的。

那么就有思路了。我们把东西攒起来,然后尽可能在较短时间将所有的物品一把塞进去,于是AE需要处理的物流事件就会少很多,即使卡也就卡一小会。

AE里什么东西传输物品最快?
当然是塞满加速卡的ME-IO端口。

于是就有了以下设计:
2020-08-08_15.07.14-edited.png
上游网络需要往下游输出的物品,被IO端口里的存储元件拿走。
因此这里的存储元件需要标记白名单。如果上游网络里存储的物品都是需要输出的,那不标记也行。

存储元件存满后,被伺服器送到下游网络的IO端口,输入下游网络——只需要几秒钟的时间。清空后的存储元件又被送回上游网络的IO端口,进行下一轮循环。

于是我们成功地把大量每tick需要执行的工作,合并到一小段时间内集中执行,事务合并因此得名。
实践结果证明这套装置效果拔群。

然后还有一些细节问题:
- 用于转运的存储元件,它的容量最好跟上游输出产品的速度相对应——这样可以每隔几分钟输出一次物品,来避免物品输出延迟过高的问题。
- 这个管道用TE的管道(不透明的更好)和最低级的伺服器非常合适。毕竟把存储元件存满所需的时间比较长。
- 这套装置只适用于矿物处理系统等单向输出大量物品,并且对延迟极度不敏感的装置。普通的生产线因为物品产量相对较低,而且对延迟有要求,建议直接对接下游装置。
- 物品种类超过63了怎么办?那就整多个存储元件,分别标记不同的物品。
- ME-IO端口的不同面,对应的内部物品栏不一样。“上下”两个面对应左边的物品栏,“侧面”四个面对应右边的物品栏。这里的“上下”指的是在水平面正放时的上下两个面。总之这个面的描述因为AE方块的摆放方式难以说明清楚。在实际建造这个装置时,注意测试管道是否能成功按照预期的方式进行抽取。

然而,当上游流量较小时,这个装置的适用程度就很差了。
相对于上文装置“装满发车”的做法,“定时发车”可能更加合适。

这个改造其实也不难。我们的“车”就是存储元件,而它要能够存储物品,并且能随时被取出来。很明显,将位于上游的IO端口换成一个ME接口和ME驱动器是非常合适的。
然后用一个定时装置,随机或不随机地从这个驱动器中把存储元件取出来放到位于下游的IO端口,这样物品就来到了下游,空的存储元件还是由这个管道抽回ME驱动器等待下一次发车。

2020-11-22_21.50.22-edited.png

1.12 自恢复量子隧道

警告:此设计可能会触发bug:https://github.com/AppliedEnergistics/Applied-Energistics-2/pull/4484  ,适用于1.15和1.16的版本将修复此问题,1.12大概得看作者的心情,或者自己合并更改做一个修复bug的版本。
——为什么之前用的时候都没事呢?今天通电一次就触发一次bug。

在上一篇中,我们提到,经过我们的观察,AE在缺电的时候,会优先使用距离控制器远的能源元件。

对于我们常用的设计,相对于紧贴着控制器摆放的那些(致密)能源元件,量子环远端的能源元件肯定是最远的。那么一旦AE缺电,这个远端的能源元件就会很快被消耗完,然后这个量子隧道随时可能断开。一旦断开,这个远端的量子环和AE的设备就成了一个单独的网络,没有额外的能源输入,在玩家干预之前永远无法恢复过来。

那么解决问题的思路也很简单:
在远端网络失联的情况下,给点电过去,让量子环重新开始连接。一旦连接上了,再把这个临时接上的能源拔掉,由主网络继续供应能源。

为了达到这个目标,需要解决两个问题:
1. 如何判断远端网络是否失联?
2. 如何控制这个临时能源的开关?

第一个问题,虽然不太好想,但想通了也很简单——用网络中能源储量来判断。
远端网络计划中只会有一个普通能源元件,容量400k RF。主网络的能源元件肯定是大把大把的装,远远超过400k RF。只要网络内能源超过这个数值,那很明显量子环两边都连上了。
于是我们用一个ME标准发信器来检测能源,当网络内能源大于400k RF时就发出信号。这个信号可以理解为“量子连接已建立”。

第二个问题,也很简单——很多模组都有支持红石控制的储能方块,或者开关,随便拿一个就可以了。

于是,我们就设计出了自恢复量子隧道的解决方案:
article4.chapter1.img14.png
如果下游装置耗能很少,不影响量子环启动,那么完全可以省略掉这个触发总线。
2020-08-08_15.56.09.png
前面提到的bug,是出现在AE能源网络相关代码中的。如果不安装这个能源元件,是否能避开bug呢?
很不幸,测试失败。不仅bug仍然触发,而且量子环不能稳定重新连接。
不过这里可以简单描述一下这种方案的原理:

一个量子环的耗电虽然接近400 rf/t,但在网络工具里显示耗电为352+44=396 rf/t,比400刚好少那么一点点。那么,在没有能源元件和其他耗电设备的小网络里,理论上量子环也是能工作的。
因此,这种情况下必须安装用于隔离其他设备的触发总线。如果一切顺利,400rf差不多能让量子环工作起来,然后一旦连接建立,剩下的事情就好办了——检测能源的发信器发出信号,断开远端临时能源的连接,然后触发总线接通,其余设备的频道连接到网络。
目前版本中没有能源元件和控制器的ME网络只有400RF的缓存,不过最近有个commit把缓存改到800RF了,可能只对1.15+的版本有效。

临时能源可以用太阳能发电机/电池板,或者IC2/NC的同位素热电(RTG),便宜够用,占地面积小。若使用IC2的机器,需要注意能源兼容性。

需要注意的是,无论是哪一种方案,这套装置都只能减少AE停电后恢复阶段的维护代价,不能在AE缺电时仍然保持量子隧道稳定工作。故设计一套稳定的能源系统仍然是非常有必要的。


1.13 伪配方
——在其他人的教程中又称假合成。

这是一个许多人渴望解决,但很少有人说清楚究竟怎么解决的问题。
这次我们就尝试在一篇文章里,让伪配方合成技术从入门到熟练。

1.13.1 处理样板的本质

我们在制作处理样板的时候,通常是按照配方的输入和输出来配置这个样板。
对于一个熔炉烧玻璃的配方,就是左边九宫格里随便选一格放一个沙子,右边3个格里随便选一个放一个玻璃。
这个输入输出关系,和配方本身完全一致。我在前言中称之为标准样板。

这种样板配方对AE玩家来说一般不是问题。

那么我们把这个配方抽象一下。

样板终端左边的九宫格,填入的是配方的原料。在进行合成时,AE会把这些物品通过ME接口输出出去。因此,左边这9个格子,定义的是【AE需要丢出去的物品】。
为方便理解,这里忽略了所缺原料的递归合成等细节。

样板终端右边的3个格子,填入的是配方的产品。在进行合成时,AE会等待这些物品的返回。若足量的这些物品返回ME网络,则认为合成完成。因此,右边3个格子,定义的是【合成完成的依据,和在终端中显示的合成名称】。

于是,这个处理样板的本质也就非常明显了:
处理样板,是一个完全自定义的物品输入输出关系。这个输入输出关系定义了AE在进行合成时将要从ME网络输出的物品,以及将这个合成标记为完成的物品依据。

用更加通俗的话来讲:
对于处理样板的合成,AE会帮你先把左边9个格子里标记的所有物品合成好,然后整份通过ME接口传输出去。当右边格子里标记的物品足量到达ME网络后,认为合成完成。

1.13.2 伪配方 in Action

处理样板是完全精确匹配的,元数据和NBT均有效。因此将物品重命名来用于伪配方是可行的。

我们以DE(龙之进化)工具升级的配方为例。
这个工具升级的配方的内容是:玩家把手中所拿工具放到聚合核心中,然后在聚合注入器上放入其他所需物品。启动合成后,注入器上的物品被消耗,工具被升级,玩家从聚合核心中取出产品。

这里的问题就是,工具有不同等级的升级和配置,它们的NBT数据是不一样的。这种情况下我们无法用精确匹配的处理样板来设置这些配方。

忽略工具,使用标准样板也不可行,因为其他的都被消耗了,只有工具会被返还,这样没有合适的依据来判断合成是否完成。

那么要让AE完成投料的流程,就只能使用完全自定义的伪配方。

这个配方怎么设置呢?

article4.chapter1.img15.png
左边要输出的物品当然是用来消耗的。右边的返回依据,用一张重命名过的纸,或其他重命名过的任何物品(推荐使用不常用的物品,或完全没有任何用途的物品,以避免手滑误操作)。

整套装置可以这样设计:

article4.chapter1.img16.png
其实和普通的模块并没有太大的区别,就是多加了一套装置用于在合适的时候将那张纸送回去,让ME网络以为合成已经完成。

让我们来走一遍流程。
- 在装置配置完毕后,那张重命名的纸应当位于图中左上角的那个名为“箱子”的箱子里。
- 玩家点击了一份这个“DE工具升级Lv1”的合成,若网络内有足量物品,那么ME接口会把金苹果等物品在较短时间内全部送进名为“缓存箱子”的箱子中,然后被物流装置抽走进行合成。
- 这时候,ME终端里的合成情况里,应当显示的是,一张这种重命名的纸正在合成。只要我们用任何一种方法把一张这样的纸送回来,ME网络就认为合成已完成,并释放这个合成处理器。
- 我们忽略合成如何进行的细节。总之,经过一段时间,这个合成完成了,相关装置发出一个时长合适的红石信号,传输到贴在那张纸所在箱子上的伺服器。伺服器工作,把这张纸抽取到旁边的ME接口里,ME网络确认收到了这张纸后,认为这个合成已完成。
- 合成处理器被释放后,这张纸被送回到ME网络内部的存储装置中。然后图中的输出总线,因为标记有这张纸,又将这张纸送回到了箱子里。装置准备好接受下一个工作循环。

图中的两个ME接口完全可以只使用下面的那个,对管道进行一点修改即可。这里用两个接口的目的是避免部分读者对“一个接口同时发送和接收物品”的情况产生疑惑。

这里只提到了投放一份物品时的解决办法。如果要想连续为多个工具进行升级怎么办?请看后文第_章:___。

总之,伪配方最好还是完成属于自己的独特功能,避免与其他配方和物品发生冲突。其他大佬的教程中提到的用伪配方一次合成多种物品的做法,虽然完全可行,但会遇到【网络中已有物品如何排除】等棘手的问题,使得解决方案不再优雅,显著增加设计和维护成本。

若要充分发挥伪配方的潜力,仅使用本文目前已提到的内容是不够的。要了解更加有价值的实践,请看后文,尤其是【严谨合成】一章。

1.14 自刷新缓存
——解决了ME管道溢出物品的问题

之前提到的ME管道,是不带内部缓存的。若下游装置无法再接受物品,来自上游的物品就会被堆积在ME接口中。

虽然这不是什么大问题,但我就偏偏遇上了必须存下来这些溢出物品的场合。总之,问题还是要解决的。

将ME网络用作缓存的应用,要求装置能够将ME网络中的内容主动或被动地传输给下游。
如果物品种类固定,或标记物品的做法足够划算,那么我们有很多种方法来解决这个问题,输出总线和ME接口都是常用的方法。如果物品种类很多很多,那么任何需要标记物品的做法都不合适。

下游缓存的容量或大或小,如果每次都尝试输出存储元件的所有内容,可能会导致下游的缓存长时间充满,若下游设计不兼容这种情况就会出现问题。

那么,怎么设计一个,无需标记任何物品,允许存储任意数量类型的物品,定期随机或不随机地输出内容,数量见好就收的缓存呢?

首先是无需标记任何物品的问题。
没有其他的选择,只有IO端口配合存储总线。

然后是允许存储任意数量类型的问题。
一个存储元件只有63个类型,那么得用某种方式保证可扩展性。

至于数量如何见好就收,这个很简单,IO端口里配置为“工序完成时移动到右侧”就行。

硬骨头在于如何“随机”。即使是并没有那么随机的随机也好啊。
当然,我们还是尽可能避免用rftools control和opencomputers等降维打击的方案。

总之,无论随机与否,我们都需要把存储元件从ME驱动器里拿出来放进IO端口。
如果只用物流方案,那么我们每次抽取都会首先抽取第一个存储元件,然后再放回第一格子里。要想直接拿第二个,没有合适的方案来达成目的。

所以,我们只能为每个存储元件准备一个专属的ME驱动器。
或者,将多个存储元件视为一个小组,每次都拿这一小组出来。 article4.chapter1.img17.png

跟之前事务合并的装置很像。
这样的每个循环都是一个物品导出装置。我们只需要给伺服器一个时长合适的红石信号,即可将对应驱动器里存储元件中的内容刷到下游。

那么IO端口能共享吗?
可以,我们可以用一些装置“记住”当前正在处理的存储元件应当位于的位置,然后用检索器等来将处理完的存储元件抽回去。不过,这会显著增加设计的复杂程度。实际上,对于大多数的装置,2个存储元件的类型数量已经完全足够,这时候多加一个IO端口可能比建设一套物品路由更加划算。

于是ME网络部分的结构是这样的:
article4.chapter1.img18.png
每个驱动器里的存储元件可以有63个物品类型,故若每个物品导出装置内有1个存储元件,放n组这样的物品导出装置,这个缓存就能存63n种物品。
若要保证在任何时候,整个缓存都能接收物品,那么即使物品种类很少,也应该安装最少2套物品导出装置,因为这种装置在导出物品时是不能写入的。
通常情况下,驱动器的优先级比存储总线更低,因为这种设计下我们希望物品尽可能直达下游。

如果希望物品首先存到存储元件,而不是首先经过存储总线发往下游,那么可以将驱动器和IO端口分别在两个网络中,这样驱动器接收上游的物品,然后在物品导出装置启动后,将存储元件的东西经过IO端口发往下游,如下图所示。
很明显,这种设计无需关心存储总线和驱动器的优先级问题。

article4.chapter1.img22.png

现在,问题就变成了如何随机或不随机地触发物品导出装置的运行。
大多数情况下,每次触发一个装置的导出已经足够使用。

最终,经过若干次迭代设计,我还是放弃了真正随机的解决方案。不过,即使使用不随机的方案,其工作效果也相当令人满意。
让我们来看看它是怎么工作的:

如果只有两套物品导出装置,那么只需要两个红石输出端,每隔一段时间触发另一个的输出就行了。
一个T触发器就非常合适。
然后将两个输出端的信号的上升沿分别转换成脉冲,然后再用中继器调整脉冲长度,大功告成。
article4.chapter1.img19.png
如果有至少3套这样的装置,那就得换新的方案。
我们需要的是一个按照时钟信号更新的红石跑马灯。每次时钟脉冲出现,都会让下一个灯点亮,上一个灯熄灭。
这样我们想弄几个装置,就可以安装几套跑马灯控制器,按照正确的方法接好线就行了。
下图为概念图,仅供参考。

article4.chapter1.img20.png
这又该怎么弄呢?
总的来说,每个跑马灯控制器需要以下几个红石输入输出的端口:
1. 对跑马灯的输出(灯控输出)
2. 检测上一个跑马灯点亮状态的输入(灯控输入)
3. 接收来自下一个跑马灯控制器的重置信号的输入(复位输入)
4. 向上一个跑马灯控制器的重置信号的输出(复位输出)
5. 时钟信号的输入(时钟输入)

由于我也没有明确的思考过程,故这里只展示结果。
最后设计出来的电路是这样的:

article4.chapter1.img21.png
可能这不是最优化的方案,但我想不出来更好的了。
于是,我们就可以在世界中部署它了。
由于ProjectRed模组的存在,每个控制器的体积只需要3x3x1。

2020-08-22_01.17.16-edited.jpg
这样将所有的跑马灯控制器循环连起来(最后一个的输出连接第一个的输入),然后按照一定的间隔提供时钟信号,跑马灯就可以跑起来了。
2020-08-22_01.22.44.png

然后再用之前用过的取脉冲和调脉宽方式,来让这个信号启动相应的伺服器来让物品导出装置工作,就可以刷出存储元件里的物品了。
目前这些繁琐的设计,主要都是因为(TE的)管道在收到红石信号时,总是首先抽取物品栏中的第一个槽位。
有没有什么管道能够在合适的时候提取其他的槽位,这样就不必把设计弄得如此复杂呢?

偶然的一次机会,我发现EIO管道在红石信号停止再开启后,可以记住上次提取的物品槽位置。也就是说,第一次给红石信号它会提取第一个格子,下一次给信号它就取第二个格子了。
这样的话,我们前面的跑马灯设计在有EIO的时候就完全没有必要用,直接让定时器对着配置为【收到信号工作】+【管道速度降级】的EIO物品导管,剩下的部分跟使用单个驱动器的自刷新缓存一样。而且每个驱动器都可以放满10个存储元件。
管道速度降级是为了避免一次性拿太多存储元件,导致IO端口输出的物品无法在其他的存储元件中装下。
article4.chapter1.img24.png
IO端口配置为【工序完成时移动】或【元件为空时移动】都可以。

1.15 代理合成 Part 1
——谁说合成必须要玩家来点?

Packaged Auto 对于玩家和整合包作者,它可能是解决万难的神器,也可能是带来无尽痛苦的噩梦。
然而有两点我们很容易知道:一个是它很久没更新了(注意文章发布日期),另一个是它有很多bug。
连AE的维护者都不断以负面态度提到它。

其中最重要的问题,就是性能问题。
当网络中加入了太多包含终极合成(和高级,精英合成,下文类似,不再赘述)的配方时,它会大大影响大型网络重新改变拓扑的速度,导致用户体验恶化(对于开启频道的情况)和严重的卡顿(对于禁用频道的状况),而小型网络受此的影响要小得多。

因此,我们就有一种思路,将此类终极合成转移到一个专用于此的小型网络执行合成,再将对应的产品送回主网络来完成合成任务。

于是需要解决两个问题,一个是怎么把原料送进合成专用网络,另一个是怎么点击专用网络里的“合成”按钮。

对于第二个问题,我们在1.8节已经提到了,用输出总线+合成卡就能“点击”合成,只需在对应的标准发信器里也加个合成卡,配置为“发射红石信号以合成物品”就可以了。


article4.chapter1.img23.png
对于第一个问题,emmmm,这个说起来就有的讲。
少于9种物品的合成,AE玩家都会,就不展开讨论了。
因为终极合成妥妥的是超过9种物品,我们必须解决超过9种物品的合成在AE中的兼容问题。

然而这个问题……值得单独拿出来一章来讲。所以这是代理合成Part 1。代理合成Part 2,会讨论超过9种物品的合成问题,位于第_._节

当然,还有一种不太实用的思路,就是将所有的耗材都换成由主网络合成的方式——在这个专用网络里摆上许多配置为“发出红石信号以合成物品”的标准发信器,然后主网络那边配置上对应的输出总线,加上红石卡和合成卡。
从实用的角度来看,这样的方案可能比后面将要提到的超过9种物品的合成更加麻烦,故仅供拓宽思路。


2 物品处理阵列

——又称“超级机器”

为达成更高的吞吐量,物品处理阵列的重要性不言而喻。
在建设了无数个阵列之后,我也积攒了几套具有相当实用性的解决方案,在此分享给大家。

至于格雷或者它的扩展中的那个处理阵列……行吧,也算一个。

处理阵列的物流系统主要分两部分:
一部分是将输入进来的物品尽可能平均分配到各个执行装置的物品分发装置;
另一部分是将各个执行装置的产品收集起来集中输出的物品收集装置。

接下来我们就讨论这两部分各自的解决方案,然后再看看对于特定种类的机器,又会有怎样的整合方案。

2.1 物品分发侧

总的来说,这部分就是【物品均匀分发】基础组件的工业化应用。

2.1.1 适用于多样种类物品的廉价方案
——解决了价格问题

就是放大版的【传统方案】。多加几个抽取端的管道接头,多加几个执行装置和对应的投放端。导管速度升级和信素谐振伺服器什么的都可以上。解决问题比是否优雅更加重要。

具有实用价值的下游执行装置数量,大约是1-20个。

大概每个人都能想到这样的方案。不过这个方案在中后期很快就会遇到扩展性和物品输出特性的瓶颈,这时应当迁移到更加优雅或有更强扩展能力的方案。

2.1.2 适用于固定种类物品的ME接口方案
——解决了无限扩展问题

就是放大版的【ME接口方案】。多加几排接口,在缓存里放上更大容量的ME存储元件。

此方案要求下游执行装置支持物品自动输入,因为ME接口在这种用法下不会主动输出物品。

这个方案建设起来相当优雅。适用于1-∞个下游执行装置。
缺点也只有只能用于固定种类的物品了。咱们在【整体解决方案】一节看看它究竟有多优雅。

2.1.3 适用于多样种类物品的多通道低阻塞方案
——解决了资源共享问题

有些物品的合成,需要经过同一工序处理的不同物品。
比如AE的很多合成同时需要下界石英粉、赛特斯石英粉、福鲁伊克斯水晶粉。

如果执行一次较大的合成,由于MC物品堆叠的相关特性,可能在较长一段时间内所有的执行装置都会在处理同一个物品相关的工序,导致整套装置处理完所有的物品A之后才会开始处理物品B。
于是最终产品在前面很长一段时间都不会输出,而是在后半段的较短时间内一起输出。这可能不是较为理想的结果。

另外,在有多个玩家的基地里,可能会出现不同玩家发起的合成争抢同一个生产线的情况。这会导致至少一个玩家的产品被大幅推迟完成。

当然,为此准备多条生产线是可以的……不过这仍然不是我们最想要的。

于是,我设计了一个方案,让整个超级机器可以同时处理多达3(或4)种原料,并且在只有1或2种原料时仍然不会明显降低总体吞吐量。

这种看起来就很麻烦的目标怎么达成呢?
让我们稍微整理一下思路。

首先,这个方案要求能够处理多样的物品类型。这意味着只能处理固定物品类型的ME接口不能用。现有的能处理多样物品的方案都基于管道系统。所以这次肯定用的也是管道。

要能够处理N种物品。这个N肯定不会太多。那么箱子这种有多少格子就能存多少种物品的方块肯定不行。大概得求助于那些只能存单种物品的装置。
那么该如何存下大量或任意数量的单种物品呢?这个问题很简单,量子存储器(QuantumStorage),黑洞存储器(Industrial Foregoing),箱柜(Mekanism),量子箱(Tech Reborn / Gregtech)等等都可以。
虽然价格不是特别便宜,但还是做得起的。于是摆上几个量子存储器就能存几种物品。

那么,先以最小规模为例。
我们摆上两个量子存储器。
好,现在我们只有两种物品需要处理了。

怎么发送给下游呢?我们无需思考,直接用物品均匀分发的传统方案就可以了。 article4.chapter2.img1.png
现在我们有了两个互相独立的,只能缓存一种物品的处理阵列。

虽然说确实能同时处理多种物品了……但是我们还要解决,当只有一个缓存里有物品时,另一个空闲的生产线如何能来帮个忙的问题。

怎么来帮忙呢?
当然是把隔壁缓存里的东西抽取过来。

怎么控制什么时候抽什么时候不抽?
检测本生产线本来连接的那个量子存储器(这里称之为本地缓存),如果有物品,就干我本应该干的活;如果没有物品,就去别的缓存里找活干。

好,有思路了。
拉一条管道到隔壁的量子存储器,然后用ME存储总线检测本地缓存里有没有物品,若有物品,就禁用从隔壁拿货的那个管道接头。

如下图:
article4.chapter2.img2.png
于是下面的这条生产线,在本地缓存没有物品时,就从隔壁生产线的缓存里取物品来处理。而当本地缓存里有物品时,就从本地缓存里取物品来处理,不再从隔壁生产线的缓存里取。

妙啊。
现在,即使只有一个缓存里有物品,我们都能用上所有的产能来处理。目标完美达成。

目前阶段,我们只修改了两个生产线中的一个。对于隔壁的生产线,我们需要做的事情是一样的:
article4.chapter2.img3.png
这样两边都可以互相帮助对方了。它们也组成了一个整体而不是两个互相独立的生产线了。

这是2通道生产线的解决方案。如果我们想要更多的通道,行不行呢?

如果摆在刚才方案的基础上,摆上第3个量子存储器,那么,只需要将现有的两个生产线,都配置为空闲时从第3个量子存储器里取物品干活就行了。
抽取方案一样是管道,配置为收到信号不工作。信号还是来自连接本地缓存的存储总线对应的标准发信器。

article4.chapter2.img4.png
对于第3个量子存储器对应的生产线,做类似的处理即可。

再摆一个呢?
一样的嘛。对第4个量子存储器采取跟第3个量子存储器相同的措施就行。

所以,如果有n个量子存储器,对于每一个由量子存储器和执行装置阵列组成的小生产线来说,都有一个从本地量子存储器取物品的,始终工作的管道接头,以及,连接其他所有量子存储器的,收到信号不工作的管道接头。这个信号由存储总线+标准发信器提供,在本地缓存有物品时发出信号。

按照这个方法,整个系统有 n的平方 个管道接头。这个复杂度不允许我们制作太多通道。
一般来说,3个通道是比较合适的。
对于有6个面的量子存储器来说,一个面用于输入物品,一个面用于检测物品,剩下4个面都可以用于管道接头,故最多可建造4个通道。
如果有办法能将这个物品栏完美扩展开来,则可以继续扩展,但我尚未找到这种方法,另外这么做也不划算。

这里有一个细节问题:
当通道数n超过2的时候,若本地缓存空闲,那么就有n-1个管道接头往本地的物品处理阵列抽取物品。如果是eio管道,就相当于每个管道周期4(n-1)个物品。而没有任何升级的eio管道每个周期抽取4个物品。
在这种情况下,若执行装置阵列按照最低一档每周期4个物品设计,则这个阵列的输入侧会很快堵塞,使得此阵列输入侧清空所需的时间大大加长,不利于物品输出特性。
因此,建议在【从本地缓存抽取物品的管道接头】里加入n-2个导管速度升级,同时执行装置阵列也应至少按照这个输入速度进行配置,使得在任何情况下,物品输入速度都不会过载。

至于执行装置阵列的具体工作方式,就是传统的管道的工作方式。故抽取侧的管道接头需要配置循环。

另外,如果将发信器配置成【本地缓存没有物品时发出信号】,同时管道接头配置成【收到信号开始工作】,也是可行的。

让我们看看这套装置实装的时候是什么样子:
2020-08-09_23.34.06.png
贴着【背对着我们的面】的是用于输入的存储总线。
贴着顶面的是用于检测内部物品的存储总线,然后旁边的发信器在量子存储器(实际上是IF的黑洞存储器)有物品的时候发出信号。
这个信号输入进EIO的红石管道。这个管道可以分为16个频道,并且EIO管道接头抽取物品也受到对应频道信号的控制(如果开启了红石信号控制)。这里EIO管道可在单个方块的空间里无缝集成多个管道的特性非常有用。
抽取出来的物品就进入下面16x3个执行装置里(这里是TE磨粉机)进行处理。

如果有超过3种物品需要输入怎么办?那第4种以及后面的物品都会被堵在用于接收上游物品的ME接口里,等有量子存储器被清空之后再输入进去。

最后,咱们来看看3通道方案的完整逻辑结构:
article4.chapter2.img5.png
不要怕,仔细看看,是不是跟我们之前所说的内容完全符合?

从现在开始,我们可以将这套物品分发装置抽象成一个有3个输入端和3个输出端的物品分发装置,不必再在设计时考虑其工作的细节。

由于管道自带主动输出物品到目标容器的功能,故此方案无需执行装置支持自动输入。

2.1.4 适用于多样种类物品的存储抽屉方案
——又称魔法物品栏。解决了缓存装置难以抽取的问题

众所周知,在不标记任何物品的前提下,要从ME网络中取出已存储的所有物品,只能通过ME-IO端口。
这限制了它在物品处理阵列中的应用。
那么有什么方法,能以极低的延迟,或无视物理结构,让刚进入存储装置的物品,从其他任意位置访问到呢?这个存储装置还需要有足够的扩展能力,能存东西,能当管道,还能用其他模组提供的装置很方便地抽出存储的所有物品。

最终,我发现存储抽屉(Storage Drawers)的抽屉管理器就是这样的一个神器。
这个抽屉管理器的具体用法见百科的相关条目。

我们摆上一排抽屉,然后在两头各放一个抽屉管理器。
需要注意抽屉管理器的有效范围,不过我们的阵列一般也不会超过一个区块的面积,不会造成问题。
article4.chapter2.img6.png
虽然这个抽屉管理器和玩家交互的功能有限,但它把整个抽屉系统的所有物品都整合到一个一个物品栏里,并且以一个兼容性良好的物品存储的形式提供了和其他物流装置交互的能力。

那么我们用物流装置向左边的抽屉管理器里加入一个物品。
它立即就可以从右边的抽屉管理器里被访问到。

这不就是管道么!

这种一边进去另一边立即就可以取出来的行为,跟AE一样都是天外科技,因此我称之为魔法物品栏。

一个抽屉系统还可以有更多的抽屉管理器。从任何一个管理器进入的物品,都可以立即从其他的管理器里被访问到。
于是这套抽屉系统就可以成为处理阵列内部物流装置的一部分,以实现低延迟的物流。

很明显抽屉管理器不能主动输出物品。因此它可以配合基于管道的物品均匀分发传统方案,来改善这个传统方案中每个管道只能配合一定数量的执行装置的问题。
article4.chapter2.img7.png
若通过传统方案二次分发物品,那么也无需执行装置支持自动输入。

2.1.5 适用于多样种类物品的P2P方案
——解决了推送物品的吞吐量问题

尚未被完全开发,但潜力无限。

前面的所有物流方案,除了使用ME接口和存储总线的ME管道,它们的物流速度瓶颈,都在于管道接头,或输入输出总线。

由于我们的分子装配室的并行处理单元给的比较足,在执行合成时发送物品的速度那是相当的快。在部分情况下,处理阵列内部的物流装置反而成为瓶颈。

有没有什么物流装置,让上游以多快的速度发送物品,就能以多快的速度向下游输出物品呢?

P2P通道-物品就是一个有效的解决方案。它的速度和存储总线一样接近无限,而且延迟一样可以忽略不计。
它的物品栏交互并非标准的物品栏方式,需要上游(主动端)主动推送或抽取才会有效传送物品。
P2P的接法不再赘述。

目前限制这个方案实际应用的问题是,当物品P2P有多个输出端时,输出端物品分配的比例不可预测。这个可以通过自己做实验来观察其行为。
然而,对于速度比闪电更快的GT高电压机器,P2P便是让你的合成速度和泛银河星际高速公路保持同步的好方法。配合同样属于天顶星科技的ME存储总线,让你的合成速度超越极限。
article4.chapter2.img11.png
整个物品投放侧几乎没有任何延迟,物品一被发送就被投放进了机器,由于GT高等级机器速度足够快,即使堆积一整组也能在令人满意的时间内完成,更何况一个机器堆满了还有其他的机器来接替。

实际使用中,可以直接把机器的输出端对着主网络的ME接口,免去物品收集侧的烦恼。
2020-11-22_23.28.22-edited.jpg


2.2 物品收集侧

执行装置的产品最终还是要从超级机器的输出端出去的,因此需要专门的装置来将产品集中起来。和物品分发侧类似,根据执行装置支持的特性不同,有不同的解决方案。

2.2.1 若机器支持自动输出

若机器支持自动输出,那就简单了。
基于ME接口和存储总线的ME导管是一个非常优秀的物流方案。就用它了。

具体实践请在【整体解决方案】一节中查看。

2.2.2 若机器不支持自动输出

对于不支持自动输出的机器,那就得用一点方法把产品抽取出来。

如果使用ME导管,那么把输入总线作为抽取端是可行的。
不过安装大量输入总线的成本有点高,尤其是那个粘液球。

如果用管道抽取的话,当然还是低延迟的eio管道比较合适。海量配置管道建议用导管探测器复制粘贴配置。

保持这么多输入总线或管道接头在机器空闲时仍然抽取,可能对服务器性能(单机也是内置服务器)产生负面影响。
可以对这些抽取装置加上红石控制——相对来说eio管道高度集成的红石控制较为优雅。将这个控制抽取开启的信号设置为输入缓存有物品时开启,在输入缓存清空后延时一段时间关闭。


2.3 整体解决方案

刚才吊了好几回胃口,就让我们来看看,物品处理阵列可以做得多优雅!

2.3.1 固定物品种类+自动输入+自动输出

TE和EIO的机器是典型的同时支持自动输入和自动输出的机器。
那么我们的物品分发和物品收集都可以使用基于ME接口的分发和ME导管。

方块又是单方块,那么我们可以把两个接口和两个机器摆成这个样子:
article4.chapter2.img9.png
既然用ME网络了,那么一排8个很明显是必然的选择。
然后8个这样的结构组合在一起:
2020-08-10_16.41.30.png
这样就成为了一个机器小组。每个小组里有16个机器。8个接口用于分发原料,8个接口用于接收产品。

这个设计的目标主要是用于压缩机器,故大小刚好为13x13x13。当然,用于普通的区块里也是可行的。

在一个超大型压缩机器的空间里,刚好可以放下4x4个这样的机器小组,如图:

2020-08-10_17.54.55.jpg
是不是很优雅?

这样一个压缩机器里可以摆下256个单方块机器。产能让人印象深刻,高到难以计算。
基准测试结果是10000(注意是一万)个石英粉耗时26秒。
至于建造它消耗多少材料,不好计算,不过能做得起满配的时候,材料应该也不成问题了。

很明显,这种情况下AE的布线也要做好。竖直方向4个小组,也刚好在分发和收集两侧各使用32个频道。
简单看一看如何布线,这是分发侧:

2020-08-10_17.59.02.jpg
这是收集侧:
2020-08-10_18.00.08.png
大同小异对吧。

边上还有一点点空间,可以摆个箱子用来放备份配置用的内存卡之类的。

在投入使用前,最好走一遍质检流程来发现潜在问题,以避免上线后不断救火:
- 检查每一个用于分发物品的ME接口是否配置正确。
- 检查每一个机器的自动输入和自动输出是否打开,每个面的输入和输出方向是否正确。
- 通电,在缓存里手动放入一些物品看是否在预期时间内按照预期速度产出。
- 接通上游物流试产,观察并行程度是否符合预期。

不得不说配置这么多机器挺费事的……尤其是eio机器不支持复制配置。

对于eio机器,还有一类比较特殊,就是各种强化机器。它的体积是1.5格,那么这种高密度堆叠的方法就没法用了。
这种情况下只能用平面堆叠的方案: 2020-08-10_22.34.29.png
在压缩机器里最多可以放下48x3=144个机器。
两层之间保留的空间用于让玩家能够自由活动。对于真正的压缩机器,上方是一点点空间都没有了,最上面一层的机器只能仰着头配置。
用于分发物品的ME接口小组,用绿色的羊毛标记;用于收集产品的ME接口小组,用红色的羊毛标记。
剩余部分的布线跟单方块机器阵列的做法非常接近,就不作展示了。

需要注意的是,大量SAG磨粉机同时工作会消耗非常可观的服务器cpu时间,主要在于SAG磨粉机的副产物概率计算。我们不推荐实装这个超级机器,建议用TE磨粉机尽可能多地替代SAG磨粉机来处理生产流程。相对来说,TE的机器对服务器性能非常友好。

堆叠如此多的机器,能源消耗也非常可观。注意机器内部的能源缓存是否有足够的输入输出能力,让所有执行装置能够以最大功率同时工作。

对于这两种方案,只要做好基础设施,对于实际执行装置,从最低配只安装1个,到满配144或256个,完全可以平滑过渡。

实际应用中,通常只会建造必需的一部分接口和布线,就像这样:
article4.chapter2.img10.png
这套方案只能处理固定种类物品的先天限制,使得它最适用于矿物处理系统的部分流程。
即使是用于产能爆表的矿物处理系统,满配的超级机器通常也是产能过剩的。对于1tick一个矿的环境科技矿机,每个处理工序大约只需要1-2个机器小组即可充分满足需求。

2.3.2 多通道方案的典型应用

咱们直接看这张图。
2020-08-10_23.12.24.png
执行装置是TE磨粉机。
前面的多通道物品分发不再赘述。本地缓存抽取的管道接头里加了一个导管速度升级。
如果要做更多通道,在压缩机器里就会显得非常拥挤。

下面的物品处理阵列,由于TE磨粉机支持自动输出,故使用ME导管收集产物。
目前共有16x3=48个执行装置。虽然相对于256个来说是小巫见大巫,但产能相当令人满意。基准测试结果是1000个石英粉耗时27秒。
每组16个执行装置也接近传统方案具有实用价值的分发上限了。

上一个方案用5倍多的机器,达成了比这高近10倍的平均速度,原因就在于ME接口几乎没有冷启动的延迟,而管道冷启动时,两次抽取间隔比较长,导致执行装置在前一段时间较为空闲。

如果情况特殊必须加更多机器,那么可以在垂直方向叠一层跟下面一样的执行装置,然后ME管道扩展一下就行。

这套方案适用于任何物品,故可以用于很多场合,包括主网络的生产线。

2.3.3 多通道方案的非典型应用

我们在前面提到,AE2三种处理器的生产线,有一个问题尚未解决,就是同时输出多种产品的问题。

现在我们有了可以同时输出多种产品的物品分发装置,那么是不是可以把这个装置应用到处理器生产线上呢?

当然可以。

处理器产线需要处理3种电路板,3个通道刚好够用。
那么我们就来缝合一下两个装置,看看会发生怎样的化学反应:
article4.chapter2.img8.png
处理器生产线因为通常做得比较早,新开发出来的东西常常用不上。这个方案尚未实装,但看起来效果相当令人满意,甚至还提升了实用的产能上限,因为现在有3个管道接头给最后一级压印器阵列提供物品。

2.3.4 多样物品种类+无自动输入+无自动输出

总有一些模组的机器啥自动物流都不支持。核电(NC,非重制版)就是其中之一。

小制造机真香。

分发侧可以根据情况用多种方案,只要不要求执行装置支持自动输入就行了。
收集侧用的方案也很明显了,只有管道方案。

实装的机器是这样的:
2020-08-10_23.13.16.png
由于没有AE设备菊花链最多8个的限制,这里一排机器的数量可以超过8个。不过在压缩机器里,主要的限制要素是空间,最终我们还是使用了8个一排的设计。

物品分发和物品收集都受到同一个频道的红石信号的控制。
这个信号在输入缓存内有物品时发出,在缓存清空后,延时一段时间关闭。RFTools的音序器,在这里相当于一个启动延时很低,信号输出时间可调的红石中继器。
2020-08-10_23.15.31.png
这样,只有当超级机器有工作的时候,管道才会抽取,可以改善服务器性能。

2.3.5 魔法物品栏 vs 头秃科技

对于GT机器(本文中以GTCE为例),由于它支持自动输出,因此可以使用喜闻乐见的ME导管来接收产品。

对于物品分发,取决于目标用途,可以使用廉价、多通道和魔法物品栏三种方案。其他的方案都已有示例,那么就让我们来看看这个魔法物品栏是怎样和机器搭档上的。
这次的整合有Gregicality,就干脆用能源转换的CEF了。能源主干用RF可以少掉一些头发。 2020-08-10_22.56.15.png
总的来说,这就是放大版的传统物品均匀分发方案。每个抽取的管道接头对应8个下游机器。

这里还有一半的机器位置空闲,作为一个非满配机器的例子。当然,空闲的CEF也可以省略掉。
真实原因是懒。


3 矿物开采装置
——硬核内容之间的小憩

没什么需要写的。所以这一章有点水。

实际上,对于大部分从世界中挖矿的矿机,用法都是挖完了换一个地方,因此也无需在意外形的问题。
矿机的用法详见相关百科条目。
如果在家底下挖,记得挖完后用机器把整个区块填实,这样可以改善性能。

对于那些从虚空或者异世界挖矿的矿机,唯一值得提的就是外观(地皮)设计。
此类矿机最具代表性的就是环境科技的矿机了。

环境科技矿机从1-6级,尺寸最大扩展到13x13,差不多占满我们基地的一个分配单位。
这样前期我们就可以规划好这些矿机要被放到哪,然后根据发展阶段按需升级即可。

至于能源输入和产品输出,我们可以用能量管道或能量传输节点,以及ME接口配合AE2 Stuff的无线接入器。
需要接的线不算多,可以很容易地做出优雅的外观设计。

矿机周围放啥都不合适,唯独上面什么都能放。环境科技的太阳能板就非常合适。

2020-08-22_21.07.19.png

环境科技的矿机,速度升级加到上限(比如产出间隔是1tick)之后,再加更多的速度升级,只会更加费电而不会提高产能。

好,这就是本章的全部内容。
喝完可乐,系好安全带,我们继续。


4 矿物处理系统

回想起我在自动化启蒙之前的穷酸经历……还是忍不住脑壳疼。舍不得孩子套不住狼,舍不得钻石也挖不到更多的矿。可是钻石我是真舍不得啊……

自从若干年前我在一个不知名的服务器造出了我的第一套自动矿物处理装置,并因此被ban(好像是吧)之后,我对自动化装置的探索就一发不可收拾了。
——从此以后我也就自己开服了。

曾经制作的此类装置在现在看来,都显得有些原始,已经没有值得借鉴的地方了。
因此,就简单看看图吧。



在详细讨论我们的原创系统之前,不妨先看看各个模组的作者,都希望我们用怎样的方法来处理挖回来的矿。


4.1 The IC2 Way
在我会玩的模组中,IC2的矿物处理的复杂程度,大概能排第三。
现在想想,根本没那么复杂嘛。

以我怨念最深的铁矿石为例,其他的矿物的流程大同小异。
article4.chapter4.img1.png
(插图画风突变是吧,是的,我也不想再做了,太费时了)

现在再看看其实是相当的简单了。
IC2流程支持的矿物种类比较有限,这从洗矿机的配方数量可以看出。

超频加少了急死人,超频加多了电老虎。

打粉机增产至2x,洗矿机增产至2.22x(如果产物种类跟原矿相同),热能离心机再增产至2.33x(如果产物种类跟原矿相同)。

4.2 The Tinkerers’ Way
没什么好解释的,漏斗架起来,炉子点起来,铁水浇起来!
众矿平等的2x增产。

由于冶炼炉排液口的兼容性相当不错,我们还可以将流体用其他模组的管道输送到智能输出端之类的地方,来进一步自动化矿物处理。
注意管道能承受的温度范围。

很明显,我们不想让这些融化的金属在冶炼炉里自己形成合金,而让我们的矿物处理失控。
那么就得用某种方法将这些矿物进行分组。
那么问题来了,分几个炉子?很明显每一个炉子都不太便宜。

这是一个比较有意思的问题,用最少的炉子数来融化所有矿物,同时避免形成合金。
比如金银铜铁四种常见的金属,我们就可以分为【金铜】,【银铁】两组。
具体的分配方案,需要根据整合包的情况灵活判断。

TE的谐振末影矿石配合宝石铸模可以获得大量末影珍珠。

4.3 The TE Way
article4.chapter4.img2.png
挖一挖,磨一磨,烧一烧。
磨出来直接就是我们想要的纯物质,妙啊。
副产物通常是另一种金属,但所有种类的金属大致互相转了一圈,总体上在2x和2.1x之间。

就这?
当然不。

还有立等可取的2倍产品——通量阳极电镀。
还有使用诡异而昂贵耗材的3倍产品——板块矿质引发,和4倍产品——炽焱高温裂解。
更有朱砂和炉渣等蛋疼的产物来进一步推升产率,最高可达4x+100%副产。

真要做出TE版的5倍矿也不便宜。
我实际使用的多是通量阳极电镀,没有额外消耗。

4.4 The MEK Way
五倍的增产,建造完后就是五倍的快乐。用融合机还可以把产品压回矿,岂不美哉。有的矿物就可以这么无中生有了。

论复杂度,IC2是第三名,这个就是第二名了。TE版的五倍矿在角落画圈圈。

由于其他大佬太过勤勉,我没有亲手建造过一整套五倍矿。本站已有这方面的详细教程,我就不再赘述了。

4.5 The EIO Way
其实和TE磨粉机的内容大致是一样的,只不过换成了SAG磨粉机和合金炉,还有圆石等鸡肋的第三副产。

不过磨珠的玩法比较丰富——以CPU时间为代价。

SAG磨粉机兼容的矿物比TE的更多一些,比如RFTools的空间碎片矿石,和DE的龙矿。

4.6 The GTCE Way
——关于GTCE的诸多争议先放一边

论复杂度,大GT怎么可能落后。当之无愧的第一名。

为了方便描述,我把GTCE处理矿物的流程分为两个部分。

第一部分称之为矿物前处理,包含第一步研磨,第二步洗矿,第三步离心,第四步研磨。
当然还有其他的流程组合,不过本质都一样。
大部分矿物在这些阶段的套路都是相同的。
这么一通操作下来,我们基本上能获得矿物对应的纯物质,还有海量的小撮粉。
这部分的处理流程比较单一,但它们需要处理几乎所有的原矿,对吞吐量要求较高。
增产情况视具体矿物种类而定。

接下来的第二部分称之为矿物后处理。
有的物质直接输出并存储;
有的物质进高炉;
有的物质进电解机;
有的物质进离心机;
有的物质进化学反应釜;
有的物质进了电解机出来之后还要进高炉。
部分处理装置还需要流体的输入输出。
相对于路线单一的前处理来说,后处理的流程要麻烦许多,但这些流程也只需要处理一部分种类的物品,对吞吐量要求稍低。

这样,根据自己的不同需要,我们就获得了各种单质或化合物。

关于相关流程的具体设计,我会在后文说明,故这里就点到为止。


4.7 My Way - 基于物品路由的模块化矿物处理系统
——究其本质,矿物处理流程仍然是一种物品输入输出关系。

4.7.1 Easy难度 - 概念介绍
无论我们用何种方式获取矿物,最终得到的矿物种类肯定都少不了。
对于不同种类的矿物,适用于它们的处理方法又各不相同,其中总有一种是最适合自己当前状况的。

于是我们可以为每一个这样的处理方法建立一条或更多的产线。(下图仅供概念性参考)
article4.chapter4.img3.png
接下来的问题就是如何把挖回来的矿物,按种类送进这些生产线。
我们很自然地想到了管道。对于一个期望达成高吞吐低延迟的系统,ME管道很明显是非常优秀的选择。
article4.chapter4.img4.png

没错,这就是本文中所有矿物处理系统的本质。后面所有的变化,只不过是让它的性能更加优秀,或是造价更加经济。

毋庸置疑,如此简单的方案自然会有极其明显的缺点,那就是对常用生产流程的重复建造。
比如烧炼(原版熔炉配方),就是一个非常常用的流程。如果用于每种矿石的生产线相互独立,那么我们就要建造很多很多的相同装置——分别安装在各个产线中,处理该产线的产品。

于是,我们就要想办法来尽可能复用在不同矿物的处理中都会用到的部分处理流程。

对于前面提到的3种产线,流程S是共用的。

那么我们可以把这3条产线中的每一个流程都拆出来,然后将它们各自视为一个产线,这样不同矿物的处理过程都可以用上它了。
article4.chapter4.img5.png

当矿物种类非常多的时候,处理流程复用的程度也会很高。这样我们可以利用我们前面的处理阵列设计,把每个处理流程的产能做得非常高,从而让整个矿物处理系统,无论是面对大量单种矿石,还是大量多种矿石,都能达成理想的吞吐量。

简单的概念介绍到此为止。让我们来看看,在实践中,如何达成1tick N个矿的产能。


4.7.2 Normal难度 - 非常成熟的固定种类矿物处理系统
——没有GT。

如本节标题所示,这套系统是用于处理固定类型矿物的。
在没有GT的情况下,矿物种类通常也不会有很多……不是吗?至少jei一页都不到。

这里的一个典型例子是环境科技矿机。默认配置下1-6级除了水晶不一样,其他的都一样。
矿机刷的矿基本上覆盖了所有会用到的矿石,用起来很爽。

这个方案就是为这种矿机设计的,主要目的是达成极限吞吐量并尽可能改善性能消耗。

这套装置的使用场景,期望的使用方式是环境科技矿机的输出直接一股脑丢进矿物处理系统的输入端,然后输出产品直接进入,或通过一个事务合并装置进入主网络的存储。

4.7.2.1 架构
首先,我们需要设计一个架构,能达成极强的可扩展性。
同时还要尽量优雅一点。

ME管道全家桶,是我们的不二之选。
由于只需处理固定类型的矿物,我们可以使用近乎完美的ME接口物品分发方案。

然后我们需要考虑一下将要安排哪些生产流程。
以原版,环境科技,TE,EIO,DE等常见模组的一些矿石为例:
铁:通量阳极电镀
荧石:TE磨粉机
铂矿石:TE磨粉机→烧炼
龙矿:SAG磨粉机→烧炼
不稳定红石矿石:直接存储
以太水晶:直接存储

其他的都好办,直接一个流程就能出产品,但有的产品需要走两个流程,这时候我们就需要使用比较高级的ME管道设计。
article4.chapter4.img6.png
这里所有的输入和输出都在同一个ME网络里,可能不容易理解。
让我们一起来看看它是怎么工作的。

首先我们假设所有的标记都如期工作——我在下文说标记了就正确标记了,说没标记就没标记。
事务合并也正确配置,包含1个存储元件,白名单为铁锭,钻石等最终产物。

案例一:铁矿石
首先,一个铁矿石从矿机里被刷了出来,弹出到ME接口。
ME网络会尝试把它存到某个地方。首先看优先级0,发现对着通量阳极电镀的存储总线里有标记铁矿石,于是将它存到通量阳极电镀的模块的物品分发装置里,接下来的事情就不归这个网络管了,咱们在后文讨论。
经过一段时间,2个铁锭从这个模块里出来,网络一样去找地方存。找啊找只有优先级-100的ME驱动器能存,于是这2个铁锭被放进了驱动器。
于是这个时候网络的存储里多了2个铁锭。事务合并那边等得焦急的IO端口赶紧看看能不能把它放进自己正装着的存储元件里。
它成功了。于是网络终端里的2个铁锭闪了一下又不见了。这2个铁锭将在事务合并下一次发车的时候被投放到主网络的存储里。

案例二:铂矿石
和刚才的铁矿石类似,一个铂矿石进了网络。
它被送到了TE磨粉机阵列里。
这个磨粉机是个欧皇,它磨出了3个粉,两个铂粉一个铱粉。
于是这个网络接收到了这3个粉,需要对它们做跟刚才的矿石完全相同的处理。
由于面向红石炉阵列的存储总线里有标记这两种粉,于是它们被送进去烧成铂锭和铱锭。
这3个锭出来真没有别的存储总线肯接收了,于是被存进了驱动器里,然后在下一瞬间被事务合并的IO端口吸走了。

案例三:不稳定红石矿石
这次矿石进来,只有驱动器能存了。于是它被存进去了。
然后又被事务合并吸走了等待发车。

案例四:扳手
玩家手滑,往贴着虚空采矿机的ME接口里丢了一个扳手。于是这个ME网络尝试将这个不应该出现的物品进行存储。
很明显,只有驱动器里可以存放。
它不在事务合并中存储元件的白名单里,故它不会被吸走,直到玩家手动从终端里把它拿出来。

从这4个案例可以看出,在没有出现堵塞的情况下,这种看似循环的网络接法实际上可以符合预期地工作。有标记的物品会优先进对应的产线,剩下的会进驱动器,符合事务合并内部存储元件白名单的会被装车发往主网络,什么都不符合的,包括还没来得及标记的矿石,就静静地呆在驱动器里等待玩家操作。

没来得及标记的矿石,会被存到驱动器里面,在对应的存储总线有标记物品之后,它们仍然不会主动地跑进去。这时候就需要玩家手动地把所有的存储元件从IO端口刷新一遍,让这些物品再走一遍物品输入的流程,或者做一个自刷新缓存让装置自己刷新。

如果事务合并采用定时发车的方案,那它没办法主动吸物品了,就在送往事务合并装置的存储总线上标记吧。可能需要同时加装自刷新缓存来处理偶尔投放失败的物品。

刚才都是讨论装置正常工作的情况。那么不正常的情况呢?

情景一:造矿机的速度比造产线的速度快多了!产线跟不上六级矿机的极速。
每个机器阵列里面的缓存数量是有限的。当它满了之后,对应的存储总线也就存不进东西了,物品会被堆积在驱动器里,等待玩家或自动刷新。
建议保持矿物处理的产能过剩,可以有效避免这种情况的发生。
如果不想做那么多机器,或者是希望爆发性刷一波矿然后吃一天的话,那么就可能需要做一套自刷新缓存来帮忙倒出来溢出的物品了。

情景二:产线出了天知道是什么的问题,总之用于缓冲的驱动器满了。
满了就满了,由于所有的存储总线都是白名单标记,物品也不会乱跑。
不过这时候机器阵列输出的物品也没地方存了,堵在物品接收侧。
我们首先补一个空的驱动器来吸收溢出的物品,然后关掉矿机输出,等工作稳定后修bug即可。

于是基础的架构就这样定型了。

机器阵列的方案倒是很容易确定,使用2.3.1节的方案就行,效果非常好。

4.7.2.2 实施

架构定型之后,其实已经可以开始建造了。
至于具体怎么造,请根据自己的具体情况来决定。我们的抛砖引玉样板间,请到下一节再看。这里我们继续讨论通用的内容,以避免影响读者的创意。

不过,为了让这套装置能够运行起来,我们还需要配置每一个存储总线,来让物品有序流动。

刚才我们提到,机器阵列使用ME接口方案。一个ME接口有9个可标记的物品栏,即意味着,若整个阵列中的ME接口都采用相同的配置,则整个阵列只能处理9种物品。
当然把阵列分两半然后各自进行不同的配置也是可行的,不过为了解释清楚概念,我们就按照一个阵列内部配置一致,只能处理9种物品的情况来讨论。

矿机挖出来的矿可不止9种,尤其是需要通量阳极电镀组的种类通常最多。
那么就需要多组这样的机器阵列来处理这些物品。
为了达成尽可能高的扩展性,那么这些机器阵列的负载应当尽可能平均。(要素察觉:负载均衡)

于是,我们接下来讨论的案例,就变成了,如何配置物品路由和机器阵列,来让处理同一个生产流程的不同机器阵列的负载尽可能平均。

我们指定A-N 14种矿物,它们在矿机中的产率各不相同。它们的最佳处理流程都是通量阳极电镀。

很明显阵列1处理ABCDEFG,阵列2处理HIJKLMN并不是最佳方案。

那么又该怎么做呢?

首先,我们应当让单位时间进入这两个机器阵列的物品数量尽可能接近。这样两个机器阵列将接收到大致相等的数量的矿石,可以尽可能充分利用它们的吞吐量。
于是我们需要测算这14种矿物在单位时间内的产量。这个过程需要一点时间,不妨在建造生产线之前就开始做这个流程。
我们需要准备一个ME箱子,然后摆上足够大的存储元件,开起来一个矿机收集产品,然后过几个小时,或者当收集到至少1000-2000个物品后查看结果就行。期间不要把箱子中的矿拿来用,否则会影响结果准确性。
我们这里假设所有等级的矿机刷各种矿的概率都相同。如果不同等级的矿机刷矿的比例差异很大,那么推荐在每一次矿机升级后都要做一遍这样的流程,来最大化产线工作效率。当然这是一件很累人的事情,如果懒,直接加更多机器就行了。
于是我们收集到了:

  A
  
  585
  
  H
  
  248
  
  B
  
  723
  
  I
  
  954
  
  C
  
  54
  
  J
  
  17
  
  D
  
  1198
  
  K
  
  303
  
  E
  
  12
  
  L
  
  548
  
  F
  
  47
  
  M
  
  941
  
  G
  
  108
  
  N
  
  872
  


这数字瞎打的,不要想太多。

现在我们的任务,就是将这些数分成7+7的两组,在每一组的成员都不超过9个的情况下,让这两组数各自成员之和尽可能接近。

解决这个问题的方法非常多样,请各位大仙各显神通。

总之我们得出了结果:
3347=ACHIJLM=954+941+585+548+248+54+17
3263=BDEFGKN=1198+872+723+303+108+47+12
我不确定这是不是最两个数值最接近的解,不过差不多就行了,我们采样还有误差呢。
于是现在也知道这两组机器阵列该处理哪些矿石,和对应的存储总线标记哪些物品了。
这个过程我一般称之为“配平”,用来规划可预测情况下的负载均衡。

对于处理阵列内部,我们使用ME接口的分发方案。反正TE和EIO的机器都支持自动输入和输出。
那么用于分发物品的ME接口,又应以怎样的顺序标记这些物品呢?
当然,在产能过剩的情况下,标记的方式并不会造成什么问题。不过当产能不怎么过剩的时候,这个物品的标记顺序就可以讲究一下。

我们可以将物品按照出现概率递增的顺序来在ME接口里标记。
由于按照惯例(和开发者的常见思路),物品输入是按照格子顺序抽取的,故最左边的格子会被最先访问到。如果将出产概率最高的矿石放到左边(比如煤矿石),机器阵列将始终优先处理它们,使得出产概率较低的矿石在它的存货消耗完之前无法处理。如果将出现概率低的放在前面,那么这些矿石很快被处理完后就能去一步步地处理产量更加丰富的矿石,有利于装置运行的稳定和充分利用吞吐量。

如果你玩的整合包提供了压缩空间机器,不妨将机器阵列放在压缩空间机器里,它不光可以帮助改善机器密集堆叠造成的帧数问题,还可以让矿物处理的模块化设计变得更加优雅。

到这里,你已经了解了关于这套矿物处理系统的全部细节。
现在来看看我们是怎样建造它的,以及压缩空间机器又怎样让模块化设计变得优雅。

4.7.2.3 样板间

这是一个使用压缩空间机器的方案。

对于机器阵列,它的输入输出关系非常简单,矿石进去,产品出来,然后插电就行。
这很适合放进压缩空间机器里,并作为一个逻辑上的机器来工作。

于是按照2.3.1节的方案去做就好。内部需要留一点缓存来让ME接口抽取物品。

article4.chapter4.img7.png

接下来,在主世界我们只需配置ME管道就可以了。
2019-11-30_17.25.53.jpg

(这图是不是似曾相识)
这个案例稍微有点不同,物品投放的地方使用一个单独的网络,这样矿机产能过剩的时候可以直接堵塞自己而避免全面瘫痪,同时带来的缺点就是异物会永远卡在里面而不能存进驱动器。
像这样,我们就做出了大量的扩展槽,需要的时候在空位上安装对应的模块就可以。
这个装置在产能扩展方面的用户体验应当非常优秀。

这里我们带了7个满级ET矿机,产能非常令人满意。然而这也只用到了每个压缩机器完整规模的一半。所以……它的产能太高了,以至于没有必要来预留很多扩展槽位。
在后来的同类设计中,大约一行7个槽位就完全够用了。(注意,没有GT)

如果没有压缩机器,这样的设计就必须摊开到很多区块。产能相同,只不过布线不会这么优雅。

4.7.3 Hard难度 - 包容一切的矿物处理系统
——像AMD的处理器一样,拿胶水粘就是了。这次的胶水是我们的路由系统—ME管道。

刚才的方案,主要适用于矿物种类和比例均固定的的环境科技矿机。
如果必须从世界中采矿,或者像GT一样拥有海量种类的矿物,那么这种只能处理固定种类的方案就难以担当大任了。

不过让我们稍微想想,限制上一套方案只能处理少数固定种类的因素是什么?
是使用ME接口的物品分发。

因此,只需将机器阵列中物品分发的方案改成传统的不限物品种类的方案,就可以用这个机器阵列处理18,27,直到63种物品,达到单个ME存储总线的标记上限。不过负载均衡是没法像之前那样完美了。
在没有GT的情况下,这个数量也基本足够了。这样的修补方案至少比后面为GTCE设计的方案更廉价。

那么面对GT好几十页的矿物,我们又该怎么办呢?
当然是全新的架构……不,并没有那么新,不过大改还是必需的。

4.7.3.1 新架构

前文提到,GT(CE)的矿物处理分为两大部分,前处理和后处理。
前处理的流程相对比较固定,我们可以用矿物词典或机械臂等方法进行举一反三的物流。
在获得纯物质粉之后,不同的物质需要走不同的后处理流程,这时候我们必须为每种物品手动标记路由目标。
如果整合包并非完全硬核的GT包,其他模组的矿物处理装置可能同时有效,部分情况下我们可以用它们来走捷径。
很明显,这些模块间的物流需要一个强大和高效的路由装置。刚才使用的ME导管方案就非常合适。
article4.chapter4.img8.v2.png
这样一个架构营造的用户体验,和上一个方案一样,也是直接将原料丢进路由器,然后只需坐等产品输出。除了机器升级和手动配置物品路由,无需其他维护工作。

接下来,就让我们看看,每一个模块里面都具体有什么。

4.7.3.2 模块:路由器

路由器在这套矿物处理系统中的地位不言而喻。
它需要承担几乎所有的模块间物流任务。

不过这个任务由ME管道来完成并不麻烦,物品接收侧用ME接口,物品发送侧用存储总线,溢出物品放自刷新缓存里,若有超过63种物品就多加一组相同的模块或者再补一个存储总线。

使用这种矿物处理系统时,通常不会有无限刷矿的环境科技矿机,因此事务合并装置需要使用定时发车的设计。
article4.chapter4.img9.png
EIO物品导管有一个意外地非常实用的特性是,每次新的抽取都会换一个内部槽位,这意味着,如果上次抽取的是驱动器中的第一个存储元件,那么当下一次管道激活抽取的时候,就会抽取驱动器中的第二个存储元件(如果有的话),这样可以有效避免管道每次只抽取第一个存储元件而导致自刷新缓存刷不出来部分内容的问题。
自刷新缓存的IO端口,在这里无论设置成“当元件为空时移动”还是“当工序完成时移动”都可以,如果存储空间充足的话它们的结果应该是一样的。
如果一个驱动器的10个存储元件不够用,可以增加更多的驱动器-IO端口配对,同时记得正确连接来自定时器的脉冲信号。(如果10个元件都不够用,实际上首先应当考虑产能问题)

自刷新缓存可以有效解决短期内大量物品输入并使各模块内部缓存空间溢出的问题。
它的刷新周期在2-5分钟可能比较合适。

由于我们很难一次性挖到所有种类的矿石样本,故新遇到的矿石的在走完前处理之后,其产物可能会因为缺少后续的路由配置而滞留在这个自刷新缓存里(每次刷新都会把它刷回缓存中)。这时候需要玩家手动对此物品进行标记。

未来当整个装置都正确配置,并且产能未过载的时候,自刷新缓存的内容应当是空的,或者物品一闪而过。

4.7.3.3 模块:矿物处理捷径

对于部分在整合包里没卵用的矿石,丢掉可惜,走完整的前后处理流程又觉得浪费资源,又或者用量不大但处理流程巨麻烦的矿石,在有其他模组的处理方法的情况下,可以选择走点捷径——比如,通量阳极电镀。
当然其他的流程,比如直接丢熔炉里烧,通常也是可行的。

这个阳极电镀的机器阵列细节,相信看到这的读者们应该很容易设计了,故在此略过。
(提示:任意物品类型+机器支持自动输入+机器支持自动输出)

为了让这些经过标记的矿石不首先进入GT矿物前处理,我们需要把面向此模块的存储总线的优先级调高,比矿物前处理的高就行。

在这个模块内部,为这些天选之矿石选择最合适的捷径吧。

4.7.3.4 模块:GT(CE) 矿物前处理

那些并没有被选中的矿石,就得走这条漫长而又艰险的矿物前处理之路了。
在这条充满了希望和挑战的路上,这些矿石将爆发更大的潜力,磨砺出更多的价值。

很明显,面对海量种类的矿石,手动逐个按产物标记并不划算。

由于粉碎X矿石,石头粉,各种纯物质粉都有独特的矿物词典,故我们可以使用GTCE的矿物词典过滤来解决问题。
总的路线图如下图:
article4.chapter4.img10.png

(图中第三步研磨的存储总线不需要优先级,我忘记从图中去掉了)
于是进入这个模块的物品是所有未被其他模块接收的ore*,从其中输出的是各种纯物质dust* 和dustTiny*。

在洗矿后,无论是先研磨再离心,还是先离心再研磨,物品产率都没有什么差异,因此两种方案都可行。不过请注意需要过滤的矿物词典不一样。

关于小撮粉(和小堆粉),这里的处理方案是将小撮粉丢进路由器里进行下一步投放。
如果希望直接将它们放到对应的合并装置而不经过路由器,可以在相应的机器阵列的输出端增加一个箱子并过滤dustSmall*/dustTiny*,并正确配置管道/存储总线优先级。

虽然按照目前设计没有必要,但如果需要单独过滤出dustTiny,就得保证用于过滤的箱子不能装满。这时候就需要考虑上下游的速度匹配问题——当过滤物品的箱子太满的时候,就停止从机器阵列接收物品。我们可以使用红石比较器和ME反向触发总线来达成此目的,在红石信号超过阈值的时候,断开用于过滤的存储总线的连接。如果使用其他的物流方案,也可以进行改造。

4.7.3.5 模块:普通单流程处理

工业熔炉,高压釜等简单的流程,都是固体输入固体输出(或者带点其他可以无限生产的材料),只需要配置好对应的路由,和使用合适的机器阵列方案,就能够实现目标。

矿物处理中出现的用高炉烧成锭的粉,也是这样的流程。故我们直接跳过此部分。

如果魔改包中需要用额外的东西来将粉烧成锭,需要考虑这些额外材料能否免费刷出来,否则最好把粉丢进主网络来处理。如果从主网络自动拿材料,可能会因为处理一大批某种矿石而导致主网络原料缺乏,影响游戏体验。

4.7.3.6 模块:特殊流程处理

这个模块处理的任务因整合包而异。
不过我们可以用一个原生GTCE就有的配方来举例——钛铁矿。

它需要向高炉中投放1:1的2种原料。
1个钛铁矿粉+1个碳粉=4个锻铁粒+5个金红石粉。

如果是专用的生产线,可以整两个输入总线,一个专门放碳粉,一个专门放钛铁矿粉。
如果想跟普通高炉共享,可以用一个脉冲漏斗来整份投放原料,然后用一个存储总线检测输入总线的内容并用标准发信器发出红石信号来控制这个脉冲漏斗,以免被其他处理任务塞满输入总线而导致非整份的投放。

于是这里就有一个问题:碳粉哪儿来?
很明显我们没法刷墨盒来拆。
为了尽可能简化输入输出关系,我们希望矿物处理是一个仅输出物品的区域,而不会无限吞噬主网络存储的资源。这样我们必须保证矿物处理中使用的所有耗材,都是能用某种方式无限刷出来的。具体刷这些物品的方案,就得根据整合包的具体情况来判断了。
如果从矿物处理本身的其他路径来获取材料(比如从煤粉的处理过程中拿一点),又会遇到该拿多少的问题——拿多了,会导致无谓增加的库存;拿少了,产线会卡住。手动从世界中挖矿,矿石的来源也是饥一顿饱一顿的,我们不能保证其供应。

对于必须使用难以生产的耗材的处理流程,比如铟富集溶液、铂系矿泥等,比较合适的方法是将相关原料放弃处理并输出到主网络进行按需合成。

4.7.3.7 模块:普通电解机

电解机……不用解释什么了,蛋疼就蛋疼在它的几乎所有配方都是需要多个同种物品的。
如果为每个配方做一个电解机,钱包疼;
如果让多个配方共享电解机,脑壳疼。

那可如何是好?
总之我是绝对不会为每个配方配一个电解机的。价格又贵,产能利用率又低,还没有可扩展性。

首先,让我们来理一理思路。
无论如何都要解决的一个问题就是,整份整理和投放物品。
我说要39n个铝土矿粉,那就一个也不能多,一个也不能少。

有什么机器能达到这个目的呢?
生电方案……呃,可以,不过我这个玩模组的不会。另外生电方案在模组包中常常会引起显著的性能问题。
EIO有个脉冲漏斗,可以自行配置每次漏下来的物品。
PackagedAuto的打包机,也许可以,不过这个打包样板的制作比较麻烦,而且,它还对内部物品栏的槽位敏感——如果上游投放物品的速度太快,第一个格子满一组跑到第二个格子了,这个打包机就瘫痪了。

由于打包机的方案效果并不理想,我们首先来看看使用脉冲漏斗的方案。

限于脉冲漏斗的工作原理,每个配方用一个漏斗还是免不掉的。
它的配置内容就是对应纯物质粉电解配方的整数倍。铝土矿粉39个用1倍就行了,部分物质只需2个就能电解,那么可以配置成4,6,8个来稍微改善吞吐量,但在电解机本身足够快之前,吞吐量实际上并不会提高。

现在我们拥有了各配方整倍数份的物品,又该怎么将它送进电解机呢?
一个非常明显的方案是把这些物品一股脑丢进箱子,然后直接用管道抽取即可。管道抽取物品时,会有同种物品会堆在一起的趋势,这样无论源头箱子里有多少个多少种物品,最终进到电解机唯一输入槽的只有1种物品并且很快会增加到1组,或所有的该种物品(如果不到一组)。这样无论如何这个电解机都不会卡住。

我们还可以用比较器检测箱子的物品储量,让它在物品储量足够多时禁用所连接的全部脉冲漏斗,这样可以避免箱子装满后带来的不可预测行为。

不过一个大型箱子只有有限数量的面,可以连接的脉冲漏斗数量也比较有限。这时候我们可以用前面提到的魔法物品栏来作为一个逻辑上的箱子,这样想要多少个面就有多少个面,布线也可以更优雅。

对于脉冲漏斗的输入端,我们也可以使用这样的魔法物品栏并充分利用脉冲漏斗的自动输入特性(只会抽取玩家在其中标记的物品类型),这样我们也不必为每个脉冲漏斗去配置物流过滤了,把这一组脉冲漏斗对应的物品在路由器上一把标记了就行。
article4.chapter4.img11.png
电解出来的流体,大部分是氧气之类的,输送到主网络会让布线变得更加麻烦,而且氧气还能很方便地用电解水制取,故我直接扔掉了。
至于会产有用流体(比如氟)的矿石,我选择放到特殊电解的模块里,那里会处理需要流体的配方(钨酸锂等)和会产生有用流体的配方。

于是这套装置,在抽屉管理器允许的范围内,可以无限横向扩展——你想让多少个配方共享一个电解机都可以。
不过,太多个配方共享会导致严重的产能问题。从我的实践情况来看,大约4-8个配方共享一个电解机比较合适。
对于大型电解机(如果整合包有的话),高压机器可能速度足够快,这时候可以让更多的配方共享一个电解机。

对于铝土矿、锡石等出产几率比较大的矿粉,可以安排到多组不同的电解机来处理,以达到负载均衡的目的。
如果某种矿粉的产量特别巨大,还可以将它在多组电解机里同时进行标记,这样就相当于在最佳情况下会有多个电解机同时处理该配方,达到此配方产能扩展的目的。

对于PackagedAuto的打包机,使用它的方案其实也是类似的思路。
article4.chapter4.img12.png
输出总线不加加速卡是为了让物品传输的速度低于打包的速度——一旦物品溢出第一个格子就会卡住。对于只有2个物品参与的配方,这时候就不得不选择更多的物品来打包了。不加加速卡的输出总线在最短工作间隔下每秒可以传送4-5个物品,而打包机每0.5秒打包一次,这样每个样板包需要包含至少3个物品。

解包机在不用于AE合成的时候可以不放样板,它可以拆任何收到的样板包。

用于存储做好的样板包的物品缓存需要足够大,如果它被装满了,打包机堵塞,物品就会从打包机的第一个格子溢出来从而卡住打包机。

这个方案需要配置更多的机器和部件,而其性能和产能并没有相比脉冲漏斗的方案有所提升,故在实践上不推荐使用。

4.7.3.8 模块:特殊电解机

大部分的电解机配方都是只电解粉末,但也有少数配方需要使用氢气等额外流体,而且它们还偏偏是重要的资源,比如钨酸锂等,根本没法跳过。
还有一些矿粉,比如氟碳镧铈矿粉可以产氟,而且是相当重要的来源,我们也不能随随便便把它们丢进垃圾桶。

由于刚才的电解机设计为了方便没有提供流体输入输出的功能,我们需要一个改进的设计来兼容这些特殊的配方。
本质上就是管道连一下的事情,不过在实际操作中,刚才的电解机方案已经没有足够的空位来增加这些管道了。
于是我们需要补一套电解水的装置,并且把电解机产出的流体收集起来,有用的流体直接送到主网络,氧气仍然丢垃圾桶……

由于结构非常相似,逻辑结构图就不做了。

4.7.3.9 模块:内部循环生产线

另一类躲不开的生产线是钛线。
在OmniFactory下这个生产线也比较有意思,其中的各个产物都能经过简单的处理,从而回收成工序所需的原料。从宏观上看,就是一个金红石进去,一个(热)钛锭出来。

这样的生产线我称之为内部循环产线。它们的外部输入输出关系非常简单,但内部的就不一定那么简单了。
此整合包中类似的产线还有使用二氧化硅的硅产线。
article4.chapter4.img13.png
(做完了才发现这图怪怪的,不过我暂时想不出来合适的表达方式,未来如果想出来了再说吧)

这类产线通常需要精确控制内部物品的路径,直接将某个流程的机器倍增容易出现物品不均匀投放而导致新的问题。因此这种产线的产能扩展方法是将整个的产线进行复制,然后均匀投放原料。

至于金红石和碳粉的整份投放问题,相信你也有答案了——脉冲漏斗。

4.7.3.10 模块:小撮/小堆粉合并

在不加专门用于此目的的模组(AutoPackager)的前提下,这跟电解机复用一样是个令玩家脑壳疼的问题
由于小堆粉和小撮粉合并的区别仅在于参数是4或9,这里仅讨论小撮粉的合并。

总体思路很明显,就是刚刚好取9n个物品到打包机里。
然后前面怼个自刷新缓存,就大功告成了。

可是,怎么取呢?

GT原生的方案,是机械臂+矿物词典匹配+精确过滤。
嗯……其实……我后面设计的那么多方案……都是因为我不会GT原生物流……
好吧,多走了很多弯路,不过后面这些方案的设计我都感觉不错,值得介绍一下,可能在其他的地方也有用,比如没有覆盖板的IC2和NC,或者少数覆盖板存在bug的GTCE版本。

好了,不管GT的问题,我还是用我自己的方法来解决问题。
首先我们要准备一个足够大的物品栏。一个大型箱子或者实用拓展的小型板条箱就比较合适。(也别搞那种好几页的超大物品栏)
然后这个物品栏前面需要一个自刷新缓存。这个自刷新缓存的目的主要是用于接收从物品提取装置丢回来的数量不足9n的物品。如果直接丢回原箱子,可能会因为物品类型问题而导致箱子每个格子都被少量物品占满,造成机器无限循环。10个存储元件提供的630种物品类型应该足够了。

然后需要一个需要能从这个物品栏里不多不少地取9n个物品的装置。

我的解决方案是这样:
用可以任意控制单次提取数量的TE伺服器,配置为单次抽取9个物品,放到一个只能存储一种物品的容器中(基础抽屉),这样就可以获得<=9个单种物品。
然后判断这个容器中的物品数量。若小于9,则丢回自刷新缓存;若等于9,则发往打包机。
这样就能保证只要装置有输出,就一定是9个。
article4.chapter4.img14.png
需要注意的是,打包机必须足够快,不能出现物品堆积的情况。

这里从物品栏抽取整份的装置实际上可以复制多个,以成倍提升产能。
然而,即使复制多个,它的产能也不高,平均大约每秒合成1个粉。

每次挖一批矿(50k)回来少说也要处理上个两三天才能处理完。

这是纯物流的解决方案。如果,可以解锁编程的能力呢?
拿出我比较熟的rftools control,看看用全新的方法怎么解决问题。

首先肯定得是一个循环,x个tick执行一次。这个x不能太长,会影响产能;也不能太短,会影响服务器性能。

然后每个循环检查物品栏的一个格子,如果物品<9,则直接丢回自刷新缓存;如果>=9,则取能够取出来的最大的9的倍数(比如28个物品就取27)个物品丢给打包机。
这样我们在最好的情况下可以每个周期丢63个物品到打包机——当然,这个打包机的速度也需要足够快,不能出现物品堆积。
不过这种方法遍历格子的速度较慢,其产能相对于上一个方案也并没有明显改善。

这种用法的代码会在文末作为附件提供,可以粘贴进rftools control编程器。 (等我下次整理存档)

4.7.3.11 速度自适应

GTCE机器有个小小的问题,就是研磨机等可以产生副产的机器,在副产槽堵塞,主产物槽有空位的情况下,主产物仍会产生但副产就凭空蒸发了。

在锱铢必较的我们面前,这还能忍?

另外不同的矿石磨出来的粉的数量差异很大,这导致在矿物前处理中,无论上下游是怎样的机器配比,都可能出现某个环节成为速度瓶颈的问题。

在矿物前处理的流程中(可以回去看4.7.3.4一节的流程图),我们有两种方式来检测下游的堵塞情况。
一种是检测用于物品分拣的箱子的储量——用比较器或者存储总线+标准发信器都可以。
另一种是检测下一流程机器阵列的物品分发装置的物品储量——根据所用的物品分发装置灵活决定。

在检测到堵塞之后,我们又该干什么呢?
当然用覆盖板控制机器开关是可行的,然而我们的机器太多太多了。
这种情况下比较合适的方案有两种,一种是断电,一种是停止投放原料。

这两种方法的具体设计相信各位都很容易想到,就不展示具体的方案了。

在这样的设计下,我们可以肆无忌惮地任意扩展任何一个流程的产能,而不必担心生产线的堵塞以及堵塞带来的副产损失。

4.7.3.12 样板间二号和三号

让我们看看,前面这么多内容,实际建造起来会是什么样子。

2020-08-26_13.47.30_edited.jpg
Emmmmm……好像并没有那么壮观。
不过没关系,扮猪吃老虎,看起来平淡无奇的东西才能改善性能。

这个样板间二号一样使用的压缩空间机器,因此它跟固定类型的矿物处理的结构非常相似。
矿物前处理的路由也是手动配置的,好在主要矿物来源是环境科技,手动挖的矿不多。
普通流程的模块没什么新的东西,就不放图了。

不过有这么一些模块值得来看一看。

首先是电解机。

article4.chapter4.img15.png

这次的gregicality有大型电解机,配合足够大的输入总线,完全不必担心少数几种物品凑不够数导致的卡住问题,直接从脉冲漏斗的输出端用ME管道投放即可。

2020-12-07_14.30.27.png
2020-12-07_14.30.40.png
另一个值得关注的是矿物处理中使用的跑马灯式自刷新缓存。
由于eio方案的发现,这个配置麻烦的跑马灯方案估计会是昙花一现。
其详细结构已经在前文详细解释,这里只看看它的样子。


article4.chapter4.img16.png
二号样板间的最后一个看点是使用RFTools Control处理器的通用小撮粉合并方案。

2020-12-07_14.32.50_edited.jpg

和现在很多电子设备一样,硬件平淡无奇,都是随处可见的通用模块,其灵魂在于软件。程序可以在文末的附件里找到。

最近我们在玩Omnifactory,一个以GT为主题的整合包。
没有压缩机器了,我们不得不将所有的模块都摊开来摆。
这就是我们的样板间三号。

2020-12-07_19.00.41.jpg

这个设计相对来说就更加接近4.7.3的方案,毕竟4.7.3的方案就是从图中的基地改进而来的。
由于建造时间稍早,这里的路由系统除了路由器本身,还有一个遍布整个虚空岛屿的P2P物品传输网络。洗矿和离心产出的小撮粉,是用单独的路径送往合并模块。用户输入物品也不是直接输入路由器而是输入到直连矿物前处理的自刷新缓存,毕竟大部分的矿都需要用GT的流程来处理。
不过如果让我再重构一遍矿物处理,我肯定会按新的设计来做。

这里值得关注的,同样主要是电解机和小撮粉合并装置。


这次的电解机就是我们刚才讨论的最新方案了。

2020-12-07_19.30.18.jpg
我做了很多这样的装置来处理50多种电解机配方。这里有80个脉冲漏斗,最终还有一些空闲。
2020-12-08_00.55.28.jpg
至于粉的合并装置,我们首先看结构稍微简单的小堆粉合并装置:
2020-12-07_19.31.00_edited.jpg
跟4.7.10节的方案非常接近,不过由于这个装置建设得较早,我出现了一个小失误导致白白多用了一个标准发信器并让装置变得更加复杂了。
这是实装版本的逻辑结构图:(合并两种粉的装置的区别仅在于参数)


article4.chapter4.img17.png
对于产量非常大的小撮粉,我们希望提高一些产能。不过受到复杂程度的限制,我暂时只能做到2条产线:
2020-12-07_19.31.08.png
大家应该能看到自刷新缓存后面的路径有相同的两组。

最后还有最新款的路由器。
使用体验相当不错。
自刷新缓存的动作由一个定时器+EIO管道的T触发器(锁存红石过滤器)+脉冲发生器触发,这样每次刷新都会把能输出的物品刷到用于输出的青铜箱子中,而溢出的物品从一边的驱动器刷到另一边的驱动器里。
由于目前这套矿物处理的主要瓶颈在于GT机器的速度,路由器的输出端就没有让存储总线直接连到P2P上了。

2020-12-08_01.11.39_compressed.jpg

关于这个基地的更多详情,敬请期待我们的下一篇大制作。

4.7.4 番外篇 – 史海钩沉:我的首套GT矿物处理

2019-05-26_14.04.38.jpg

相信一定有人对图中那个错综复杂的摆满ME控制器的区块感兴趣。

我也不甘心让这个导致我掉好大一把头发的物流系统被淹没在历史的存档中,于是决定把这个我不会再做第二遍的装置解析一遍,顺便从两年后的视角,来看看这个较为原始的方案。

矿物的主要来源仍然是环境科技,部分刷不出来的矿物(比如黝铜矿)就手挖。

很明显,这个中间的控制器太鬼畜了。我们需要用逻辑结构图来理一理思路。

article4.chapter4.img18.png

这样一看就很清楚了。
除了GT之外的每个模块都分为物品投放和物品接收两个部分,毕竟那时候大一统的ME管道和路由器都没做出来。
世界中的摆放安排是这样的(很高清……不,传不上去,重新从6K压到4K了):
2020-12-09_14.57.55_compressed.jpg
这些模块挤在一起的位置安排,主要目的只是把它们放到一个区块,以满足强迫症需求。现在再看这种摆法似乎也没有多少可以改进的空间。

至于装置细节,通量阳极电镀和熔炉无需任何解释。
磨粉富集模块中,磨粉主要是用SAG磨粉机(那时候还没意识到其性能问题),以及Tech Reborn的大型工业磨粉机。富集很明显是MEK的富集仓了。
这个整合包中铝土矿走TR磨粉机的产率比较划算,因此磨出来的铝土矿要送回GT进行电解。
富集仓的物品分发使用传统方案,两种磨粉机的分发使用ME接口方案。
这就导致一个问题,当机器阵列没有满载的时候,这些机器会时不时地工作和闲置,其表面外观也会不停变化,从而导致非常频繁的区块更新,然后无谓地消耗CPU性能。
如果满载的话……这个方面的问题倒是没有了,但是会带来物品堆积的新问题。
后来的设计也未能根除这个问题,只是把这些模块放进压缩机器或者平时不会光顾到的地方。
2020-12-09_16.08.32.png
GT部分还是经典的四步法。
物品分发也是传统方案,从一个标记有矿石的ME接口中抽取。由于矿石来源主要是环境科技,种类有限,暂时也用不上无需标记物品类型的设计。收集侧还是ME管道,虽然那时候还没有ME管道的概念。
2020-12-09_16.08.04.jpg
电解部分也是个比较有意思的设计——虽然多少有点取巧。
2020-12-09_16.10.24.jpg
(图中的右边一排是熔炉。超过8个能连在一起是因为下面有一根致密线缆。左上角是洗矿机第2组。左下角的是电解机。)

我们知道,在默认情况下,物流输出的东西会倾向于堆叠在一起。伺服器默认的最近容器优先也是如此。电解机的输入侧只有1个固体槽位。当距离伺服器最近的一个电解机里有物品A时,抽取出来的物品A都会进这个电解机里,而不会往别的电解机里跑。然后这个电解机里的物品A凑够了数,电解机就能开始工作了,剩下的物品还会继续“吸引”着未来的物品A。

图中差不多就是这种情况,一个伺服器用一根管道,以递增的距离到达各个电解机。伺服器抽取的物品会倾向于在距离它比较近的电解机堆积,并在凑够了数的情况下开始工作。这样在最好的情况下,每个电解机都能处理一种不同的物品。即使电解机有部分卡住,也会在部分机会恰好清空其中内容来让别的物品进入输入栏。

当然实际操作中的情况不会那么理想。对于物品B,它可能会在物品A之后被抽取,并到达第二个电解机。然后过了一会第一个电解机刚好清空而且物品A断货,后面的物品B都跑第一个电解机了,但是第二个电解机里的物品可不会凭空转移到别的机器里——第二个电解机的物品B只能孤独地等待其他的同类了。然后物品A又有货了,现在它只能进第3个电解机……总之这种用法的实际表现会非常动态,难以预测其吞吐量。

由于环境科技矿机刷出来的部分物品产量会非常高,这里是铝土矿和锂云母,于是我分配了4个电解机专门用于这2种物质,就是电解机那里的单独一组,相信你已经看到了。

另一个值得一看的是GTCE默认配方的钛线。
OmniFactory的配方能完美循环,默认的配方就不行了。碳,镁,氯都有净损失。
经过计算得出每生产一个热钛锭,净损耗2碳1钠(粉)0.5镁0.5氯(桶)。

不过当时并没有这么去计算,装置是按储量来控制的——钠和镁不够了就去主网络拿盐和橄榄石(环境科技刷的,正好别的地方完全没用)来电解。
2020-12-09_18.42.36.jpg

这里的主要问题是如何整份投放原料。1个金红石要搭配3个碳粉,2个氯化镁要搭配一个钠。现在我们知道最方便的解决方案是脉冲漏斗,不过当时的我可不知道。于是我又拿出拿手的rftools control做了一个“漏斗”出来。
article4.chapter4.img19.v2.png
顺便再说说题外话,这个石化系统。这个版本的GTCE有个bug,重燃料裂化蒸馏出轻燃料,然后这些轻燃料再裂化蒸馏还能得到重燃料,并且得到的比原先更多。
于是我们可以用这个循环来无中生有石油。

具体比例的测算比较麻烦也不好匹配,于是我继续祭出我的祖传自适应装置——轻燃料存量多少对应开启多少个裂化轻燃料蒸馏塔,重燃料存量多少对应开启多少个裂化重燃料蒸馏塔。
这样无论两边需要的蒸馏塔数量比例如何,在这个正反馈循环到一边满载之前,它都能自动调整至合适的蒸馏塔配比并稳定运行。
在流体交换的网络里再设置下两种燃料的上限值,溢出的丢到主网络,再处理一下副产,这样就可以享受一个免维护刷石油机带来的便利了。
2020-12-10_00.23.52.jpg


2020年12月10日 更新内容到此。

-------
哎呦,累死我了。我得歇很多天。






评分

参与人数 1RF +5 Vis +2 收起 理由
light000 + 5 + 2 辛苦了!!!

查看全部评分

发表于 2020-8-7 15:06:54 | 显示全部楼层

回复 | 举报

本帖最后由 craftkuro 于 2020-12-10 02:05 编辑

趁着审核中没人抢楼,再占一楼吧。这个内容实在太多了


计划写但是还没写好的包括:

5 特定种类物品合成
5.1 TE高级掉落物
>暴雪 岩石 狂风
5.2 TE高级线缆
5.3 经验
5.4 EIO合金
5.5 IC2冷却液
5.6 末影珍珠
5.7 硫酸钙
5.8 NC的几种粉
5.9 GT小撮粉合并



6 <卖关子>
毕业设计之三。之一见篇一:能源系统
为什么不用其他大佬的断开接口的方案?
一个是我们发送物品的速度真的很快,红石控制的潜在延迟问题可能不稳定
另一个是个人偏好,不喜欢网络组件的增加和移除,尽可能通过软的方法解决问题。

7 <卖关子>的应用:严谨合成
7.1 少于9种物品参与的严谨合成
7.2 超过9种物品参与的严谨合成
7.3 压缩空间机器
7.4 没有装备参与的聚合合成
7.5 上古遗物 – <卖关子>全配方聚合合成 – 毕业设计之二
7.6 GT装配线


8 能源生产
8.1 TE能源炉
8.2 ET太阳能
8.3 IC2流体堆
8.4 NC裂变堆
NC核电设计>
Planner设计图
所需材料
>需要非常史诗的合成处理器
8.5 冲击1M RF/t
8.6 冲击10M RF/t
8.7 冲击100M RF/t


9 农业
9.1 活塞农场

10 分包合成(实验性内容)
11 <卖关子>(实验性内容) - 毕业设计之五

rftools_control_dustTiny_merger.json.txt

16.5 KB, 下载次数: 1

发表于 2020-8-7 18:20:49 | 显示全部楼层

回复 | 举报

催更!催更!催更!
看了启发很大
发表于 2020-10-13 23:16:24 | 显示全部楼层

回复 | 举报

........对于我这种没有GT基础的人来说还是太深奥了....
做什么都会后悔,这就是人生
发表于 2020-12-7 00:55:13 | 显示全部楼层

回复 | 举报

干货必须顶!顺便一提 常在自动化的部分可以用标准发信器加触发总线的方式减少频道占用 只有合成进行的时候占频道 平时不占
发表于 2020-12-10 14:45:04 | 显示全部楼层

回复 | 举报

全麦 发表于 2020-12-10 14:45
干货必须顶!顺便一提 常在自动化的部分可以用标准发信器加触发总线的方式减少频道占用 只有合成进行的时候 ...

触发总线确实是个很有用的工具,不过它不适合用在大型网络上。
我们这边的基地的主网络通常非常庞大,重新计算一遍频道通常需要超过10秒。
这种时候触发总线的开关,会导致非常大的服务器性能消耗,反而得不偿失。

对于设备很少的小型网络,频道计算可以很快完成,这时候用触发总线可以实现更加灵活的设计。
发表于 2020-12-12 01:48:07 | 显示全部楼层

回复 | 举报

craftkuro 发表于 2020-12-12 01:48
触发总线确实是个很有用的工具,不过它不适合用在大型网络上。
我们这边的基地的主网络通常非常庞大,重 ...

学习了
发表于 2020-12-14 10:04:56 | 显示全部楼层

回复 | 举报

本帖最后由 全麦 于 2020-12-21 21:00 编辑

关于事物合并,我有个用合成存储器、触发总线和假合成将大量物品打包在合成存储器中实现瞬间传输指定数量和种类物品的想法:
原理:
1、当执行合成任务时,合成原料会被先发送至合成存储器的缓存中,然后才被输出至对应的ME接口;
2、触发总线可以控制线缆的通断,因此可以控制合成存储器所属的网络;
3、当合成CPU的多方块结构发生变化时(例如破坏一个合成单元),其进行的合成任务会被取消,物品会被发送回网络的存储设备;
实现思路:
1、打包:编写所传物品的假合成样板,例如想一次传输(64*9)*(64*9)个木板,则这样编写样板:

木板64 木板64 木板64     沙子1
木板64 木板64 木板64 → 空
木板64 木板64 木板64     空

沙子64 沙子64 沙子64     石头1
沙子64 沙子64 沙子64 → 空
沙子64 沙子64 沙子64     空

将其放在一个ME接口中,但这个ME接口不贴任何容器或设备。当合成1个石头时,(64*9)*(64*9)个木板将被发送至合成存储器中,而由于没有合成设备,木板会被滞留在合成存储器中。利用标准发信器+合成卡实现下达合成任务的自动化。

2、转存:利用标准发信器检测网络中的物品数量变化,控制合成存储器与矿物处理专用网络的连接断开,与主网络的连接接通。

3、解包:令粘性活塞推拉一次合成存储器的一个合成单元,取消此合成任务,木板被发送至主网络的存储设备。
发表于 2020-12-21 19:57:21 | 显示全部楼层

回复 | 举报

全麦 发表于 2020-12-21 19:57
关于事物合并,我有个用合成存储器、触发总线和假合成将大量物品打包在合成存储器中实现瞬间传输指定数量和 ...

合成存储器还有一种玩法 那就是瞬间把网络里的数据形式的物品以掉落物形式输出到外部 方法很简单 也是编写假合成 将物品发送至合成存储器中 然后将其打爆或用活塞推拉 里面的物品会直接掉出来
发表于 2020-12-21 20:19:27 | 显示全部楼层

回复 | 举报

12下一页
百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除教程作者自定义规则的文章, 及未授权的站外图片/链接以外的所有开放公开编辑的内容, 均采用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表