軟件課程設(shè)計(jì)報(bào)告北京科技大學(xué)_第1頁(yè)
軟件課程設(shè)計(jì)報(bào)告北京科技大學(xué)_第2頁(yè)
軟件課程設(shè)計(jì)報(bào)告北京科技大學(xué)_第3頁(yè)
軟件課程設(shè)計(jì)報(bào)告北京科技大學(xué)_第4頁(yè)
軟件課程設(shè)計(jì)報(bào)告北京科技大學(xué)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、北京科技大學(xué)課程設(shè)計(jì)(軟件設(shè)計(jì))報(bào)告班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 日 期: 年 月 日目 錄1 設(shè)計(jì)內(nèi)容12應(yīng)用程序總體分析與設(shè)計(jì)13應(yīng)用程序各功能模塊分析與設(shè)計(jì)23.1 連接服務(wù)器23.2 加項(xiàng)33.3 讀取數(shù)據(jù)53.4 顯示與隱藏73.5 暫停與繼續(xù)93.6 報(bào)表與記錄104程序測(cè)試114.1測(cè)試過(guò)程114.1.1 連接測(cè)試114.1.2 顯示與隱藏測(cè)試114.1.3 暫停按鈕124.1.4 數(shù)據(jù)保存124.2測(cè)試結(jié)果124.2.1 連接結(jié)果124.2.2 顯示與隱藏結(jié)果134.2.3 暫停顯示134.2.4 數(shù)據(jù)保存結(jié)果145程序文檔145.1使用說(shuō)明145.2程序說(shuō)明156

2、 學(xué)習(xí)收獲271 設(shè)計(jì)內(nèi)容OPC(OLE for Process Control)又稱為過(guò)程控制的對(duì)象連接與嵌入技術(shù)。它是它的出現(xiàn)為基于Windows的應(yīng)用程序和現(xiàn)場(chǎng)過(guò)程控制應(yīng)用建立了橋梁。在過(guò)去,為了存取現(xiàn)場(chǎng)設(shè)備的數(shù)據(jù)信息,每一個(gè)應(yīng)用軟件開發(fā)商都需要編寫專用的接口函數(shù)。由于現(xiàn)場(chǎng)設(shè)備的種類繁多,且產(chǎn)品的不斷升級(jí),往往給用戶和軟件開發(fā)商帶來(lái)了巨大的工作負(fù)擔(dān)。通常這樣也不能滿足工作的實(shí)際需要,系統(tǒng)集成商和開發(fā)商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設(shè)備驅(qū)動(dòng)程序。在這種情況下,OPC標(biāo)準(zhǔn)應(yīng)運(yùn)而生。OPC標(biāo)準(zhǔn)以微軟公司的OLE技術(shù)為基礎(chǔ),它的制定是通過(guò)提供一套標(biāo)準(zhǔn)的OLE/CO

3、M接口完成的,在OPC技術(shù)中使用的是OLE 2技術(shù),OLE標(biāo)準(zhǔn)允許多臺(tái)微機(jī)之間交換文檔、圖形等對(duì)象。OPC的出現(xiàn)大大縮短了軟件開發(fā)的時(shí)間。本次課程設(shè)計(jì)就是要求使用VB設(shè)計(jì)一個(gè)簡(jiǎn)單的客戶端程序,這個(gè)程序能讀取本機(jī)服務(wù)器上面的數(shù)據(jù),并以直觀的柱形圖顯示出來(lái)。另外,還應(yīng)該添加一些別的功能。2應(yīng)用程序總體分析與設(shè)計(jì)開始為了能連接服務(wù)器,首先在PC機(jī)運(yùn)行模擬的服務(wù)器。然后,在VB6.0環(huán)境下,創(chuàng)建各種用于顯示數(shù)據(jù)和控制的控件。給每一個(gè)控件添加事件響應(yīng)函數(shù)。程序運(yùn)行的流程如下:退出顯示與保存讀取數(shù)據(jù)添加Item連接服務(wù)器3應(yīng)用程序各功能模塊分析與設(shè)計(jì)3.1 連接服務(wù)器首先使用new關(guān)鍵字創(chuàng)建一個(gè)OPC對(duì)象

4、,然后調(diào)用Connect方法連接到服務(wù)器。然后書寫連接按鈕的響應(yīng)函數(shù)。Private Sub BtnConnnect_Click() ' 調(diào)用Connect子程序 Call Connect("OPCJ.SampleServer.1")End SubSub Connect(strProgID As String, Optional strNode As String) If objServer Is Nothing Then ' 建立一個(gè)OPC服務(wù)器對(duì)象 Set objServer = New OPCServer End If If objServer.Ser

5、verState = OPCDisconnected Then ' 連接OPC服務(wù)器 objServer.Connect strProgID, strNode End If If objGroups Is Nothing Then ' 建立一個(gè)OPC組集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then ' 添加一個(gè)OPC組 Set objTestGrp = objGroups.Add("TestGrp") End IfEnd Sub3.2 加項(xiàng)對(duì)OPC

6、服務(wù)器進(jìn)行訪問(wèn)前,必須先在OPC組里添加要訪問(wèn)的OPC標(biāo)簽。這里添加OPC標(biāo)簽的標(biāo)識(shí)符和數(shù)目是固定的,但是實(shí)際的OPC應(yīng)用程序往往要按照用戶的指定或讀取組態(tài)文件取得和處理需要添加OPC標(biāo)簽。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 ' 設(shè)置組活動(dòng)狀態(tài) objTestGrp.IsActive = True ' 取消組非同期通知 objTestGrp.IsSubscribed = False ' 建立OPC項(xiàng)集合 Set objItems = objTestGrp.OPCItems ' 生成標(biāo)簽的項(xiàng)標(biāo)識(shí)符 strItemIDs(1) = "反應(yīng)罐溫度.Value" strItemIDs(2) = "反應(yīng)罐液位.Value" lClientHandles(1) = 1 lClient

8、Handles(2) = 2 ' 添加OPC項(xiàng) Call objItems.AddItems(2, strItemIDs, _ lClientHandles, lServerHandles, lErrors)End SubPrivate Sub btnAddItem_Click() ' 調(diào)用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count > 0 Then ' 啟動(dòng)定時(shí)器 TmUpdate.Enabled = True Else End If

9、 End If End Sub3.3 讀取數(shù)據(jù)為了實(shí)時(shí)顯示數(shù)據(jù),還要設(shè)置一個(gè)定時(shí)中斷類型的服務(wù)函數(shù),然后沒(méi)間隔一段時(shí)間去向服務(wù)器讀取一下數(shù)據(jù)。定時(shí)器會(huì)在加載項(xiàng)的時(shí)候啟動(dòng)。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 ' 計(jì)算棒的寬和高 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 顯示與隱藏為了方便顯示與隱藏其中某些項(xiàng),這里給一個(gè)柱形圖配置一個(gè)復(fù)選框,當(dāng)復(fù)選框選中的時(shí)候,該項(xiàng)目便隱藏起來(lái)。取消復(fù)選框,該項(xiàng)目又會(huì)顯示出來(lái)。這樣子的功能對(duì)于只需要觀察某些數(shù)據(jù)的時(shí)候,很是方便。具體實(shí)現(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ù)在實(shí)際生產(chǎn)環(huán)境中,遇到一些特殊情況需要暫停以觀察數(shù)據(jù),以防止被后面新的數(shù)據(jù)刷新。所以四個(gè)柱形圖又都配置了一個(gè)暫停復(fù)選框,當(dāng)復(fù)選框選中的時(shí)候,柱形圖暫停更新,當(dāng)取消復(fù)選框,柱形圖繼續(xù)更新。實(shí)現(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是個(gè)全局變量用于指示該柱形圖的數(shù)據(jù)是不是暫停了,如果是,在程序刷新的過(guò)程中則不對(duì)其刷新。3.6 報(bào)表與記錄工業(yè)生產(chǎn)中,保留歷史數(shù)據(jù)是必須的。為了分析一些特殊情況下的原因,必須要知道相關(guān)的數(shù)據(jù),所以保留歷史數(shù)據(jù)是很重要的部分。數(shù)據(jù)量大的時(shí)候可以使用數(shù)據(jù)庫(kù),但是小數(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當(dāng)保存文件復(fù)選框選中的時(shí)候,打開今天所對(duì)應(yīng)的文件,當(dāng)取消選中的時(shí)候,關(guān)閉打開的文件。如果文件打開,相應(yīng)的變量的狀態(tài)會(huì)更改以指示當(dāng)前需要向文件中寫入數(shù)據(jù),所以定時(shí)

20、中斷的時(shí)候,會(huì)向文件中寫入數(shù)據(jù)。If FileFlag = 1 Then Print #FileNo, Date; Time, Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1), Str(vtItemValues(1) End If4程序測(cè)試4.1測(cè)試過(guò)程軟件的測(cè)試主要包含連接測(cè)試,顯示與隱藏測(cè)試,暫停測(cè)試和數(shù)據(jù)記錄測(cè)試。4.1.1 連接測(cè)試打開程序,點(diǎn)擊運(yùn)行。然后分別點(diǎn)擊連接和加項(xiàng)按鈕。圖4-1 連接測(cè)試 顯示與隱藏測(cè)試在程序運(yùn)行狀態(tài)下,選中隱藏復(fù)選框。圖4-2 顯示與隱藏4.1.3 暫停按鈕取消所有隱藏復(fù)選框,然后選

21、中部分暫停按鈕。如下圖所示圖4-3 暫停4.1.4 數(shù)據(jù)保存選中保存數(shù)據(jù)復(fù)選框,記錄當(dāng)前時(shí)間,過(guò)30秒取消選中。圖4-4 保存數(shù)據(jù)4.2測(cè)試結(jié)果4.2.1 連接結(jié)果為了更方便的顯示結(jié)果,顯示的顏色會(huì)隨著數(shù)據(jù)的變化而變化,數(shù)據(jù)越接近于100柱形圖的顏色就越接近于紅色。數(shù)據(jù)越接近于0,柱形圖顏色越接近于綠色。 圖4-5 數(shù)據(jù)顯示測(cè)試4.2.2 顯示與隱藏結(jié)果勾選前兩個(gè)隱藏復(fù)選框后,發(fā)現(xiàn)相關(guān)的內(nèi)容隱藏了。圖4-6 顯示與隱藏4.2.3 暫停顯示勾選暫停顯示后,相應(yīng)的柱形圖不再同旁邊的數(shù)據(jù)一起刷新了。圖4-7 暫停顯示4.2.4 數(shù)據(jù)保存結(jié)果當(dāng)勾選保存數(shù)據(jù)復(fù)選框后,數(shù)據(jù)便被寫入當(dāng)天的文本文件。下圖中左

22、邊一列記錄的日期和時(shí)間,右邊記錄的是四個(gè)變量的數(shù)據(jù)。圖4-8 數(shù)據(jù)保存5程序文檔5.1使用說(shuō)明雙擊shunjun文件夾中的“工程1.exe”,程序開始執(zhí)行。連接->加項(xiàng),數(shù)據(jù)就能正常顯示了。隱藏,暫停和保存數(shù)據(jù)復(fù)選框分別控制的是隱藏柱形圖,柱形圖暫停更新和保存文件。5.2程序說(shuō)明Option Base 1Option Explicit'建立OPC對(duì)象 -聲明變量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() ' 調(diào)用Connect子程序 Call Connect("OPCJ.SampleServer.1")End SubPrivate Sub btnAddItem_Click() ' 調(diào)用AddItem子程序 Call AddItem If Not objTestGrp Is Nothin

24、g Then If objTestGrp.OPCItems.Count > 0 Then ' 啟動(dòng)定時(shí)器 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 ' 建立一個(gè)OPC服務(wù)器對(duì)象 Set objServer = New OPCServer End If If objServer.ServerState = OPCDisconnected Then ' 連接OPC服務(wù)器 objServer.Connect strProgID, strNode End If If objGrou

31、ps Is Nothing Then ' 建立一個(gè)OPC組集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then ' 添加一個(gè)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 ' 設(shè)置組活動(dòng)狀態(tài) objTestGrp.IsActive = True ' 取消組非同期通知 objTestGrp.IsSubscribed = False ' 建立OPC項(xiàng)集合 Set objItems = objTestGrp.OPCItems ' 生成標(biāo)簽的項(xiàng)標(biāo)識(shí)符 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項(xiàng) 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項(xiàng) 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服務(wù)器. objServer.Disconnect End If Set objServer = Nothing End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer) ' 調(diào)用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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論