史上最遙遠(沒有之一)的遠端偵錯 (Remote Debugging),從 240 億公里之外射茶包!

昨天 Fortran 風雲再起? 的留言有朋友提到:在太空流浪 46 年,已飛出太陽系的「航海家一號內部運作是用 Fortran」。考證了一下,更完整說法是:

談到航海家一號,讓我想起上個月有一則神奇的程式開發相關新聞。

thumbnail
照片與新聞來源:NASA’s Voyager 1 Resumes Sending Engineering Updates to Earth

航海家一號是 NASA 研製的外太陽系太空探測器,於 1977 年 9 月 5 日發射。它是有史以來距離地球最遠的人造飛行器,2012 年還達成飛離太陽系的創舉。

在連續工作 46 年後出現職業倦怠也是難免的,2023/11/14 起航海家一號送回的資料開始變成一堆亂碼。

NASA JPL (Jet Propulsion Laboratory 噴射推進實驗室) 工程師花了幾個月時間調查,研判是探測器的 FDS (飛行資料子系統)有某個記憶體晶片壞了,但總不能派人帶晶片去現場更換吧?(除非有曲速引擎) 幸運的是,航海家一號的其他系統還能接受指令及運作,理論上將受損記憶體的程式碼搬到其他地方就行了。但問題來了,剩下的可用記憶體找不到夠大的區塊可以放下整段程式碼。

因此,他們決定將程式碼拆成多段分別存到不同的記憶體區塊,當然,程式必須配合改寫,將函式指標指向新地址確保程式邏輯能照常運作,而其他有用到這些程式片段的程式碼也必須一起調整。(註:所幸這類調整應該可在地球上模擬及測試驗證,不需要賭一把)

JPL 在 4/18 對航海家一號派送了程式更新,歷經 22.5 小時才傳到,45 小時後 (4/20) 地面收到可解讀的狀態回報,證實程式修改成功了。歷經五個月,航海家一號恢復回報健康狀況。後續幾週,工程團隊會持續調整修改 FDS 其他部分,使其能正確回傳科學觀測資料。

好奇航海家一號上的 FDS 電腦長什麼樣子?每個子系統兩個處理器,共享 70KB CMOS RAM,數據資料存在 1/2" 8 軌磁帶,容量 67MB。(原本有台備用 FDS,但 1981 年壞掉了)


來源

  • 題外話一:JPL 工程團隊看起來好資深哦,希望我也可以寫程式寫到這麼老。
  • 題外話二:太空計劃用的軟體大概是世界上最不容出錯的程式碼吧! 任何一個 Bug 或一次當機,損失可能高達幾百億美金,甚至白白浪費幾千人幾十年的努力,這種程式若給我寫,我的手應該會抖。XD (最接近的案例應該是「因為防呆公制英制單位沒寫好,NASA 在 1998 年因 Key 錯數字燒掉一枚三億美元的探測器」吧?)


Comments

# by 樂透無名

太強大(筆記?)

# by Jackson247

想問一個問題「兩台電腦,不使用 TCP/IP 協定進行檔案傳輸」 1. 因為怕機台被攻擊,所以 PCa 與 PCb 兩台皆不會設定 IPv4 2. PCa 與 PCb 可以透過 USB 線直連 (或其他傳輸線直連) 3. 檔案要是雙向傳輸,即 PCa <---> PCb 檔案大約小於 20MB 請問有什麼想法嗎?謝謝

# by Jeffrey

to Jackson247,買一個 Hub/Switch 只接這兩台 PC 的網卡,建立一個只有兩台電腦的隔離區域網路,會不會比較簡單?

# by Jackson247

可以。這是我們目前的作法。每個 LAN 各一個switch連結 (基於 TCP/IP) 並且用電力斷路器實體隔離。 A<-->B<-->C 當AB相連時,BC就不連 但是這樣不夠即時。使用斷路器,為了讓檔案能傳輸完成。 AB相連要5分鐘,BC相連要5分鐘。檔案要隔10分鐘才能由 A送到C 因此相跳過斷路器。直接由A送到C,僅有兩個host (不可用TCP/IP)

# by Jeffrey

to Jackson247,我知道有種產品叫 Data Link USB 對拷線可以實現 USB 傳檔,不知是否符合你的需求?

# by yoyo

現在網卡應該支援兩台PC對接網路線,不需經由switch?

# by Jackson247

Data Link USB 對拷線,就是我們在尋找的產品沒錯。 但這種對拷線買來,我們發現是封裝成廠商已開發程式(SDK) 作成GUI介面。 但是我們需要可以 shell 指令支援,例如: usbcopy.exe pc1 pc2 data.txt 註:網路線直接對連就是用到TCP/IP協定 (禁止)

# by Jeffrey

to Jackson247,既然提到限定 Shell,若檔案不大,我想到一個簡單直覺的上古時代做法,用 RS232 把兩台 PC 串起來,然後接收端`copy /b COM1: data.txt`,發送端 `copy /b data.txt COM1:`,但 RS232 極速只有 115200,換算約 14KB/s。 若 Data Link USB 只差在缺乏 CLI,我會試著解析它的 API,自己寫個指令工具。(或用 AHK 之類的自動化工具也是一解)

Post a comment