注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整的體驗。

Carmanah 用 Python 照亮未來

引言

這是一個關於 Python 優雅的設計如何以意想不到的方式使該語言變得有用的故事。

Carmanah Technologies Inc. (http://www.carmanah.com/) 的構想源於太平洋中部。創始人 David Green 當時正駕駛他的船從斐濟駛往不列顛哥倫比亞省維多利亞,他的航行燈電池電量不足,突然靈光一閃。

這個大洋中部的想法最終催生了世界上第一個自給自足、完全自主的船舶航行燈。白天,每個裝置都利用太陽能為其整合電池充電。晚上,燈光則依靠儲存的電量執行。Carmanah 的系統採用持久耐用、高效的 LED 取代了傳統燈泡。總而言之,這是一款異常堅固的裝置,可以抵禦惡劣天氣,無需維護。

有時,失落的 Carmanah 燈會隨洋流漂流數千英里,但後來被找回時仍能正常工作。這種可靠性使它們在水道管理機構、水手和各國海岸警衛隊中聲名鵲起。

源於惡劣海洋環境的技術已在許多其他領域證明有用,如今 Carmanah 是太陽能 LED 照明領域的全球領導者。該公司生產一系列用於各種不同用途的燈具,包括交通、道路、鐵路、工業標誌和機場照明以及最初的海洋應用。這些燈具銷往世界各地,並且必須經常承受極端條件(公海、沙漠氣候、遙遠的北方、城市破壞者等)。Carmanah 的燈具甚至成為國家電視臺一部紀錄片的主題。

Closeup of one crosswalk traffic beacon.

Carmanah 人行橫道交通訊號燈特寫,這是 Python 在其中發揮重要作用的近期產品。杆頂部的外殼朝向太陽,以更好地暴露其正面的太陽能電池板。無線連線到街道另一側類似單元的天線在外殼的左側可見。 放大

電照明已變得如此普遍,它似乎是一個簡單的想法。然而,一個自主、自給自足的燈具實際上是一個複雜的事物。可用太陽輻射量隨天氣、季節、地球上的位置以及太陽能電池板的方向而變化。必須仔細管理電池充電狀態,以確保長壽命和正確執行。必須監測可用電量,並可能在夜間進行配給。

根據應用,燈光可能還需要可程式設計以發出國際公認的閃光程式碼、響應使用者輸入等。在更復雜的情況下,需要無線網路以允許燈光相互通訊,或與中央基站通訊。

要製造這些燈具,需要大量的機械、電氣、電子和光學設計。與現代複雜裝置一樣,執行在微控制器上的嵌入式軟體程式操作每個單元,使其栩栩如生。就像《2001:太空漫遊》中的微型巨石一樣,每個燈具都自我維護,隨時準備在需要時執行其功能。

實用計算的未來

當前的實用計算機應用主要由 PC 主導。然而,就像之前的巨型機一樣,PC 將在計算機技術的使用和部署中失去其中心地位。嵌入式系統——作為其他裝置一部分的計算機——將在未來最普遍。

巨型機如今遠未過時,PC 也將同樣保持重要性。然而,大多數計算機將被整合到其他東西中,而不是獨立存在。這個過程已經開始。汽車採用多個嵌入式系統,其中一些系統相互通訊。嵌入式系統還操作許多家用電器。此類系統在工業中也同樣非常重要,它們構成了許多儀器和工具的關鍵要素。

未來嵌入式系統擴充套件的催化劑是網路技術的快速發展。隨著硬體變得更便宜、更小、更快、更高效地利用電力,嵌入式裝置網路將激增和增長。此類裝置——相互協作——將控制家庭、辦公室和工業設施。這個新的計算世界正在進行準備,劍橋-麻省理工學院的《普及計算》倡議(參見http://oxygen.lcs.mit.edu/)就證明了這一點。該倡議也曾被 BBC 報道(參見http://news.bbc.co.uk/1/hi/technology/3583479.stm)。

普及計算的出現將使每個系統都必須非常低維護。當每個使用者需要數百個裝置時,定期維護它們根本不可行。當然,完全自給自足、自行管理電力的系統將是理想的,因為如果需要大規模進行,更換電池或連線電線是一項嚴峻的挑戰。因此,微型巨石變成了蜂群。

Python 的重要性

大規模部署嵌入式系統需要廉價元件。小尺寸、高可靠性和低功耗等因素也非常重要。為了實現這些目標,開發了專用處理器晶片,稱為微控制器。現代微控制器將 CPU、記憶體和外設(如 UART)整合在單個晶片上,是令人驚歎的裝置。然而,這些特性伴隨著高昂的代價。典型的微控制器只有幾百位元組的 RAM,幾 K 的 ROM(用於儲存程式),其處理能力比傳統的桌面微處理器低幾個數量級。這幾乎不是執行 Python 的環境!

雖然有一些專案致力於將 Python 適配到嵌入式應用中,但它們需要微控制器上的大量資源,並且仍處於早期階段。然而,令人驚訝的是,事實證明,標準 Python 在嵌入式系統的整個生命週期中都具有巨大的價值。這是因為嵌入式裝置資源高度受限的特性使得它們在許多工上都依賴於標準 PC——無論是在開發期間還是部署期間。

例如,嵌入式軟體在傳統的桌面系統上編譯,然後將生成的物件程式碼載入到目標微控制器上。另一個例子是在現場對裝置進行故障排除,這通常需要額外的硬體來執行診斷工具。普通筆記型電腦是這種應用非常有吸引力的平臺,因為它們易於獲得且標準化程度相對較高。

因此,任何嵌入式軟體開發工作的主要部分是編寫必要的支援程式碼,以在標準 PC 上執行。有相當多的語言可用於此任務,但 Python 的優勢眾多。Python 很容易被來自各種程式設計背景(如 Java、C 或 Visual Basic)的人學習。熟悉 Python 後,開發進展非常快——可能比任何其他語言都快。同時,Python 有助於建立高度可讀、緊湊且結構良好的程式碼。

Python 特有的功能組合也幫助嵌入式開發人員在 PC 程式設計時更有效率。雖然這些開發人員非常熟悉 C 語言(到目前為止,C 語言是嵌入式系統最流行的高階語言),但為標準桌面或伺服器編寫的 C 程式與為微控制器編寫的程式在風格上截然不同。

Python 程式的緊湊性尤為重要,因為嵌入式開發人員出於必要性,已經學會用非常少量的程式碼表達他們的設計。Python 的自動化記憶體管理也有幫助,因為許多嵌入式開發人員對動態記憶體分配經驗不足——這種技術在大多數嵌入式環境中並不實用。此外,Python 的面向物件功能簡單、強大但又不強制。這使得嵌入式開發人員(他們通常對 OOP 不太熟悉)可以在工作中逐漸採用面向物件正規化。

隨著嵌入式系統複雜性的增長,使用 Python 增強傳統技術的好處變得越來越重要。在 Carmanah,Python 的採用(始於人行橫道交通訊號燈,這是一種包含無線網路的複雜裝置)已擴充套件到嵌入式系統生命週期的幾個關鍵領域。

一個 Python 程式控制著軟體構建過程,允許將不同產品的韌體從大量共享元件中組合起來。構建系統簡單但比 makefile 靈活得多,並且更容易定製、配置和擴充套件。與編譯器供應商提供的構建工具不同,基於 Python 的構建系統可以與不同的編譯器配合使用。

Python 還用於壓力測試和單元測試——這是開發中特別重要的一個方面,尤其是在嵌入式系統中,因為裝置一旦投入使用就很難升級。Python 的其他用途,例如用於控制面板和程式碼生成,也在考慮之中。

Python 在 Carmanah 的一個非常激動人心的應用是作為裝置模擬器。模擬器可以充當嵌入式網路中的一個節點,同時透過螢幕上的動畫影像顯示內部系統狀態。在嵌入式專案早期階段,當實際硬體很少可用時,模擬器非常有價值。透過取代缺失的裝置,模擬器甚至可以在硬體設計完成之前繼續進行軟體開發。

Prototype of Carmanah's crosswalk traffic beacon attached to a device simulator written in Python.

這是 Python 在嵌入式開發中實用性的一個示例。Carmanah 人行橫道交通訊號燈的原型與執行在普通 PC 上的基於 Python 的模擬器進行互動。模擬器有效地完成了系統,因為在人行橫道安裝中需要兩個交通訊號燈(街道兩側各一個)。除了顯著加速開發之外,基於 Python 的模擬器還可以輕鬆地製作動畫圖紙,如圖所示。這使得系統演示能夠比否則更早地進行有意義的演示。 放大

在 Carmanah,Python 不僅被經驗豐富的工程師使用,也被學生實習生使用。即使是程式設計經驗很少的實習生,也能用 Python 完成很多工作,而且所需的監督也比其他語言少。

結論

在 Carmanah,創造自給自足、自主裝置的激動人心的工作仍在繼續。隨著微型巨石蜂群變為現實,嵌入式軟體的重要性和複雜性也隨之增長。透過使此類軟體的開發、測試、控制和部署變得更加容易,Python 確實正在照亮計算的未來。

關於作者

George Belotsky 是一位軟體架構師,在高效能網際網路伺服器以及硬即時和嵌入式系統方面做了大量工作。他的技術興趣包括 C++、Python 和 Linux。George Belotsky 撰寫了多篇文章(參見 http://www.oreillynet.com/pub/au/1204 ),包括關於 Python 和網路 I/O 的系列文章。他還是 Flightdeck-UI 開源專案( http://openlight.com/fdui/ )的作者。您可以透過電子郵件 questions at openlight.com 與他聯絡。

Thomas Major 是 Carmanah 的產品開發經理,他是一名電氣工程師,擁有在 Visteon 和 Philips Electronics 積累的豐富產品設計經驗。他的興趣始於類比電路設計,後來涵蓋了數字、軟體和嵌入式設計。