北京科技大學軟件課程設計報告-自動化專業-供參考_第1頁
北京科技大學軟件課程設計報告-自動化專業-供參考_第2頁
北京科技大學軟件課程設計報告-自動化專業-供參考_第3頁
北京科技大學軟件課程設計報告-自動化專業-供參考_第4頁
北京科技大學軟件課程設計報告-自動化專業-供參考_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、北京科技大學課程設計(軟件設計)報告班 級: 姓 名: 學 號: 同組同學: 指導教師: 曾 慧 日 期: 2014 年 11 月 13 日目 錄 TOC o 1-3 h z u HYPERLINK l _Toc30886 1設計內容 PAGEREF _Toc30886 1 HYPERLINK l _Toc3284 1.1實驗目的 PAGEREF _Toc3284 1 HYPERLINK l _Toc26588 1.2實驗內容 PAGEREF _Toc26588 1 HYPERLINK l _Toc11196 2應用程序總體分析與設計 PAGEREF _Toc11196 1 HYPERLINK

2、 l _Toc20008 2.1項目建立 PAGEREF _Toc20008 2 HYPERLINK l _Toc5614 2.1.1建立一個Visual Basic工程 PAGEREF _Toc5614 2 HYPERLINK l _Toc1517 2.2 OPC建立 PAGEREF _Toc1517 2 HYPERLINK l _Toc8877 2.2.1設置OPC包裝DLL PAGEREF _Toc8877 2 HYPERLINK l _Toc32294 2.2.2建立一個OPC對象 PAGEREF _Toc32294 2 HYPERLINK l _Toc11969 3應用程序各功能模塊

3、分析與設計 PAGEREF _Toc11969 4 HYPERLINK l _Toc2892 3.1界面設計 PAGEREF _Toc2892 4 HYPERLINK l _Toc17483 3.2服務器的斷開與鏈接 PAGEREF _Toc17483 5 HYPERLINK l _Toc8285 3.2.1連接OPC服務器和建立OPC組 PAGEREF _Toc8285 5 HYPERLINK l _Toc24104 3.2.2添加OPC標簽 PAGEREF _Toc24104 5 HYPERLINK l _Toc14646 3.2.3斷開服務器 PAGEREF _Toc14646 6 HY

4、PERLINK l _Toc2924 3.3數據讀取與顯示 PAGEREF _Toc2924 7 HYPERLINK l _Toc18589 3.3.1棒狀圖顯示 PAGEREF _Toc18589 7 HYPERLINK l _Toc7104 3.3.2文本框顯示 PAGEREF _Toc7104 7 HYPERLINK l _Toc20393 3.4數據保存 PAGEREF _Toc20393 8 HYPERLINK l _Toc934 3.5實時曲線繪制 PAGEREF _Toc934 8 HYPERLINK l _Toc12657 4程序測試 PAGEREF _Toc12657 10

5、HYPERLINK l _Toc24567 4.1測試過程 PAGEREF _Toc24567 10 HYPERLINK l _Toc11558 4.2測試結果 PAGEREF _Toc11558 10 HYPERLINK l _Toc31240 5程序文檔 PAGEREF _Toc31240 12 HYPERLINK l _Toc31234 5.1使用說明 PAGEREF _Toc31234 12 HYPERLINK l _Toc31333 5.2程序清單 PAGEREF _Toc31333 12 HYPERLINK l _Toc7094 6總結 PAGEREF _Toc7094 17 HY

6、PERLINK l _Toc9735 6.1問題與解決 PAGEREF _Toc9735 17 HYPERLINK l _Toc31545 6.2感想與致謝 PAGEREF _Toc31545 17 HYPERLINK l _Toc8800 7參考文獻 PAGEREF _Toc8800 181設計內容1.1實驗目的通過實際操作進一步了解OPC的各種概念,掌握OPC客戶端的編寫方法。并對微軟的DCOM有一定的了解,要求通過合適的DCOM配置,使客戶端能夠讀取網絡上服務器中的數據。1.2實驗內容1)利用VB語言編寫出一個簡單的OPC客戶端程序,要求這個客戶端能夠讀取服務器中的數據,并顯示出來。2)

7、配置DCOM,使客戶端能夠能過DCOM讀取另一臺服務器上的數據。2應用程序總體分析與設計應用程序與OPC服務器進行連接并讀取服務器端的數據,同時把讀取到的數據通過棒柱和文本框顯示,并可以保存數據便于查找,同時應用了Picture控件對實時數據變化趨勢分析。2.1項目建立2.1.1建立一個Visual Basic工程1)啟動Visual Basic,新建一個Visual Basic工程。選擇Standard EXE作為新建工程的類型。圖2.1 Visual Basic 工程的建立2.2 OPC建立2.2.1設置OPC包裝DLL對OPC包裝DLL進行注冊:從Visual Basic菜單里選擇Pro

8、ject-References。在Available References表示中,選擇 OPC Automation 2.0。圖2.2 引用的設置2.2.2建立一個OPC對象在Visual Basic里,是以對象的單位對OPC服務器進行訪問。OPC自動化接口是由以下四種對象所定義。OPC服務器OPC組(OPC組集合)OPC標簽(OPC標簽集合)OPC瀏覽器變量聲明圖2.3 OPC對象變量的聲明其中,部分變量聲明意義見表所示。表2.1 OPC對象變量的聲明變量名說明objServerOPCServer對象,用于連接OPC服務器。objGroupsOPCGroups對象,用于添加OPC組的OPC組

9、集合objTestGrpOPCGroup對象,演示用的OPC組。objItemsOPCItems對象,用于添加OPC標簽的OPC標簽集合。lServerHandles()長整型的數組,用于保存OPC標簽的服務器句柄。3應用程序各功能模塊分析與設計3.1界面設計圖3.1界面效果圖窗體中所使用的控件種類如表3.1所示。表3.1 FmMain的控件控件名稱窗體(Form)FmMain命令按鈕(CommandButton)BtnConnect命令按鈕(CommandButton)BtnAddItem命令按鈕(CommandButton)BtnQuit命令按鈕(CommandButton)BtnSave

10、命令按鈕(CommandButton)BtnStop命令按鈕(CommandButton)Btndraw定時器(Timer)tmUpdate定時器(Timer)dataUpdate對話框(CommonDialog)CommonDialog1圖像(PictureBox)picBar(作為數組使用,從左開始12)標簽(Label)lbBar(作為數組使用。從左開如12)文本框(TextBox)dataInfo圖像(Picture)Picture13.2服務器的斷開與鏈接3.2.1連接OPC服務器和建立OPC組這里用“NEW”關鍵詞生成OPC服務器的對象,然后調用OPC服務器對象的“Connect”

11、方法,和OPC服務器連接。Connect子程序如下:連接OPC服務器和建立OPC組Sub Connect(strProgID As String, Optional strNode As String) If objServer Is Nothing Then 建立一個OPC服務器對象 Set objServer = New OPCServer End If If objServer.ServerState = OPCDisconnected Then 連接OPC服務器 objServer.Connect strProgID, strNode End If If objGroups Is No

12、thing Then 建立一個OPC組集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then 添加一個OPC組 Set objTestGrp = objGroups.Add(TestGrp) End IfEnd Sub3.2.2添加OPC標簽對OPC服務器進行訪問前,必須先在OPC組里添加要訪問的OPC標簽。AddItem子程序如下: 添加OPC標簽Sub AddItem() Dim strItemIDs(8) As String Dim lClientHandles(2) As Long Dim

13、lErrors() As Long Dim I As Integer If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Nothing Then If objItems.Count 0 Then Exit Sub End If End If 設置組活動狀態 objTestGrp.IsActive = True 取消組非同期通知 objTestGrp.IsSubscribed = False 建立OPC項集合 Set objItems = objTestGrp.OPCItems 生成標簽的項標識符 For I = 1

14、 To 2 strItemIDs(I) = TAG lClientHandles(I) = I Next 添加OPC項 Call objItems.AddItems(8, strItemIDs, _ lClientHandles, lServerHandles, lErrors)End Sub3.2.3斷開服務器連接著OPC服務器的OPC應用程序,在退出前必須斷開和OPC服務器的連接。因為OPC服務器并不知道OPC應用程序的退出,如果不先斷開連接,那么OPC服務器使用的計算機資源就不被釋放。如果這樣的問題反復發生,久而久之,連續運轉的自動控制系統可能會使計算機資源漸漸枯竭從而發生嚴重問題。Di

15、sconnect子程序如下:斷開OPC服務器Sub Disconnect()Dim lErrors() As Long If Not objItems Is Nothing Then If objItems.Count 0 Then 清除OPC項 objItems.Remove 2, lServerHandles, lErrors End If Set objItems = Nothing End If If Not objTestGrp Is Nothing Then 清除OPC組 objGroups.Remove TestGrp Set objTestGrp = Nothing End I

16、f If Not objGroups Is Nothing Then Set objGroups = Nothing End If If Not objServer Is Nothing Then If objServer.ServerState OPCDisconnected Then 斷開OPC服務器. objServer.Disconnect End If Set objServer = Nothing End IfEnd Sub3.3數據讀取與顯示客戶端使用2個定時器TmUpdate和dataUpdate,定時為1S。在TmUpdate事件中調用同步讀取數據函數SyncRead,每隔1

17、S讀取服務器端的數據,同時對棒柱的顯示進行刷新。在定時器dataUpdate事件中讀取系統時間并不斷刷新TextBox的內容,顯示當前的時間和數據。3.3.1棒狀圖顯示為了是顯示更加人性化,對不同范圍的數值顯示采用了不同的顏色。當數值過低或者過高時分別顯示深藍色和紅色以示警告。中間值顯示綠色和橙黃色。程序代碼如下所示:SyncRead OPCCache, vtItemValues, lErrors 棒圖的表示For I = 1 To 2 數據的格式化strBuf = Format(vtItemValues(I), #.000) 表示數據字符串lbBar(I).Caption = strBufd

18、ataTemp(I) = strBuf 計算棒的寬和高nWidth = picBar(I).ScaleWidthnHeight = picBar(I).ScaleHeightsglScale = vtItemValues(I) / 100nDrawHeight = CInt(nHeight * sglScale) 清除現棒圖 picBar(I).Cls 繪制棒圖 If vtItemValues(I) tHoldValue1 Then picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(0, 0, 255), BF E

19、lse If vtItemValues(I) 0 Then Open CommonDialog1.FileName For Output As #1 Print #1, dataInfo.Text Close #1 SaveFlag = True End IfEnd Sub3.5實時曲線繪制Picture是功能強大坐標圖繪制軟件,本次設計中采用VB中Picture控件進行實時曲線繪制。在設計時添加2個系列曲線,代表兩個通道,即溫度和液位與時間的關系。并在圖中繪出兩條警戒線,能更直觀地比對數據的變化。 圖3.2Picture設置部分程序代碼如下所示:Picture1.ClsIf Check1.V

20、alue = 0 Then If col = 2 Then For w = 1 To 2 Picture1.PSet (px(1, w), py(1, w) For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w), QBColor(w * 2)Next jNext w End If 畫兩條警戒線 Picture1.DrawWidth = 2 Picture1.Line (0, 150)-(200, 150), vbRed Picture1.Line (0, 600)-(200, 600), vbBlue 指示警戒值,警戒值以上改變顯

21、示顏色If lbBar(1).Caption 150 Or lbBar(2).Caption 600 Then Label7.Caption = 出現異常! Else Label7.Caption = 正在觀測! End If If lbBar(1).Caption 150 Then Text2.Text = 溫度過高! picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BF End If If lbBar(1).Caption 600 ThenText1.Text = 液面過高!pic

22、Bar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BF4程序測試4.1測試過程運行程序后,先單擊“連接”按鈕,保證客戶端連接上組態王數據庫。然后單擊“加載”按鈕,觀察數據時候正常顯示,棒柱的數據和顏色是否正常,文本框內的時間和數據是否正常以及看是否能實時顯示曲線。單擊“保存數據”按鈕,彈出對話框,選擇路徑,填寫文件名后保存數據。最后單擊“退出”按鈕,看成否正常退出程序。運行程序,注意將bin文件夾放到工程下。4.2測試結果從測試結果上看,整個程序沒有bug,各個功能正常。從繪圖的結果可以看出從

23、服務器傳來的數據是按正弦規律變化的。圖4.1程序測試圖一圖4.2程序測試圖二 圖4.3保存數據5程序文檔5.1使用說明(1)運行程序,連接成功后,啟動,此時棒狀圖以及文本框內就會顯示反應罐溫度和反應罐液位的值。(2)當數據積累到一定程度之后,點擊“繪圖”按鈕,應罐溫度和反應罐液位數值變化曲線就會顯示出來,每點擊一次,就會刷新一次。從而實現了數據的實時顯示。程序中數據刷新為1s,因此在點擊“繪圖”按鈕時頻率最好不要超過1s。(3)保存數據。點擊“保存”按鈕,會彈出對話框,輸入響應的文件名保存便可。保存數據后,所有歷史數據會被清空。5.2程序清單Option Base 1Option Explic

24、itDim WithEvents objServer As OPCServerDim objGroups As OPCGroupsDim objTestGrp As OPCGroupDim objItems As OPCItemsDim lServerHandles() As LongDim px(200, 2) As Single, py(200, 2) As SingleDim col As IntegerDim pl As IntegerDim dataTemp(2) As StringDim DrawFlag As BooleanDim SaveFlag As Boolean Sub

25、Connect(strProgID As String, Optional strNode As String) If objServer Is Nothing Then 建立一個OPC服務器對象 Set objServer = New OPCServer End If If objServer.ServerState = OPCDisconnected Then 連接OPC服務器 objServer.Connect strProgID, strNode End If If objGroups Is Nothing Then 建立一個OPC組集合 Set objGroups = objServ

26、er.OPCGroups End If If objTestGrp Is Nothing Then 添加一個OPC組 Set objTestGrp = objGroups.Add(TestGrp) End If End SubSub AddItem() Dim strItemIDs(2) As String Dim lClientHandles(2) As Long Dim lErrors() As Long Dim I As Integer If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Nothing The

27、n If objItems.Count 0 Then Exit Sub End If End If 設置組活動狀態 objTestGrp.IsActive = True 取消組非同期通知 objTestGrp.IsSubscribed = False 建立OPC項集合 Set objItems = objTestGrp.OPCItems 生成標簽的項標識符 strItemIDs(1) = 反應罐溫度.Value strItemIDs(2) = 反應罐液位.Value lClientHandles(1) = 1 lClientHandles(2) = 2 添加OPC項 Call objItems

28、.AddItems(2, strItemIDs, _ lClientHandles, lServerHandles, lErrors)End SubSub Disconnect()Dim lErrors() As Long If Not objItems Is Nothing Then If objItems.Count 0 Then 清除OPC項 objItems.Remove 2, lServerHandles, lErrors End If Set objItems = Nothing End If If Not objTestGrp Is Nothing Then 清除OPC組 obj

29、Groups.Remove TestGrp Set objTestGrp = Nothing End If If Not objGroups Is Nothing Then Set objGroups = Nothing End If If Not objServer Is Nothing Then If objServer.ServerState OPCDisconnected Then 斷開OPC服務器. objServer.Disconnect End If Set objServer = Nothing End If End SubPrivate Sub btnConnect_Clic

30、k() 調用Connect子程序 Call Connect(kingview.view.1)Label7.Caption = 與服務器連接成功!End SubPrivate Sub btnAddItem_Click() 調用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count 0 Then 啟動定時器 tmUpdate.Enabled = True dataUpdate.Enabled = True Else End If End If End SubPrivate Sub

31、btnQuit_Click() 卸載窗體 Unload fmMainEnd SubPrivate Sub Form_Unload(Cancel As Integer) 調用Disconnect子程序 Call DisconnectEnd SubPrivate Sub tmUpdate_Timer() Dim vtItemValues() As Variant Dim lErrors() As Long Dim strBuf As String Dim nWidth As Integer Dim nHeight As Integer Dim nDrawHeight As Integer Dim

32、sglScale As Single Dim I As Integer, u As Integer, j As Integer, s As Integer, t As Integer, w As Integer Dim X As Single, Y As Single 同期讀取 SyncRead OPCCache, vtItemValues, lErrors 棒圖的表示 For I = 1 To 2 數據的格式化 strBuf = Format(vtItemValues(I), #.000) 表示數據字符串 lbBar(I).Caption = strBuf dataTemp(I) = str

33、Buf 計算棒的寬和高 nWidth = picBar(I).ScaleWidth nHeight = picBar(I).ScaleHeight sglScale = vtItemValues(I) / 700 nDrawHeight = CInt(nHeight * sglScale) 清除現棒圖 picBar(I).Cls 繪制棒圖 picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BF Next曲線繪制Picture1.ClsIf Check1.Value = 0 Then If

34、 col = 2 Then For w = 1 To 2 Picture1.PSet (px(1, w), py(1, w) For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w), QBColor(w * 2)Next jNext w End If 畫兩條警戒線 Picture1.DrawWidth = 2 Picture1.Line (0, 150)-(200, 150), vbRed Picture1.Line (0, 600)-(200, 600), vbBlue 指示警戒值,警戒值以上改變顯示顏色If lbBar(1).C

35、aption 150 Or lbBar(2).Caption 600 Then Label7.Caption = 出現異常! Else Label7.Caption = 正在觀測! End If If lbBar(1).Caption 150 Then Text2.Text = 溫度過高! picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BF End If If lbBar(1).Caption 600 ThenText1.Text = 液面過高!picBar(2).Line (0,

36、nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption 0 Then 同期讀取 objTestGrp.SyncRead nSource, 2, lServerHandles, _ vtItemValues, lErrorsEnd IfEnd SubPrivate Sub Form_Load() tmUpdate.Enabled = False tmUpdate.Interval = 100 dataUpdate.Enabled = False dataUpdate.Inter

37、val = 1000 初始化時間變量 col = 1 pl = 0 調用時間函數,顯示時間 Call date1初始化坐標范圍 Picture1.Scale (0, 750)-(200, 0) End Sub調用系統時間子函數Sub date1() Label3.Caption = Trim(Str(Year(Date) + 年 + Trim(Str(Month(Date) + 月 + Trim(Str(Day(Date) + 日 Label4.Caption = 現在時間: + Trim(Str(Hour(Time) + 時 + Trim(Str(Minute(Time) + 分 + Trim(Str(Second(Time) + 秒 End Sub保存數據事件處理Private Sub BtnSave_Click() tmUpdate.E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論