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

?

基于MFC的旋轉(zhuǎn)倒立擺上位機(jī)控制系統(tǒng)設(shè)計與實現(xiàn)

2018-09-13 11:22陶翔翔范碩王志明
電腦知識與技術(shù) 2018年17期
關(guān)鍵詞:串口通信上位機(jī)

陶翔翔 范碩 王志明

摘要:該文主要介紹旋轉(zhuǎn)倒立擺系統(tǒng)上位機(jī)的設(shè)計方法,使用通信控件MSComm與下位機(jī)通信,實現(xiàn)對旋轉(zhuǎn)倒立擺的啟??刂?、狀態(tài)監(jiān)測以及PID參數(shù)設(shè)置。文章在Win10環(huán)境下基于VS2015進(jìn)行MFC應(yīng)用程序開發(fā),詳細(xì)介紹了應(yīng)用程序的基本框架以及軟件的界面資源,闡釋了典型消息響應(yīng)函數(shù)的實現(xiàn)方法,最后顯示了上位機(jī)與串口調(diào)試助手的通信結(jié)果。

關(guān)鍵詞:旋轉(zhuǎn)倒立擺;上位機(jī);MFC;串口通信

中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-5039(2018)17-0269-04

倒立擺系統(tǒng)是一個復(fù)雜的、不穩(wěn)定的非線性系統(tǒng),對倒立擺系統(tǒng)的研究能有效反映控制中的許多經(jīng)典問題:如非線性問題、魯棒性問題、鎮(zhèn)定問題、隨動問題以及跟蹤問題等。通過對倒立擺系統(tǒng)的研究,不僅可以解決控制中相關(guān)理論和技術(shù)實現(xiàn)問題,還能將控制理論所涉及的三個基礎(chǔ)學(xué)科:力學(xué)、數(shù)學(xué)和電學(xué)有機(jī)地結(jié)合起來,在倒立擺系統(tǒng)中進(jìn)行綜合應(yīng)用[1]。

本文主要介紹旋轉(zhuǎn)倒立擺系統(tǒng)上位機(jī)的設(shè)計方法,使用通信控件MSComm[2]與下位機(jī)通信,實現(xiàn)對旋轉(zhuǎn)倒立擺的啟??刂啤⑿D(zhuǎn)角度的監(jiān)測,同時對系統(tǒng)的PID參數(shù)進(jìn)行設(shè)置。詳細(xì)介紹了應(yīng)用程序的基本框架以及軟件界面的資源組成,選取了典型的消息響應(yīng)函數(shù)進(jìn)行介紹,還將上位機(jī)與串口調(diào)試助手的通信結(jié)果顯示出來。

1 旋轉(zhuǎn)倒立擺系統(tǒng)結(jié)構(gòu)

1.1 控制系統(tǒng)硬件結(jié)構(gòu)

旋轉(zhuǎn)倒立擺的結(jié)構(gòu)如圖1所示。電動機(jī)A固定在支架B上,通過轉(zhuǎn)軸F驅(qū)動旋轉(zhuǎn)臂C旋轉(zhuǎn)。擺桿E通過轉(zhuǎn)軸D固定在旋轉(zhuǎn)臂C的一端,當(dāng)旋轉(zhuǎn)臂C在電動機(jī)A驅(qū)動下作往復(fù)旋轉(zhuǎn)運(yùn)動時,帶動擺桿E在垂直于旋轉(zhuǎn)臂C的平面作自由旋轉(zhuǎn)。

1.2 控制系統(tǒng)軟件結(jié)構(gòu)

旋轉(zhuǎn)倒立擺上位機(jī)利用MFC進(jìn)行應(yīng)用程序開發(fā),通過串口與下位機(jī)進(jìn)行通信,實現(xiàn)系統(tǒng)啟停控制、PID參數(shù)設(shè)置、角度數(shù)據(jù)顯示。下位機(jī)采用51單片機(jī),由角位移傳感器測量得到擺桿旋轉(zhuǎn)角度送入到控制器中,計算PID控制律并轉(zhuǎn)化為電壓信號提供給驅(qū)動芯片,來驅(qū)動直流電機(jī)轉(zhuǎn)動,從而帶動旋臂在水平面內(nèi)旋轉(zhuǎn),最終實現(xiàn)控制擺桿直立的效果。

2 旋轉(zhuǎn)倒立擺上位機(jī)控制系統(tǒng)設(shè)計

2.1 基于MFC的控制軟件框架

MFC是微軟公司提供的一個類庫,以C++類的形式封裝了Windows API,并且包含一個應(yīng)用程序框架,為軟件開發(fā)者完成了一些例行化的工作,比如各種窗口、工具欄、菜單的生成和管理等,極大的提升編程的效率。

使用MFC開發(fā)向?qū)lassWizard創(chuàng)建基于對話框的應(yīng)用程序,項目生成后,即產(chǎn)生了屬于倒立擺系統(tǒng)的InvertedPendulum對象,生成CpendulumApp類和CpendulumDlg類,CpendulumApp類中包含CpendulumDlg類成員變量。

最基本的應(yīng)用程序框架由此建立起來,應(yīng)用程序通過定義,初始化,由Winmain開始,注冊、創(chuàng)建、顯示窗口、消息響應(yīng),直到程序終止,結(jié)束運(yùn)行周期。

2.2 界面設(shè)計

2.2.1 界面資源

上位機(jī)界面包含控件類型有Combobox、Button、Radio-button、Edit Control,主要用作通信協(xié)議設(shè)置框,系統(tǒng)啟動及停止控制按鈕,PID參數(shù)設(shè)置按鈕,接收發(fā)送數(shù)據(jù)按鈕,接收發(fā)送數(shù)據(jù)顯示框以及波形顯示框。

上位機(jī)設(shè)計中所涉及的主要的控件如下表,包括控件的用途、類型以及控件ID。

接著在對話框中添加串行口通信控件MSComm[3],它封裝了許多實現(xiàn)串行口通信的函數(shù)。插入該控件,便可調(diào)用它提供的函數(shù),而無須直接對接口硬件進(jìn)行操作,從而方便地實現(xiàn)計算機(jī)與外部設(shè)備的串行通信。

采用事件驅(qū)動法,即每當(dāng)計算機(jī)俘獲新字符,或者端口狀態(tài)改變,或者接受到故障信息時,MSComm控件觸發(fā)OnComm事件,工作原理類似于中斷方式[4]。而應(yīng)用程序在捕獲該事件后,通過檢查MSComm控件的ComEvent屬性可以獲知事件或故障,從而采取相應(yīng)的操作。這種方法的特點(diǎn)是程序響應(yīng)及時可靠性高,適應(yīng)于中斷頻率不太高的串行口通信。

2.2.2 界面消息響應(yīng)函數(shù)

為對應(yīng)的控件添加消息響應(yīng)函數(shù),通過消息響應(yīng)機(jī)制同時響應(yīng)多個任務(wù)。當(dāng)用戶進(jìn)行了輸入或是窗口的狀態(tài)發(fā)生改變時,系統(tǒng)發(fā)送消息到窗口,所有產(chǎn)生的消息被放入消息隊列中,根據(jù)優(yōu)先級執(zhí)行相應(yīng)程序。由此,為控件添加了消息響應(yīng)函數(shù)之后,就可以通過操作控件執(zhí)行目標(biāo)任務(wù)。

下面詳細(xì)介紹下繪制坐標(biāo)軸、響應(yīng)接收事件并繪制擺桿角度波形的消息響應(yīng)函數(shù)。

(1)OnPaint消息響應(yīng)函數(shù)

在響應(yīng)WM_PAINT消息的函數(shù)OnPaint中繪制坐標(biāo)軸,由此在需要重繪波形時即可利用WM_PAINT消息重繪坐標(biāo)軸區(qū)域覆蓋之前的波形,在此基礎(chǔ)上更新角度數(shù)據(jù)波形。

在OnPaint函數(shù)內(nèi),首先定義CPaintDC類的對象DCWave,通過這個對象就可以使用CDC類的成員函數(shù)完成波形區(qū)中的圖形繪制操作;接著定義CRect結(jié)構(gòu)rectWave,在后續(xù)的坐標(biāo)軸繪制中可以通過CRect類的方法,獲取區(qū)域的具體信息,如頂點(diǎn)、高和寬。

用編輯框IDC_Wave的GetClientRect函數(shù)將矩形大小寫入rectWave中,然后獲取IDC_Wave的句柄,調(diào)用CDC的成員函數(shù)FillSolidRect填充rectWave坐標(biāo)區(qū);接著獲取rectWave的寬和高,利用DCWaved的成員函數(shù)MoveTo和LineTo繪制繪圖區(qū)外邊框以及坐標(biāo)軸邊框;通過計算得到坐標(biāo)軸線,同樣通過前面的劃線命令繪制坐標(biāo)軸;最后利用DCWave的成員函數(shù)TextOut把坐標(biāo)軸刻度寫在相應(yīng)的位置。

繪成的坐標(biāo)區(qū)如上圖所示,縱坐標(biāo)為角度數(shù)值,范圍為0-360°,由于MSComm控件為事件驅(qū)動,接收到數(shù)據(jù)才會刷新波形,因此橫坐標(biāo)為在波形區(qū)顯示的角度數(shù)據(jù)的組數(shù),方便觀察。

(2)OnComm消息響應(yīng)函數(shù)

通過串行口通信控件MSComm,利用事件驅(qū)動方法與下位機(jī)進(jìn)行通信。在串口接收緩沖區(qū)中有字符或一個字符到達(dá),再或者是一個變化發(fā)生時,控件觸發(fā)OnComm事件。

每當(dāng)接收事件發(fā)生時,首先利用InvalidateRect函數(shù)使坐標(biāo)軸區(qū)域rectWave無效,再使用UpDateWindow將WM_PAINT直接發(fā)送到繪圖區(qū),立即觸發(fā)OnPaint響應(yīng)函數(shù),重繪坐標(biāo)軸。

接著通信控件的成員函數(shù)get_Input讀取緩沖區(qū),然后將緩沖區(qū)的字符每三個為一組的ASCII碼值拼成一個十進(jìn)制整型的角度數(shù)值顯示在最新數(shù)據(jù)框IDC_RecLatest中,同時將這個角度數(shù)值轉(zhuǎn)換成字符型數(shù)據(jù)更新在接收歷史框IDC_Rec中。

最后在波形區(qū)域rectWave,利用MoveTo和LineTo成員函數(shù)繪制角度數(shù)據(jù)的波形。為了動態(tài)顯示波形,每次更新波形時,將之前的波形左移,最新的數(shù)據(jù)更新在上一個數(shù)據(jù)的波形右側(cè),在不斷接收角度數(shù)據(jù)和更新波形時產(chǎn)生整個波形動態(tài)左移、新數(shù)據(jù)從右側(cè)補(bǔ)充進(jìn)來的效果。

2.3 串口通信

串口是計算機(jī)上一種非常通用設(shè)備通信的協(xié)議。串口通信的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。本文中串口用于ASCII碼字符的傳輸。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗位[5]。對于兩個進(jìn)行通行的端口,這些參數(shù)必須匹配。

串口的通信協(xié)議由下位機(jī)規(guī)定,具體規(guī)則如下:

(1)上位機(jī)發(fā)送給下位機(jī)的命令和下位機(jī)返回的數(shù)據(jù)必須以結(jié)尾,作為校驗位。

(2)通信的波特率為11520bps,數(shù)據(jù)位為8位,無停止位,無奇偶校驗。

3 通信結(jié)果

控制界面實現(xiàn)以下人機(jī)交互功能[6]:

(1)串口初始化

利用MSComm控件初始化串口號、波特率,設(shè)置緩沖區(qū)一個字符引發(fā)事件,打開串口;

(2)倒立擺的啟??刂?/p>

通過點(diǎn)擊“啟動”和“停止”按鈕控制旋轉(zhuǎn)倒立擺系統(tǒng)啟動和停止工作;

(3)PID參數(shù)設(shè)置

在上位機(jī)界面中輸入想要設(shè)置的PID參數(shù),點(diǎn)擊“發(fā)送數(shù)據(jù)”按鈕,下位機(jī)接收并設(shè)置系統(tǒng)參數(shù),控制旋轉(zhuǎn)倒立擺;

(4)倒立擺的角度數(shù)據(jù)顯示

下位機(jī)采集旋轉(zhuǎn)倒立擺的角度數(shù)據(jù),發(fā)送給上位機(jī),上位機(jī)將數(shù)據(jù)直接顯示在編輯框,同時以波形的形式顯示出來。

將上位機(jī)與串口調(diào)試助手進(jìn)行通信,通信結(jié)果如下:

上位機(jī)點(diǎn)擊“啟動”,“停止”按鈕發(fā)送啟停命令,串口調(diào)試助手接收顯示如圖:

在PID輸入框中輸入數(shù)值,點(diǎn)擊“發(fā)送數(shù)據(jù)”按鈕,串口調(diào)試助手接收顯示如圖:

串口調(diào)試助手發(fā)送一組角度數(shù)值,上位機(jī)接收后顯示在接收歷史框和最新數(shù)據(jù)框中,同時在波形區(qū)繪制出角度數(shù)據(jù)的波形:

4 總結(jié)

本文主要介紹了旋轉(zhuǎn)倒立擺系統(tǒng)上位機(jī)的設(shè)計方法,實現(xiàn)了對旋轉(zhuǎn)倒立擺的啟動和停止控制、擺桿角度的監(jiān)測以及系統(tǒng)PID參數(shù)的設(shè)置。對于實現(xiàn)倒立擺控制系統(tǒng)的觀測有較大的實踐意義。

參考文獻(xiàn):

[1] 張建海.單片機(jī)控制的二級倒立擺系統(tǒng)的研究[D].河北工業(yè)大學(xué),2005.

[2] 龍灝,丁旭玲.基于Windows API函數(shù)的串口通訊程序設(shè)計[J].電子世界,2015(19).

[3] 蔣萍花,張楠.數(shù)據(jù)采集系統(tǒng)串口通信的設(shè)計與實現(xiàn)[J].電子測量技術(shù),2015(6).

[4] 陳曙光.利用ActiveX控件實現(xiàn)對計算機(jī)串口的通信管理[J].合肥工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2000,3.

[5] 黃暉,柴劍勇,嚴(yán)興, 等.串口通信技術(shù)[J].科技創(chuàng)新導(dǎo)報,2010(27).

[6] 王超.基于單片機(jī)的分布式果品貯藏遠(yuǎn)程監(jiān)控系統(tǒng)[J].中國農(nóng)機(jī)化學(xué)報,2016(4).

猜你喜歡
串口通信上位機(jī)
基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計
基于MSP430單片機(jī)的窄帶無線數(shù)據(jù)傳輸模塊的設(shè)計
便攜式數(shù)傳電臺測試系統(tǒng)的設(shè)計與實現(xiàn)
溧阳市| 桂平市| 阳山县| 衡山县| 玉龙| 桃江县| 龙南县| 错那县| 安乡县| 尉犁县| 沁水县| 浮梁县| 庄浪县| 澜沧| 谢通门县| 军事| 长春市| 饶平县| 沐川县| 修文县| 松溪县| 原阳县| 万荣县| 澄江县| 彭泽县| 乐清市| 清丰县| 榆社县| 景德镇市| 临沧市| 赤峰市| 韶山市| 商洛市| 淄博市| 桐梓县| SHOW| 长治县| 石河子市| 天峻县| 榆中县| 广丰县|