国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

輸液泵多任務(wù)嵌入式軟件設(shè)計

2017-11-21 02:17:06
傳感器世界 2017年2期
關(guān)鍵詞:輸液泵調(diào)用按鍵

北京信息科技大學(xué)信控中心,北京 100192

一、引言

輸液泵在臨床中常用于高?;颊叩闹委?,以達(dá)到降低醫(yī)療風(fēng)險、改善患者的治療效果的目的[1-2]。而輸液泵屬于嵌入式系統(tǒng)的一種,其組成中負(fù)責(zé)控制功能的微處理器往往是8位或16位的單片機(jī)。此類設(shè)備運(yùn)算能力和內(nèi)部資源都有很大的局限性,如何保證利用有限的硬件實現(xiàn)系統(tǒng)的功能需求和實時性要求是設(shè)計人員的首要問題。

目前,很多輸液泵都采用了基于指令功能的軟件設(shè)計方法[3-4]。這種方法具有簡單、節(jié)省資源的特點(diǎn),但往往實時性較差。

本文采用多任務(wù)型軟件架構(gòu),加入了任務(wù)的優(yōu)先級調(diào)度機(jī)制,更加合理的利用了系統(tǒng)資源,同時使系統(tǒng)的實時性和可靠性得到的明顯提高。

二、輸液泵軟件體系

嵌入式軟件的開發(fā)往往針對特定的系統(tǒng),根據(jù)硬件平臺的不同,“因地制宜”地圍繞系統(tǒng)的具體需求而展開[5]。而不同的系統(tǒng),其需求各不相同,因此嵌入式軟件千差萬別。

輸液泵系統(tǒng)是以單片機(jī)為控制核心,通過對電機(jī)等機(jī)械裝置的控制,實現(xiàn)藥液輸注的典型嵌入式系統(tǒng)。其軟件的體系結(jié)構(gòu)與一般嵌入式系統(tǒng)相較而言,有相同之處。總體而言,可以將其劃分為如圖1所示的三層:底層、中間層和頂層。底層包括系統(tǒng)引導(dǎo)程序和監(jiān)控程序;中間層包括操作系統(tǒng)、板級支持包(BSP)、處理器支持包(PSP);頂層包括設(shè)備驅(qū)動程序、用戶應(yīng)用程序。在程序的設(shè)計過程中,頂層軟件是設(shè)計的重點(diǎn)。

設(shè)備驅(qū)動程序是上層應(yīng)用程序與硬件設(shè)備交互的橋梁。MQX操作系統(tǒng)中已經(jīng)提供了對于通用硬件的支持,如GPIO、ADC等。但輸液泵裝置中的存在大量的專用硬件,還需要根據(jù)各個硬件的功能需求開發(fā)專用的設(shè)備驅(qū)動程序。

用戶應(yīng)用程序是完成輸液泵業(yè)務(wù)邏輯的主要程序,是開發(fā)的最主要部分。不同的輸液泵系統(tǒng)根據(jù)具體功能的不同,硬件結(jié)構(gòu)的不同,實現(xiàn)方式的不同,其用戶應(yīng)用程序也各不相同。但總體而言,可以將用戶應(yīng)用程序劃分為兩大部分 :實時控制程序和安全保障程序。

實時控制程序:是完成輸液泵主要功能的主體程序,實現(xiàn)了圖形顯示、電機(jī)控制、響應(yīng)系統(tǒng)輸入、數(shù)據(jù)處理等輸液泵的核心功能;

安全保障程序:是對輸液泵系統(tǒng)狀態(tài)進(jìn)行檢測和保護(hù)的程序,可以在一定程度上保障了輸液泵安全、可靠的運(yùn)行。主要實現(xiàn)了壓力檢測、電機(jī)狀態(tài)檢測、氣泡檢測、數(shù)據(jù)流控制等與安全相關(guān)的功能。

三、輸液泵軟件設(shè)計福

1、程序模塊化

由于輸液泵系統(tǒng)屬于對實時性、可靠性要求較高的嵌入式系統(tǒng),因此在設(shè)計軟件時需要特別考慮程序的運(yùn)行效率。本設(shè)計采用功能模塊化的設(shè)計方法,利用嵌入式操作系統(tǒng)MQX對多個任務(wù)模塊進(jìn)行管理的方式。這種設(shè)計方式可以極大地提高輸液泵系統(tǒng)中程序執(zhí)行的并發(fā)性,從而保證了系統(tǒng)實時性的要求。

按照輸液泵系統(tǒng)的功能需求,將系統(tǒng)劃分為5個任務(wù)模塊,如圖2所示。

(1)主循環(huán)模塊:系統(tǒng)初始化、用戶事件響應(yīng);

(2)按鍵處理模塊:處理鍵盤輸入;

(3)顯示處理模塊:實時更新LCD上的系統(tǒng)信息;

(4)周期檢測任務(wù)模塊:根據(jù)系統(tǒng)狀態(tài),周期檢測各個異常狀態(tài);

(5)中斷檢測任務(wù)模塊:運(yùn)行狀態(tài)下,檢測電機(jī)相關(guān)狀態(tài)。

每個任務(wù)的優(yōu)先級及調(diào)用的任務(wù)函數(shù)各不相同,具體設(shè)置如表1所示。中斷任務(wù)與普通任務(wù)的設(shè)置方式略有不同,需要使用“_int_install_isr()”系統(tǒng)函數(shù)在MQX操作系統(tǒng)中注冊,在此不做具體說明。

表1 任務(wù)優(yōu)先級及調(diào)用的函數(shù)說明

2、任務(wù)調(diào)度方式

MQX系統(tǒng)的任務(wù)調(diào)度,采用優(yōu)先級搶占CPU的方式實現(xiàn)。當(dāng)前正在運(yùn)行的任務(wù),實際上并“不知道”系統(tǒng)中存在其他的任務(wù),而是完全占用CPU資源獨(dú)立運(yùn)行[6]。只有當(dāng)前任務(wù)運(yùn)行結(jié)束、調(diào)用任務(wù)阻塞函數(shù)或任務(wù)延時函數(shù)時,其他處于就緒狀態(tài)的任務(wù)根據(jù)優(yōu)先級的高低,由優(yōu)先級最高的任務(wù)搶占CPU,進(jìn)入運(yùn)行狀態(tài)。在本系統(tǒng)中,周期檢測任務(wù)在各個系統(tǒng)任務(wù)中的優(yōu)先級最高,系統(tǒng)會首先檢查該任務(wù)是否就緒,就緒則立刻轉(zhuǎn)入并執(zhí)行。如果未就緒,則會檢測下一優(yōu)先級的任務(wù)“主循環(huán)任務(wù)”,以此類推的直到系統(tǒng)對所有任務(wù)都進(jìn)行了一次遍歷。然后系統(tǒng)會重新檢查周期檢測任務(wù)是否就緒,開始下一次循環(huán)。具體調(diào)用流程如圖3所示。

其中,比較特殊的是中斷檢測任務(wù),其調(diào)度方式與一般系統(tǒng)任務(wù)不同,具有更高的優(yōu)先級。在MQX系統(tǒng)中,中斷任務(wù)一旦設(shè)置好觸發(fā)條件和任務(wù)函數(shù),只要滿足了觸發(fā)條件,無論當(dāng)前哪個任務(wù)正在運(yùn)行,都會保存當(dāng)前任務(wù)運(yùn)行的位置,并立即轉(zhuǎn)入中斷任務(wù)。

3、任務(wù)的同步與通信

由于采用多任務(wù)搶占的設(shè)計模式,各個任務(wù)對數(shù)據(jù)進(jìn)行處理后,不僅需要任務(wù)之間數(shù)據(jù)的通信,還需要進(jìn)行任務(wù)間同步,保證數(shù)據(jù)的一致性。本設(shè)計采用了三種方式,全局變量、互斥量、輕量級消息隊列。

全局變量“SysCore”是自定義的結(jié)構(gòu)體變量,為了方便任務(wù)之間的通信,將與輸液泵系統(tǒng)相關(guān)的幾乎所有參數(shù)都包含在內(nèi),如系統(tǒng)狀態(tài)、當(dāng)前界面、返回界面、運(yùn)行參數(shù)、硬件驅(qū)動接口。

互斥量主要設(shè)置在電機(jī)、LED等硬件驅(qū)動的模塊中。由于驅(qū)動模塊可能會被多個任務(wù)調(diào)用,當(dāng)一個任務(wù)調(diào)用硬件驅(qū)動時,使用鎖定互斥量獨(dú)占資源,避免發(fā)生意外錯誤。

輕量級消息隊列用于實現(xiàn)任務(wù)間的數(shù)據(jù)交換。實現(xiàn)方式是:由某一任務(wù)發(fā)送數(shù)據(jù)給輕量級消息隊列,再由其他任務(wù)從消息隊列中讀取。

四、輸液泵軟件實現(xiàn)

1、主循環(huán)任務(wù)模塊

主循環(huán)任務(wù)是系統(tǒng)初始化完成后自動進(jìn)入的第一個任務(wù)模塊。在開始主循環(huán)之前,系統(tǒng)需要對硬件設(shè)備進(jìn)行初始化,并利用MQX的任務(wù)列表和“_task_create()”函數(shù)創(chuàng)建各個任務(wù)。因此,主循環(huán)模塊又分為了三個子模塊:硬件初始化模塊、任務(wù)初始化模塊、循環(huán)響應(yīng)模塊。模塊流程圖如圖4所示。

硬件初始化模塊:主要功能是對各個設(shè)備的控制、檢測端口進(jìn)行初始化,主要包括LCD、電源、FLASH、鍵盤、蜂鳴器、LED、電機(jī)等。通過調(diào)用與各個硬件相對應(yīng)的驅(qū)動函數(shù),對硬件的初始狀態(tài)進(jìn)行設(shè)置,并初始化負(fù)責(zé)控制各個硬件的驅(qū)動結(jié)構(gòu)體。

任務(wù)初始化模塊:主要功能是創(chuàng)建除“main_task”以外的其他任務(wù)。由于系統(tǒng)初始化和任務(wù)初始化只有在系統(tǒng)啟動時執(zhí)行一次,如果失敗的初始化或錯誤的初始化沒能被系統(tǒng)識別,則可能對后續(xù)的程序運(yùn)行帶來無法預(yù)知的后果。因此,需要通過檢查返回值的方式對任務(wù)創(chuàng)建的結(jié)果進(jìn)行檢查,即檢查“_task_create()”函數(shù)的返回值是否為對應(yīng)任務(wù)的“task_id”。一旦檢查結(jié)果異常,則立即阻塞當(dāng)前任務(wù),系統(tǒng)進(jìn)入異常狀態(tài),無法通過按鍵等進(jìn)行操作。

循環(huán)響應(yīng)模塊:負(fù)責(zé)讀取由按鍵處理任務(wù)傳遞的按鍵狀態(tài),并通過判斷系統(tǒng)當(dāng)前的狀態(tài)調(diào)用對應(yīng)的函數(shù)響應(yīng)用戶的輸入。由于采用模塊化的設(shè)計方法,系統(tǒng)的參數(shù)設(shè)置、輸液模式選擇、啟停等控制函數(shù)都相互獨(dú)立并存放于“ObjectOperationPool[]”數(shù)組中。該數(shù)組的類型為自定義的結(jié)構(gòu)體“OBJECT_OP_STRUCT”,即數(shù)組的每個元素都是一個結(jié)構(gòu)體。結(jié)構(gòu)體包含的元素為“UP”、“DOWN”、“LEFT”、“RIGHT”、“OK”、“START”等按鍵響應(yīng)的函數(shù)。再根據(jù)循環(huán)響應(yīng)模塊讀取的系統(tǒng)狀態(tài)和按鍵狀態(tài)值,調(diào)用數(shù)組中哪個元素的哪個函數(shù)。

2、按鍵處理模塊

按鍵處理模塊的主要功能是正確無誤的讀取用戶向系統(tǒng)輸入的控制指令,并將指令通過輕量級消息隊列發(fā)送給相應(yīng)的任務(wù)模塊。從硬件角度看,外部輸入鍵盤共有10個按鍵,分別為:“OK”、“Start”、“Stop”、“Mode”、“↑”、“↓”、“→”、“←”、“Bolus”、“Clear”。按鍵處理模塊實現(xiàn)的具體功能為:

(1)鍵盤任務(wù)模塊通過鍵盤驅(qū)動模塊提供的“dev_kb_read()”函數(shù)讀取鍵盤按鍵值,查詢各個按鍵按下狀態(tài),即獲取按下的是哪個按鍵的信息;

(2)根據(jù)按鍵狀態(tài)判斷用戶的輸入意圖,并將用戶輸入的有效按鍵信息讀入,如讀入按鍵的初次按下狀態(tài)、短按下狀態(tài)、持續(xù)按下狀態(tài);

(3)將按鍵信息(鍵值和狀態(tài))通過輕量級消息隊列的方式發(fā)送給主循環(huán)任務(wù)和顯示處理任務(wù)。

按鍵處理模塊的流程圖如圖5所示。首先進(jìn)行初始化設(shè)置,對該任務(wù)所需要的變量和消息隊列進(jìn)行初始化,并讀入系統(tǒng)數(shù)據(jù),進(jìn)入循環(huán)。然后,執(zhí)行讀取和發(fā)送按鍵信息的處理。利用鍵盤驅(qū)動模塊提供的讀取函數(shù),將鍵盤對應(yīng)的硬件狀態(tài)值賦值到變量VALUE_CUR中。再將判斷后的按鍵狀態(tài)發(fā)送到消息隊列中,完成一次循環(huán)。

3、顯示處理模塊

顯示處理模塊的主要功能是讀取系統(tǒng)信息,并利用LCD顯示驅(qū)動控制LCD顯示屏顯示并實時更新提示信息。顯示處理模塊在系統(tǒng)啟動后需要持續(xù)更新顯示信息,因此需要使用while(1)循環(huán),每執(zhí)行完一次循環(huán)調(diào)用_time_delay()函數(shù),等待下一次調(diào)用。在循環(huán)體內(nèi)部,根據(jù)功能需求可以分為三個子功能模塊:圖形建立、報警界面切換、數(shù)據(jù)更新。顯示處理模塊的具體流程如圖6所示。

圖形建立模塊的功能是根據(jù)系統(tǒng)狀態(tài),在LCD屏幕上創(chuàng)建一些提示性圖標(biāo),如低溫、電池電量等;

報警界面切換模塊在每次調(diào)用時,會首先檢查系統(tǒng)狀態(tài)字信息,如果處于異?;蚬收蠣顟B(tài),則會根據(jù)狀態(tài)字調(diào)用相應(yīng)的界面創(chuàng)建函數(shù),進(jìn)行界面報警處理;

數(shù)據(jù)更新模塊負(fù)責(zé)調(diào)用信息顯示歷程,以遍歷的方式逐條調(diào)用各個顯示信息的更新函數(shù),對系統(tǒng)各個顯示信息進(jìn)行更新。

4、周期檢測任務(wù)模塊

周期檢測任務(wù)模塊的主要功能是在系統(tǒng)啟動后,根據(jù)系統(tǒng)的當(dāng)前運(yùn)行狀態(tài),讀取不同的傳感器信號,用以檢測系統(tǒng)當(dāng)前狀態(tài)是否正常。一旦檢測函數(shù)發(fā)現(xiàn)系統(tǒng)處于異?;蚬收系臓顟B(tài),則會根據(jù)系統(tǒng)的狀態(tài)觸發(fā)不同類型、級別的報警并調(diào)用相關(guān)處理函數(shù)。由于需要在輸液泵系統(tǒng)使用期間持續(xù)的對各類異常狀態(tài)進(jìn)行檢測,因此需要使用while(1)循環(huán),并在循環(huán)結(jié)束后調(diào)用_time_delay()函數(shù),交出CPU占用權(quán),等待下一次搶占。周期檢測任務(wù)模塊在循環(huán)體內(nèi)部,按照功能的不同,劃分為三個子模塊,分別為:報警恢復(fù)檢測、傳感器信息讀取、系統(tǒng)狀態(tài)檢測處理。周期檢測任務(wù)模塊的具體流程如圖7所示。

報警恢復(fù)檢測模塊:主要起到一個計時器的作用。輸液泵在使用時可能會出現(xiàn)一些需要用戶處理的特定情況,如:待機(jī)超時、輸液接近完成、電池電量過低。在出現(xiàn)這類不影響用戶正常使用的情況時,需要發(fā)出可消除的報警信號,提醒用戶進(jìn)行處理。報警恢復(fù)檢測模塊的主要功能就是檢測這些特定情況是否被工作人員及時處理。如果檢測到在指定時間內(nèi),仍未解除特定情況,則會再次觸發(fā)報警。

傳感器信息讀取模塊:主要功能是正確的讀取輸液泵系統(tǒng)中傳感器的狀態(tài)信息。輸液泵系統(tǒng)中共包括6種不同功能的傳感器,分別實現(xiàn)泵門開啟檢測、輸液管路氣泡檢測、輸液管路壓力檢測、溫度檢測、電源狀態(tài)檢測、電機(jī)狀態(tài)檢測。設(shè)計時,考慮到電機(jī)相關(guān)狀態(tài)的優(yōu)先級較高,將其設(shè)置成中斷形式的檢測外,其他傳感器信號的讀取都在本模塊中實現(xiàn)。傳感器信號的讀取需要考慮到傳感器失效的情況。以負(fù)責(zé)氣泡檢測的超聲波傳感器為例,通過比對使能時的傳感器數(shù)值和禁用后的傳感器數(shù)值,可以判斷傳感器本身是否處于故障狀態(tài),進(jìn)而判斷讀取信息的正確性。

系統(tǒng)狀態(tài)檢測處理模塊:主要是根據(jù)讀取的傳感器信息,對系統(tǒng)狀態(tài)進(jìn)行邏輯上的判斷。輸液泵系統(tǒng)狀態(tài)的檢測分為系統(tǒng)故障狀態(tài)的檢測和系統(tǒng)異常狀態(tài)的檢測。系統(tǒng)故障狀態(tài)的檢測主要是對與安全性高度相關(guān)的硬件設(shè)備的檢查,如電機(jī)狀態(tài)、氣泡傳感器、壓力傳感器,目的在于及時發(fā)現(xiàn)硬件的失效,并及時觸發(fā)相應(yīng)的報警。系統(tǒng)異常狀態(tài)的檢測主要是是根據(jù)各類傳感器的數(shù)值,判斷輸液泵是否出現(xiàn)了異常狀態(tài)。系統(tǒng)狀態(tài)檢測處理的流程是:根據(jù)系統(tǒng)當(dāng)前的運(yùn)行狀態(tài),選擇性地執(zhí)行系統(tǒng)故障檢測和系統(tǒng)異常檢測中的某些函數(shù),以判定當(dāng)前系統(tǒng)是否正常運(yùn)行。如果判定系統(tǒng)出現(xiàn)故障或異常,則啟動聲、光報警,停止電機(jī)運(yùn)轉(zhuǎn)并將系統(tǒng)狀態(tài)置為當(dāng)前的故障或異常的狀態(tài)。輸液泵運(yùn)行狀態(tài)與調(diào)用檢測函數(shù)的詳細(xì)情況如表2所示。

表2 輸液泵運(yùn)行狀態(tài)與調(diào)用檢測函數(shù)的詳細(xì)情況表

5、中斷檢測任務(wù)模塊

中斷檢測任務(wù)模塊主要是負(fù)責(zé)電機(jī)運(yùn)行狀態(tài)相關(guān)的檢測,例如轉(zhuǎn)動方向、轉(zhuǎn)動速度。輸液泵電機(jī)采用步進(jìn)角為1.8°的兩相步進(jìn)電機(jī),并使用16細(xì)分控制。電機(jī)每轉(zhuǎn)一圈的脈沖數(shù)由公式(1)計算得3200??刂贫嗣看伟l(fā)出脈沖信號為一次中斷,電機(jī)中斷函數(shù)為電機(jī)反饋計數(shù)器加一,作為反饋中斷函數(shù)的判斷依據(jù)。

其中,N—脈沖數(shù);

ρ—電機(jī)旋轉(zhuǎn)的角度;

ω—電機(jī)的步進(jìn)角;

d—控制電機(jī)步進(jìn)的細(xì)分?jǐn)?shù)。

圖8為輸液泵電機(jī)狀態(tài)監(jiān)測的示意圖,運(yùn)行過程中電機(jī)每轉(zhuǎn)一圈,圖8中的兩個光電開關(guān)分別被電機(jī)軸上的擋光片遮擋一次。以光電開關(guān)1的信號變化作為中斷條件,調(diào)用反饋中斷函數(shù)。

反饋中斷函數(shù)流程圖如圖9所示,該函數(shù)讀取兩個光電開關(guān)的信號,進(jìn)而由遮擋情況判斷電機(jī)的轉(zhuǎn)向,并判斷計數(shù)器的值。如果計數(shù)值超過或低于允許的誤差范圍(±5%),則認(rèn)為電機(jī)故障。反饋中斷函數(shù)還會重置電機(jī)中斷函數(shù)中的電機(jī)反饋計數(shù)器。

五、測試結(jié)果

由于輸液泵在實際使用中,精度受到輸液器影響較大。因此,首先需要對輸液器進(jìn)行性能測試。選取市場上較為常見的三種輸液器,在同樣的設(shè)定流速下進(jìn)行精度測試。測試結(jié)果如表2所示??梢钥闯鲈诔掷m(xù)運(yùn)行24小時后,輸液器精度均有所下降,但哈娜好輸液器的精度下降最少,適合作為測試用輸液器。

表2 輸液器精度下降測試結(jié)果

選擇哈娜好輸液器,分別采用不同的流速運(yùn)行4小時,對輸液泵進(jìn)行精度測試。測試結(jié)果如表3所示。

表3 輸液泵精度測試結(jié)果

實驗結(jié)果表明除1ml/h和5ml/h兩種極低流速情況外,但是在常規(guī)的流速狀況下,輸液泵可以滿足5%的精度要求。

六、結(jié)束語

本文設(shè)計了應(yīng)用于輸液泵系統(tǒng)的多任務(wù)嵌入軟件,給出了軟件的體系結(jié)構(gòu)、任務(wù)模塊的劃分、任務(wù)間通信以及任務(wù)模塊的實現(xiàn)方法。這種設(shè)計方法,在一定程度上減少了系統(tǒng)資源的浪費(fèi),并且易于改進(jìn)和擴(kuò)充。系統(tǒng)功能模塊化,在后期維護(hù)中具有很好的可讀性和可理解性。

猜你喜歡
輸液泵調(diào)用按鍵
兩款輸液泵的輸血安全性評估
基于有限狀態(tài)機(jī)的按鍵檢測程序設(shè)計
電子制作(2021年3期)2021-06-16 03:14:26
輸液泵臨床應(yīng)用中常見問題及干預(yù)對策分析
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
一種多方向?qū)Ч獍存I結(jié)構(gòu)設(shè)計
電子制作(2016年1期)2016-11-07 08:43:05
輸液管對輸液泵流速校準(zhǔn)的影響與對策
集束化管理策略在輸液泵安全管理中的應(yīng)用
按鍵的多種狀態(tài)檢測及消抖處理方法
家電科技(2013年4期)2013-07-09 10:55:08
济源市| 江津市| 肇州县| 正镶白旗| 中江县| 潢川县| 友谊县| 万山特区| 武陟县| 从江县| 固阳县| 内乡县| 梅州市| 武隆县| 阿勒泰市| 黎平县| 长岭县| 肥东县| 钦州市| 万安县| 陆川县| 徐闻县| 界首市| 临汾市| 两当县| 武隆县| 金寨县| 阿拉尔市| 合阳县| 夹江县| 忻州市| 道孚县| 七台河市| 阿拉尔市| 芜湖县| 雷州市| 谢通门县| 伊金霍洛旗| 海南省| 红原县| 大新县|