版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> XX大學(xué)XX學(xué)院</b></p><p><b> 畢業(yè)設(shè)計(jì)(論文) </b></p><p> 題 目 測量軸轉(zhuǎn)速扭矩系統(tǒng)的軟件實(shí)現(xiàn) </p><p> 所 屬 系 過程裝備與控制工程系</p><p><b
2、> 年級專業(yè) </b></p><p> 學(xué) 號 </p><p> 姓 名 </p><p><b> 指導(dǎo)教師 </b></p><p> 日 期 </p><p> 測量軸轉(zhuǎn)速扭矩系統(tǒng)的軟件實(shí)現(xiàn)</p>
3、<p><b> 摘要:</b></p><p> 在深入研究軸轉(zhuǎn)矩轉(zhuǎn)速測量儀工作原理基礎(chǔ)上,采用面向?qū)ο蟪绦蛟O(shè)計(jì)語言VC++6.0,建立一個(gè)對軸轉(zhuǎn)速,扭矩值動態(tài)測量采集的系統(tǒng),繼而完成對數(shù)據(jù)的存貯。</p><p><b> 關(guān)鍵詞:</b></p><p> 面向?qū)ο蟮某绦蛟O(shè)計(jì) 開放數(shù)據(jù)庫
4、連接 SQL查詢 數(shù)據(jù)庫</p><p> The Design Of A Measurement System For Shaft Speed And Torque</p><p><b> Abstract:</b></p><p> Based on deeply researching into the opera
5、tion principle of shaft speed and torque measurement instrument, we adopt object oriented program ,VC++6.0,create a dynamical measurement system for shaft speed and torque, completing the record of data.</p><p
6、> Key Words:</p><p> Object Oriented Program(OOP) The Query Of SQL DataBase</p><p> ODBC(Open DataBase Connection)</p><p><b> 目 錄</b></p><p> Th
7、e Design Of A Measurement System For Shaft Speed And Torque1</p><p><b> 目 錄2</b></p><p><b> 前 言3</b></p><p> 第一部分 系統(tǒng)設(shè)計(jì)概述4</p><p>
8、 1.1數(shù)據(jù)采集系統(tǒng)的組成及其硬件結(jié)構(gòu)4</p><p> 1.1.1典型的數(shù)據(jù)自動采集系統(tǒng)4</p><p> 1.1.2轉(zhuǎn)矩轉(zhuǎn)速測量儀硬件結(jié)構(gòu)5</p><p> 1.2系統(tǒng)的工作原理6</p><p> 1.2.1轉(zhuǎn)矩測量原理圖6</p><p> 1.2.2轉(zhuǎn)速測量原理6</p>
9、;<p> 1.3 扭矩轉(zhuǎn)速數(shù)據(jù)采集系統(tǒng)的軟件功能及結(jié)構(gòu)7</p><p> 第二部分 軟件工程模塊的建立8</p><p> 2.1用戶界面設(shè)計(jì)8</p><p> 2.1.1消息及成員函數(shù)之間的響應(yīng)關(guān)系9</p><p> 2.1.2設(shè)計(jì)步驟9</p><p> 2.2數(shù)據(jù)庫
10、設(shè)計(jì)25</p><p> 2.2.1數(shù)據(jù)庫整體框架設(shè)計(jì)25</p><p> 2.2.2完整實(shí)現(xiàn)代碼27</p><p> 2.3 RS-232C通信建立39</p><p> 2.3.1 Windows下串行通信39</p><p> 2.3.2 RS—232C的類封裝46</p>
11、<p> 第三部分 畢業(yè)設(shè)計(jì)的收獲和反思51</p><p><b> 參考文獻(xiàn):52</b></p><p><b> 前 言</b></p><p> 自1981年8月12日IBM公司的PC問世以來,PC的處理能力經(jīng)歷了一個(gè)驚人的發(fā)展過程?,F(xiàn)在PC正在大舉進(jìn)入數(shù)據(jù)采集領(lǐng)域。事實(shí)上,作
12、為數(shù)據(jù)采集的主要部件,PC表現(xiàn)出了巨大的潛力。PC采用數(shù)字編碼格式,使得大規(guī)模瞬態(tài)采集和存儲數(shù)據(jù)成為可能。為基于大量數(shù)據(jù)的工業(yè)用分析設(shè)計(jì)軟件如ANSYS5.7提供了數(shù)據(jù)源,為工業(yè)過程控制領(lǐng)域自動控制的實(shí)施提供決策依據(jù)。 一些大型控制系統(tǒng)經(jīng)常采用VB作平臺,VC作為面向?qū)ο蟪绦?,并輔之以匯編語言作為I/O接口處理</p><p> 本次畢業(yè)設(shè)計(jì)實(shí)驗(yàn)的儀器為一臺普通的轉(zhuǎn)速轉(zhuǎn)矩測量儀,通過轉(zhuǎn)矩傳感器實(shí)現(xiàn)轉(zhuǎn)矩、轉(zhuǎn)速及軸
13、功率的多參數(shù)輸出,并顯示在LED液晶控制面板上。但因?yàn)樯a(chǎn)該儀器廠家,只提供與計(jì)算機(jī)通信相連的RS232接口,而未提供相關(guān)通信連接的軟件。故無法實(shí)現(xiàn)數(shù)據(jù)采集的智能化和計(jì)算機(jī)化。因此本次畢業(yè)設(shè)計(jì)選題的目的在于,基于該轉(zhuǎn)速轉(zhuǎn)矩測量儀的RS232接口的串口通信機(jī)制,利用Microsoft 提供的Visual C++編程開發(fā)工具,完成計(jì)算機(jī)與該儀器的智能通信,實(shí)現(xiàn)該儀器數(shù)據(jù)的動態(tài)采集,記錄,存入數(shù)據(jù)庫備查。</p><p&g
14、t; 第一部分 系統(tǒng)設(shè)計(jì)概述</p><p> 1.1數(shù)據(jù)采集系統(tǒng)的組成及其硬件結(jié)構(gòu)</p><p> 1.1.1典型的數(shù)據(jù)自動采集系統(tǒng)</p><p> 隨著人類社會的發(fā)展,利用計(jì)算機(jī)設(shè)備實(shí)現(xiàn)生產(chǎn)過程的自動化成為了提高生產(chǎn)力,減輕勞動強(qiáng)度的有效方法。由于大量設(shè)備的使用,必需隨時(shí)知道實(shí)際的情況,這就是監(jiān)視,通過計(jì)算機(jī)輔助數(shù)據(jù)采集過程可以實(shí)現(xiàn)對數(shù)據(jù)的自動處
15、理。圖1-1描述了一個(gè)簡單的計(jì)算機(jī)輔助數(shù)據(jù)采集系統(tǒng)的方框圖。計(jì)算機(jī)界與硬件接口通過合適的通信鏈路相連,硬件接口依次與相應(yīng)的傳感器相連,而傳感器對視眼中環(huán)境的變化作出相應(yīng)。傳感器將各種不同的現(xiàn)象轉(zhuǎn)換成電壓或者電流信號接口硬件將傳感器的輸出信號轉(zhuǎn)換成計(jì)算機(jī)可以識別的形式輸入計(jì)算機(jī)。</p><p> 圖1-1典型的數(shù)據(jù)自動采集系統(tǒng)</p><p> 相應(yīng)的我們對數(shù)據(jù)采集系統(tǒng)作出一點(diǎn)改動,便
16、可以作出工業(yè)上應(yīng)用廣泛的分布式監(jiān)控系統(tǒng)(Distributed Control System)如圖1-2所示。</p><p> 圖1-2計(jì)算機(jī)控制系統(tǒng)方框圖</p><p> 1.1.2轉(zhuǎn)矩轉(zhuǎn)速測量儀硬件結(jié)構(gòu)</p><p> 本次畢業(yè)設(shè)計(jì)所采用的轉(zhuǎn)矩轉(zhuǎn)速測量儀是由湖南湘儀動力有限公司生產(chǎn)的基于JN388數(shù)字式轉(zhuǎn)矩轉(zhuǎn)速傳感器和AT89C52單片機(jī)教學(xué)科研用轉(zhuǎn)
17、矩轉(zhuǎn)速測量儀,圖1-3給出了與單片機(jī)接口構(gòu)成的智能轉(zhuǎn)矩轉(zhuǎn)速測量儀的硬件電路結(jié)構(gòu)框圖。圖中,JN338型轉(zhuǎn)矩傳感器輸出的轉(zhuǎn)矩及轉(zhuǎn)速信號經(jīng)光耦隔離后送入單片機(jī)的T0、T1計(jì)數(shù)器,然后由T0和T1完成測頻計(jì)數(shù)功能,秒脈沖閘門由T2提供。這其中光耦的作用,一是電平轉(zhuǎn)換,把轉(zhuǎn)矩轉(zhuǎn)速信號電平轉(zhuǎn)換成TTL電平,二是提高單片機(jī)的抗干擾能力并保護(hù)單片機(jī)。</p><p> 圖1-3 智能轉(zhuǎn)矩轉(zhuǎn)速測量儀硬件電路結(jié)構(gòu)框圖</p
18、><p> 由單片機(jī)完成相應(yīng)的轉(zhuǎn)矩、轉(zhuǎn)速值的運(yùn)算后,即可將轉(zhuǎn)矩、轉(zhuǎn)速及軸功率等參數(shù)保存并顯示輸出。本系統(tǒng)以AT89C52單片機(jī)為核心由IMP8132構(gòu)成電源監(jiān)控及看門狗電路以提高系統(tǒng)工作的可靠性,系統(tǒng)中擴(kuò)展了一片I2C總線串行鐵電存儲器FM24256,它的主要作用是存儲參數(shù)設(shè)定值及采集的轉(zhuǎn)矩轉(zhuǎn)速值。內(nèi)含GB2312中文漢字庫的圖形點(diǎn)陣液晶顯示模塊OCMJX8C可用于構(gòu)成中文人機(jī)顯示界面,ICL232的作用是將單片
19、機(jī)的TTL電平轉(zhuǎn)換為RS-232電平,以便于和上位計(jì)算機(jī)進(jìn)行通信。</p><p> 1.2系統(tǒng)的工作原理</p><p> 1.2.1轉(zhuǎn)矩測量原理圖</p><p> 1-4應(yīng)變傳感器測量原理圖 </p><p> JN338數(shù)字式轉(zhuǎn)矩轉(zhuǎn)速傳感器采用兩組特殊環(huán)形
20、旋轉(zhuǎn)變壓器來實(shí)現(xiàn)能源的輸入及轉(zhuǎn)矩信號的輸出,從而解決了旋轉(zhuǎn)動力傳遞系統(tǒng)中能源及信號可靠地在旋轉(zhuǎn)部分與靜止部分之間的傳遞問題。該傳感器還可同時(shí)實(shí)現(xiàn)旋轉(zhuǎn)軸轉(zhuǎn)速的測量,從而可方便地計(jì)算出軸輸出功率,因此利用該傳感器可實(shí)現(xiàn)轉(zhuǎn)矩、轉(zhuǎn)速及軸功率的多參數(shù)輸出。</p><p> 在一段特制的彈性軸上粘貼專用的測扭應(yīng)變片并組成電橋,以形成基礎(chǔ)扭矩傳感器,然后在軸上再固定能源環(huán)形旋轉(zhuǎn)變壓器的次級線圈、軸上印刷電路板和信號環(huán)旋轉(zhuǎn)變
21、壓器的初級線圈。電路板上包含整流穩(wěn)壓電源、儀表放大電路及V/F變換電路。在傳感器的外殼上固定著激磁電路、能源環(huán)形旋轉(zhuǎn)變壓器的初級線圈、信號環(huán)形變壓器的次級線圈及信號處理電路。</p><p> 1.2.2轉(zhuǎn)速測量原理</p><p> 轉(zhuǎn)矩傳感器在旋轉(zhuǎn)軸上安裝著60條齒縫的測速輪,在傳感器外殼上安裝的一只由發(fā)光二極管及光敏三極管組成的槽型光電開關(guān)架,測速輪的每一個(gè)齒將發(fā)光二極管的光線遮
22、擋住時(shí),光敏三極管就輸出一個(gè)高電平,當(dāng)光線通過齒縫射到光敏管的窗口時(shí),光敏管就輸出一個(gè)低電平,旋轉(zhuǎn)軸每轉(zhuǎn)一圈就可得到60個(gè)脈沖,因此,每秒鐘檢測到的脈沖數(shù)恰好等于每分鐘的轉(zhuǎn)速值。</p><p> 1.3 扭矩轉(zhuǎn)速數(shù)據(jù)采集系統(tǒng)的軟件功能及結(jié)構(gòu)</p><p> 數(shù)據(jù)采集的命令消息 記錄數(shù)據(jù)的命令消息</p><p>
23、;<b> 數(shù)據(jù)的實(shí)時(shí)記錄</b></p><p><b> N</b></p><p><b> Y</b></p><p> 圖1-5 程序結(jié)構(gòu)及流程示意圖</p><p> 該軟件工程完成的功能主要有:對轉(zhuǎn)矩轉(zhuǎn)速測量儀經(jīng)由RS232C串口送出的轉(zhuǎn)矩轉(zhuǎn)速數(shù)據(jù)進(jìn)行
24、動態(tài)采集,使用者可以自行規(guī)定采樣個(gè)數(shù),一旦完成了對數(shù)據(jù)的采集,使用者可以創(chuàng)建一個(gè)新表,并連接到數(shù)據(jù)庫,完成對數(shù)據(jù)的存貯。</p><p> 第二部分 軟件工程模塊的建立</p><p><b> 2.1用戶界面設(shè)計(jì)</b></p><p> 該界面所要完成得功能有:當(dāng)用戶點(diǎn)擊連接數(shù)據(jù)庫按鈕時(shí),會彈出數(shù)據(jù)源選擇對話框,配置完成候,彈出“
25、connect is ok”隨后,用戶可以創(chuàng)建新表。當(dāng)用戶點(diǎn)擊讀串口數(shù)據(jù)按鈕時(shí),如果計(jì)算機(jī)與RS232C串口連接成功則在扭矩轉(zhuǎn)速文本框中動態(tài)顯示測量儀的扭矩及轉(zhuǎn)速,當(dāng)用戶輸入采樣個(gè)數(shù)值以后,系統(tǒng)便開始在當(dāng)前采樣矩形列表框中顯示采樣所獲數(shù)據(jù),當(dāng)記錄完成后彈出寫入數(shù)據(jù)庫按鈕,隨后,即可將采樣數(shù)據(jù)記錄入庫。</p><p> 圖2-1 程序功能界面圖</p><p> 2.1.1消息及成員
26、函數(shù)之間的響應(yīng)關(guān)系</p><p> 窗口發(fā)出讀串口數(shù)據(jù)信息時(shí),將調(diào)用時(shí)間設(shè)置函數(shù)SetTimer(),時(shí)間響應(yīng)函數(shù)OnTimer(),串口通信類RS232C成員函數(shù),獲得端口數(shù)據(jù)GetComData(),連接函數(shù)ConnectOk(),記錄函數(shù)OnRecord(),停止讀串口數(shù)據(jù)函數(shù)OnStop().</p><p> 窗口發(fā)出連接數(shù)據(jù)庫信息時(shí),調(diào)用斷開數(shù)據(jù)庫函數(shù)OnClose(),
27、寫入數(shù)據(jù)庫函數(shù)OnWrite(),創(chuàng)建新表函數(shù)OnNewTable().具體響應(yīng)關(guān)系如圖2-2所示。</p><p> 圖2-2 系統(tǒng)消息與響應(yīng)函數(shù)系圖</p><p><b> 2.1.2設(shè)計(jì)步驟</b></p><p> 步驟一 :創(chuàng)建工程。使用VC++的AppWizard中的MFC AppWizard(exe)選項(xiàng)建立一個(gè)名為PI
28、100_RS232_VC60的Single Documents 工程。</p><p> 步驟二 :添加菜單資源。打開ResourceView標(biāo)簽,打開DIALOG,添加標(biāo)題為“扭矩轉(zhuǎn)速試驗(yàn)采樣記錄系統(tǒng)”的對話框,ID號為“IDD_EXAMPLE_FORM”。添加該菜單命令的目的是為了彈出系統(tǒng)的功能界面如圖2—3所示。</p><p> 步驟三 :該對話框所用到的控件的詳細(xì)說明如表2—
29、1所示:</p><p> 圖2-3 初始界面設(shè)計(jì)圖 </p><p> 表2-1 對話框的控件 </p><p> 在設(shè)計(jì)狀態(tài)下,保證選中該對話框的前提下,使用系統(tǒng)采單View\ClassWizard命令或使用快捷鍵[Ctrl+W],按照提示便可以完成生成新類的工作,將新生的類命名為ExampleView,基類為CformView。</p&g
30、t;<p> 步驟四 :使用ClassWizard添加菜單響應(yīng)函數(shù)以及為對話框的控件添加事件處理函數(shù)。使用ClassWizard命令,調(diào)用“MFC ClassWizard”對話框。先將 “Class name :”組合框選為“CExampleView”;在“Object ID:”列表框中,選中“IDD_EXAMPLE_FORM”;在Message:”列表框中,選中“Command”;最后用鼠標(biāo)左鍵單擊“Add Fucti
31、on”按鈕,以便添加該菜單命令消息函數(shù)。</p><p> 將“Class name :”組合框選為“CExampleView”項(xiàng),在“Object ID:”列表框中,分別用鼠標(biāo)選中表1—2中所列出的控件ID(每次只能選擇一個(gè));在“Message :”列表框中,選中“BN—CLICKED”消息,然后再用鼠標(biāo)左鍵單擊“Add Fuction”按鈕。此時(shí)屏幕上會彈出 Add Member Fu
32、ction對話框,如此重復(fù)多次就可以添加所需的消息控制函數(shù)。</p><p> 步驟五 : 為對話框類添加成員函數(shù)和成員變量,打開Class View標(biāo)簽,用鼠標(biāo)右鍵單擊類CExampleView,使用快捷菜單命令“Add Member Viariable”添加成員變量。使用ClassWizard菜單中“Add Member Fuction”命令添加如下主要成員函數(shù):</p><p>
33、 GetComportData( ) // 獲得串口數(shù)據(jù)</p><p> GetComportDatafor_JW1A( ) //在列表中顯示數(shù)據(jù)</p><p> OnConnect( ) //連接數(shù)據(jù)庫</p><p> OnRecord( )
34、 //記錄新數(shù)據(jù)</p><p> OnClose( ) //斷開數(shù)據(jù)庫</p><p> OnNewtable ( ) //創(chuàng)建新表</p><p> OnWrite( ) //寫入數(shù)據(jù)庫</p><p>
35、; OnRead( ) //讀串口數(shù)據(jù)</p><p> 編輯ExampleView.h文件如下:</p><p> // ExampleView.h : interface of the CExampleView class</p><p><b> //</b></p><
36、;p> /////////////////////////////////////////////////////////////////////////////</p><p> #if !defined(AFX_EXAMPLEVIEW_H__43802042_B656_11D4_8741_82CF81DF7355__INCLUDED_)</p><p> #define A
37、FX_EXAMPLEVIEW_H__43802042_B656_11D4_8741_82CF81DF7355__INCLUDED_</p><p> #if _MSC_VER > 1000</p><p> #pragma once</p><p> #endif // _MSC_VER > 1000</p><p> #
38、include "modalodbc.h"</p><p> struct s_data //為將轉(zhuǎn)速扭矩測量數(shù)據(jù)放入數(shù)據(jù)庫定義的一種數(shù)據(jù)結(jié)構(gòu)</p><p><b> {</b></p><p> double m_data;</p><p> double n_data;<
39、/p><p><b> };</b></p><p> class CExampleView : public CFormView</p><p><b> {</b></p><p> protected: // create from serialization only</p>
40、<p> CExampleView();</p><p> DECLARE_DYNCREATE(CExampleView)</p><p><b> public:</b></p><p> //{{AFX_DATA(CExampleView)</p><p> enum { IDD = IDD_
41、EXAMPLE_FORM };</p><p> CEditm_torque; //定義的扭矩變量</p><p> CEditm_rpm; //定義的轉(zhuǎn)速變量</p><p> //}}AFX_DATA</p><p> mydbclass db;</p><p> // Att
42、ributes</p><p><b> public:</b></p><p> CExampleDoc* GetDocument();</p><p> // Operations</p><p><b> public:</b></p><p> class
43、CRS232 *RS232; //定義的串口通信類</p><p> void GetComPortData(); //獲得串口數(shù)據(jù)顯示采集所獲的數(shù)據(jù)</p><p> // Overrides</p><p> // ClassWizard generated virtual function overrides
44、</p><p> //{{AFX_VIRTUAL(CExampleView)</p><p><b> public:</b></p><p> virtual BOOL PreCreateWindow(CREATESTRUCT& cs);</p><p> protected:</p>
45、<p> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p> virtual void OnInitialUpdate(); // called first time after construct</p><p> //}}AFX_VIRTUAL</p>
46、<p> // Implementation</p><p><b> public:</b></p><p> char TBName[50];</p><p> int CurrentNum;</p><p> int recnum;</p><p> BOOL Be
47、ginRecord;</p><p> BOOL Connected;</p><p> s_data * samp_data;</p><p> BOOL CONNECTOK();</p><p> virtual ~CExampleView();</p><p> #ifdef _DEBUG</p&
48、gt;<p> virtual void AssertValid() const;</p><p> virtual void Dump(CDumpContext& dc) const;</p><p><b> #endif</b></p><p> protected:</p><p>
49、 // Generated message map functions</p><p> protected:</p><p> //{{AFX_MSG(CExampleView)</p><p> afx_msg void OnRead (); //讀串口數(shù)據(jù)</p><p> afx_ms
50、g void OnTimer(UINT nIDEvent); //對定時(shí)器的響應(yīng)</p><p> afx_msg void OnConnect(); //連接數(shù)據(jù)庫</p><p> afx_msg void OnRecord(); //記錄新數(shù)據(jù)</p><p> afx_m
51、sg void OnShowWindow(BOOL bShow, UINT nStatus); //按鈕的顯示與隱藏</p><p> afx_msg void OnClose(); //斷開數(shù)據(jù)庫</p><p> afx_msg void OnReadStop(); //停止讀串口數(shù)據(jù)</p>&l
52、t;p> afx_msg void OnNewtable(); //創(chuàng)建新表</p><p> afx_msg void OnWrite(); //寫入數(shù)據(jù)庫</p><p> //afx_msg void OnChangeEDITTorque(); </p><p> /
53、/ afx_msg void OnChangeEDITRpm();</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></p><p> #ifndef _DEBUG // debug version in Exam
54、pleView.cpp</p><p> inline CExampleDoc* CExampleView::GetDocument()</p><p> { return (CExampleDoc*)m_pDocument; }</p><p><b> #endif</b></p><p> ////////
55、/////////////////////////////////////////////////////////////////////</p><p> //{{AFX_INSERT_LOCATION}}</p><p> // Microsoft Visual C++ will insert additional declarations immediately before t
56、he previous line.</p><p> #endif // !defined(AFX_EXAMPLEVIEW_H__43802042_B656_11D4_8741_82CF81DF7355__INCLUDED_)</p><p> 步驟六 :為各個(gè)成員函數(shù)添加代碼。添加完成所有成員函數(shù)和成員變量之后,實(shí)現(xiàn)這些成員函數(shù),該類的完整實(shí)現(xiàn)代碼如下:</p><
57、;p> // ExampleView.cpp : implementation of the CExampleView class</p><p><b> //</b></p><p> #include <stdafx.h></p><p> #include <math.h></p>&
58、lt;p> #include "stdafx.h"</p><p> #include "Example.h"</p><p> #include "RS232.h"</p><p> #include "ExampleDoc.h"</p><p>
59、 #include "ExampleView.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = __FILE__;</p&
60、gt;<p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CExampleView</p><p> IMPLEMENT_DYNCREAT
61、E(CExampleView, CFormView)</p><p> BEGIN_MESSAGE_MAP(CExampleView, CFormView)</p><p> //{{AFX_MSG_MAP(CExampleView)</p><p> ON_BN_CLICKED(IDC_Test, OnTest)</p><p>
62、ON_WM_TIMER()</p><p> ON_BN_CLICKED(IDC_BUTTON1, OnConnect)</p><p> ON_BN_CLICKED(IDC_BUTTON3, OnRecord)</p><p> ON_WM_SHOWWINDOW()</p><p> ON_BN_CLICKED(IDC_BUTTON
63、4, OnClose)</p><p> ON_BN_CLICKED(IDC_TEST_STOP, OnReadStop)</p><p> ON_BN_CLICKED(IDC_BUTTON_NEWTABLE, OnNewtable)</p><p> ON_BN_CLICKED(IDC_BUTTON_WRITE, OnWrite)</p>&l
64、t;p> // ON_EN_CHANGE(IDC_EDITTorque, OnChangeEDITTorque)</p><p> // ON_EN_CHANGE(IDC_EDITRpm, OnChangeEDITRpm)</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP()</p>
65、<p> /////////////////////////////////////////////////////////////////////////////</p><p> // CExampleView construction/destruction</p><p> CExampleView::CExampleView()</p><
66、p> : CFormView(CExampleView::IDD)</p><p><b> {</b></p><p> //{{AFX_DATA_INIT(CExampleView)</p><p> // NOTE: the ClassWizard will add member initialization here<
67、;/p><p> //}}AFX_DATA_INIT</p><p> // TODO: add construction code here</p><p> RS232 = new CRS232; // RS232通信類的引入</p><p> this->BeginRecord=FALSE;</p><
68、p><b> recnum=0;</b></p><p> this->Connected=false;</p><p> strcpy(TBName,"NULL");</p><p><b> }</b></p><p> CExampleView::~C
69、ExampleView()</p><p><b> {</b></p><p> delete RS232;</p><p> CWnd::KillTimer(1);</p><p> db.disconn();</p><p><b> }</b></p&
70、gt;<p> void CExampleView::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CFormView::DoDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(CExampleView)&
71、lt;/p><p> DDX_Control(pDX, IDC_EDITTorque, m_torque);</p><p> DDX_Control(pDX, IDC_EDITRpm, m_rpm);</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p>&
72、lt;p> BOOL CExampleView::PreCreateWindow(CREATESTRUCT& cs)</p><p><b> {</b></p><p> // TODO: Modify the Window class or styles here by modifying</p><p> // t
73、he CREATESTRUCT cs</p><p> return CFormView::PreCreateWindow(cs);</p><p><b> }</b></p><p> void CExampleView::OnInitialUpdate()</p><p><b> {</b
74、></p><p> CFormView::OnInitialUpdate();</p><p> GetParentFrame()->RecalcLayout();</p><p> ResizeParentToFit();</p><p><b> }</b></p><p&g
75、t; /////////////////////////////////////////////////////////////////////////////</p><p> // CExampleView diagnostics</p><p> #ifdef _DEBUG</p><p> void CExampleView::AssertValid
76、() const</p><p><b> {</b></p><p> CFormView::AssertValid();</p><p><b> }</b></p><p> void CExampleView::Dump(CDumpContext& dc) const<
77、/p><p><b> {</b></p><p> CFormView::Dump(dc);</p><p><b> }</b></p><p> CExampleDoc* CExampleView::GetDocument() // non-debug version is inline&
78、lt;/p><p><b> {</b></p><p> ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CExampleDoc)));</p><p> return (CExampleDoc*)m_pDocument;</p><p><b> }</
79、b></p><p> #endif //_DEBUG</p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CExampleView message handlers</p><p>
80、 void CExampleView::OnRead() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CWnd::SetTimer(1,1000,NULL);//設(shè)置發(fā)送響應(yīng)時(shí)間,每一秒發(fā)送一次
81、。</p><p> CButton *p=(CButton*)GetDlgItem(IDC_Test);</p><p> p->ShowWindow(SW_HIDE);</p><p> p=(CButton*)GetDlgItem(IDC_TEST_STOP);</p><p> p->ShowWindow(SW_S
82、HOW);</p><p> p=(CButton*)GetDlgItem(IDC_BUTTON3);</p><p> p->ShowWindow(SW_SHOW);</p><p><b> }</b></p><p> void CExampleView::GetComPortData() /
83、/獲得串口的數(shù)據(jù)</p><p><b> {</b></p><p> CWnd::KillTimer(1); //中斷對定時(shí)器的響應(yīng)</p><p> if(!ConnectOK()) //如果連接失敗</p><p><b>
84、{</b></p><p> AfxMessageBox("應(yīng)答失敗!");</p><p><b> return;</b></p><p><b> }</b></p><p> DWORD nNumberOfBytesToRead; //要讀取的
85、字節(jié)數(shù)</p><p> DWORD nBytesRead; //已經(jīng)讀取的字節(jié)數(shù)</p><p> char Buffer1[128], Buffer2[128]; //定義存放串口數(shù)據(jù)的緩沖區(qū)</p><p> char MyChar;</p><p><b> int i,
86、j;</b></p><p> bool NowGetn = false; //兩個(gè)數(shù)據(jù)之間的轉(zhuǎn)換標(biāo)識</p><p> char listchar[256];</p><p> for(i=0; i<128; i++)Buffer1[i] = Buffer2[i] = '\0';</p&g
87、t;<p> RS232->SetupComPort(); //Clear I/O buffer.</p><p> nNumberOfBytesToRead = 1; //指定要從串口讀取的字節(jié)數(shù)。</p><p> i = j = 0;</p><p><b> do {</b&
88、gt;</p><p> RS232->ReadComPort(nNumberOfBytesToRead, nBytesRead);</p><p> MyChar = RS232->ComBuffer[0];</p><p> if( NowGetn )</p><p><b> {</b><
89、/p><p> Buffer2[j] = MyChar;</p><p> if( MyChar == ',' )</p><p><b> {</b></p><p> NowGetn = false;</p><p> Buffer2[j] = '\0';
90、</p><p><b> }</b></p><p><b> j++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
91、;</p><p> Buffer1[i] = MyChar;</p><p> if( MyChar == ';' )</p><p><b> {</b></p><p> NowGetn = true;</p><p> Buffer1[i] = '\0
92、39;;</p><p><b> }</b></p><p><b> i++;</b></p><p><b> }</b></p><p> //strcpy(Buffer, RS232->ComBuffer);</p><p>&l
93、t;b> }</b></p><p> while( MyChar != ',' ); //顯示采集所獲的數(shù)據(jù)于編輯對話框中</p><p> // if( lstrlen(Buffer1) >= 6 && lstrlen(Buffer2) >= 6 )</p><p><
94、b> {</b></p><p> m_torque.SetWindowText( Buffer1 );</p><p> m_rpm.SetWindowText( Buffer2 );</p><p><b> }</b></p><p> if(BeginRecord)
95、 //開始記錄數(shù)據(jù)</p><p><b> {</b></p><p> if(CurrentNum<recnum) //如果當(dāng)前記錄的數(shù)據(jù)個(gè)數(shù)小于要記錄的個(gè)數(shù)</p><p> //將數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)數(shù)據(jù)記錄于列表框中</p><p><b> {</b></
96、p><p> char a[10];</p><p> samp_data[CurrentNum].m_data=0.0001*atof(Buffer1);</p><p> samp_data[CurrentNum].n_data=atof(Buffer2);</p><p> CListBox * pp=(CListBox*)GetD
97、lgItem(IDC_LISTM);</p><p> strcpy(listchar,"M:");</p><p> sprintf(a,"%10.4f",samp_data[CurrentNum].m_data);</p><p> strcat(listchar,a);</p><p>
98、strcat(listchar," N:");</p><p> strcat(listchar,Buffer2);</p><p> pp->AddString( listchar);</p><p> CurrentNum++;</p><p> CStatic *ps=(CStatic*)G
99、etDlgItem(IDC_STATIC_NUM);</p><p> itoa(CurrentNum,a,10);</p><p> ps->SetWindowText(a);</p><p><b> }</b></p><p> CButton * p2=(CButton*)GetDlgItem(ID
100、C_BUTTON_WRITE);</p><p> if((recnum>0)&&(CurrentNum==recnum)&&(Connected)&&((strcmp(TBName,"NULL")!=0)))</p><p> p2->ShowWindow(SW_SHOW);</p><
101、;p><b> else</b></p><p> p2->ShowWindow(SW_HIDE);</p><p><b> }</b></p><p> //此時(shí)出現(xiàn)可以記錄入數(shù)據(jù)庫的按鈕提示用戶可以將數(shù)據(jù)存入數(shù)據(jù)庫了</p><p> CWnd::SetTimer(1,1
102、000,NULL); //恢復(fù)對定時(shí)器的響應(yīng)</p><p><b> }</b></p><p> //---------------------------------------------------------------------------</p><p><b> /*</b></p>
103、<p> void CExampleView::GetComPortData_ForJW1A()</p><p><b> {</b></p><p> CWnd::KillTimer(1);</p><p> DWORD nNumberOfBytesToRead;</p><p> DWORD
104、nBytesRead;</p><p> char Buffer1[128], Buffer2[128];</p><p> char MyChar;</p><p><b> int i;</b></p><p> for(i=0; i<128; i++)Buffer1[i] = Buffer2[i] =
105、 '\0';</p><p> RS232->SetupComPort();//Clear I/O buffer.</p><p> nNumberOfBytesToRead = 1;</p><p><b> i = 0;</b></p><p><b> do {</b&
106、gt;</p><p> RS232->ReadComPort(nNumberOfBytesToRead, nBytesRead);</p><p> MyChar = RS232->ComBuffer[0];</p><p> Buffer1[i] = MyChar;</p><p><b> i++;<
107、/b></p><p> }while( i < 19 );</p><p> double M, n, Temp;</p><p><b> //M</b></p><p> Temp = Buffer1[1] - '0';</p><p> M = Te
108、mp * pow(10.0, 4.0);</p><p> Temp = Buffer1[2] - '0';</p><p> M += Temp * pow(10.0, 3.0);</p><p> Temp = Buffer1[3] - '0';</p><p> M += Temp * pow(1
109、0.0, 2.0);</p><p> Temp = Buffer1[4] - '0';</p><p> M += Temp * 10.0;</p><p> Temp = Buffer1[5] - '0';</p><p> M += Temp;</p><p> Temp
110、 = Buffer1[0];</p><p> if( Temp == '-' )M *= -1;</p><p> Temp = Buffer1[16]-'0';</p><p> M *= pow(10.0, -Temp);</p><p><b> //n</b></p
111、><p> Temp = Buffer1[6] - '0';</p><p> n = Temp * pow(10.0, 4.0);</p><p> Temp = Buffer1[7] - '0';</p><p> n += Temp * pow(10.0, 3.0);</p><
112、p> Temp = Buffer1[8] - '0';</p><p> n += Temp * pow(10.0, 2.0);</p><p> Temp = Buffer1[9] - '0';</p><p> n += Temp * 10.0;</p><p> Temp = Buffer
113、1[10] - '0';</p><p> n += Temp;</p><p> Temp = Buffer1[17]-'0';</p><p> n *= pow(10.0, -Temp);</p><p> sprintf(Buffer1, "%.2f", M);</p&
114、gt;<p> sprintf(Buffer2, "%.2f", n);</p><p> m_torque.SetWindowText( Buffer1 );</p><p> m_rpm.SetWindowText( Buffer2 );</p><p> CWnd::SetTimer(1,1000,NULL);<
115、/p><p><b> }</b></p><p> //---------------------------------------------------------------------------</p><p><b> */</b></p><p> void CExampleV
116、iew::OnTimer(UINT nIDEvent) //對定時(shí)器的響應(yīng)</p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> //For PI-100</p&
117、gt;<p> GetComPortData();</p><p> //For JW-1A</p><p> //GetComPortData_ForJW1A();</p><p> CFormView::OnTimer(nIDEvent);</p><p><b> }</b></p&g
118、t;<p> BOOL CExampleView::ConnectOK()</p><p><b> {</b></p><p> DWORD nNumberOfBytesToWrite;</p><p> DWORD nBytesWritten,nNumberOfBytesToRead,nBytesRead;</p
119、><p> nNumberOfBytesToWrite=4;</p><p> RS232->SetupComPort(); //初始化串口,準(zhǔn)備傳輸數(shù)據(jù)。</p><p> strcpy(RS232->ComBuffer,"RTS;"); </p><p> this->RS
120、232->WriteComPort(nNumberOfBytesToWrite,nBytesWritten);</p><p> nNumberOfBytesToRead=3;</p><p> RS232->ReadComPort(nNumberOfBytesToRead, nBytesRead);</p><p> RS232->ComB
121、uffer[2]='\0';</p><p> if(!strcmp(RS232->ComBuffer,"OK"))return false;</p><p> return true;</p><p><b> }</b></p><p> void CExampleV
122、iew::OnConnect () </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> if(db.step1(FALSE,m_hWnd)==SQL_SUCCESS)</p><p&
123、gt;<b> {</b></p><p> AfxMessageBox("connect is ok!");</p><p> CButton * p=(CButton *)GetDlgItem(IDC_BUTTON1);</p><p> p->ShowWindow(SW_HIDE);</p>
124、<p> p=(CButton *)GetDlgItem(IDC_BUTTON4);</p><p> p->ShowWindow(SW_SHOW);</p><p> Connected=true;</p><p> p=(CButton*)GetDlgItem(IDC_BUTTON_NEWTABLE);</p><p
125、> p->ShowWindow(SW_SHOW);</p><p><b> }</b></p><p><b> }</b></p><p> void CExampleView::OnRecord () </p><p><b> {</b></
126、p><p> // TODO: Add your control notification handler code here</p><p> this->BeginRecord=TRUE;</p><p> CString str;</p><p> CEdit *p=(CEdit *)GetDlgItem(IDC_EDIT1_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的電機(jī)轉(zhuǎn)速測量系統(tǒng)
- 基于單片機(jī)的轉(zhuǎn)速測量系統(tǒng)[1]
- 基于51單片機(jī)的轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)論文
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)轉(zhuǎn)速測量系統(tǒng)
- 基于51單片機(jī)的轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)論文
- 基于單片機(jī)的溫度測量系統(tǒng)設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于單片機(jī)溫度測量系統(tǒng)的設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于單片機(jī)溫控風(fēng)扇轉(zhuǎn)速的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 電機(jī)轉(zhuǎn)速信號的單片機(jī)測量系統(tǒng)設(shè)計(jì)【畢業(yè)論文】
- 基于at89c52單片機(jī)的轉(zhuǎn)速測量系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的脈搏測量儀的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】
- 電機(jī)轉(zhuǎn)速信號的單片機(jī)測量系統(tǒng)設(shè)計(jì)【開題報(bào)告】
- 基于單片機(jī)的脈搏測量儀的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】
評論
0/150
提交評論