Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

10 一月

廣告

作者:sunny白水004

來源:缺氧吧

在聖誕打折時入了這個遊戲,被深深地迷住了,各種資源的迴圈利用、氣液固的轉化、溫度控制等等非常有意思,尤其是其中的自動化部分,研究起來真是樂趣無窮。下面分享我的一個研究成果,用門電路實現嚴格依序的過程迴圈。

先說一下事情的緣起,在建造汙水處理廠時發現,污水池裡繁殖了大量細菌,即使經過淨化器處理也無法去除。開始我以為帶菌淨水只要不喝,拿來電解制氧就沒事,沒想到這神奇的外太空細菌連電解都殺不死啊,隨著氧氣在基地裡到處飄,實在不能忍。後來發現用液體加熱器把水加熱到75度以上就可以滅菌,於是設計了這樣的系統:

左邊是帶菌水,經過中間的加熱池加熱到75度以上,然後排到右邊的公共淨水池。在實際做的時候發現,如果只是簡單的用溫度和水壓來控制泵和加熱器的話,很容易亂套。比如熱好的淨水還沒排淨,新的帶菌水又進來把淨水污染了;或者淨水正排到一半溫度突然低了,加熱器又重新開始加熱等等。所以我希望設計這樣一套電路,能夠讓放水→加熱→排水這3個過程嚴格依照順序運行,並不斷迴圈。推而廣之,對於任意多個需要按順序運行的過程,都能做到只有過程n運行完畢,過程n+1才能夠開始,而其他所有過程則保持待機。如下圖所示:

這裡的終止條件從各類感測器傳來,用於控制過程的終止。可以發現,這裡傳遞給下一過程的運行信號必須為脈衝信號,如果是持續信號的話,過程n+1則不能正常終止。既然是脈衝信號,那麼需要電路具備“自持”的能力,來把運行信號保持住。
基於以上思路,在反復實驗和簡化後,我找到了一種相對滿意的設計方案,如下圖:

電路大佬可能看到這裡就明白了,下面給對電路不太熟的人再解釋一下。這個遊戲內電路的運作機制是,每0.1秒作為一個tick,一個門電路在當前tick的輸出值,取決於上一個tick的輸入值。其實電路值每一個tick都在刷新,所謂的“連續信號”只是連續很多tick的值都相同而已。以最簡單的反閘來舉例:

開始時輸入0,輸出1。在tick2輸入變化為1,而此時反閘的輸出取決於tick1的輸入,所以仍然為1,直到tick3才根據tick2的輸入變成0。如果之後每個tick的輸入都相同,那麼輸出也一直不變,看起來就像是輸出連續的信號0一樣。

下面我們來細緻分析一下這個電路的工作過程:

Tick1,設備在等待運行信號,沒有工作。
Tick2,前一個過程結束後傳來了運行信號,設備開始工作。
Tick3,外來運行信號消失,但由於上面及閘的輸出連回了輸入,可以把這個信號自我保持下去。
然後一直工作到Tick90都沒有發生變化。
Tick91,由感測器傳來的終止條件滿足了,但是及閘的輸出還要多等一個tick再改變。
Tick92,下方及閘輸出變為1,向下一個過程輸出了運行信號。
Tick93,上方及閘輸出變為0,設備停止工作。
Tcik94,下方及閘停止輸出,最終成功輸出了2個tick的運行信號脈衝給下一個過程。
通過分析可見,這個設計完全實現了之前的構思,嚴格按照順序運行每個過程並可不斷迴圈。

最後把遊戲裡的具體實現圖貼一下。


需要注意的是,電路剛開始建成的時候不存在運行信號,所以在左下角加了一個手動開關,開一下再關掉,整個電路就可以正常運行了。

後來我還用這套設計建了個天然氣加熱系統,把所有的天然氣加熱到120度再燒掉,從中可以賺一些負熱量。

後記:其實在學習了一些電路知識後(作者非電子專業),最開始是用RS觸發器做的,但是這種現實中的東西照搬到遊戲裡給人非常繁瑣的感覺,就想了很多辦法去簡化,最後才變成這個樣子。如果你還有更簡單的實現方法,歡迎一起來探討。

看到前面很多人說不懂,令我懷疑電路圖的講解方式過於抽象了,也許結合遊戲內的實際運行圖會更易懂些?我們先來看第一個過程“送水”工作時的運行圖:

綠線表示值為1(啟動),紅線表示值為0(待命)。可見只有送水的水泵在工作,而藍箭頭所指的壓力感測器,當壓力高於900kg時,將控制送水過程終止。

下面來看第二個過程,加熱:

現在加熱器正在工作,當溫度感測器超過76度時,加熱過程即終止。

最後看第三個過程,排水:

當壓力低於500kg時,感測器將使排水過程終止,之後啟動過程1,完成迴圈。

一. 脈衝發生器在輸入1變0的時候可以正常工作,但0變1的時候,會輸出1個tick的信號脈衝。原因是buffer門在遇到啟動信號時雖然直接通過,但由於遊戲機制,門電路的輸出由上一個tick的輸入決定,所以會產生1個tick的滯後,異或閘下方的啟動會比上方早到1個tick,就出現了錯誤的輸出。正確的做法是下圖這樣:

上下兩路啟動信號同樣經過了2個tick的滯後,可以同時到達。

二. 當運行信號傳給下一過程時,下一過程的終止信號通常應該是0,但不排除會有1出現。比如新送進來的水由於某種原因是大於76度的,那麼熱水過程的終止信號會始終為1。送水結束後,電路應當能夠直接跳過熱水過程,進入排水過程。而你的設計會把運行信號擋住,無法繼續前進。你可能覺得這太少見了,但是著眼於設計一個普適的依序迴圈電路的話,外界傳來的終止信號存在各種可能,必須要有很好的適應性才行。

很高興碰到認真思考的電路同好,希望以後可以繼續探討。

廣告

發表迴響

你的電子郵件位址並不會被公開。