SP小木鱼 SP小木鱼
关注数: 8 粉丝数: 75 发帖数: 14,252 关注贴吧数: 27
随机数生成器 根据控制信号生成一个随机数。 输入R信号为1时,生成一个随机数,持续输出该随机数。 输入R信号为0时,关闭生成器,持续输出为空。 当前设置生成范围为0-9,可根据需要在左下角常量箱子增加。也可以按个位十位的方式分别生成。 电路延迟为6tick。蓝图代码: 0eNrVWNFu2zYU/Re+jg5MSZQsA91H9DUNDNliEqIWpVF0UiMwsGEYtodg2bAOQ7sBeRraDig6YMMQpMX2M7GTPvUXdknVsuzGUzgF8Qa/XF2R514e8h5e+Qj1hyOWSS4U6h6hmOUDyTPFU4G66O3Tk9lP57Pvf718fDr76pur48+nP/7+7s3Tdit8IO7fI4X74uzTi7NfyrHv3hzPjj+7fP3y6s/vpl+eX736uXylJ7WnX/z29oeXxdTpk+crwy/Ozi9fnD8Q09d/XP116is+eIgw4oNU5Ki7fYRyvieioU5VRAmDHGM24DGTrUGa9LmIVCrRBCaImD1CXTLZwYgJxRVnxXzzMO6JUdJnEgbgOU7CYj5KWmzIBkryQStLhwwiZ2nOCzaOEAC2aMffohiNwXScYItOJvgDUAf/Q3I1kBSSh8UqmQ57fbYfHXCYYzbGIPXgXWxm59pbfYLF7XKZq96CIjXOdBYHXKoReMq0ihGtSIzVPhd7mrCcaaybz42ZGCOTa5JF0qysiz5Gmu90pLKRWt2uG+cy2ZlcR6pbzogkV/sJg6NRx2tQz+sCbIVaSy5ZNNiv8KjPq4p0TbWBkIwBQ0VJfYTmBN0cm4vdFHi5jhWvHDuPWMcJXXDiba1jBVZRErGwYT/ndYWBn6FictV7k1OD0SfwDlYBfpHKxIxbOkf3jGOk6QPMJHrUmz85hAbUISEU9ppzQm2Lz9tM8Q32GUjbhxWEl4B6gqnDVD40ASWLUVfJEcNoTzIGa9iNhjmb3ELRwZvVQAa7jKTDritNv4HeuRvSu8a6FaeHohVJmR4WcNm4OKS9XZkmPS4Aar4/17MWLNIzl04qLeRsHW1VqZGRiNMEXRe706BI7mTHVtmdqyn512e9Um/WWxXa0kU3TNeSlm7gbJN2A0kg/1dJGGXNSCO2pAWbIe2/cHWxAyZv5fIiTgMtvBPWl49VqYS313s3kUbiNtDGDdDXUBmblrh9v76ocRKafj3msujIzTV+l9172651b2sC3oM7teDE8rugAu7Wgjt24E4F3KsFd+3A3Qo4rQX37MC9CrhfC07twGkFPKgF9+3A/Qp4pxY8sAMPKuBhLXjHDrxTAdeNTw16aIcerv3SJdRaTPxVMblL+bhvW+F64RjxvJcu9QuHIIA69DbBBDvY3cHbDlhuadH3lv55YLngC4zPAw/FDlgUfB3j88GCbSPGdHForAAGQj+mZ3fgfeHsgDM0Pj0eA/+ksCGAW9g6JVLkRHRyIPg6GtFpzcfotMD2dmAtXLEElr34DxajYdRncAeh6cmr2dfPyv9OpyffXj4+nT55DkOg98nNvlLfCb0wpJ7X9lzqTyZ/Awi9kEA=
自动编号问题 问题描述: 存在任意多个信号来源,每个信号来源的信号数值均为1。 信号来源可能依次发出信号,也可能同时发出信号。 需要对这些信号来源按顺序编号,顺序不重要,但要求这5个来源分别记住自己的编号,不得重复。 因为非同时发出信号问题很好解决,这里主要讨论同时发出信号的情况。 功能用途: 关于实现这个功能有什么用。 比如工厂有5台组装机闲置,而我有3个生产任务需要进行分配,如何分配给这5台组装机呢?假如我对5台组装机进行了编号,那么只需要指定1-3号组装机进行生产即可。由于闲置组装机数量是动态的,并且要求可以任意扩展,我不可能手动对组装机进行编号分配,所以需要一个自动的动态分配编号功能。 假设:同时有5个铁板信号来源,那么需要把5个铁板信号来源分别编号为1-5。 我的思路是采用申请机制。 首先,由编号控制器发出编号1的信号,5个来源接收到后分别发出申请。为了避免所有人同时申请的情况,需要一个随机数发生器,这个很容易实现,暂不讨论。这里直接设置5个来源分别产生一个随机数,然后选择在该随机数的tick后发出申请信号,并将申请信号接入总线。 然后,所有来源同时检测总线上该编号的申请信号大小。 若数值为0,说明无人申请,所有人继续申请。 若数值大于1,说明有多人同时申请,该次申请作废,所有人继续申请。 若数值为1,说明当前仅有1人申请,则该编号归申请人所有,该申请人用锁存器记住自己的编号,并停止后续申请。同时控制器停止该编号的后续申请,继续下一个编号。 直到所有编号均被申请完后,就完成了对所有信号来源的编号。
全电路控制的火车调度问题 现在的原版铁路中断调度存在一个问题,就是不能用信号设置车站名,这样就不能根据需求来自动发车。 比如我电路板厂需要运铁板铜板,那就必须设置铁板卸货站和铜板卸货站2个固定的站台,这样不能通过电路调整,比较麻烦。 我的想法是干脆直接全电路调度,不分具体的物品。 我的思路是: 比如需要运输电路板,需要电路板的卸货站在当前车站无车的时候通过红线铁路信号网发送1tick的电路板脉冲信号,当装货站收到红线的电路板信号后,确认自身是否有装满电路板的火车等待发车,如满足条件则用绿线铁路网信号发送1tick的电路板脉冲信号,同时允许发车。卸货站收到绿线1tick的电路板脉冲信号,则启用该车站。 另外,为了避免发车冲突,信号网络必须分时处理,轮询处理不同的信号。也就是每tick只处理1种货物的运输请求。虽然有极限,但也完全够用了。 由于卸货站完全同名,为了不让火车发往其它车站,需要保证发车时所有启用的车站均为已满状态,仅需要该货物的车站有闲置位置。那么就需要在火车离开车站时,立即关闭该车站,直到前面说的收到绿线的确认信号为止。由于火车前往目标站台过程中会占用列车数量限制,所以不会影响其它车辆发车问题。由于不采用中断机制,火车在发车瞬间就确认目标站点,所以只要信号网络不出问题,火车目的就会和电路信号完成匹配。 如果存在多车站调度问题,则自动进行优先级分配。比如红线电路板信号为3,表示当前需要3辆火车运输电路板。但是绿线电路板信号为2,当前只有2辆火车准备就绪,那么卸货站只启用2个车站。可以通过强制分配优先级进行处理,也可以通过信号网沟通协商。但沟通协商会占用总线带宽,不过这种协商不必每次进行,可以很长时间进行一次优先级协商。 做了个简易版的,测试应该是可行的。
简单无脑的自动配方组装机(自动蓝箱需求版) 之前做的一版需要蓝箱子需求所有材料,比较麻烦,不好管理。 重新做一版自动根据配方需求材料的版本,但是这样就需要多用一点运算器。 我的设计主打的就是一个简单无脑,稍微懂一点电路就能看懂。其实主体电路还是很简单,主要是组装机需要同时需求和设置配方,要处理信号分离问题比较烦人。 先解释一下主体电路。 红圈部分是库存管理,蓝圈部分是优先级筛选。 红圈下面就是个大于0的判断,排除掉无人机平台产生的负数。 库存管理我优化了一下,可以根据常量箱子设置的数量自动管理上下限。 同样是每种物品独立管理,互不干扰。类似这样,设置的数量是上限,库存达到该数值停止生产。下限我做了上限除以4的处理,也就是低于上限的1/4,则启动生产。具体电路我之前帖子解释过了,就不重复解释了,只是把以前的上限H和下限L信号改成每个信号,分别接入。 看下组装机的电路,也极其简单。 每个组装机2个算数运算器。左侧运算器从组装机绿线接出,乘以4运算,表示需求配方4倍的材料。输出信号到蓝箱子设置需求。右侧运算器啥也不干,只是为了分离信号,让每个组装机独立运行,红线连起来就行了。常量运算器按照我之前说的分级设置,这里0级表示需要从外部供应的材料。 我把需求量比较大的材料和需要液体的都放在外部供应了。 设置库存的时候注意中间产物数量不能太低,否则会材料因为库存不足导致反复切换配方。尤其是组装机越多,材料缓存需求就越多。我只设置了一部分。添加产物只要保证需要低级材料的产品,放在高一级里就可以了。 需要再高级的,电路直接复制2、3级的粘贴,输出重新接到最高级就行了。
由于每个车站都设计足够大的车库会产生极大的空间浪费,为了提高车库利用率,可以设计专门的集中式车库。 但是,因为同名车站问题,导致集中式车库存在频繁的进出车问题,频率高了会导致堵车,于是又不得不设计极其浪费空间的高吞吐量的车库。 所以,我综合两种情况,设计了分布式小车库加集中式大车库的布局。 红圈部分是在卸货站出口设置2个旁路车站,作为小车库。然后独立铺设一个大车库,我后面通过极其简单的电路调控,大车库吞吐量很低,可以高密度建设。但是还需要解决优先级问题,需要优先发小车库的车,直到所有小车库都空以后再调用大车库的车。 大车库只需要推送信号,然后把优先级设置为0。小车库需要同时推送和读取信号,优先级只要>0就行了。然后设置车库中断,C=0时进行发车。 这里我设置的是<=,为什么要小于号后面说明。但是火车站同时读信号和推送信号会冲突,我单独发了一个帖子介绍火车站信号读推分离问题,不明白的可以去看一下,这里直接说解决方案。 火车站红线接入算数运算器,乘以-2,然后绿线返回给火车站。 只有小车库需要这样做,因为大车库不需要读信号,不存在冲突问题。OK,到此问题就都解决了。 接下来解释一下为什么中断要多一个小于号。 我实际上是用绿线信号消除红线信号来达成分离效果的,但我们一般是用多个卸货站,而我不希望用铁路信号网传递
新版火车布局,及采用通配信号的中断设置分享 先大概说明一下我的方案。 每辆火车均可以从任意物品装货站装载货物,装满后前往该货物的卸货站卸货。 卸货时,若卸货站已满,则在候车区等待。 装货时,若装货站已满,则空车进入车库等待。 该布局可以集中式生产,也可以分布式生产。车站配置: 注意车站名称设置,用铁矿、铜矿等图标方便后续中断使用通配信号。 卸货站需要推送信号,列车数量根据候车区大小设置。装货站需要读取列车数量C,限制列车数量根据车站设置,有候车区可适当增加限制。车库需要推送信号,限制列车数量固定为1。火车中断设置: 火车默认进入车库。装货中断:通过电路信号管理,有电路信号并且空车允许发车,目标为装满车厢。 信号参数:根据车站推送的电路信号变化。 例如:火车停靠站台时,推送铁矿信号至列车,该参数变为铁矿,火车检测铁矿信号>0,并且自身车厢为空,则前往名为“铁矿(图标)装”的车站装满车厢。卸货中断:车厢存有任意物品则前往该物品卸货站卸货。 物品参数:检测到车厢存在物品,则该参数自动匹配为该物品。 例如:车厢中有铁矿,该参数变为铁矿。火车检测铁矿数量>0,则前往名为“铁矿(图标)卸”的火车站清空车厢。记得把火车加入编组,方便管理。接下来是信号设置: 铁路信号网中,用物品信号的数值大小,表示需要几辆火车前往装货。 只需要在装货站采用电路管理信号。 电路连接: 方便说明,以下图片中运算器从左到右编号1-4。 所有箱子 连接至 4号算数运算器输入。 4号算数运算器输出 和 常量箱子 接到 3号选择运算器输入。 3号选择运算器输出 到 2号算数运算器输入。 火车站和2号算数运算器输出 到 1号算数运算器输入。 1号算数运算器 输出 接入铁路信号网络。 为了方便看清连接我调整了下方向,几个运算器输入输出方向是不一样的,看后面一张方向图。常量箱子配置信号L,为当前车站的列车限制数量,该信号可以接入车站,用来限制车站的列车限制。 我没有接,但建议接入,方便蓝图参数化。4号算术运算器,读取所有箱子存货,除以8k表示存货可供几辆火车运输的。 8k为一辆火车的可以运输的铁矿数量,根据车站装运的不同物品进行调整。 这里为了简化问题,我没考虑均分问题,可以自行修改电路。3号选择运算器,铁矿为例,目的是获取L和货物信号中获取较小的那个,作为最大需求火车数量。 也就是最大需求火车数量不得大于车站的列车限制数量。 比如: 铁矿为2,L为1,那么此时输出为 L:1。 如果相反,铁矿为1,L为2,则会输出 铁矿:1。 注意排序为升序。2号算数运算器,目的是将L信号转化为货物信号,铁矿为例。1号算数运算器,用最大需求火车数量减去已前往/停靠的火车数量,得到当前还需要的火车数量。最后,保存蓝图时记得参数化。注意,装货站信号管理是必须的,否则火车多了必然堵车!
1 下一页