




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、北京科技大學課程設計(軟件設計)報告班級:姓名:學號:同組同學:指導教師:曾慧日期: 2014年11 月13 日北京科技大學自動化學院課程設計(軟件設計) 報告目錄1設計內容 .11.1實驗目的 .11.2實驗內容 .12應用程序總體分析與設計 .12.1項目建立 .22.1.1建立一個 Visual Basic工程 .22.2 OPC建立 .22.2.1設置 OPC包裝 DLL.22.2.2建立一個 OPC對象 .23應用程序各功能模塊分析與設計 .43.1界面設計 .43.2服務器的斷開與鏈接 .53.2.1連接 OPC服務器和建立 OPC組 .53.2.2添加 OPC標簽 .53.2.3
2、斷開服務器 .63.3數據讀取與顯示 .73.3.1棒狀圖顯示 .73.3.2文本框顯示 .73.4數據保存 .83.5實時曲線繪制 .84程序測試 .104.1測試過程 .104.2測試結果 .105程序文檔 .125.1使用說明 .125.2程序清單 .126總結 .17i北京科技大學自動化學院課程設計(軟件設計) 報告6.1 問題與解決176.2 感想與致謝177 參考文獻18ii北京科技大學自動化學院課程設計(軟件設計) 報告1 設計內容1.1 實驗目的通過實際操作進一步了解 OPC的各種概念,掌握 OPC客戶端的編寫方法。并對微軟的 DCOM 有一定的了解,要求通過合適的 DCOM
3、配置,使客戶端能夠讀取網絡上服務器中的數據。1.2 實驗內容1)利用 VB 語言編寫出一個簡單的OPC客戶端程序,要求這個客戶端能夠讀取服務器中的數據,并顯示出來。2)配置 DCOM,使客戶端能夠能過DCOM讀取另一臺服務器上的數據。2 應用程序總體分析與設計應用程序與 OPC服務器進行連接并讀取服務器端的數據,同時把讀取到的數據通過棒柱和文本框顯示,并可以保存數據便于查找,同時應用了Picture 控件對實時數據變化趨勢分析。1北京科技大學自動化學院課程設計(軟件設計) 報告2.1 項目建立2.1.1 建立一個 Visual Basic工程1)啟動 Visual Basic,新建一個 Vis
4、ual Basic工程。選擇 Standard EXE作為新建工程的類型。圖 2.1 Visual Basic 工程的建立2.2 OPC 建立2.2.1 設置 OPC包裝 DLL對 OPC包裝 DLL進行注冊:從 Visual Basic菜單里選擇 Project-References。在 Available References表示中,選擇OPC Automation 2.0。圖 2.2 引用的設置2.2.2 建立一個 OPC 對象在 Visual Basic里,是以對象的單位對 OPC服務器進行訪問。 OPC自動化接口是由以下四種對象所定義。2北京科技大學自動化學院課程設計(軟件設計) 報
5、告OPC服務器OPC組( OPC組集合)OPC標簽( OPC標簽集合)OPC瀏覽器1) 變量聲明圖 2.3 OPC對象變量的聲明其中,部分變量聲明意義見表所示。表 2.1 OPC對象變量的聲明變量名說明objServerOPCServer對象,用于連接 OPC服務器。objGroupsOPCGroups對象,用于添加 OPC組的 OPC組集合objTestGrpOPCGroup對象,演示用的OPC組。objItemsOPCItems對象,用于添加OPC標簽的 OPC標簽集合。lServerHandles()長整型的數組,用于保存OPC標簽的服務器句柄。3北京科技大學自動化學院課程設計(軟件設計
6、) 報告3 應用程序各功能模塊分析與設計3.1 界面設計圖 3.1 界面效果圖窗體中所使用的控件種類如表 3.1 所示。表 3.1 FmMain 的控件控件名稱窗體 (Form)FmMain命令按鈕 (CommandButton)BtnConnect命令按鈕 (CommandButton)BtnAddItem命令按鈕 (CommandButton)BtnQuit命令按鈕 (CommandButton)BtnSave命令按鈕 (CommandButton)BtnStop命令按鈕 (CommandButton)Btndraw定時器 (Timer)tmUpdate定時器 (Timer)dataUpd
7、ate對話框 (CommonDialog)CommonDialog1圖像 (PictureBox)picBar(作為數組使用,從左開始12)標簽 (Label)lbBar(作為數組使用。從左開如12)文本框 (TextBox)dataInfo圖像 (Picture)Picture14北京科技大學自動化學院課程設計(軟件設計) 報告3.2 服務器的斷開與鏈接3.2.1 連接 OPC服務器和建立OPC組這里用“ NEW”關鍵詞生成 OPC服務器的對象,然后調用OPC服務器對象的“ Connect”方法,和 OPC服務器連接。 Connect 子程序如下:' 連接 OPC服務器和建立 OPC
8、組Sub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 建立一個 OPC服務器對象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 連接 OPC服務器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then' 建立一個 OPC組集合Set objG
9、roups = objServer.OPCGroupsEnd IfIf 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 StringDim lClientHandles(2) As LongDim lErrors() As Lo
10、ngDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If' 設置組活動狀態 objTestGrp.IsActive = True' 取消組非同期通知5北京科技大學自動化學院課程設計(軟件設計) 報告objTestGrp.IsSubscribed = False' 建立 OPC項集合Set objItems = objTestGrp.OPCItems
11、' 生成標簽的項標識符For I = 1 To 2strItemIDs(I) = "TAG"lClientHandles(I) = INext' 添加 OPC項Call objItems.AddItems(8, strItemIDs, _lClientHandles, lServerHandles, lErrors)End Sub3.2.3 斷開服務器連接著 OPC服務器的 OPC應用程序,在退出前必須斷開和OPC服務器的連接。因為 OPC服務器并不知道OPC應用程序的退出,如果不先斷開連接,那么OPC服務器使用的計算機資源就不被釋放。如果這樣的問題反復發生
12、, 久而久之,連續運轉的自動控制系統可能會使計算機資源漸漸枯竭從而發生嚴重問題。Disconnect 子程序如下:' 斷開 OPC服務器Sub Disconnect() Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 清除 OPC項objItems.Remove 2, lServerHandles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 清除
13、 OPC組 objGroups.Remove "TestGrp" Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then' 斷開 OPC服務器 . objServer.DisconnectEnd IfSet objServer = NothingEnd IfEnd Sub
14、6北京科技大學自動化學院課程設計(軟件設計) 報告3.3 數據讀取與顯示客戶端使用 2 個定時器 TmUpdate 和 dataUpdate,定時為 1S。在 TmUpdate 事件中調用同步讀取數據函數 SyncRead,每隔 1S 讀取服務器端的數據,同時對棒柱的顯示進行刷新。在定時器 dataUpdate 事件中讀取系統時間并不斷刷新 TextBox 的內容,顯示當前的時間和數據。3.3.1 棒狀圖顯示為了是顯示更加人性化, 對不同范圍的數值顯示采用了不同的顏色。 當數值過低或者過高時分別顯示深藍色和紅色以示警告。 中間值顯示綠色和橙黃色。 程序代碼如下所示:SyncRead OPCCa
15、che, vtItemValues, lErrors' 棒圖的表示For I = 1 To 2' 數據的格式化strBuf = Format(vtItemValues(I), "#.000")' 表示數據字符串 lbBar(I).Caption = strBuf dataTemp(I) = strBuf' 計算棒的寬和高nWidth = picBar(I).ScaleWidthnHeight = picBar(I).ScaleHeightsglScale = vtItemValues(I) / 100nDrawHeight = CInt(nH
16、eight * sglScale)' 清除現棒圖 picBar(I).Cls' 繪制棒圖If vtItemValues(I) < tHoldValue1 ThenpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(0, 0, 255), BF ElseIf vtItemValues(I) < tHoldValue2 ThenpicBar(I).Line (0, nHeight - tHoldValue1 / 100 * nHeight)-(nWidth, nHeight), RGB(0,
17、225, 0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue1 / 100) * nHeight), RGB(225, 225, 0), BF ElsepicBar(I).Line (0, nHeight - tHoldValue1 / 100 * nHeight)-(nWidth, nHeight), RGB(0, 225, 0), BF picBar(I).Line (0, nHeight - tHoldValue2 / 100 * nHeight)-(nWidth, (1 - tHoldValu
18、e1 / 100) * nHeight),RGB(225, 225, 0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue2 / 100) * nHeight), RGB(255, 0, 0), BF End IfEnd IfIf I = 1 Theny(num1) = vtItemValues(I)num1 = num1 + 1Elsez(num2) = vtItemValues(I)num2 = num2 + 1End IfNextEnd Sub3.3.2 文本框顯示程序代碼如下:7北京科技大學自動
19、化學院課程設計(軟件設計) 報告Private Sub dataUpdate_Timer()If SaveFlag Then'保存數據結束后清除原來的數據dataInfo.Text = Year(Now() & Month(Now() & Day(Now() & "" & Hour(Now() & ":" &Minute(Now() & ":" & Second(Now() & "" & " 反應罐溫度: "
20、 & dataTemp(1) & "" & " 反應罐液位: " & dataTemp(2) & Chr(13) & Chr(10)SaveFlag = FalseElsedataInfo.Text = dataInfo.Text & Year(Now() & Month(Now() & Day(Now() & "" & Hour(Now()& ":" & Minute(Now() & ":&q
21、uot; & Second(Now() & "" & " 反應罐溫度: " & dataTemp(1) & "" & " 反應罐液位: " & dataTemp(2) & Chr(13) & Chr(10)End IfEnd Sub3.4 數據保存此處定義 bool 型的 SaveFlag為保存標志,在保存時停止對新的數據的接收。主要用到 CommonDialog控件。該控件可用于創建“文件打開”、 “文件保存”、“文件打印”、“顏色設置”、“
22、字體設置”、“幫助” 6 種對話框。程序代碼如下所示:Private Sub BtnSave_Click()TmUpdate.Enabled = FalsedataUpdate.Enabled = FalseCommonDialog1.DialogTitle = " 另存為 "CommonDialog1.DefaultExt = "txt"CommonDialog1.ShowSaveIf Len(CommonDialog1.FileName) > 0 ThenOpen CommonDialog1.FileName For Output As #1P
23、rint #1, dataInfo.TextClose #1SaveFlag = TrueEnd IfEnd Sub3.5 實時曲線繪制Picture 是功能強大坐標圖繪制軟件,本次設計中采用 VB 中 Picture 控件進行實時曲線繪制。 在設計時添加 2 個系列曲線, 代表兩個通道, 即溫度和液位與時間的關系。并在圖中繪出兩條警戒線,能更直觀地比對數據的變化。圖 3.2Picture 設置8北京科技大學自動化學院課程設計(軟件設計) 報告部分程序代碼如下所示:Picture1.ClsIf Check1.Value = 0 ThenIf col < 201 ThenFor u = 1
24、 To 2For j = col To colX = jY = vtItemValues(u)px(j, u) = Xpy(j, u) = YNext jNext ucol = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtItemValues(s)Next sEnd IfElsecol = colEnd IfIf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py
25、(1, w)For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w), QBColor(w * 2)Next jNext wEnd If'畫兩條警戒線Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue' 指示警戒值,警戒值以上改變顯示顏色If lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 ThenLab
26、el7.Caption = "出現異常! "ElseLabel7.Caption = "正在觀測! "End IfIf lbBar(1).Caption > 150 ThenText2.Text = "溫度過高! "picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 150 ThenText2.Text = "溫度平穩! "picBar(1)
27、.Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text = "液面過高! "picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BF9北京科技大學自動化學院課程設計(軟件設計) 報告4 程序測試4.1 測試過程運行程序后,先單擊“連接”按鈕,保證客戶端連接上組態王數據庫。然后單擊“加載”按
28、鈕,觀察數據時候正常顯示,棒柱的數據和顏色是否正常,文本框內的時間和數據是否正常以及看是否能實時顯示曲線。 單擊“保存數據”按鈕,彈出對話框,選擇路徑,填寫文件名后保存數據。最后單擊“退出”按鈕,看成否正常退出程序。運行程序,注意將bin 文件夾放到工程下。4.2 測試結果從測試結果上看,整個程序沒有 bug,各個功能正常。從繪圖的結果可以看出從服務器傳來的數據是按正弦規律變化的。圖 4.1 程序測試圖一10北京科技大學自動化學院課程設計(軟件設計) 報告圖 4.2 程序測試圖二圖 4.3 保存數據11北京科技大學自動化學院課程設計(軟件設計) 報告5 程序文檔5.1 使用說明(1)運行程序,
29、連接成功后,啟動,此時棒狀圖以及文本框內就會顯示反應罐溫度和反應罐液位的值。(2)當數據積累到一定程度之后,點擊“繪圖”按鈕,應罐溫度和反應罐液位數值變化曲線就會顯示出來,每點擊一次, 就會刷新一次。 從而實現了數據的實時顯示。程序中數據刷新為1s,因此在點擊“繪圖”按鈕時頻率最好不要超過 1s。(3)保存數據。點擊“保存”按鈕,會彈出對話框,輸入響應的文件名保存便可。保存數據后,所有歷史數據會被清空。5.2 程序清單Option Base 1Option ExplicitDim WithEvents objServer As OPCServerDim objGroups As OPCGrou
30、psDim 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 BooleanSub Connect(strProgID As String, Optional strNode As String)If objSer
31、ver Is Nothing Then' 建立一個 OPC服務器對象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 連接 OPC服務器 objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then' 建立一個 OPC組集合Set objGroups = objServer.OPCGroupsEnd IfIf objTestGrp Is Nothing Then' 添
32、加一個 OPC組Set objTestGrp = objGroups.Add("TestGrp")End IfEnd Sub12北京科技大學自動化學院課程設計(軟件設計) 報告Sub AddItem()Dim strItemIDs(2) As StringDim lClientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count >
33、 0 ThenExit SubEnd IfEnd If' 設置組活動狀態 objTestGrp.IsActive = True' 取消組非同期通知 objTestGrp.IsSubscribed = False' 建立 OPC項集合Set objItems = objTestGrp.OPCItems' 生成標簽的項標識符strItemIDs(1) = " 反應罐溫度 .Value"strItemIDs(2) = " 反應罐液位 .Value"lClientHandles(1) = 1lClientHandles(2) =
34、2' 添加 OPC項Call objItems.AddItems(2, strItemIDs, _lClientHandles, lServerHandles, lErrors)End SubSub Disconnect()Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 清除 OPC項objItems.Remove 2, lServerHandles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTest
35、Grp Is Nothing Then' 清除 OPC組 objGroups.Remove "TestGrp" Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then' 斷開 OPC服務器 . objServer.DisconnectEnd IfSet objSe
36、rver = NothingEnd If13北京科技大學自動化學院課程設計(軟件設計) 報告End SubPrivate Sub btnConnect_Click()' 調用 Connect 子程序Call Connect("kingview.view.1")Label7.Caption = "與服務器連接成功!"End SubPrivate Sub btnAddItem_Click()' 調用 AddItem 子程序 Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.O
37、PCItems.Count > 0 Then' 啟動定時器tmUpdate.Enabled = TruedataUpdate.Enabled = TrueElseEnd IfEnd IfEnd SubPrivate Sub btnQuit_Click()' 卸載窗體Unload fmMainEnd SubPrivate Sub Form_Unload(Cancel As Integer)' 調用 Disconnect 子程序 Call DisconnectEnd SubPrivate Sub tmUpdate_Timer()Dim vtItemValues() A
38、s VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim 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, l
39、Errors' 棒圖的表示For I = 1 To 2' 數據的格式化strBuf = Format(vtItemValues(I), "#.000")' 表示數據字符串 lbBar(I).Caption = strBuf dataTemp(I) = strBuf' 計算棒的寬和高nWidth = picBar(I).ScaleWidthnHeight = picBar(I).ScaleHeight14北京科技大學自動化學院課程設計(軟件設計) 報告sglScale = vtItemValues(I) / 700nDrawHeight = C
40、Int(nHeight * sglScale)' 清除現棒圖 picBar(I).Cls' 繪制棒圖picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFNext' 曲線繪制Picture1.ClsIf Check1.Value = 0 ThenIf col < 201 ThenFor u = 1 To 2For j = col To colX = jY = vtItemValues(u)px(j, u) = Xpy(j, u) = YNext jNext u
41、col = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtItemValues(s)Next sEnd IfElsecol = colEnd IfIf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py(1, w)For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w), QBColor(w * 2)Nex
42、t jNext wEnd If'畫兩條警戒線Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue' 指示警戒值,警戒值以上改變顯示顏色If lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 ThenLabel7.Caption = "出現異常! "ElseLabel7.Caption = "正在觀測! "End IfIf lbB
43、ar(1).Caption > 150 ThenText2.Text = "溫度過高! "picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 150 ThenText2.Text = "溫度平穩! "15北京科技大學自動化學院課程設計(軟件設計) 報告picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text = "液面過高! "picBar(2).Line (0, nHei
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年心理測評與評估技術考核試題及答案
- 2025年心理學基礎知識測試題及答案
- 2025年航空服務與管理知識測試卷及答案
- 2025年護理學專業實習考核試題及答案
- 2025年生命科學與醫學倫理綜合能力考試卷及答案
- 2025年中國郵政集團有限公司廣西壯族自治區分公司校園招聘筆試模擬試題含答案詳解
- 物資質量監督管理制度
- 物資采購付款管理制度
- 特殊學校宿舍管理制度
- 特殊崗位人員管理制度
- 鋼筋石籠護腳單元關鍵工程質量評定表
- 國家機關政府部門公文格式標準(2021最新建議收藏!)
- 混凝土養護記錄范文
- 航圖zuck-2a目視停靠引導系統飛行員指南
- 國開作業《公共關系學》實訓項目3:社區關系建設(六選一)-實訓項目二社區關系建設方案-參考(含答案)98
- 《歷史文化名城名鎮名村保護規劃編制要求》
- 《數據科學與大數據技術導論》完整版課件(全)
- 申請人申請仲裁送達信息確認書
- (完整版)生物同源性荷爾蒙替代療法課件
- 福建跨學科四門主干課程作業及答案小學語文
- 燃氣輸配課程設計報告書
評論
0/150
提交評論