新聞中心

        EEPW首頁 > 醫療電子 > 設計應用 > 改變高復雜度、簡化健康和安全的解決方案設計

        改變高復雜度、簡化健康和安全的解決方案設計

        作者: 時間:2012-03-16 來源:網絡 收藏

        介紹

        本文引用地址:http://www.104case.com/article/199552.htm

        本文重點介紹利用微軟® .NET微架構來設計家用醫療器械,并介紹如何按照客戶需求設計終端產品的觀感。這可以通過設計吸引人的圖形接口,集成各種通信接口(串口、I2C、SPI、以太網、USB、WiFi等)以及利用i.MX微處理器的優異性能來實現。其結果可能是一個高端的監測解決方案,例如血糖計,或其他一些滿足特定客戶需求的健康及安全設備。這些應用在價格、功能、易用性、外觀及感受上有著顯著區別。

        在慢性疾病例如糖尿病影響年輕人的同時,醫生也在讓患者協作進行數據采集(疾病監測)以更好控制疾病方面面臨更大挑戰。例如,青少年糖尿病患者往往會關閉用以監測血糖的葡萄糖監測系統的警報器,這可能導致長時間的血糖控制被中斷(見表1)。然而,集成多媒體功能的監測系統可能會讓患者易于接受且更好地使用該儀器,包括對警報的回應。

        表1:來自美國糖尿病學會(ADA)美國臨床內分泌醫師協會
        (ACCE)及國際糖尿病聯盟(IDF)的血糖控制目標

        個人醫療設備除用于慢性病外也可以用于通常的健康和健身應用。集成先進軟件和硬件的高智能設計是成功創造未來健康及安全應用的關鍵。這些應用將供數百萬計的人使用。本文介紹一種通過.NET微架構以及i.MX微處理器系列來開發小型低成本解決方案的方法。

        表2:葡萄糖監測系統(CGMS)監測的血糖過高,過低及正常的幾種狀態
        (CGMS對17位I型糖尿病的孩子和青少年的監測)

        i.MX應用處理器和.NET微架構

        飛思卡爾的i.MX系列應用處理器是基于ARM®內核技術并針對多媒體應用進行了優化設計。.NET微架構可以移植到這些處理器中,以應用這些軟件所帶的各種功能。

        .NET微架構是微軟提供的.NET架構中最緊湊的系統架構,且可以配置到最小的內存空間(64KB內存,256KB閃存)。這個架構為嵌入式設備優化設計,充分提供了最常用的嵌入式開發任務,同時裁減了一些.NET完整架構中不必要的任務。它使得開發人員可以使用通信接口(以太網、WiFi、USB、串口、SPI、I2C)、LCD(直接在顯示器上顯示或通過視頻元件)、觸摸屏和存儲器(閃存、內存、SD/MMC記憶卡)。由于其結構限制,.NET微架構限于運行一個應用,但它可以支持多任務運行。.NET架構的庫具有最常用的對象和功能,使用它們需要從微軟獲得授權許可證。

        飛思卡爾提供的i.MXS應用 處理器可以用于.NET微架構的應用。處理器的特點有:

        • ARM920T®內核,主頻100MHz

        • 彩色LCD控制器

        • 直接內存訪問控制器DMAC

        • 外設接口EIM

        • SDRAM控制器

        • 多種外設接口(SPI,USB和UART)

        • 低功耗模式讓系統在降低成本和功耗預算的同時還可以獲得額外性能

        移植.NET微架構可以讓用戶使用微軟的Visual C#來開發嵌入式應用,使高端編程人員在開發嵌入式應用時獲得優勢。

        采用.NET微架構來開發i.MXS嵌入式健康與安全應用的工具包包括:

        • 微軟Visual Studio 2008

        • 微軟Visual C#

        • .NET微架構

        • USB數據線

        • i.MXS開發板

        要獲得關于.NET微架構更多的信息,請訪問www.microsoft.com/netmf.

        設計技巧及考慮因素

        下面是在設計圖形用戶界面(GUIs)和數據監測功能時的一些技巧和考慮因素。具有C#編程經驗的開發者能夠為特殊的健康和安全嵌入式應用需求來配置硬件。

        通用輸入輸出(GPIO)

        幾乎所有的健康和安全設備都使用GPIO來配置LED燈(用來顯示一些特定的設備狀態)、特殊的按鍵(復位、測試模式及校準)以及信號(用以檢測準確的傳感器讀操作的額外中斷)。根據不同的應用需求,.NET微架構可以通過3種方法來配置GPIO:

        1.作為輸入引腳

        InputPort inputPin = new InputPort(Pins.GPIO_PORT_C_5, true, Port.ResistorMode.PullUp);

        if (inputPin.Read()) runInputAction();

        2.作為中斷引腳

        InterruptPort interruptPin = new

        InterruptPort(Pins.GPIO_PORT_C_6, true, Port.

        ResistorMode.PullUp, Port.InterruptMode.

        InterruptEdgeHigh);

        interruptPin.OnInterrupt += new GPIOInterruptEvent

        Handler(inputPinInterrupt_onInterrupt);

        3.作為輸出引腳

        OutputPort outputPin = new OutputPort(Pins.GPIO_

        PORT_C_7, true);

        outputPin.Write(true);

        配置線程如下:

        Thread t1 = new Thread(new ThreadStart(thread1));

        t1.Priority = ThreadPriority.Highest;

        t1.Start();

        在存儲器中保存數據

        嵌入式開發中另外一個常用的任務是將數據保存在閃存中。數據會被保存在諸如血壓計、血糖計等多種不同種類的醫療設備中。利用.NET微架構把數據存儲到閃存中,需要以下幾步:

        1.建立序列類(serializable class)

        [Serializable]

        public class Device

        {

        private String name;

        private byte value;

        public String Name

        {

        set { name = value; }

        get { return name; }

        }

        public byte Value

        {

        set { value = value; }

        get { return value; }

        }

        public Device(byte Value, String Name)

        {

        value = Value; name = Name;

        }

        }

        2.建立序列類日志

        [Serializable]

        class DeviceLog

        {

        private ArrayList log = new ArrayList();

        public ArrayList Log

        {

        get { return log; }

        }

        public void AddToLog(Device device)

        {

        log.Insert(0, device);

        }

        public void RemoveFromLog(Device device)

        {

        log.Remove(device);

        }

        public void ClearLog()

        {

        log.Clear();

        }

        }

        3.建立并使用閃存參考

        ExtendedWeakReference flashReference;

        uint id = 0;

        public Object load()

        {

        flashReference = ExtendedWeakReference.

        RecoverOrCreate(

        typeof(Program), //

        marker class

        id,

        // id number in the marker class

        ExtendedWeakReference.c_

        SurvivePowerdown);// flags

        flashReference.Priority = (Int32)

        ExtendedWeakReference.PriorityLevel.Important;

        Object data = flashReference.Target; //

        recovering data

        return data;

        }

        public void save(Object data)

        {

        flashReference.Target = data;

        }

        圖形用戶接口GUI

        .NET微架構還可以幫助程序員開發更具吸引力的界面,從而可以為終端客戶提供與眾不同的選擇,也影響開發者選擇芯片供應商的決策。

        運行在i.MXS處理器的.NET微架構提供兩種開發用戶界面的方法。一種是使用.NET提供的用戶界面元素,另外一種是使用位圖類來直接刷新屏幕。

        表3:NET 微架構提供的用戶接口元素

        表中所列所有的元素都可以通過類似的方法編程,程序如下:

        // Create a panel

        StackPanel _panel = new StackPanel();

        _panel.Height = _mainWindow.ActualHeight;

        _panel.Width= _mainWindow.ActualWidth;

        // Create and configure user interface elements

        Text textTitle = new Text();

        textTitle.Font = Resources.GetFont(Resources.

        FontResources.small);

        textTitle.TextContent = “Title Text”;

        textTitle.HorizontalAlignment = Microsoft.SPOT.

        Presentation.HorizontalAlignment.Center;

        textTitle.ForeColor = (Microsoft.SPOT.Presentation.

        Media.Color)0xFF0000;

        // Add the user interface elements to the panel

        _panel.Children.Add(textTitle);

        上面的代碼首先創建一個面板對象,定義它的尺寸,然后建立好文字對象并定義好字體、大小及顏色屬性。再將文字對象加入到面板子類堆中。

        一旦用戶接口元素被加入到顯示面板中,更新元素內容的唯一方法就是異步更新,代碼如下:

        delegate void UpdateTitleTextDelegate(String hint);

        private void UpdateTitleText(String text)

        {

        if (textTitle != null) textTitle.TextContent =

        text;

        }

        // When the update of the textTitle is required,

        use the following code

        _mainWindow.Dispatcher.Invoke(

        new TimeSpan(0, 0, 1),

        new UpdateTitleTextDelegate(UpdateTitleText),

        new object[] { “New Title Text” });

        當使用位圖來更新屏幕時,項目的坐標和畫面刷新則不是自動的。開發者需要通過代碼函數,狀態變量,計時器和線程來進行目標定位和畫面刷新。下面是一個簡單的例子:

        Bitmap _back = new Bitmap(240, 320); // bitmap

        used for flush

        Bitmap _screen = new Bitmap(240, 320); // based

        bitmap to be updated

        Font font = Resources.GetFont(Resources.

        FontResources.small);

        _back.DrawImage(35, 10, Resources.

        GetBitmap(Resources.BitmapResources.freescale), 0,

        0, 170, 57);

        _back.DrawRectangle(Color.White, 1, 35, 10, 170,

        57, 2, 2, Color.White, 0, 0, Color.White, 240,

        320, 0);

        _screen.DrawImage(0, 0, _back, 0, 0, 240, 320);

        _screen.DrawTextInRect(“State: Background”, 10,

        300, 220, 20, Bitmap.DT_AlignmentCenter |

        Bitmap.DT_TrimmingCharacterEllipsis,

        (Color)0xFFFFFF, font);

        _screen.Flush();

        圖表提供了檢驗歷史數據以及進行分析的方法。個人健康和安全設備通常使用圖形,例如柱狀圖和點圖來顯示,采用統一格式來比較多個變量。下面介紹兩種圖形處理的方法。

        第一是使用用戶接口元素中的圖像元素,開發者可以通過位圖的屬性從象素級別來控制顯示的信息。

        圖1

        表4:可以通過下面的位圖類方法來操作圖像中的象素

        第二種方法,采用用戶接口元素中的帆布元素,開發者可以操作坐標和在指定的區域顯示用戶接口元素,如下例所示:

        Canvas _canvas = new Canvas();

        _canvas.Height = SystemMetrics.ScreenHeight;

        _canvas.Width = SystemMetrics.ScreenWidth;

        Shape shape = new Rectangle();

        // Getting random numbers for width and height,

        fixing the max number to the canvas size

        shape.Width = Math.Random(_canvas.Width);

        shape.Height = Math.Random(_canvas.Height);

        shape.Stroke = new Pen(color);

        shape.Fill = new SolidColorBrush(color);

        // Setting the location in the canvas for the

        element, these functions are static

        Canvas.SetTop(shape, Math.Random(_canvas.Height -

        shape.Height));

        Canvas.SetLeft(shape, Math.Random(_canvas.Width -

        shape.Width));

        // Adding the shape to the canvas

        _canvas.Children.Add(shape);

        在上面的代碼中,我們建立了一個帆布對象并定義了寬和高,然后建立一個矩形對象并定義其類型,填充色以及材質。最后,定義好矩形對象在帆布中的坐標,將其添加到帆布中。創建圖形比以往任何時候都更加容易,而這都是基于支持.NET微架構用戶接口元素的i.MXS微處理器。

        通信接口

        串口通信是所有健康和安全應用中最主要的通信手段。它用來將設備中的數據傳輸給個人電腦供醫生和患者分析。

        使用例如UART、SPI、I2C、USB、Ethernet和Wi-Fi的接口常用的發送數據給PC的手段。在下面的例子中,代碼采用UART來進行通信:

        SerialPort serialPort;

        // The configuration is through the SerialPort.

        Configuration class

        SerialPort.Configuration serialConfig=new

        SerialPort.Configuration(SerialPort.Serial.COM1,

        SerialPort.BaudRate.Baud115200, false);

        serialPort = new SerialPort(serialConfig);

        // The read is through the Read function that

        returns the number of bytes read numberOfBytesRead

        = serialPort.Read(strBuffer, 0, READ_NUMOFCHARS,

        READ_TIMEOUT);

        // The write is through the Write function

        serialPort.Write(strBuffer, 0, strBuffer.Length);

        遺憾的是,串口不使用中斷方式來提醒應用層收到數據或串口準備好發送數據。常用的檢查收到字節數的方法是監測Read的返回值。盡管如此,.NET 微架構使得開發者可以采用線程和事件的方式建立一個更加完整的類,其中可以采用帶有無限循環的線程來檢查收到的字節數。

        圖2是一個基于i.MXS應用處理器的衛生保健系統框圖范例。

        圖2 基于i.MXS應用處理器的衛生保健系統框圖

        結論

        i.MXS處理器和.NET微架構是專門針對時鐘、手表、遙控器、血糖計、膽固醇計等應用進行優化設計的。采用i.MXS處理器和.NET微架構,開發者不需要成為微處理器的專家就可以迅速的設計有視覺吸引力的用戶界面。高級的C#編程使得程序員可以采用類似個人電腦編程的方式來開發高端程序。

        總之,微軟和飛思卡爾使得設計者可以開發出引人入勝的應用(外觀和感觀良好并為終端用戶提供增值)迅速推向市場。更重要的是,持續不斷的監測疾病可以減少病痛和被病毒感染,從而幫助提高醫療救護的反應速度.



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石城县| 通州市| 建昌县| 张家港市| 攀枝花市| 荆州市| 新巴尔虎左旗| 柳江县| 积石山| 莱西市| 津市市| 大渡口区| 吉木萨尔县| 无为县| 麻栗坡县| 广西| 定兴县| 闵行区| 恭城| 拉萨市| 昆明市| 绥阳县| 郎溪县| 承德县| 桂东县| 赤壁市| 三门县| 西城区| 个旧市| 卫辉市| 靖州| 九江县| 汽车| 隆回县| 朔州市| 石首市| 彭州市| 安康市| 晋中市| 长阳| 上栗县|