




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、北京科技大學課程設計(軟件設計)報告班 級: 姓 名: 學 號: 指導教師: 日 期: 年 月 日目 錄1 設計內容12應用程序總體分析與設計13應用程序各功能模塊分析與設計23.1 連接服務器23.2 加項33.3 讀取數(shù)據(jù)53.4 顯示與隱藏73.5 暫停與繼續(xù)93.6 報表與記錄104程序測試114.1測試過程114.1.1 連接測試114.1.2 顯示與隱藏測試114.1.3 暫停按鈕124.1.4 數(shù)據(jù)保存124.2測試結果124.2.1 連接結果124.2.2 顯示與隱藏結果134.2.3 暫停顯示134.2.4 數(shù)據(jù)保存結果145程序文檔145.1使用說明145.2程序說明156
2、 學習收獲271 設計內容OPC(OLE for Process Control)又稱為過程控制的對象連接與嵌入技術。它是它的出現(xiàn)為基于Windows的應用程序和現(xiàn)場過程控制應用建立了橋梁。在過去,為了存取現(xiàn)場設備的數(shù)據(jù)信息,每一個應用軟件開發(fā)商都需要編寫專用的接口函數(shù)。由于現(xiàn)場設備的種類繁多,且產(chǎn)品的不斷升級,往往給用戶和軟件開發(fā)商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統(tǒng)集成商和開發(fā)商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。在這種情況下,OPC標準應運而生。OPC標準以微軟公司的OLE技術為基礎,它的制定是通過提供一套標準的OLE/CO
3、M接口完成的,在OPC技術中使用的是OLE 2技術,OLE標準允許多臺微機之間交換文檔、圖形等對象。OPC的出現(xiàn)大大縮短了軟件開發(fā)的時間。本次課程設計就是要求使用VB設計一個簡單的客戶端程序,這個程序能讀取本機服務器上面的數(shù)據(jù),并以直觀的柱形圖顯示出來。另外,還應該添加一些別的功能。2應用程序總體分析與設計開始為了能連接服務器,首先在PC機運行模擬的服務器。然后,在VB6.0環(huán)境下,創(chuàng)建各種用于顯示數(shù)據(jù)和控制的控件。給每一個控件添加事件響應函數(shù)。程序運行的流程如下:退出顯示與保存讀取數(shù)據(jù)添加Item連接服務器3應用程序各功能模塊分析與設計3.1 連接服務器首先使用new關鍵字創(chuàng)建一個OPC對象
4、,然后調用Connect方法連接到服務器。然后書寫連接按鈕的響應函數(shù)。Private Sub BtnConnnect_Click() ' 調用Connect子程序 Call Connect("OPCJ.SampleServer.1")End SubSub Connect(strProgID As String, Optional strNode As String) If objServer Is Nothing Then ' 建立一個OPC服務器對象 Set objServer = New OPCServer End If If objServer.Ser
5、verState = OPCDisconnected Then ' 連接OPC服務器 objServer.Connect strProgID, strNode End If If objGroups Is Nothing Then ' 建立一個OPC組集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then ' 添加一個OPC組 Set objTestGrp = objGroups.Add("TestGrp") End IfEnd Sub3.2 加項對OPC
6、服務器進行訪問前,必須先在OPC組里添加要訪問的OPC標簽。這里添加OPC標簽的標識符和數(shù)目是固定的,但是實際的OPC應用程序往往要按照用戶的指定或讀取組態(tài)文件取得和處理需要添加OPC標簽。Sub 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 Then If objItems.Coun
7、t > 0 Then Exit Sub End If End If ' 設置組活動狀態(tài) objTestGrp.IsActive = True ' 取消組非同期通知 objTestGrp.IsSubscribed = False ' 建立OPC項集合 Set objItems = objTestGrp.OPCItems ' 生成標簽的項標識符 strItemIDs(1) = "反應罐溫度.Value" strItemIDs(2) = "反應罐液位.Value" lClientHandles(1) = 1 lClient
8、Handles(2) = 2 ' 添加OPC項 Call objItems.AddItems(2, strItemIDs, _ lClientHandles, lServerHandles, lErrors)End SubPrivate Sub btnAddItem_Click() ' 調用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count > 0 Then ' 啟動定時器 TmUpdate.Enabled = True Else End If
9、 End If End Sub3.3 讀取數(shù)據(jù)為了實時顯示數(shù)據(jù),還要設置一個定時中斷類型的服務函數(shù),然后沒間隔一段時間去向服務器讀取一下數(shù)據(jù)。定時器會在加載項的時候啟動。Private 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 sglScale As Single Dim I As Integer &
10、#39; 同期讀取 SyncRead OPCCache, vtItemValues, lErrors ' 棒圖的表示 For I = 1 To 4 ' 數(shù)據(jù)的格式化 If PauseFlag(I) = 0 Then strBuf = Format(vtItemValues(I), "#.000") ' 表示數(shù)據(jù)字符串 lbBar(I).Caption = strBuf ' 計算棒的寬和高 nWidth = PicBar(I).ScaleWidth nHeight = PicBar(I).ScaleHeight sglScale = vtIte
11、mValues(I) / 100 nDrawHeight = CInt(nHeight * sglScale) ' 清除現(xiàn)棒圖 PicBar(I).Cls ' 繪制棒圖 'If vtItemValues(I) < 20 Or vtItemValues(I) > 90 Then ' PicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(255, 0, 0), BF ' Else ' PicBar(I).Line (0, nHeight - nDrawHeight
12、)-(nWidth, nHeight), RGB(0, 255, 0), BF ' End If PicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(vtItemValues(I) * 2.55, 255 - vtItemValues(I) * 2.55, 0), BF End If Next If FileFlag = 1 Then Print #FileNo, Date; Time, Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1)
13、, Str(vtItemValues(1) End If End Sub3.4 顯示與隱藏為了方便顯示與隱藏其中某些項,這里給一個柱形圖配置一個復選框,當復選框選中的時候,該項目便隱藏起來。取消復選框,該項目又會顯示出來。這樣子的功能對于只需要觀察某些數(shù)據(jù)的時候,很是方便。具體實現(xiàn)方式如下:Private Sub Check1_Click() If Check1.Value = 1 Then PicBar(1).Visible = False lbBar(1).Visible = False Label1.Visible = False Else PicBar(1).Visible = Tru
14、e lbBar(1).Visible = True Label1.Visible = True End IfEnd SubPrivate Sub Check2_Click() If Check2.Value = 1 Then PicBar(2).Visible = False lbBar(2).Visible = False Label2.Visible = False Else PicBar(2).Visible = True lbBar(2).Visible = True Label2.Visible = True End IfEnd SubPrivate Sub Check3_Click
15、() If Check3.Value = 1 Then PicBar(3).Visible = False lbBar(3).Visible = False Label3.Visible = False Else PicBar(3).Visible = True lbBar(3).Visible = True Label3.Visible = True End IfEnd SubPrivate Sub Check4_Click() If Check4.Value = 1 Then PicBar(4).Visible = False lbBar(4).Visible = False Label4
16、.Visible = False Else PicBar(4).Visible = True lbBar(4).Visible = True Label4.Visible = True End IfEnd Sub3.5 暫停與繼續(xù)在實際生產(chǎn)環(huán)境中,遇到一些特殊情況需要暫停以觀察數(shù)據(jù),以防止被后面新的數(shù)據(jù)刷新。所以四個柱形圖又都配置了一個暫停復選框,當復選框選中的時候,柱形圖暫停更新,當取消復選框,柱形圖繼續(xù)更新。實現(xiàn)代碼如下:Private Sub Check5_Click() If Check5.Value = 1 Then PauseFlag(4) = 1 Else PauseFlag(4
17、) = 0 End IfEnd SubPrivate Sub Check6_Click() If Check6.Value = 1 Then PauseFlag(1) = 1 Else PauseFlag(1) = 0 End IfEnd SubPrivate Sub Check7_Click() If Check7.Value = 1 Then PauseFlag(2) = 1 Else PauseFlag(2) = 0 End IfEnd SubPrivate Sub Check8_Click() If Check8.Value = 1 Then PauseFlag(3) = 1 Else
18、 PauseFlag(3) = 0 End IfEnd Sub其中的PauseFlag是個全局變量用于指示該柱形圖的數(shù)據(jù)是不是暫停了,如果是,在程序刷新的過程中則不對其刷新。3.6 報表與記錄工業(yè)生產(chǎn)中,保留歷史數(shù)據(jù)是必須的。為了分析一些特殊情況下的原因,必須要知道相關的數(shù)據(jù),所以保留歷史數(shù)據(jù)是很重要的部分。數(shù)據(jù)量大的時候可以使用數(shù)據(jù)庫,但是小數(shù)據(jù)量可以使用文件保存數(shù)據(jù)的方式。這里,使用文件的方式記錄讀取的數(shù)據(jù)。Private Sub Check9_Click() FileFlag = Check9.Value If FileFlag = 1 Then FileNo = FreeFile()
19、Open "C:UsersChengDesktopshunjun" & Str(Year(Now) & "年" & Str(Month(Now) & "月" & Str(Day(Now) & "日.txt" For Append As FileNo Else Close FileNo End IfEnd Sub當保存文件復選框選中的時候,打開今天所對應的文件,當取消選中的時候,關閉打開的文件。如果文件打開,相應的變量的狀態(tài)會更改以指示當前需要向文件中寫入數(shù)據(jù),所以定時
20、中斷的時候,會向文件中寫入數(shù)據(jù)。If FileFlag = 1 Then Print #FileNo, Date; Time, Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1) End If4程序測試4.1測試過程軟件的測試主要包含連接測試,顯示與隱藏測試,暫停測試和數(shù)據(jù)記錄測試。4.1.1 連接測試打開程序,點擊運行。然后分別點擊連接和加項按鈕。圖4-1 連接測試 顯示與隱藏測試在程序運行狀態(tài)下,選中隱藏復選框。圖4-2 顯示與隱藏4.1.3 暫停按鈕取消所有隱藏復選框,然后選
21、中部分暫停按鈕。如下圖所示圖4-3 暫停4.1.4 數(shù)據(jù)保存選中保存數(shù)據(jù)復選框,記錄當前時間,過30秒取消選中。圖4-4 保存數(shù)據(jù)4.2測試結果4.2.1 連接結果為了更方便的顯示結果,顯示的顏色會隨著數(shù)據(jù)的變化而變化,數(shù)據(jù)越接近于100柱形圖的顏色就越接近于紅色。數(shù)據(jù)越接近于0,柱形圖顏色越接近于綠色。 圖4-5 數(shù)據(jù)顯示測試4.2.2 顯示與隱藏結果勾選前兩個隱藏復選框后,發(fā)現(xiàn)相關的內容隱藏了。圖4-6 顯示與隱藏4.2.3 暫停顯示勾選暫停顯示后,相應的柱形圖不再同旁邊的數(shù)據(jù)一起刷新了。圖4-7 暫停顯示4.2.4 數(shù)據(jù)保存結果當勾選保存數(shù)據(jù)復選框后,數(shù)據(jù)便被寫入當天的文本文件。下圖中左
22、邊一列記錄的日期和時間,右邊記錄的是四個變量的數(shù)據(jù)。圖4-8 數(shù)據(jù)保存5程序文檔5.1使用說明雙擊shunjun文件夾中的“工程1.exe”,程序開始執(zhí)行。連接->加項,數(shù)據(jù)就能正常顯示了。隱藏,暫停和保存數(shù)據(jù)復選框分別控制的是隱藏柱形圖,柱形圖暫停更新和保存文件。5.2程序說明Option Base 1Option Explicit'建立OPC對象 -聲明變量Dim WithEvents objServer As OPCServerDim objGroups As OPCGroupsDim WithEvents objTestGrp As OPCGroupDim objItem
23、s As OPCItemsDim lServerHandles() As LongDim PauseFlag(1 To 4) As IntegerDim FileFlag As Integer Dim FileNoPrivate Sub BtnConnnect_Click() ' 調用Connect子程序 Call Connect("OPCJ.SampleServer.1")End SubPrivate Sub btnAddItem_Click() ' 調用AddItem子程序 Call AddItem If Not objTestGrp Is Nothin
24、g Then If objTestGrp.OPCItems.Count > 0 Then ' 啟動定時器 TmUpdate.Enabled = True Else End If End If End SubPrivate Sub btnQuit_Click() ' 卸載窗體 Unload FmMainEnd SubPrivate Sub Check1_Click() If Check1.Value = 1 Then PicBar(1).Visible = False lbBar(1).Visible = False Label1.Visible = False Else
25、PicBar(1).Visible = True lbBar(1).Visible = True Label1.Visible = True End IfEnd SubPrivate Sub Check2_Click() If Check2.Value = 1 Then PicBar(2).Visible = False lbBar(2).Visible = False Label2.Visible = False Else PicBar(2).Visible = True lbBar(2).Visible = True Label2.Visible = True End IfEnd SubP
26、rivate Sub Check3_Click() If Check3.Value = 1 Then PicBar(3).Visible = False lbBar(3).Visible = False Label3.Visible = False Else PicBar(3).Visible = True lbBar(3).Visible = True Label3.Visible = True End IfEnd SubPrivate Sub Check4_Click() If Check4.Value = 1 Then PicBar(4).Visible = False lbBar(4)
27、.Visible = False Label4.Visible = False Else PicBar(4).Visible = True lbBar(4).Visible = True Label4.Visible = True End IfEnd SubPrivate Sub Check5_Click() If Check5.Value = 1 Then PauseFlag(4) = 1 Else PauseFlag(4) = 0 End IfEnd SubPrivate Sub Check6_Click() If Check6.Value = 1 Then PauseFlag(1) =
28、1 Else PauseFlag(1) = 0 End IfEnd SubPrivate Sub Check7_Click() If Check7.Value = 1 Then PauseFlag(2) = 1 Else PauseFlag(2) = 0 End IfEnd SubPrivate Sub Check8_Click() If Check8.Value = 1 Then PauseFlag(3) = 1 Else PauseFlag(3) = 0 End IfEnd SubPrivate Sub Check9_Click() FileFlag = Check9.Value If F
29、ileFlag = 1 Then FileNo = FreeFile() Open "C:UsersChengDesktopshunjun" & Str(Year(Now) & "年" & Str(Month(Now) & "月" & Str(Day(Now) & "日.txt" For Append As FileNo Else Close FileNo End IfEnd SubPrivate Sub Form_Load() TmUpdate.Enabled =
30、False TmUpdate.Interval = 1000End SubSub 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 objGrou
31、ps Is Nothing Then ' 建立一個OPC組集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then ' 添加一個OPC組 Set objTestGrp = objGroups.Add("TestGrp") End If End SubSub AddItem() Dim strItemIDs(4) As String Dim lClientHandles(4) As Long Dim lErrors() As Long Dim I As Integer
32、 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 ' 設置組活動狀態(tài) objTestGrp.IsActive = True ' 取消組非同期通知 objTestGrp.IsSubscribed = False ' 建立OPC項集合 Set objItems = objTestGrp.OPCItems ' 生成標簽的項標識符 strItemIDs(4)
33、= "TAG4" strItemIDs(1) = "TAG1" strItemIDs(2) = "TAG2" strItemIDs(3) = "TAG3" lClientHandles(4) = 4 lClientHandles(1) = 1 lClientHandles(2) = 2 lClientHandles(3) = 3 ' 添加OPC項 Call objItems.AddItems(4, strItemIDs, _ lClientHandles, lServerHandles, lErrors)E
34、nd SubSub Disconnect()Dim lErrors() As Long If Not objItems Is Nothing Then If objItems.Count > 0 Then ' 清除OPC項 objItems.Remove 4, lServerHandles, lErrors End If Set objItems = Nothing End If If Not objTestGrp Is Nothing Then ' 清除OPC組 objGroups.Remove "TestGrp" Set objTestGrp =
35、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 IfEnd SubPrivate Sub Form_Unload(Cancel As Integer) ' 調用D
36、isconnect子程序 Call Disconnect Close FileNoEnd 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 sglScale As Single Dim I As Integer ' 同期讀取 SyncRead OPCCache, vtItemValues, lErrors ' 棒圖的表示 For I = 1 To 4 ' 數(shù)據(jù)的格式化 If PauseFlag(I) = 0 Then strBuf = Format(vtItemValues(I), "#.000") '
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術技能裝飾畫課件圖片
- 紡織行業(yè)消防安全管理規(guī)定(試行)
- 安全風險大討論心得體會
- 安全技術管理論文
- 工程質量事故分析報告
- 配備專兼職安全生產(chǎn)管理人員
- 電力設施安全防范系統(tǒng)技術規(guī)范
- 安全生產(chǎn)管理建立什么機制
- 安全生產(chǎn)管理制度的紅頭文件
- 2025年高溫超導材料項目申請報告
- 培訓物業(yè)客服部禮儀禮節(jié)
- 2025住建發(fā)布《房屋市政工程安全員開展崗前巡查指導手冊》
- 北京海淀區(qū)一零一中學2025年八年級英語第二學期期末復習檢測模擬試題含答案
- 關于員工廉潔培訓課件
- 2025年廣東省高考生物試題(含答案解析)
- 遼寧省2024年7月普通高中學業(yè)水平合格性考試地理試卷(含答案)
- 院感知識手衛(wèi)生培訓內容
- 章程規(guī)范業(yè)務管理制度
- 2025年新疆中考數(shù)學試卷真題
- 2025年福建省中考語文試卷真題(含標準答案)
- 護士禮儀與職業(yè)素養(yǎng)課件
評論
0/150
提交評論