本篇教程由作者设定未经允许禁止转载。

前言

最近在玩ATM9(All The Mod 9)整合包,在完成mek这部分的任务时突然心血来潮想再做一次五倍线试试(平时玩mek因为五倍线的繁琐程度比四倍线高出不少所以基本不碰),然后先是尝试用mek自己的设备,不出意外还是因为清洗机到结晶器之间的分配问题而头疼,于是在百科查阅了有关XNet做五倍线自动化的教程:运用XNet一根线完成MEK自动化运用XNet实现高速五倍线

但是在我实际搭建时,却发现了xnet默认配置下的硬伤——速率太低了。之所以会碰到速率瓶颈,主要原因是1.18之后原版加入了粗矿和粗矿块,而粗矿块在化学溶解室内一个工作周期可以转化为6000mB的污浊矿物浆液,而对于化学结晶器,工作周期是溶解室的两倍,要对应跑满则需要配套60台结晶器,6000mB在10tick内平均分配到30/60个结晶器内因xnet的限制导致无法做到,并且由于结晶器过多xnet需要多个控制器来做分配,也进一步增加了方案的复杂程度。

就在我准备放弃处理粗矿块的方案改用粗矿时,一位群友让我试试SFM(Super Factory Manager)这个模组,它的前生是Steve's Factory Manager,我曾经也在1.7.10的部分整合包见过,只是并没有去做相关的了解,于是这次抱着试试看的心态,去学习尝试了一下,最终竟然被我倒腾出来一套让我非常有自信的最佳方案。在最近终于在生存完整实装了矿物生产处理线之后,想了想到百科这里写下了我的第一篇教程。

下图是我的生存存档mek的部分设备展示:

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第1张图片


使用模组

  1. [Mek]通用机械

  2. [SFM]超级工厂管理

  3. RF工具箱(可选)

  4. [CB]懒人厨房(可选)

模组版本以整合包版本ATM9 0.2.48内为准。


了解SFM超级工厂管理

Super Factory Manager,与其前生Steve's Factory Manager功能大体一致,但是后者是图形化界面,相对于前者可能会更容易上手一些,前者则需要手动敲代码来让设备工作。这里推荐先去阅读站内的在实践中成为工厂管理大师这篇教程以了解详细内容及工作原理,下面仅是一些简单的说明。

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第2张图片

图中左边为Factory Manager,是整个模组的核心设备,右边是用于扩展Factory Manager连接范围的Inventory Cable,需要与Factory Manager或Inventory Cable六个面有任一面相连才可起效,连接形状没有限制,可任意发挥。

除此之外我们还需要Label Gun和Factory Manager Program Disk,Label Gun用于标记连接到Factory Manager的设备,Factory Manager Program Disk则是用来记录代码。

如图在Factory Manager旁放两个箱子,并使用Label Gun给两个箱子打上不同标签,在图中a箱内放置一组物品

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第3张图片

打开Factory Manager的GUI,放入Factory Manager Program Disk,然后点击GUI左边的Edit进入代码编辑界面,输入图中的代码

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第4张图片(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第5张图片

点击完成,此时可以发现Factory Manager的state为running,说明代码已经开始运行,然后用Label Gun右击Factory Manager将标记设备的信息传入,即可发现箱a内的物品已经传输至箱b。

然而这段代码中最上面的20ticks是指运行代码的周期,20ticks已经是最小值,再小会使state变为Invalid Program,而有些情况下20tick实在是太久了,会有诸多限制,这时候要怎么办呢?答案是可以把20 ticks改为redstone pulse,使Factory Manager根据接收到的红石脉冲来决定运行周期,如图

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第6张图片

这时候,根据原版特性,2游戏刻=1红石刻,Factory Manager的工作周期最短则可以达到2ticks。这也是教程接下来所需要用到的。




五倍线基础相关

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第7张图片

站内关于五倍线的教程也不少了,我相信很多人头疼的地方就是最开始输入的这三台机器,尤其是清洗机到结晶器之间浆液的分配问题,mek本身似乎是没有完美均分方案的,我曾经也都是直接做矿物专线处理来回避掉卡浆液的问题,但是治标不治本。

这三台机器的工作周期分别是10ticks,1tick,20ticks,而实际处理速度上,1.18原版多出粗矿和粗矿块之后,化学溶解室每周期有三种输出,原矿1000mB,3个粗矿2000mB,粗矿块6000mB,化学清洗机满速度升级每周期为256mB处理量,消耗5x256=1280mB的水,化学结晶器满速度升级每周期一次性消耗200mB产出1对应矿物结晶,而如果要让清洗机和溶解室配套,溶解室处理原矿和粗矿时都可以只配上一台清洗机足矣,而对于粗矿块,却需要2.3台清洗机去配套,所以设计方案中我决定使用3台清洗机去处理矿物浆液。同时,根据溶解室的输出量可得出,要匹配上处理速度所需要的结晶器数量分别为10,20,60台。于是结晶器决定为使用60台。

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第8张图片

而后面处理矿物结晶的设备部分相对简单些,这些设备的工作周期也为20ticks,要匹配60台结晶器的产出速度则需要对应各7台终极工厂(但是会有一台空闲3个格子)或者12台高级工厂。

顺带一提化学溶解室,压射和提纯设备都可以加上气体升级,将气体升级上满时才可以在JEI查到的消耗数值左右浮动(对是浮动不是固定值)。




搭建SFM五倍线自动化

这部分开始则是讲解具体操作,五倍线中所使用的硫酸,氢氟酸,氧气制取这里直接使用对应创造储罐代替,生存实装时则需要自己计算好消耗量进行匹配。教程中涉及的方案硫酸理论消耗量约为20mB/t(200mB 10ticks一周期)为浮动值,氢氟酸与氧气理论消耗量均约为600mB/t(12000mB 20ticks一周期)为浮动值,建议制取时都略大一些以防止意外情况。以及请保证给产线的供电充足,不包含硫酸,氯化氢,氧气等气体制取在内的单纯五倍线处理部分耗电量请留出不低于892kFE/t。

准备工作以及化学溶解室和清洗机部分

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第9张图片

如图,因为设备只需要贴上Factory Manager或者Inventory Cable即可视作连接,可以随意摆放,Factory Manager程序内可以编写从哪个面访问设备,只需要设置一下mek的设备的输入输出面即可。由于Factory Manager访问mek绝大多数设备都需要指定访问面,这里为了方便统一管理和代码的编写,设备内设置统一为上进下出,Label Gun给化学溶解室打上标签dissolution,硫酸供应设备为h2so4,能量供应设备为energy,化学清洗机为washer,清洗完的浆液缓存罐为washer_buffer(加这个缓存罐是为了防止多种矿物处理时卡浆液情况发生虽然可能是多虑了?

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第10张图片

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第11张图片

能量供应部分由于个人强迫症(欸嘿XD),设置为上面输出,弹出关闭,另外Factory Manager其实也可以传输FE能量,但是这里是由于清洗机能耗太高(204.8kFE/t)而能量缓存为320kFE,连2tick的满载工作都支撑不了,所以清洗机为独立供电,同理由于清洗机内部液体缓存为10000mB,接下来的方案中将会使Factory Manager以10ticks为一个周期运行代码,1280x10=12800mB也超出了缓存,所以独立供应清洗用水。这里清洗用水供应上使用了懒人厨房的水槽,也可以用别的mod中的水源代替,或者使用mek的量子传送装置从别的地方将mek泵抽的水运输过来也是可以的。

ps:能量供应部分如若使用[FN]通量网络,Factory Manager无法直接从其能量接入点获取FE,但可以从与其连接带有FE缓存的线缆对应连接的方向获取线缆内部FE来给其他设备供能。

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第12张图片

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第13张图片

这里我使用了RFTools的计时器(timer)来输出红石脉冲,使用原版或者别的模组的方法控制也可以,但是这个方案的红石脉冲周期需要设置为10游戏刻,原因见结晶器部分。

下面展示化学溶解室及清洗机在sfm内的代码

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第14张图片

这段代码的意思是:从h2so4的底面输入mek的硫酸气体,并将硫酸气体输出至dissolution的顶面,然后从dissolution底面输入污浊矿物浆液,向每一个washer顶面输出并尝试保持2000mB污浊矿物浆液,再从每一个washer底面输入纯净矿物浆液,输出纯净矿物浆液至washer_buffer的顶面。

此时可以尝试手动向化学溶解室加入矿物,来测试过程中是否存在问题,如果没有意外则目前最终会得到对应数量的纯净矿物浆液于washer_buffer内。

结晶器部分

于是来到了这个让人头大的部分,根据前文,要匹配满载处理粗矿块的化学溶解室,需要60台化学结晶器,可以如下图摆放,每台都需要打上crystallizer标签

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第15张图片

然后为了测试,还可以给一个容器作为结晶器输出产物的缓存crystallizer_buffer

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第16张图片

接下来便是这篇教程最核心的部分之一:浆液的分配

矿物浆液分配部分

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第17张图片

如图,红框内是对于结晶器的代码,前两行的input/output是用于给结晶器供能,结晶器本身缓存足够,耗电速度也不大,所以可以直接使用Factory Manager转移FE能量供能,而中间对于浆液分配,我用了sfm的if循环去判断,washer_buffer has >= 1000是考虑到如果这个产线输入了单个原矿,最少的浆液产出单位数量则是1000,然后当满足该条件时,将washer_buffer内的浆液输入,再次进行if判断,每个结晶器<200mB浆液时才可将输入的浆液输出并尝试保持200至单个结晶器内,最后将crystallizer内的晶体输出至crystallizer_buffer存储。

关于这部分,最初设计上是打算每个结晶器内保留400mB浆液,而代码的最开头不使用红石脉冲直接使用20ticks循环来控制,但是测试时发现因不明原因这么做有一定概率仍然会导致结晶器内卡浆液分配不均,最终选择了将Factory Manager的代码运行周期设定为与化学溶解室一致,以此为基准运行速度去调整别的设备。

晶体处理及最终输出部分

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第18张图片

浆液分配的难题解决了,那么就来到了最后一段,如图,压射、提纯、粉碎、富集、熔炼工厂标签分别为injecting,purifying,crushing,enriching,smelting;给压射和提纯工厂供应氯化氢及氧气的设备标签分别为hcl,oxygen;最终输出产物为final_output。其代码如下

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第19张图片

首先需要在之前结晶器供电的代码后面增加这几个工厂的标签,用逗号隔开即可

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第20张图片

然后这是对于压射工厂和提纯工厂消耗气体供应的代码

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第21张图片

最后这里是将晶体输入进这个工厂处理线的代码,output后面使用retain 9是为了保证每个工厂一个格子对应一个物品处理,以达到最大效率。

至此五倍线自动化搭建完毕。

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第22张图片

然而整体占地还可以优化一下,最终便可以做到这套五倍线方案的体积为3*10*6,如下图

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第23张图片

(1.20.1)一种基于SFM(超级工厂管理)的MEK五倍线自动化通用矿物处理方案-第24张图片

整理好完整的这套方案的代码如下:

------------备注------------
--所有设备均使用上进下出的设置方式且关闭弹出,仅energy例外为上出下进开启弹出以供电线缆
--计时器部分需要设置为10 tick一次脉冲
--计时器可以使用别的mod中的方式替代,但该方案仍然需求10tick一次周期的红石脉冲
--请保证供电量充足再运行该方案,除去工作气体制取能耗外,该部分最少不低于892kFE/t
--清洗机由于其缓存容量小于其10tick工作的消耗量,故独立供电和供水
--化学溶解室供电因方案摆放位置原因,可选择独立和在代码中加入使用控制器供电
--以下为标签列表:
--工作设备标签:dissolution,washer,crystallizer,injecting,purifying,crushing,enriching,smelting
--能量供应标签:energy
--缓冲设备标签:washer_buffer,crystallizer_buffer
--工作气体设备标签:h2so4,hcl,oxygen
--最终产物输出缓存设备标签:final_output
-----------分割线------------

every redstone pulse do
--能量传输
    input forge_energy:*:* from energy top side
    output forge_energy:*:* to each crystallizer,injecting,purifying,crushing,enriching,smelting top side
--硫酸
    input gas:mekanism:sulfuric_acid from h2so4 bottom side
    output gas:mekanism:sulfuric_acid to dissolution top side
--污浆液
    input slurry:*:dirty_* from dissolution bottom side
    output retain 2000 slurry:*:dirty_* to each washer top side
--纯浆液
    input slurry:*:clean_* from each washer bottom side
    output slurry:*:clean_* to washer_buffer top side
--分配浆液
    if washer_buffer has >= 1000 slurry:*:clean_* then
            input slurry:*:clean_* from washer_buffer bottom side
            if every crystallizer has < 200 slurry:*:clean_* then
                output 200 retain 200 slurry:*:clean_* to each crystallizer top side
            end
    end
--晶体缓存
    input *crystal* from each crystallizer bottom side
    output *crystal* to crystallizer_buffer
--压射装载氯化氢
    input gas:mekanism:hydrogen_chloride from hcl bottom side
    output gas:mekanism:hydrogen_chloride to each injecting top side
--提纯装载氧气
    input gas:mekanism:oxygen from oxygen bottom side
    output gas:mekanism:oxygen to each purifying top side
--压射
    input *crystal* from crystallizer_buffer
    output retain 9 *crystal* to each injecting top side
--提纯
    input *shard* from each injecting bottom side
    output retain 9 *shard* to each purifying top side
--粉碎
    input *clump* from each purifying bottom side
    output retain 9 *clump* to each crushing top side
--富集
    input *dirty* from each crushing bottom side
    output retain 9 *:dirty* to each enriching top side
--熔炼
    input *dust* from each enriching bottom side
    output retain 9 *dust* to each smelting top side
--产物输出
    input *ingot* from each smelting bottom side
    output *ingot* to final_output
end

其他

有一些前面还没提到的问题,在测试过程中还发现SFM的input和output如果没有指定过滤器,则有可能会把前面没能输入进对应位置的东西往下传递,一直找到能输入进去的位置为止,导致我在测试多种矿物混合处理时会有晶体传输到最终输出位,而对应的解决方案是,把有可能被误传输的位置,全部限定上指定物品/流体等,例如结晶器输出的晶体就可以使用*crystal*来模糊匹配所有对应的物品。实际上在别的自动化设计过程中也经常会出现这个问题,这是SFM的一个不足之处。也因为这一点,化学溶解室的矿物输入前文一直没讲,个人是比较推荐从外界分类处理好之后直接输入这条产线,之后等待产物输出就好。

关于方案中的能量、气体供应、缓存等部分,其实也都可以使用mek自己的量子传送装置替代,可以将不同的部分分离开来处理,来做到模块化,唯一要注意的是使用SFM控制时需要对mek的设备指定访问面才可起效。而使用label gun标记的标签,其实名称随便起都是可以的,只要代码里对应上,自己能分得清就行。

以及这套方案做出来之后,我又有个想法想要能够在粗矿和原矿也充足时对它们也能做满负载的处理,也就是增加化学溶解室的数量,来匹配上非粗矿块情况下有空闲结晶器的情况,不过个人时间有限,以及一般原矿能输入的也会有对应粗矿类可以处理,所以暂时没有去研究改进方案了。

最后因为这是我第一次写教程,如若有不严谨/错误之处欢迎指正,也欢迎各位站友提问和改进这一套方案的设计,谢谢大家!