亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于QPC狀態(tài)機(jī)的溫度控制方案設(shè)計

        2016-08-31 09:45:21王俊璞張東杰李文魁
        關(guān)鍵詞:狀態(tài)機(jī)溫度控制執(zhí)行器

        王俊璞,張東杰,李文魁

        (1.上海交通大學(xué) 儀器科學(xué)與工程系,上海 200240;2.海軍工程大學(xué))

        ?

        基于QPC狀態(tài)機(jī)的溫度控制方案設(shè)計

        王俊璞1,張東杰1,李文魁2

        (1.上海交通大學(xué) 儀器科學(xué)與工程系,上海 200240;2.海軍工程大學(xué))

        QPC(Quantum Platform C)是一套軟件框架,提供狀態(tài)機(jī)和事件驅(qū)動編程功能。首先從編碼角度研究了QPC應(yīng)用編程,然后設(shè)計了一套溫度控制方案,展示QPC狀態(tài)機(jī)、事件驅(qū)動在嵌入式軟件設(shè)計中的應(yīng)用。最后將該方案在一套硬件平臺進(jìn)行了編碼實現(xiàn),達(dá)到了良好的溫控效果。

        QPC;狀態(tài)機(jī);事件驅(qū)動;溫度控制

        引 言

        QPC是Miro Semak博士[1]設(shè)計的基于狀態(tài)機(jī)和事件驅(qū)動編程的軟件框架,包括事件處理器QEP(Quantum Event Processor)、實時框架QF(Quantum Framework)和調(diào)試組件QS(Quantum Spy)三部分。其中,QEP提供用戶設(shè)計使用的狀態(tài)機(jī)和事件結(jié)構(gòu),QF負(fù)責(zé)調(diào)度和運行用戶創(chuàng)建的狀態(tài)機(jī),QS用于跟蹤和收集狀態(tài)機(jī)、事件等系統(tǒng)信息。

        和嵌入式RTOS相比,使用QPC框架代碼復(fù)用度更高,應(yīng)用開發(fā)也更簡單。使用RTOS時,用戶主要工作是進(jìn)行任務(wù)分解和任務(wù)執(zhí)行邏輯設(shè)計,通過調(diào)用任務(wù)管理函數(shù)和任務(wù)通信函數(shù)的方式實現(xiàn)多任務(wù)運行。使用QPC時,用戶主要工作是設(shè)計狀態(tài)機(jī)和狀態(tài)機(jī)之間的通信事件,通過擴(kuò)展QPC狀態(tài)機(jī)和事件的方式創(chuàng)建用戶狀態(tài)機(jī)和事件,然后啟動QF運行這些狀態(tài)機(jī),實現(xiàn)系統(tǒng)功能。因此,使用QPC進(jìn)行嵌入式開發(fā)需要了解QPC應(yīng)用在代碼層級狀態(tài)機(jī)、事件的創(chuàng)建和使用等。

        1 QPC應(yīng)用編程

        QPC主要提供基于狀態(tài)機(jī)和事件驅(qū)動的編程機(jī)制,因此,相應(yīng)的軟件開發(fā)以設(shè)計狀態(tài)機(jī)和事件為主,狀態(tài)機(jī)用來分解系統(tǒng)并實現(xiàn)其功能,事件則實現(xiàn)狀態(tài)機(jī)和狀態(tài)機(jī)之間的通信。狀態(tài)機(jī)由一個或多個狀態(tài)組成,每個狀態(tài)都可以響應(yīng)特定的事件,并發(fā)送事件給自身或其他狀態(tài)機(jī)。比如,一個標(biāo)準(zhǔn)鍵盤程序可以分解為大寫輸入狀態(tài)和小寫輸入狀態(tài),當(dāng)Caps鍵按下時(收到鍵盤事件,內(nèi)容為Caps鍵),在兩個狀態(tài)之間切換;當(dāng)字母鍵按下時,發(fā)送鍵盤事件以及大寫或小寫字母給相應(yīng)程序。

        1.1QPC狀態(tài)機(jī)

        QPC的狀態(tài)機(jī)以活動(或活動對象)的概念和形式體現(xiàn)。活動繼承于狀態(tài)機(jī),能夠?qū)崿F(xiàn)狀態(tài)切換和響應(yīng)事件等功能。

        (1) 活動定義

        QPC定義了默認(rèn)的活動結(jié)構(gòu)QActive,用戶通過擴(kuò)展QActive的方式自定義活動結(jié)構(gòu)。如自定義A/D轉(zhuǎn)換活動結(jié)構(gòu)的代碼如下:

        typedef struct ADInspectorTag {

        QActive super; //繼承QPC活動

        QTimeEvt timeEvtSample; //內(nèi)嵌一個QPC定時器

        } ADInspector; //A/D活動結(jié)構(gòu)聲明

        定義好活動結(jié)構(gòu)后,就可以直接定義活動了,代碼如下:

        ADInspector l_adInspector; //定義A/D活動(變量)

        為了讓用戶定義的活動能夠被QPC識別和運行,需要將其向下轉(zhuǎn)型為QPC默認(rèn)活動類型QActive,代碼如下:QActive* const AO_ADInspector = (QActive*)&l_adInspector;

        (2) 活動運行

        運行QPC活動只需要調(diào)用活動的構(gòu)造函數(shù)和啟動函數(shù),然后啟動QPC實時框架QF就可以了。如進(jìn)行A/D轉(zhuǎn)換活動的過程代碼如下:

        ADInspector_ctor(); //構(gòu)造函數(shù)中關(guān)聯(lián)了A/D活動定義

        QACTIVE_START(AO_ADInspector, 2U, l_adInspectorQSto, Q_DIM(l_adInspectorQSto),

        (void *)0, 512, (QEvt *)0);

        //活動優(yōu)先級為2,事件序列為adInspectorQSto

        return QF_run(); //啟動QPC實時框架

        (3) 狀態(tài)分解

        QPC活動由狀態(tài)組成,通過狀態(tài)響應(yīng)事件和發(fā)送事件實現(xiàn)活動功能。如A/D活動可以分解為A/D檢測狀態(tài)ADInspector_polling和A/D標(biāo)定狀態(tài)ADInspector_calibrating,它們的定義代碼如下:

        QState ADInspector_polling(ADInspector * const me, QEvt const * const e);

        QState ADInspector_calibrating(ADInspector * const me, QEvt const * const e);

        在A/D檢測狀態(tài),進(jìn)行常規(guī)的A/D轉(zhuǎn)換并把轉(zhuǎn)換的結(jié)果以事件方式發(fā)送給相關(guān)的活動;在A/D標(biāo)定狀態(tài),如果A/D芯片自帶零位和滿度校準(zhǔn)功能,啟動相關(guān)功能即可,如果沒有,則把對應(yīng)的信號數(shù)據(jù)作為零位和滿度數(shù)據(jù)處理。

        (4) 狀態(tài)轉(zhuǎn)換

        QPC狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換直接調(diào)用QPC轉(zhuǎn)換函數(shù)即可,如在A/D檢測狀態(tài)收到啟動標(biāo)定事件,然后轉(zhuǎn)換到標(biāo)定狀態(tài)的部分代碼如下:

        QState ADInspector_polling(ADInspector * const me, QEvt const * const e) {

        ……

        switch (e->sig) {

        case AD_CALI_START_SIG: {

        QTimeEvt_disarm(&me->timeEvtSample);

        //關(guān)閉采樣定時器

        status = Q_TRAN(&ADInspector_calibrating);

        //轉(zhuǎn)換到標(biāo)定狀態(tài)

        break;

        }

        ……

        }

        1.2QPC事件

        (1) 事件結(jié)構(gòu)

        QPC定義了默認(rèn)的事件結(jié)構(gòu)QEvt(包含了一個信號變量sig,用來標(biāo)記事件類型,事件類型是一個常量,由系統(tǒng)統(tǒng)一定義和管理),用戶可以使用擴(kuò)展的方式創(chuàng)建自定義事件,如A/D轉(zhuǎn)換結(jié)束事件的結(jié)構(gòu)代碼可以定義如下:

        typedef struct {

        QEvt super; //繼承QPC事件

        uint32_t value;//A/D轉(zhuǎn)換結(jié)果

        } ADFinishEvt;

        (2) 事件定義

        QPC的事件是根據(jù)事件結(jié)構(gòu)定義的變量,可以直接定義或使用QPC提供的事件生成函數(shù)動態(tài)定義。直接定義及填充事件內(nèi)容的代碼如下:

        ADFinishEvt adEvt; //定義事件

        adEvt.sig = AD_FINISH_SIG;

        //標(biāo)記事件類型為AD_FINISH_SIG

        adEvt.value = 0x0; //事件參數(shù)value賦值

        動態(tài)定義事件代碼如下:

        ADFinishEvt* pAdEvt;

        //定義事件指針,指向一個事件

        pAdEvt = Q_NEW(ADFinishEvt, AD_FINISH_SIG);

        //申請一個AD_FINISH_SIG事件

        pAdEvt->value = 0x0;

        //事件參數(shù)value賦值

        其中,事件動態(tài)定義使用的內(nèi)存空間由QPC管理。

        (3) 事件傳遞

        按照事件傳遞方式,QPC事件類型可以分為POST事件和PUBLIC事件。POST事件直接發(fā)送給指定的活動,PUBLIC事件發(fā)送給訂閱該事件的活動。它們的代碼如下:

        //發(fā)送事件pAdEvt給AO_TemperatureMonitor活動QActive_postFIFO(AO_TemperatureMonitor, (QEvt*)pAdEvt);

        //訂閱同步事件,事件類型為SYNCHRONOUS_SIG

        QActive_subscribe((QActive *)me, SYNCHRONOUS_SIG);

        //向訂閱者發(fā)送事件synEvt,synEvt信號類型為

        //SYNCHRO NOUS_SIG

        QF_PUBLISH(synEvt, 0);

        2 溫度控制方案設(shè)計

        溫度控制一般采用負(fù)反饋的控制方式,使用溫度傳感器將溫度信號轉(zhuǎn)換為電信號,然后經(jīng)A/D轉(zhuǎn)換送到單片機(jī)處理,單片機(jī)根據(jù)溫度設(shè)定值和當(dāng)前溫度值計算輸出量,并控制執(zhí)行器輸出。

        考慮到設(shè)計的通用性,本文設(shè)計3個QPC活動來實現(xiàn)溫度控制:負(fù)責(zé)A/D轉(zhuǎn)換的AO_ADInspector活動、負(fù)責(zé)溫度變換和計算控制量的AO_TemperatureMonitor活動和負(fù)責(zé)執(zhí)行器輸出的AO_ActuatorManager活動。

        AO_ADInspector活動用來封裝及屏蔽A/D轉(zhuǎn)換設(shè)計中的可變因素,包括高速或低速的A/D采樣周期選擇和A/D轉(zhuǎn)換結(jié)束查詢或中斷判斷方式;AO_TemperatureMonitor活動用來封裝和屏蔽傳感器到溫度的變換計算以及PID、神經(jīng)元等控制算法選擇;AO_ActuatorManager活動用來封裝和屏蔽開關(guān)量執(zhí)行器或閥值執(zhí)行器選擇給設(shè)計帶來的變化。

        為了保證溫度控制過程的實時性(溫度采樣、計算控制量和執(zhí)行器輸出同時)以及避免設(shè)計中的時序沖突,本文設(shè)計溫度采樣周期為A/D采樣周期的整數(shù)倍,控制周期為溫度采樣周期的整數(shù)倍,例如A/D采樣周期選擇0.25 s,則溫度采樣周期可以選擇1 s,控制周期可以選擇4 s。使用這種方式時,AO_ADInspector活動、AO_TemperatureMonitor活動和AO_ActuatorManager活動運行時的基本關(guān)系如圖1所示(圖中省略AO前綴)。圖中,AD_SAMPLE是溫度采樣信號,由QF定時發(fā)出,PWM_OFF信號用于開關(guān)量執(zhí)行器的PWM控制(閥值控制則不需要)。

        圖1 溫度控制活動序列圖

        AO_ADInspector活動、AO_TemperatureMonitor活動和AO_ActuatorManager活動的內(nèi)部運行情況分別如圖2~圖4所示。其中,AO_ADInspector活動包括了標(biāo)定處理,標(biāo)定信號AD_CALIBRATE_START、AD_CALIBRATE_END、AD_CALIBRATE_ZERO和AD_CALIBRATE_FULL可以由鍵盤程序或者通信程序發(fā)出。

        圖2 AO_ADInspector活動狀態(tài)圖

        3 實驗驗證

        本文選擇溫度傳感器PT1000、A/D轉(zhuǎn)換芯片AD7793作為溫度采樣的硬件部分,具有加熱和制冷功能的帕爾貼元件作為執(zhí)行器,采用ARM Cortex-M3為內(nèi)核的芯片STM32F103RC和位置式PID算法對本文溫控方案進(jìn)行編碼實現(xiàn)。然后測量溫度數(shù)據(jù)并繪制溫控曲線如圖5所示。其中,時刻0的溫度為環(huán)境溫度,20 ℃為目標(biāo)溫度,在700 s后溫度穩(wěn)定度達(dá)到0.01 ℃。

        圖3 AO_TemperatureMonitor活動狀態(tài)圖

        圖4 AO_ActuatorManager活動狀態(tài)圖

        圖5 溫度測控曲線(穩(wěn)態(tài)誤差0.01℃)

        結(jié) 語

        本文使用QPC設(shè)計了溫度控制方案,并在ARM芯片上進(jìn)行了編碼實現(xiàn)。整個軟件開發(fā)過程和溫度控制效果表明,QPC提供的狀態(tài)機(jī)策略和事件驅(qū)動機(jī)制符合嵌入式產(chǎn)品的自然特征,能保證嵌入式產(chǎn)品軟件設(shè)計、實現(xiàn)和運行的一致性,有利于保證產(chǎn)品穩(wěn)定性和技術(shù)指標(biāo)實現(xiàn)。同時,QPC框架的使用減少了軟件設(shè)計和維護(hù)的工作量,提高了軟件開發(fā)效率,增強(qiáng)了代碼的穩(wěn)定性和可維護(hù)性。

        [1] Miro Samek.Practical UML STATECHARTS in C/C++,Event-Driven Programming for Embedded Systems[M].Second Edition.Amsterdam:Elsevier Inc,2008.

        王俊璞(助理研究員)、李文魁(副教授),研究方向為導(dǎo)航與控制;張東杰(工程碩士),研究方向為智能儀器。

        Temperature Control Scheme Based on QPC State Machine

        Wang Junpu1,Zhang Dongjie1,Li Wenkui2

        (1.Department of Instrument Science and Engineering,Shanghai Jiaotong University,Shanghai 200240,China;2.Naval University of Engineering)

        QPC(Quantum Platform C) is a software framework with the functions of state machine and event driven programming.From the point of programming and application,this paper first studies the QPC.Then a scheme of temperature control is designed to show the usage of QPC state machine and event driven programming in the embedded software development.Finally,the scheme is implemented on the hardware platform,which achieves a satisfying result.

        QPC;state machine;event driven;temperature control

        TP31

        A

        (責(zé)任編輯:薛士然2015-11-04)

        猜你喜歡
        狀態(tài)機(jī)溫度控制執(zhí)行器
        船舶主機(jī)溫度控制方法優(yōu)化
        基于有限狀態(tài)機(jī)的交會對接飛行任務(wù)規(guī)劃方法
        測控技術(shù)(2018年12期)2018-11-25 09:37:50
        飛機(jī)裝配預(yù)連接緊固件自動化安裝末端執(zhí)行器設(shè)計
        鍛造溫度控制
        基于模糊控制的PLC在溫度控制中的應(yīng)用
        電子制作(2016年21期)2016-05-17 03:53:01
        考慮執(zhí)行器飽和的改進(jìn)無模型自適應(yīng)控制
        一類具有執(zhí)行器飽和的非線性系統(tǒng)抗飽和方法研究
        三菱PLC在電加熱與溫度控制中的應(yīng)用
        河南科技(2014年14期)2014-02-27 14:11:54
        FPGA設(shè)計中狀態(tài)機(jī)安全性研究
        中文字幕有码手机视频| 精品人妻伦九区久久AAA片69| 国产超碰人人做人人爽av大片| 天天干夜夜操| 久久99亚洲综合精品首页| 美利坚合众国亚洲视频 | 国产精品无码专区视频| 国产精品一区二区三区色| 久久亚洲中文字幕乱码| 狠狠色综合7777久夜色撩人| 伊人色综合视频一区二区三区| 99久久精品久久久| 人妻有码av中文幕久久| 成午夜精品一区二区三区| 国产成+人+综合+亚洲 欧美| 久久久婷婷综合五月天| 日韩中文字幕素人水野一区 | 亚洲中文字幕第15页| 亚洲乱码国产乱码精品精| 日韩无码视频淫乱| 国产一区二区三区资源在线观看| 大香焦av一区二区三区| 99久久精品日本一区二区免费| AV成人午夜无码一区二区| 亚洲另类国产精品中文字幕| 久久婷婷五月综合97色直播| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产美女被遭强高潮露开双腿| 丝袜美腿人妻第一版主| 美女张开腿让男人桶爽| 久久久伊人影院| 视频一区中文字幕日韩| 久久精品国产亚洲av麻豆长发| 伊人久久综合精品无码av专区| 人妻av一区二区三区高| 亚洲av毛片在线免费观看| 免费观看又色又爽又黄的| 欧美精品aaa久久久影院| 国产毛片精品av一区二区| 国产熟女内射oooo| 四虎精品成人免费观看|