




已閱讀5頁,還剩25頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
北京科技大學課程設計(軟件設計)報告班 級: 姓 名: 學 號: 指導教師: 日 期: 年 月 日北京科技大學自動化學院 課程設計(軟件設計)報告目 錄1 設計內容12應用程序總體分析與設計13應用程序各功能模塊分析與設計23.1 連接服務器23.2 加項33.3 讀取數據53.4 顯示與隱藏73.5 暫停與繼續93.6 報表與記錄104程序測試114.1測試過程114.1.1 連接測試114.1.2 顯示與隱藏測試114.1.3 暫停按鈕124.1.4 數據保存124.2測試結果124.2.1 連接結果124.2.2 顯示與隱藏結果134.2.3 暫停顯示134.2.4 數據保存結果145程序文檔145.1使用說明145.2程序說明156 學習收獲27ii1 設計內容OPC(OLE for Process Control)又稱為過程控制的對象連接與嵌入技術。它是它的出現為基于Windows的應用程序和現場過程控制應用建立了橋梁。在過去,為了存取現場設備的數據信息,每一個應用軟件開發商都需要編寫專用的接口函數。由于現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟件開發商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統集成商和開發商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。在這種情況下,OPC標準應運而生。OPC標準以微軟公司的OLE技術為基礎,它的制定是通過提供一套標準的OLE/COM接口完成的,在OPC技術中使用的是OLE 2技術,OLE標準允許多臺微機之間交換文檔、圖形等對象。OPC的出現大大縮短了軟件開發的時間。本次課程設計就是要求使用VB設計一個簡單的客戶端程序,這個程序能讀取本機服務器上面的數據,并以直觀的柱形圖顯示出來。另外,還應該添加一些別的功能。2應用程序總體分析與設計開始為了能連接服務器,首先在PC機運行模擬的服務器。然后,在VB6.0環境下,創建各種用于顯示數據和控制的控件。給每一個控件添加事件響應函數。程序運行的流程如下:退出顯示與保存讀取數據添加Item連接服務器3應用程序各功能模塊分析與設計3.1 連接服務器首先使用new關鍵字創建一個OPC對象,然后調用Connect方法連接到服務器。然后書寫連接按鈕的響應函數。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.ServerState = 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服務器進行訪問前,必須先在OPC組里添加要訪問的OPC標簽。這里添加OPC標簽的標識符和數目是固定的,但是實際的OPC應用程序往往要按照用戶的指定或讀取組態文件取得和處理需要添加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.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.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 End If End Sub3.3 讀取數據為了實時顯示數據,還要設置一個定時中斷類型的服務函數,然后沒間隔一段時間去向服務器讀取一下數據。定時器會在加載項的時候啟動。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 同期讀取 SyncRead OPCCache, vtItemValues, lErrors 棒圖的表示 For I = 1 To 4 數據的格式化 If PauseFlag(I) = 0 Then strBuf = Format(vtItemValues(I), #.000) 表示數據字符串 lbBar(I).Caption = strBuf 計算棒的寬和高 nWidth = PicBar(I).ScaleWidth nHeight = PicBar(I).ScaleHeight sglScale = vtItemValues(I) / 100 nDrawHeight = CInt(nHeight * sglScale) 清除現棒圖 PicBar(I).Cls 繪制棒圖 If vtItemValues(I) 90 Then PicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(255, 0, 0), BF Else PicBar(I).Line (0, nHeight - nDrawHeight)-(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), Str(vtItemValues(1) End If End Sub3.4 顯示與隱藏為了方便顯示與隱藏其中某些項,這里給一個柱形圖配置一個復選框,當復選框選中的時候,該項目便隱藏起來。取消復選框,該項目又會顯示出來。這樣子的功能對于只需要觀察某些數據的時候,很是方便。具體實現方式如下:Private Sub Check1_Click() If Check1.Value = 1 Then PicBar(1).Visible = False lbBar(1).Visible = False Label1.Visible = False Else 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 SubPrivate 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).Visible = False Label4.Visible = False Else PicBar(4).Visible = True lbBar(4).Visible = True Label4.Visible = True End IfEnd Sub3.5 暫停與繼續在實際生產環境中,遇到一些特殊情況需要暫停以觀察數據,以防止被后面新的數據刷新。所以四個柱形圖又都配置了一個暫停復選框,當復選框選中的時候,柱形圖暫停更新,當取消復選框,柱形圖繼續更新。實現代碼如下:Private 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) = 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 Sub其中的PauseFlag是個全局變量用于指示該柱形圖的數據是不是暫停了,如果是,在程序刷新的過程中則不對其刷新。3.6 報表與記錄工業生產中,保留歷史數據是必須的。為了分析一些特殊情況下的原因,必須要知道相關的數據,所以保留歷史數據是很重要的部分。數據量大的時候可以使用數據庫,但是小數據量可以使用文件保存數據的方式。這里,使用文件的方式記錄讀取的數據。Private Sub Check9_Click() FileFlag = Check9.Value If FileFlag = 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 Sub當保存文件復選框選中的時候,打開今天所對應的文件,當取消選中的時候,關閉打開的文件。如果文件打開,相應的變量的狀態會更改以指示當前需要向文件中寫入數據,所以定時中斷的時候,會向文件中寫入數據。If FileFlag = 1 Then Print #FileNo, Date; Time, Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1) End If4程序測試4.1測試過程軟件的測試主要包含連接測試,顯示與隱藏測試,暫停測試和數據記錄測試。4.1.1 連接測試打開程序,點擊運行。然后分別點擊連接和加項按鈕。圖4-1 連接測試4.1.2 顯示與隱藏測試在程序運行狀態下,選中隱藏復選框。圖4-2 顯示與隱藏4.1.3 暫停按鈕取消所有隱藏復選框,然后選中部分暫停按鈕。如下圖所示圖4-3 暫停4.1.4 數據保存選中保存數據復選框,記錄當前時間,過30秒取消選中。圖4-4 保存數據4.2測試結果4.2.1 連接結果為了更方便的顯示結果,顯示的顏色會隨著數據的變化而變化,數據越接近于100柱形圖的顏色就越接近于紅色。數據越接近于0,柱形圖顏色越接近于綠色。 圖4-5 數據顯示測試4.2.2 顯示與隱藏結果勾選前兩個隱藏復選框后,發現相關的內容隱藏了。圖4-6 顯示與隱藏4.2.3 暫停顯示勾選暫停顯示后,相應的柱形圖不再同旁邊的數據一起刷新了。圖4-7 暫停顯示4.2.4 數據保存結果當勾選保存數據復選框后,數據便被寫入當天的文本文件。下圖中左邊一列記錄的日期和時間,右邊記錄的是四個變量的數據。圖4-8 數據保存5程序文檔5.1使用說明雙擊shunjun文件夾中的“工程1.exe”,程序開始執行。連接-加項,數據就能正常顯示了。隱藏,暫停和保存數據復選框分別控制的是隱藏柱形圖,柱形圖暫停更新和保存文件。5.2程序說明Option Base 1Option Explicit建立OPC對象 -聲明變量Dim WithEvents objServer As OPCServerDim objGroups As OPCGroupsDim WithEvents objTestGrp As OPCGroupDim objItems 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 Nothing 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 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 SubPrivate 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).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) = 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 FileFlag = 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 = 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 objGroups 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 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 生成標簽的項標識符 strItemIDs(4) = 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)End 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 = 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) 調用Disconnect子程序 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 數據的格式化 If PauseFlag(I) = 0 Then strBuf = Format(vtIte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國儀表配套撥盤旋鈕行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 2024-2025學年福建省龍巖市一級校聯盟高二下學期期中政治試題及答案
- 珠寶培訓師的課件
- 2022-2027年中國縣域電商行業發展監測及發展戰略規劃報告
- 污水處理開題報告書
- 2025年 湖州南潯區教育局中小學儲備教師招聘考試筆試試題附答案
- 2025年 非高危行業安全生產管理能力考試練習題附答案
- 中國太平柜行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 化工程學院081100控制科學與工程報錄數據分析報告初試+
- 中國電動工具行業市場全景監測及投資前景展望報告
- 大疆無人機內部管理制度
- 2025長沙市輔警考試試卷真題帶答案
- 胸痛健康教育課件
- 2025年合肥城建發展股份有限公司及所屬子公司招聘17人(二批次)筆試參考題庫附帶答案詳解
- 2025年項目終止協議
- 醫院員工手冊管理制度
- 泉州水務集團有限公司招聘考試真題2024
- 東航客運崗位面試題目及答案
- 三級營養師考試復習重點題(附答案)
- 2025裝配式混凝土居住建筑首個標準層段聯合驗收規程
- 2025年人教版小學數學三年級下冊期末考試卷(帶答案)
評論
0/150
提交評論