起重機能耗監測的無線感測網路研製

2022-10-31 16:09:05 字數 3707 閱讀 4115

講實驗室選擇的,具體使用視噸位而定

485匯流排

本**將依託contiki作業系統提供的6lowpan協議棧來實現基本通訊。contiki是乙個開源的、移植性極強的、專為無線感測網路設計的多工開源作業系統。它擁有乙個基於事件驅動的核心,支援protothread程序機制,所以相當實用於資源受限的感測器節點。

contiki的精簡配置只需要幾kb的rom和幾百位元組的ram就能提供多工環境。uip小於5kb,uipv6大約只有11kb。contiki提供了豐富的功能模組,使用者可以根據需要自行裁剪原始碼。

核心通過訊息機制實現任務間的通訊,提供shell模組可以實現動態的程序任務管理。目前,contiki已經實現並提供了rime協議棧、ipv4/ipv6協議棧、6lopan協議棧、coffee檔案系統、shell指令碼等。本節通過對其核心分析,為今後的使用和下一節的移植工作做好理論準備。

protothread是用c語言編寫的輕量級執行緒庫,所以可移植性行強。由於其採用了無棧結構,故對記憶體要求極小。是一種技巧性、適應性很強的作業系統。

protothread[1-6]是結合了時間驅動和多執行緒模型兩種優勢的一種方法。和多執行緒模型一樣,使用protothreads的程式是順序結構,但是它使用的記憶體很少,這一優點又是和事件驅動模型一樣的。它的缺點是當時prothreads阻塞時,必須在程式設計時顯式的儲存變數。

表1從六個方面比較了三種機制。

程序或者執行緒切換的時候,為了能夠實現無縫重入,傳統的作業系統(如ucos)都會使用棧來儲存程序上下文,會在記憶體中為每個程序開闢乙個棧空間,每個堆疊都會浪費幾十個位元組的空間。這對於記憶體首先的感測器節點來說,是很難承受的。而protothread機制的所有程序都執行在同乙個堆疊上。

每個任務僅僅用兩個位元組的全域性變數來儲存被阻塞時所處的行數,當詞程序被再排程時,巧妙地通過switch(_line_)語句跳轉到剛才的執行點,就可以恢復執行了。

protothreadde 源**其實很簡單,其核心**只有5行,儲存在中。

1 typedef unsigned short lc_t;

2 #define lc_init(s) s=0;

3 #define lc_resume(s) switch(s)

以上幾句**,實現的行號的儲存於switch語句的挑戰,相當於protothread機制的核心。以上面五句**為基礎,通過巨集定義的方式(節省空間)再構造出了四個程式設計中經常用到的呼叫函式。解釋如下:

pt_init 是執行緒初始話巨集,**程開始執行之前,需要呼叫該巨集初始化執行緒控制塊,他直接呼叫lc_init巨集。其實也就是將執行緒控制塊儲存的行號初始化為0,這樣使得執行緒從頭開始執行

pt_begin 是lc_resume的封裝,表示執行緒的開始,**程中它必須放在最開始處,這是因為protothreads是通過乙個switch結構實現多執行緒程式設計的,pt_begin是該結構起始部分。

pt_waiy_until 是阻塞這個執行緒知道某個條件成立。它先呼叫lc_set巨集設定乙個斷點,然後判斷條件是否成立,如果不成立直接返回。知道條件成立才繼續執行。

pt_edn 先呼叫lc_end結束整個switch結構,然後呼叫lc_init重新初始化執行緒控制塊,這樣在下次執行時可以從頭開始。

contiki中最基本的程式設計模式

#include""

process(name, strname)//定義程序

autostart_process(...)

/*define the process code*/

process_thread(name, ev, data)//程序功能實現

宣告變數最好不要放在process_begin之前,因為程序再次被排程,總是從頭開始執行,直到process_begin巨集中的switch判斷才跳轉到斷點case __line__。也就是說,程序被排程總是會執行process_begin之前的**。

表1 事件驅動,多執行緒,protothreads模型定性比較

結構體process是contiki中控制程序的重要資料結構,每乙個程序都會有有自己的程序結構體,又稱程序控制塊。系統中所有的程序控制塊會被以鍊錶的形式組織起來。如圖1所示。

1. structprocess

2. ;

next:用於指向下乙個程序控制塊。

name:設定該程序的名字。

tread:該函式指標指向了本進**正的執行體。

pt:儲存程序被中斷的行數,即儲存上下文。

state:用於標識程序的當前狀態。其值可能為process_state_runng, process_state_called, process_state_none。

圖1 程序控制鍊錶

contiki是以事件來排程任務的,每個事件都有自己的事件標誌塊,且以鍊錶的形式組織起來。系統會不斷的檢索事件環形佇列,來響應已經產生的事件。事件環形佇列如圖2所示。

1. structevent_data

2. ;

ev: 標誌所產生的事件編號。

data: 儲存事件產生時獲得的相關資訊,即事件產生後可以給程序傳遞的資料。

p: 指向監聽該事件的程序,即該事件產生後會激勵到的程序。

圖2 事件環形佇列

contiki系統中包含乙個時間模型和一組定時器模組:timer,stimer,etimer,模組的基礎是clock模組。用於處理系統時間,也用來短時間阻塞cpu。

timer和stimer最簡單,用於檢查乙個時間週期是否到期。timer以系統時鐘tick為單位,而stimer以秒為單位,適用於較長的定時週期。與其他的時間模組不同的是,timer庫和stimer庫可在中斷中安全使用,因此他們適用於底層驅動程式。

(1)timer:以系統時鐘tick計數,每次定時中斷到達,count計數值加1。通過計算count、start、interval之間的數量關係而產生相應的計時效果。

系統的etimer時間結構基於該結構進行操作。

(2)stimer:計時機制是以timer為軟體基礎,但計時單位為秒,適用於較長的時間週期。

(3)etimer:用來提供時間事件,讓系統按預定的時間週期來觸發程序。當etimer時間到期,會給相應的程序傳遞process_event_timer事件,從而使相應的監聽程序得到執行。

該機制可以使程序在不必要執行時而進入等待狀態,以便其他程序執行。或讓系統進入低功耗狀態。contiki系統使用乙個全域性靜態變數timerlist來儲存各etimer,以鍊錶形式組織。

etimer鍊錶由系統程序etimer_process負責管理。

(4)ctimer:用於提供**定時器,用於排程一段時間後呼叫**函式。由於**定時器在時間到期時會呼叫乙個函式,這在沒有明確contiki程序的**中特別有用,例如通訊協議的實現。

(5)rtimer:用於排程實時任務。rtimer的優先順序高於contiki中的所有其他程序,使實時性要求高的任務能夠得到保障。

通常使用在底層的關鍵**中,例如x-mac的實現。

uip協議棧是一種保持**大小和儲存器使用量最小的免費的tcp/ip協議棧[2]。保留了網路通訊中必要的ip、icmp、tcp、udp協議的功能實現,而刪掉了不常用的通訊協議,協議具有很強的可裁剪性。與uc/ip,lwip和uc/ip等協議棧相比,其最大優缺點就是系統資源佔用量少。

uip協議棧**空間只需幾千位元組,而記憶體空間占有量小於2kb。比起通過計算機現有的ip協議棧(通常需要幾十萬位元組),對於8位或者16微處理機來說,使用uip協議棧來實現乙太網通訊,是乙個合適的選擇。可以通過配置選擇ipv6或者ipv4.

收發公用同一塊快取。ipv6的**占用空間燒高於ipv4。圖列出了uipv6的不同計算功能所用的**占用空間和記憶體占用空間詳情。

起重機的技術要求

3 技術要求 1 環境條件 1 電源要求為三相交流,頻率50hz,電壓380v時,電動機和電器上允許電壓撥動的上限為額定電壓的 10 下限 尖峰電流時 為額定電壓的 15 其中起重機內部電壓損失應符合gb t 3811 2008的規定。2 起重機執行軌道的安裝應符合gb 10183的要求。3 起重機...

起重機指揮人員的職責

起重機在執行的過程中是乙個謹慎小心,比較精細的過程,如果出現指揮不當等現象,很容易造成意想不到的事故,所以指揮人員的職責是非常重要的。下文就請專家給我們講解一下 一 司索人員職責 1起重司索作業人員必須熟悉各類起重上具 裝置和機械的安全操作注意事項。2起重司索作業應掌握吊鉤 繩索及其起重工具效能和報...

起重機的基礎知識

起重機的基本引數是表徵起重機特性的,它包括 起重量 起重力矩 起公升高度 工作速度 幅度 起重臂傾角 起重機總重 輪壓等。1 起重機工作速度包括 額定起公升速度 起重機 大車 執行速度 小車執行速度 變幅速度 起重臂伸縮速度 行駛速度 迴轉速度。2 起重機吊具的最高工作位置與起重機的水準地平面之間的...