基于單片機的測量軸轉(zhuǎn)速扭矩系統(tǒng)的軟件實現(xiàn)畢業(yè)設(shè)計_第1頁
已閱讀1頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  XX大學(xué)XX學(xué)院</b></p><p><b>  畢業(yè)設(shè)計(論文) </b></p><p>  題 目 測量軸轉(zhuǎn)速扭矩系統(tǒng)的軟件實現(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)的軟件實現(xiàn)</p>

3、<p><b>  摘要:</b></p><p>  在深入研究軸轉(zhuǎn)矩轉(zhuǎn)速測量儀工作原理基礎(chǔ)上,采用面向?qū)ο蟪绦蛟O(shè)計語言VC++6.0,建立一個對軸轉(zhuǎn)速,扭矩值動態(tài)測量采集的系統(tǒng),繼而完成對數(shù)據(jù)的存貯。</p><p><b>  關(guān)鍵詞:</b></p><p>  面向?qū)ο蟮某绦蛟O(shè)計 開放數(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è)計概述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è)計8</p><p>  2.1.1消息及成員函數(shù)之間的響應(yīng)關(guān)系9</p><p>  2.1.2設(shè)計步驟9</p><p>  2.2數(shù)據(jù)庫

10、設(shè)計25</p><p>  2.2.1數(shù)據(jù)庫整體框架設(shè)計25</p><p>  2.2.2完整實現(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è)計的收獲和反思51</p><p><b>  參考文獻:52</b></p><p><b>  前 言</b></p><p>  自1981年8月12日IBM公司的PC問世以來,PC的處理能力經(jīng)歷了一個驚人的發(fā)展過程?,F(xiàn)在PC正在大舉進入數(shù)據(jù)采集領(lǐng)域。事實上,作

12、為數(shù)據(jù)采集的主要部件,PC表現(xiàn)出了巨大的潛力。PC采用數(shù)字編碼格式,使得大規(guī)模瞬態(tài)采集和存儲數(shù)據(jù)成為可能。為基于大量數(shù)據(jù)的工業(yè)用分析設(shè)計軟件如ANSYS5.7提供了數(shù)據(jù)源,為工業(yè)過程控制領(lǐng)域自動控制的實施提供決策依據(jù)。 一些大型控制系統(tǒng)經(jīng)常采用VB作平臺,VC作為面向?qū)ο蟪绦?,并輔之以匯編語言作為I/O接口處理</p><p>  本次畢業(yè)設(shè)計實驗的儀器為一臺普通的轉(zhuǎn)速轉(zhuǎn)矩測量儀,通過轉(zhuǎn)矩傳感器實現(xiàn)轉(zhuǎn)矩、轉(zhuǎn)速及軸

13、功率的多參數(shù)輸出,并顯示在LED液晶控制面板上。但因為生產(chǎn)該儀器廠家,只提供與計算機通信相連的RS232接口,而未提供相關(guān)通信連接的軟件。故無法實現(xiàn)數(shù)據(jù)采集的智能化和計算機化。因此本次畢業(yè)設(shè)計選題的目的在于,基于該轉(zhuǎn)速轉(zhuǎn)矩測量儀的RS232接口的串口通信機制,利用Microsoft 提供的Visual C++編程開發(fā)工具,完成計算機與該儀器的智能通信,實現(xiàn)該儀器數(shù)據(jù)的動態(tài)采集,記錄,存入數(shù)據(jù)庫備查。</p><p&g

14、t;  第一部分 系統(tǒng)設(shè)計概述</p><p>  1.1數(shù)據(jù)采集系統(tǒng)的組成及其硬件結(jié)構(gòu)</p><p>  1.1.1典型的數(shù)據(jù)自動采集系統(tǒng)</p><p>  隨著人類社會的發(fā)展,利用計算機設(shè)備實現(xiàn)生產(chǎn)過程的自動化成為了提高生產(chǎn)力,減輕勞動強度的有效方法。由于大量設(shè)備的使用,必需隨時知道實際的情況,這就是監(jiān)視,通過計算機輔助數(shù)據(jù)采集過程可以實現(xiàn)對數(shù)據(jù)的自動處

15、理。圖1-1描述了一個簡單的計算機輔助數(shù)據(jù)采集系統(tǒng)的方框圖。計算機界與硬件接口通過合適的通信鏈路相連,硬件接口依次與相應(yīng)的傳感器相連,而傳感器對視眼中環(huán)境的變化作出相應(yīng)。傳感器將各種不同的現(xiàn)象轉(zhuǎn)換成電壓或者電流信號接口硬件將傳感器的輸出信號轉(zhuǎn)換成計算機可以識別的形式輸入計算機。</p><p>  圖1-1典型的數(shù)據(jù)自動采集系統(tǒng)</p><p>  相應(yīng)的我們對數(shù)據(jù)采集系統(tǒng)作出一點改動,便

16、可以作出工業(yè)上應(yīng)用廣泛的分布式監(jiān)控系統(tǒng)(Distributed Control System)如圖1-2所示。</p><p>  圖1-2計算機控制系統(tǒng)方框圖</p><p>  1.1.2轉(zhuǎn)矩轉(zhuǎn)速測量儀硬件結(jié)構(gòu)</p><p>  本次畢業(yè)設(shè)計所采用的轉(zhuǎn)矩轉(zhuǎn)速測量儀是由湖南湘儀動力有限公司生產(chǎn)的基于JN388數(shù)字式轉(zhuǎn)矩轉(zhuǎn)速傳感器和AT89C52單片機教學(xué)科研用轉(zhuǎn)

17、矩轉(zhuǎn)速測量儀,圖1-3給出了與單片機接口構(gòu)成的智能轉(zhuǎn)矩轉(zhuǎn)速測量儀的硬件電路結(jié)構(gòu)框圖。圖中,JN338型轉(zhuǎn)矩傳感器輸出的轉(zhuǎn)矩及轉(zhuǎn)速信號經(jīng)光耦隔離后送入單片機的T0、T1計數(shù)器,然后由T0和T1完成測頻計數(shù)功能,秒脈沖閘門由T2提供。這其中光耦的作用,一是電平轉(zhuǎn)換,把轉(zhuǎn)矩轉(zhuǎn)速信號電平轉(zhuǎn)換成TTL電平,二是提高單片機的抗干擾能力并保護單片機。</p><p>  圖1-3 智能轉(zhuǎn)矩轉(zhuǎn)速測量儀硬件電路結(jié)構(gòu)框圖</p

18、><p>  由單片機完成相應(yīng)的轉(zhuǎn)矩、轉(zhuǎn)速值的運算后,即可將轉(zhuǎn)矩、轉(zhuǎn)速及軸功率等參數(shù)保存并顯示輸出。本系統(tǒng)以AT89C52單片機為核心由IMP8132構(gòu)成電源監(jiān)控及看門狗電路以提高系統(tǒng)工作的可靠性,系統(tǒng)中擴展了一片I2C總線串行鐵電存儲器FM24256,它的主要作用是存儲參數(shù)設(shè)定值及采集的轉(zhuǎn)矩轉(zhuǎn)速值。內(nèi)含GB2312中文漢字庫的圖形點陣液晶顯示模塊OCMJX8C可用于構(gòu)成中文人機顯示界面,ICL232的作用是將單片

19、機的TTL電平轉(zhuǎn)換為RS-232電平,以便于和上位計算機進行通信。</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)變壓器來實現(xiàn)能源的輸入及轉(zhuǎn)矩信號的輸出,從而解決了旋轉(zhuǎn)動力傳遞系統(tǒng)中能源及信號可靠地在旋轉(zhuǎn)部分與靜止部分之間的傳遞問題。該傳感器還可同時實現(xiàn)旋轉(zhuǎn)軸轉(zhuǎn)速的測量,從而可方便地計算出軸輸出功率,因此利用該傳感器可實現(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)架,測速輪的每一個齒將發(fā)光二極管的光線遮

22、擋住時,光敏三極管就輸出一個高電平,當(dāng)光線通過齒縫射到光敏管的窗口時,光敏管就輸出一個低電平,旋轉(zhuǎn)軸每轉(zhuǎn)一圈就可得到60個脈沖,因此,每秒鐘檢測到的脈沖數(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ù)的實時記錄</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ù)進行

24、動態(tài)采集,使用者可以自行規(guī)定采樣個數(shù),一旦完成了對數(shù)據(jù)的采集,使用者可以創(chuàng)建一個新表,并連接到數(shù)據(jù)庫,完成對數(shù)據(jù)的存貯。</p><p>  第二部分 軟件工程模塊的建立</p><p><b>  2.1用戶界面設(shè)計</b></p><p>  該界面所要完成得功能有:當(dāng)用戶點擊連接數(shù)據(jù)庫按鈕時,會彈出數(shù)據(jù)源選擇對話框,配置完成候,彈出“

25、connect is ok”隨后,用戶可以創(chuàng)建新表。當(dāng)用戶點擊讀串口數(shù)據(jù)按鈕時,如果計算機與RS232C串口連接成功則在扭矩轉(zhuǎn)速文本框中動態(tài)顯示測量儀的扭矩及轉(zhuǎn)速,當(dāng)用戶輸入采樣個數(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ù)信息時,將調(diào)用時間設(shè)置函數(shù)SetTimer(),時間響應(yīng)函數(shù)OnTimer(),串口通信類RS232C成員函數(shù),獲得端口數(shù)據(jù)GetComData(),連接函數(shù)ConnectOk(),記錄函數(shù)OnRecord(),停止讀串口數(shù)據(jù)函數(shù)OnStop().</p><p>  窗口發(fā)出連接數(shù)據(jù)庫信息時,調(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è)計步驟</b></p><p>  步驟一 :創(chuàng)建工程。使用VC++的AppWizard中的MFC AppWizard(exe)選項建立一個名為PI

28、100_RS232_VC60的Single Documents 工程。</p><p>  步驟二 :添加菜單資源。打開ResourceView標(biāo)簽,打開DIALOG,添加標(biāo)題為“扭矩轉(zhuǎn)速試驗采樣記錄系統(tǒng)”的對話框,ID號為“IDD_EXAMPLE_FORM”。添加該菜單命令的目的是為了彈出系統(tǒng)的功能界面如圖2—3所示。</p><p>  步驟三 :該對話框所用到的控件的詳細說明如表2—

29、1所示:</p><p>  圖2-3 初始界面設(shè)計圖 </p><p>  表2-1 對話框的控件 </p><p>  在設(shè)計狀態(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”項,在“Object ID:”列表框中,分別用鼠標(biāo)選中表1—2中所列出的控件ID(每次只能選擇一個);在“Message :”列表框中,選中“BN—CLICKED”消息,然后再用鼠標(biāo)左鍵單擊“Add Fuction”按鈕。此時屏幕上會彈出 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); //對定時器的響應(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>  步驟六 :為各個成員函數(shù)添加代碼。添加完成所有成員函數(shù)和成員變量之后,實現(xiàn)這些成員函數(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)時間,每一秒發(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); //中斷對定時器的響應(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; //兩個數(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ù)個數(shù)小于要記錄的個數(shù)</p><p>  //將數(shù)據(jù)轉(zhuǎ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>  //此時出現(xiàn)可以記錄入數(shù)據(jù)庫的按鈕提示用戶可以將數(shù)據(jù)存入數(shù)據(jù)庫了</p><p>  CWnd::SetTimer(1,1

102、000,NULL); //恢復(fù)對定時器的響應(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) //對定時器的響應(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論