Starbound 電路密碼鎖零基礎詳解

6 1 月

廣告

作者:Sherisky

來源:3DM

 

前言:

歡迎來到SH的手劄,除了有關機關的初步教程外,這是SH的第一篇手劄,故大體說下SH的些許安排。
手劄會視SH的課餘時間做不定期更新,其內容都是SH利用星界中電路構建的功能設施,這裡面由於是SH視興趣而做,好比一個胚子。故仍有很多改進乃至測試的餘地,甚至在編輯的過程中SH也會提出一些有待完善的部分,對此大家理解後便可就其深挖夯實了。期間對電路的理解與運用水準隨之提升。按星界的話說,SH將大家送進了沙地行星,能挖多少便看大家的了。
平日裡的一些小東西,SH會攢起來,在往後的手劄中運用或以量堆積後發出來,至於內容稍多的SH會單開帖進行討論。
另:手劄中無專業知識,無需數電基礎,只就目標需求,元件效用,邏輯,三者進行構建,以求更廣的受用群體,故對專業人士表示歡迎的同時,之中的不足的還望見諒,期待您的參與。


在SH的手劄帖中歡迎大家共同討論,SH會參與到每個回復的討論中。
更多交流,更多分享,奠定星界科技基礎,完善科技體系,拔高尖端科技。在討論的過程中相互促進,SH在這裡為大家提供一個良好的平臺與氛圍。

正文



這次SH來教大家製作一個功能相對健全的密碼門。
說道密碼門,其實先前SH關於機關的貼子裡有提到,但那畢竟是通過陷阱來完成數位排序的,功能也不全面。用在陷阱上,例如地磚密碼,就是說,前面輸入的數字無法再次按動,或後面再按的時候沒有任何效果。
。而這次我們所要實現的為:1/9^6為正確概率幾率的密碼鎖,就是我們生活中常輸的六位元密碼。
先來說說這次的密碼門所達成的效果:
順序密碼輸入,輸錯後電路自動清空先前輸入內容,並短暫鳴笛。有三次輸入機會,顯示剩餘次數,三次輸錯後密碼門將被鎖死並長鳴警笛。若在門處私自接入終端開門,同樣會觸發長鳴警報(為用戶提供可激發陷阱的輸出介面),密碼輸入完成後門開,過門電路自動初始化。
想要實現這些效果,有的朋友可能會有無從下手的感覺。的確,這裡面細分的話為幾個電路協同運作。


但SH在這裡可以保證,在手劄中與大家分享的電路不會涉及數電知識。我們只要知道每個元件的效果,提出問題,利用效果解決問題即可。
這裡我們會用到:暫存器,反閘,及閘,或閘,小電鈕,警報器,小燈泡這幾個元件。當你知道這幾個元件的效果後,吸收這篇手劄將不再有知識上的障礙。
先是果圖:



咳…總共三個部分,其中有四分之三用的都是一個套路,大家無須擔心。
這之中如何運作的下面會拆開講,並分八步將線路連接截圖給大家。故而後是…

光路圖→_→

求別扔,保證很簡單,看這個只是讓大家有個大概的印象,就算最後沒理解也能按照SH分八步給的圖紙搭建起來。
悄悄告訴大家,之前SH構設到最後,發現包包裡少了仨反閘,當時的心情…無奈回船,再下來…果不出所料…都是淚啊….

下面將這個機關拆分來講,嚴格來說分三個部分。
首先如下:



下麵是光路圖:

這部分稱為B7一位元密碼,密碼只有一位元,上圖中①③為暫存器(暫存器說明見: https://www.entertainment14.net/blog/post/102780361-starbound-%e6%9a%ab%e5%ad%98%e5%99%a8%e5%92%8c%e8%a7%b8%e7%99%bc%e5%99%a8-%e5%9f%ba%e7%a4%8e%e5%af%a6%e4%be%8b%e6%95%99%e5%ad%b8)②④為反閘,⑤為按鈕(數位與小鍵盤相對應)。
下面我來說下電路運行過程:
與③連接的按鈕為數位7,是正確的數位。當七被按下後,按鈕會輸出1秒的高電平,由於①兩個輸入端都與數位7相連,故兩個輸入端同時接入高電平,(將暫存器輸出變為高電平)並同時斷開(當上端輸入低電平時下端無論高低電平如何變化都不會改變上端接入低電平前暫存器的輸出類型)這樣一個高電平輸出信號就被我們留住了。
有人可能要說了,一位元密碼直接將暫存器輸出端及閘的輸入端相連就好了,實則不然。因為我們這裡所講的是多位元密碼順序輸入電路以及密碼門的前置,看過下面的就明白了。
當我們按下錯誤的按鈕時①輸出高電平,被②轉化為低電平,由於我們沒按7,故③輸出為低電平,兩個低電平接入反閘,反閘輸出高電平到到①和③的上端(開放更改暫存器輸出類型許可權)。按鈕在按下後會持續1秒的高電平輸出,在它關閉前電路便已經打開了1,3的修改許可權,也就是說這時候①處暫存器可以說是沒起到應有的作用(②暫存器的存在價值在於當輸入正確時保留信號,這個在多位元密碼時會用到,同時可以保持門衛開啟狀態。至於①處為何用暫存器後面會提到)。

也就是說,當輸錯密碼時,電路會在一秒鐘的時間內自動復位。
這便是B7的一位元密碼。
一般來說我們習慣將密碼設為六位元,當然無論多少在電路中都是一個重複的過程。
就拿三位元密碼(728)來舉例好了:


如圖所示的電路其實就是重複了三次一位元密碼的電路,而每個電路後加上的反閘為的是使按下正確數位後的輸出信號為持續低電平,這樣只有當所有數位都被按下時,反閘才會對門輸高電平(開門)。而當例如在輸入7前輸入2時,電路會自動初始化。如此實現了兩點:所有數字都被輸入,只有當輸入前一數字後,輸入後面的數字才不會初始化。
這裡⑦中下面的鎖碼器與7相連,上面的暫存器連接除7之外的數字。而②中下面的暫存器連接2,上面的暫存器連接7和2以外的數位。⑧中下面的暫存器連接8,上面的暫存器連接除8和2以外的數位。


所以,這是個成功幾率為1/9*8^5的門鎖。相比地磚密碼大大提升了輸錯的概率。通過的就是:當前一個數位輸入後打開後一個數字暫存器的修改許可權(例如當與數字7對應的暫存器亮起後,輸出高電平到2負責接收錯誤信號的暫存器上端,這樣當有錯誤信號產生的時候,這個暫存器會輸出一秒的高電平將整個電路初始化,但當我們第一次輸入7的時候,由於2沒亮,故不會改變8上端暫存器的輸出類型,這樣在8的錯誤端就能連接7了)。也就是說,相對於地磚密碼,第二個數位往後的部分都可以將負責接收錯誤信號的暫存器與上上個數位相連。


這裡有一點值得注意,當任意一錯誤端(每組位於上面的暫存器)變為高電平輸出時,電路會自動初始化,這個過程通過給左上角或閘一個強電流來實現的。這時,或閘會給所有暫存器上端一個高電平,使其變為與下端接入口同步,當錯誤端初始化後,或閘也將歸為低電平輸出。也就是說,想實現全電路初始化的前提是,每個暫存器在或閘變為低電平輸出前下端輸入端保持低電平輸入。

下面便是以1/9^6為正確幾率的密碼鎖的部分佈置,如圖(重複數字同理):




可以發現,在⑦後多了三個元件,分別是反閘,及閘和暫存器。我們在構成六位元密碼時需要五組這樣的裝置,這裡我為了方便講解故擺得比較散,新加的線路我用黃線勾出來了。


我來解釋下,當我們第一次按7時,按鈕輸出高電平,⑦中下端暫存器輸出狀態變為高電平並hold住。當一秒後按鈕關閉時輸出低電平,被新加入的那個反閘轉為高電平,這樣新加的那個暫存器兩端便成了高電平,同時暫存器輸出高電平信號給新加入的及閘。之後當我們再按7的時候,按鈕輸出高電平到及閘,這時及閘輸出高電平給②中上方的暫存器,暫存器輸出高電平報錯,往後便是電流回復部分了。
這裡新加的反閘與⑦下端的暫存器哪個對新加所存器的高低端都一樣,因為新加的反閘與新加的及閘在時間軸上處於相同的位置,也就是說,在新加的暫存器變為低電平之前仍能有一個瞬間與按鈕一起對新加的及閘輸出高電平。


當然,在後面搭建的過程中我按非高鎖低連接新加暫存器的,大家無需奇怪。
其實這個過程就是以暫存器彼此關聯分別記錄按鈕一次開關而實現電路識別二次重複信號的。我們要善於發現或製造同按一鍵兩次,前後的區別,以這裡為立足點以實現我們所期望的目的。

此上,便是整個電路約3/4的內容,下面節奏會放快。
第二部分是計數(也就是電路判斷為三次輸錯的核心內容),第三部分是對資訊的處理。
有關第二部分,我們需要六個暫存器:


由於重點在於計數,故輸入端能達到說明效果便好。
用鋼制平臺將圖中電路分隔為三部分,最上面的為計數部分,中間的+⑦為信號轉化與處理部分,最下面是簡單的輸入端。
有了前面那個判斷按鈕是否重複按動的例子,這個解釋起來也就容易了,我講過電路運行過程後大家也就明白了:
當第一次錯誤發生時,⑯(或閘)輸出高電平到①,這時①記錄這個信號,並持續輸出高電平到②輸入端的下端(因輸入端上端為低電平故②輸出狀態無改變),向①輸出高電平的同時,⑯還向⑬輸入端的上端輸入高電平,此時系統開始恢復初始狀態:⑬→⑭→⑰→⑯。


按照之前所說的,我們要已經將開始記錄在①中,下面我們要記錄這次錯誤的結束到②中,我們選⑭,因為它在恢復過程中是由低到高的過程,時間軸上先於①變暗晚於①變亮(姑且先這麼描述),所以是最適合記錄結束信號的。我們將⑭的輸出端與②輸入端的上端相連,效果為當迴圈結束時,記錄一個信號。
下面便是第二次錯誤信號,我們有了②所記錄的第二次結束信號,那麼再找一個在第二次錯誤中最先輸出高電平的元件,接入③輸入端的上端,將②與③輸入端的下端相連,這樣我們就得到了一個第二次錯誤的記錄。


然後以③為基石得到信號④再由信號④得到信號⑤,以和③同樣的方式得到信號⑥,也就是第三次錯誤的記錄。
可能有人要問,為何不將③的上端與⑯的輸出端相連。筆者在這裡提一句,在構設電路的過程就和走狹窄的盤山道一樣,儘量靠裡走,直截了當地達到目標,減少變數。將③與⑯相連屬於完善電路部分,應放在搭建並調試無誤之後,查看此時改動前和改動後有無差異,無差異或可通過小改動抹去差異時再改,切記什麼時候應該做什麼,減少所求目標中間的變數,以達成目標優先(電路往往一個右鍵下去,一堆線要重連)。
至此,我們的電路便能夠識別三次以內的錯誤次數。


然後就是第三部分,信號處理和轉換(圖中中間部分+⑦),我們分別將保存錯誤次數信號的①③⑥輸出端與⑦⑧⑨三個反閘輸入端相連,再將三個反閘的輸入端都反及閘⑩相連,這樣當①③⑥輸出端均為高電平時(已錯三次),反閘⑩輸出高電平信號。這時將反閘⑩與暫存器⑪相連(這裡無用,是SH當時構設時一步一站所留下的坑,構建時可直接將反閘⑩與⑫相連),後將反閘⑫的輸出端及閘的輸入端相連,通過前面的電路,我們瞭解到,輸入部分初始都向⑫輸出高電平,每輸對一個信號則將對應的降到低電平,故只要⑫的輸入端有高電平輸入,門便不能打開。這裡便達到了三次失敗後鎖死的目的。

就此,我們完成了三個部分的設計,而後便是搭建過程(如何相結合),SH將其分為八個步驟:

這裡有一點要注意,圖中用黃色標出的線不要連,之後圖中所給的這兩個點之間的線也不要連,至於原因,現在不好說,後面會提。這裡只是按照一個套路來構建。至於其他的,相信看過之前的內容,這一步沒什麼好說的。



相對于上一張圖,這張圖每個數位部分加入了之前1/9^6部分所提到的三個元件,以及其所涉及到的連線。從對鍵盤區的連線不難看出密碼為728516,圖中白線為所添連線的一部分,其他部分按照這個套路。



如圖,我們將計數器部分載入了右上角,首先是①輸入端的上下兩端與⑦相連,輸出端與②輸入端的下端相連;然後是②輸入端的上端與圖中和⑨相同位置元件的輸出端相連(左邊三個,右邊三個),輸出端與③輸入端的下端相連;③輸入端的上端與圖中和⑧相同位置元件的輸出端相連(左三右三),輸出端與④輸入端的下端相連;④輸入端的上端與⑦的輸出端相連,輸出端與⑤輸入端的下端相連;⑤輸入端的上端所連位置與②相同,輸出端連⑥輸入端的下端;⑥輸入端的上端所連位置與③相同。




新增連線如圖所示,增加了兩塊區域,下面的負責轉化信號,至於上面的那個其實直接將①(反閘)的輸出端與②相連就好。




重複一下,本次密碼為:728516。
①的兩個輸入端分別連接鍵盤區中除其在密碼中對應數位以外的數位(圖中對應的是7)。②~⑥輸入端的下端連接鍵盤區中除其在密碼中所對應數位以外的數位(圖中分別對應28516);⑦~⑫上下兩端分別連接其所在區域對應的數位。

將A的輸出端與每組與BC所處相同位置的暫存器(包括BC)輸入端的上端相連。(上圖沒有,在下圖)

OK,在這裡SH準備測試一下之前所連的電路有沒有錯誤,於是出去點了下8,發現計數器的燈全亮了(顯示已三次輸入錯誤)。
下面我們來分析下問題所在,首先,由於密碼的第一位為7,且其他數位區域內的電路均無變化,故判斷計數器無法區分錯誤次數。首先在第一次錯誤後,沒有在計數器Ⅱ 處停住(錯誤在ⅡⅢ處),重新運行錯誤項時觀察發現當Ⅰ 輸出狀態轉為高電平時Ⅱ立即亮起,進而問題出在Ⅱ輸入端上端處,進而發現因與六個部分都相連,而錯誤迴圈只發生在7一處,故當7所在部分的13變暗時,其他部分的相同部位同樣會給Ⅱ輸入高電平。初始化分兩個階段:①電鈕按下後電路走到A處,A輸出高電平給B輸入端的上端。②當電鈕彈起後B會變為低電平,進而將所在數位部分的電路初始化。
而現在出現的問題是,由於其他和⑬相同位置的反閘向Ⅱ輸出強電流故,原本在初始化第二階段亮起的Ⅱ在,第一階段便亮了,向Ⅲ輸入端的下端輸入高電平,而第一階段按鈕未彈起故①也向Ⅲ輸入高電平,結果Ⅲ也亮了(為方便表述,輸出狀態改為高電平=亮了),而Ⅳ下輸入端有了Ⅲ的高電平,A也沒來得及變暗,故Ⅳ也亮了。Ⅳ向Ⅴ下輸入端輸入高電平,除⑬以外其他相同位置的反閘給Ⅴ輸入高電平,於是Ⅴ也亮了。由於這個過程不到一秒,Ⅵ同樣亮了。

進而解決辦法:一錯全錯。



如圖所示,可以從黃框部分清楚的看到和先前圖的區別。當然,能看到的只是一側,實際上從①到⑥每個暫存器的輸出端都分別與圖中與A反閘相同位置反閘的輸入端相連(左邊三個,右邊三個)。這樣當一個數位所在部分出現錯誤後,六個數位所在區域自各自與A相同位置的反閘同步初始化。
結果,下面運行下電路,當輸入7時無錯,但當之後輸入2時計數器顯示錯誤一次。
那麼這次錯誤便在輸入了正確數字卻啟動了計數器。而計數器要想啟動,肯定有接收錯誤信號的暫存器被觸發了。並且是一個暫存器觸發了未接收到正確信號的電路。
很顯然,是由於我們之前對電路“一錯全錯”的改動所致。那麼怎麼辦呢?
由於在數位7的部分,當接收到2時接收錯誤信號的暫存器會啟動,但當接收正確信號的暫存器輸出高電平時,會將這個錯誤信號遮罩掉,以防止系統初始化並計數。
那麼我麼只要在輸入數位七之後將其所在部分負責接收錯誤信號的暫存器“鎖住”便可。
這也是為什麼先前說有條線不能連的原因,見下圖:


如圖連接六個數位部分(五個就夠,最後一位元數不需要這個)。
效果是當我們輸入正確數位時,正確數位所對應部分負責接收錯誤信號的鎖碼器會被鎖住,保持低電平輸出。
這次當SH再測試時電路通過,對密碼中每一位元數位的各種錯的可能進行嘗試(7錯12345689,2錯13456789………)均無問題,計數器可正常工作。


下面就是一些附加功能了:

上圖左邊的黃框內飾警報器,接三根線,分別是短暫警報,三次輸錯後長鳴,在輸入正確密碼前私接終端開門(這個高電平輸出信號可以被用於連接陷阱,三次輸錯所產生的高電平信號同理=-=),上面的那個黃框裡的就是處理私接終端情況的,而右邊黃框裡的壓板輸出信號連接全暫存器上端接入口,放在門後就是進門後電路初始化的功能,同時連接門的輸出端,這樣門內的人在出去的時候就不用輸入密碼了,同時門內的人可以接門外的人進來(注:壓板輸出端在接門輸入端的同時,要如圖接上面黃框裡的輸入端,不然站在壓板上開門可就鳴響警報或啟動陷阱了)。而計數器那裡的三個反閘,分別連接門口豎直放立的三個小燈泡,則起到了顯示剩餘輸入機會的功能。





好了這次的手劄內容就是這些,前面的東西吸收了,密碼門這塊問題便不大了,並且一個密碼門中透出的思路,解決問題的方式同樣使份收穫。SH也會在以後的手劄中更多得加入思路部分,以例子的方式教會大家有關電路的知識。
當你認真看完這份手劄並有所收穫時,SH同樣也要感謝你的支持。同時SH也未食言,設計電路,真的不需要有多少專業知識,只要知道元件的作用,加上一定的邏輯,些許的耐心,多些的熱情,在星界中不斷構設屬於自己的作品將不再遙遠。
同時也記得,遇到問題的同時不要怕,因為你並不孤單。你的問題能夠引起他人的思考,朋友的幫助更有助於實現你的夢想。


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。