軟件課程設計報告-北京科技大學_第1頁
軟件課程設計報告-北京科技大學_第2頁
軟件課程設計報告-北京科技大學_第3頁
軟件課程設計報告-北京科技大學_第4頁
軟件課程設計報告-北京科技大學_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..科技大學課程設計〔軟件設計〕報告班級:姓名:學號:指導教師:日期:年月日..目錄1設計容12應用程序總體分析與設計13應用程序各功能模塊分析與設計23.1連接效勞器23.2加項33.3讀取數據53.4顯示與隱藏73.5暫停與繼續(xù)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學習收獲27..1設計容OPC(OLEforProcessControl)又稱為過程控制的對象連接與嵌入技術。它是它的出現為基于Windows的應用程序和現場過程控制應用建立了橋梁。在過去,為了存取現場設備的數據信息,每一個應用軟件開發(fā)商都需要編寫專用的接口函數。由于現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟件開發(fā)商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統(tǒng)集成商和開發(fā)商急迫需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。在這種情況下,OPC標準應運而生。OPC標準以微軟公司的OLE技術為根底,它的制定是通過提供一套標準的OLE/接口完成的,在OPC技術中使用的是OLE2技術,OLE標準允許多臺微機之間交換文檔、圖形等對象。OPC的出現大大縮短了軟件開發(fā)的時間。本次課程設計就是要求使用VB設計一個簡單的客戶端程序,這個程序能讀取本機效勞器上面的數據,并以直觀的柱形圖顯示出來。另外,還應該添加一些別的功能。2應用程序總體分析與設計開場為了能連接效勞器,首先在PC機運行模擬的效勞器。然后,在VB6.0環(huán)境下,創(chuàng)立各種用于顯示數據和控制的控件。給每一個控件添加事件響應函數。程序運行的流程如下:開場退出顯示與保存讀取數據添加Item連接效勞器退出顯示與保存讀取數據添加Item連接效勞器3應用程序各功能模塊分析與設計3.1連接效勞器首先使用new關鍵字創(chuàng)立一個OPC對象,然后調用Connect方法連接到效勞器。然后書寫連接按鈕的響應函數。PrivateSubBtnConnnect_Click()'調用Connect子程序CallConnect("OPCJ.SampleServer.1")EndSubSubConnect(strProgIDAsString,OptionalstrNodeAsString)IfobjServerIsNothingThen'建立一個OPC效勞器對象SetobjServer=NewOPCServerEndIfIfobjServer.ServerState=OPCDisconnectedThen'連接OPC效勞器objServer.ConnectstrProgID,strNodeEndIfIfobjGroupsIsNothingThen'建立一個OPC組集合SetobjGroups=objServer.OPCGroupsEndIfIfobjTestGrpIsNothingThen'添加一個OPC組SetobjTestGrp=objGroups.Add("TestGrp")EndIfEndSub3.2加項對OPC效勞器進展訪問前,必須先在OPC組里添加要訪問的OPC標簽。這里添加OPC標簽的標識符和數目是固定的,但是實際的OPC應用程序往往要按照用戶的指定或讀取組態(tài)文件取得和處理需要添加OPC標簽。SubAddItem()DimstrItemIDs(2)AsStringDimlClientHandles(2)AsLongDimlErrors()AsLongDimIAsIntegerIfobjTestGrpIsNothingThenExitSubEndIfIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenExitSubEndIfEndIf'設置組活動狀態(tài)objTestGrp.IsActive=True'取消組非同期通知objTestGrp.IsSubscribed=False'建立OPC項集合SetobjItems=objTestGrp.OPCItems'生成標簽的項標識符strItemIDs(1)="反響罐溫度.Value"strItemIDs(2)="反響罐液位.Value"lClientHandles(1)=1lClientHandles(2)=2'添加OPC項CallobjItems.AddItems(2,strItemIDs,_lClientHandles,lServerHandles,lErrors)EndSubPrivateSubbtnAddItem_Click()'調用AddItem子程序CallAddItemIfNotobjTestGrpIsNothingThenIfobjTestGrp.OPCItems.Count>0Then'啟動定時器TmUpdate.Enabled=TrueElseEndIfEndIfEndSub3.3讀取數據為了實時顯示數據,還要設置一個定時中斷類型的效勞函數,然后沒間隔一段時間去向效勞器讀取一下數據。定時器會在加載項的時候啟動。PrivateSubtmUpdate_Timer()DimvtItemValues()AsVariantDimlErrors()AsLongDimstrBufAsStringDimnWidthAsIntegerDimnHeightAsIntegerDimnDrawHeightAsIntegerDimsglScaleAsSingleDimIAsInteger'同期讀取SyncReadOPCCache,vtItemValues,lErrors'棒圖的表示ForI=1To4'數據的格式化IfPauseFlag(I)=0ThenstrBuf=Format(vtItemValues(I),"###.000")'表示數據字符串lbBar(I).Caption=strBuf'計算棒的寬和高nWidth=PicBar(I).ScaleWidthnHeight=PicBar(I).ScaleHeightsglScale=vtItemValues(I)/100nDrawHeight=CInt(nHeight*sglScale)'去除現棒圖PicBar(I).Cls'繪制棒圖'IfvtItemValues(I)<20OrvtItemValues(I)>90Then'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'EndIfPicBar(I).Line(0,nHeight-nDrawHeight)-(nWidth,nHeight),RGB(vtItemValues(I)*2.55,255-vtItemValues(I)*2.55,0),BFEndIfNextIfFileFlag=1ThenPrint#FileNo,Date;Time,Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1))EndIfEndSub3.4顯示與隱藏為了方便顯示與隱藏其中某些項,這里給一個柱形圖配置一個復選框,當復選框選中的時候,該工程便隱藏起來。取消復選框,該工程又會顯示出來。這樣子的功能對于只需要觀察某些數據的時候,很是方便。具體實現方式如下:PrivateSubCheck1_Click()IfCheck1.Value=1ThenPicBar(1).Visible=FalselbBar(1).Visible=FalseLabel1.Visible=FalseElsePicBar(1).Visible=TruelbBar(1).Visible=TrueLabel1.Visible=TrueEndIfEndSubPrivateSubCheck2_Click()IfCheck2.Value=1ThenPicBar(2).Visible=FalselbBar(2).Visible=FalseLabel2.Visible=FalseElsePicBar(2).Visible=TruelbBar(2).Visible=TrueLabel2.Visible=TrueEndIfEndSubPrivateSubCheck3_Click()IfCheck3.Value=1ThenPicBar(3).Visible=FalselbBar(3).Visible=FalseLabel3.Visible=FalseElsePicBar(3).Visible=TruelbBar(3).Visible=TrueLabel3.Visible=TrueEndIfEndSubPrivateSubCheck4_Click()IfCheck4.Value=1ThenPicBar(4).Visible=FalselbBar(4).Visible=FalseLabel4.Visible=FalseElsePicBar(4).Visible=TruelbBar(4).Visible=TrueLabel4.Visible=TrueEndIfEndSub3.5暫停與繼續(xù)在實際生產環(huán)境中,遇到一些特殊情況需要暫停以觀察數據,以防止被后面新的數據刷新。所以四個柱形圖又都配置了一個暫停復選框,當復選框選中的時候,柱形圖暫停更新,當取消復選框,柱形圖繼續(xù)更新。實現代碼如下:PrivateSubCheck5_Click()IfCheck5.Value=1ThenPauseFlag(4)=1ElsePauseFlag(4)=0EndIfEndSubPrivateSubCheck6_Click()IfCheck6.Value=1ThenPauseFlag(1)=1ElsePauseFlag(1)=0EndIfEndSubPrivateSubCheck7_Click()IfCheck7.Value=1ThenPauseFlag(2)=1ElsePauseFlag(2)=0EndIfEndSubPrivateSubCheck8_Click()IfCheck8.Value=1ThenPauseFlag(3)=1ElsePauseFlag(3)=0EndIfEndSub其中的PauseFlag是個全局變量用于指示該柱形圖的數據是不是暫停了,如果是,在程序刷新的過程中那么不對其刷新。3.6報表與記錄工業(yè)生產中,保存歷史數據是必須的。為了分析一些特殊情況下的原因,必須要知道相關的數據,所以保存歷史數據是很重要的局部。數據量大的時候可以使用數據庫,但是小數據量可以使用文件保存數據的方式。這里,使用文件的方式記錄讀取的數據。PrivateSubCheck9_Click()FileFlag=Check9.ValueIfFileFlag=1ThenFileNo=FreeFile()Open"C:\Users\Cheng\Desktop\shunjun\"&Str(Year(Now))&"年"&Str(Month(Now))&"月"&Str(Day(Now))&"日.txt"ForAppendAsFileNoElseCloseFileNoEndIfEndSub當保存文件復選框選中的時候,翻開今天所對應的文件,當取消選中的時候,關閉翻開的文件。如果文件翻開,相應的變量的狀態(tài)會更改以指示當前需要向文件中寫入數據,所以定時中斷的時候,會向文件中寫入數據。IfFileFlag=1ThenPrint#FileNo,Date;Time,Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1))EndIf4程序測試4.1測試過程軟件的測試主要包含連接測試,顯示與隱藏測試,暫停測試和數據記錄測試。4.1.1連接測試翻開程序,點擊運行。然后分別點擊連接和加項按鈕。圖4-1連接測試4.1.2顯示與隱藏測試在程序運行狀態(tài)下,選中隱藏復選框。圖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顯示與隱藏結果勾選前兩個隱藏復選框后,發(fā)現相關的容隱藏了。圖4-6顯示與隱藏4.2.3暫停顯示勾選暫停顯示后,相應的柱形圖不再同旁邊的數據一起刷新了。圖4-7暫停顯示4.2.4數據保存結果當勾選保存數據復選框后,數據便被寫入當天的文本文件。下列圖中左邊一列記錄的日期和時間,右邊記錄的是四個變量的數據。圖4-8數據保存5程序文檔5.1使用說明雙擊shunjun文件夾中的"工程1.exe〞,程序開場執(zhí)行。連接->加項,數據就能正常顯示了。隱藏,暫停和保存數據復選框分別控制的是隱藏柱形圖,柱形圖暫停更新和保存文件。5.2程序說明OptionBase1OptionExplicit'建立OPC對象-聲明變量DimWithEventsobjServerAsOPCServerDimobjGroupsAsOPCGroupsDimWithEventsobjTestGrpAsOPCGroupDimobjItemsAsOPCItemsDimlServerHandles()AsLongDimPauseFlag(1To4)AsIntegerDimFileFlagAsIntegerDimFileNoPrivateSubBtnConnnect_Click()'調用Connect子程序CallConnect("OPCJ.SampleServer.1")EndSubPrivateSubbtnAddItem_Click()'調用AddItem子程序CallAddItemIfNotobjTestGrpIsNothingThenIfobjTestGrp.OPCItems.Count>0Then'啟動定時器TmUpdate.Enabled=TrueElseEndIfEndIfEndSubPrivateSubbtnQuit_Click()'卸載窗體UnloadFmMainEndSubPrivateSubCheck1_Click()IfCheck1.Value=1ThenPicBar(1).Visible=FalselbBar(1).Visible=FalseLabel1.Visible=FalseElsePicBar(1).Visible=TruelbBar(1).Visible=TrueLabel1.Visible=TrueEndIfEndSubPrivateSubCheck2_Click()IfCheck2.Value=1ThenPicBar(2).Visible=FalselbBar(2).Visible=FalseLabel2.Visible=FalseElsePicBar(2).Visible=TruelbBar(2).Visible=TrueLabel2.Visible=TrueEndIfEndSubPrivateSubCheck3_Click()IfCheck3.Value=1ThenPicBar(3).Visible=FalselbBar(3).Visible=FalseLabel3.Visible=FalseElsePicBar(3).Visible=TruelbBar(3).Visible=TrueLabel3.Visible=TrueEndIfEndSubPrivateSubCheck4_Click()IfCheck4.Value=1ThenPicBar(4).Visible=FalselbBar(4).Visible=FalseLabel4.Visible=FalseElsePicBar(4).Visible=TruelbBar(4).Visible=TrueLabel4.Visible=TrueEndIfEndSubPrivateSubCheck5_Click()IfCheck5.Value=1ThenPauseFlag(4)=1ElsePauseFlag(4)=0EndIfEndSubPrivateSubCheck6_Click()IfCheck6.Value=1ThenPauseFlag(1)=1ElsePauseFlag(1)=0EndIfEndSubPrivateSubCheck7_Click()IfCheck7.Value=1ThenPauseFlag(2)=1ElsePauseFlag(2)=0EndIfEndSubPrivateSubCheck8_Click()IfCheck8.Value=1ThenPauseFlag(3)=1ElsePauseFlag(3)=0EndIfEndSubPrivateSubCheck9_Click()FileFlag=Check9.ValueIfFileFlag=1ThenFileNo=FreeFile()Open"C:\Users\Cheng\Desktop\shunjun\"&Str(Year(Now))&"年"&Str(Month(Now))&"月"&Str(Day(Now))&"日.txt"ForAppendAsFileNoElseCloseFileNoEndIfEndSubPrivateSubForm_Load()TmUpdate.Enabled=FalseTmUpdate.Interval=1000EndSubSubConnect(strProgIDAsString,OptionalstrNodeAsString)IfobjServerIsNothingThen'建立一個OPC效勞器對象SetobjServer=NewOPCServerEndIfIfobjServer.ServerState=OPCDisconnectedThen'連接OPC效勞器objServer.ConnectstrProgID,strNodeEndIfIfobjGroupsIsNothingThen'建立一個OPC組集合SetobjGroups=objServer.OPCGroupsEndIfIfobjTestGrpIsNothingThen'添加一個OPC組SetobjTestGrp=objGroups.Add("TestGrp")EndIfEndSubSubAddItem()DimstrItemIDs(4)AsStringDimlClientHandles(4)AsLongDimlErrors()AsLongDimIAsIntegerIfobjTestGrpIsNothingThenExitSubEndIfIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenExitSubEndIfEndIf'設置組活動狀態(tài)objTestGrp.IsActive=True'取消組非同期通知objTestGrp.IsSubscribed=False'建立OPC項集合SetobjItems=objTestGrp.OPCItems'生成標簽的項標識符strItemIDs(4)="TAG4"strItemIDs(1)="TAG1"strItemIDs(2)="TAG2"strItemIDs(3)="TAG3"lClientHandles(4)=4lClientHandles(1)=1lClientHandles(2)=2lClientHandles(3)=3'添加OPC項CallobjItems.AddItems(4,strItemIDs,_lClientHandles,lServerHandles,lErrors)EndSubSubDisconnect()DimlErrors()AsLongIfNotobjItemsIsNothingThenIfobjItems.Count>0Then'去除OPC項objItems.Remove4,lServerHandles,lErrorsEndIfSetobjItems=NothingEndIfIfNotobjTestGrpIsNothingThen'去除OPC組objGroups.Remove"TestGrp"SetobjTestGrp=NothingEndIfIfNotobjGroupsIsNothingThenSetobjGroups=NothingEndIfIfNotobjServerIsNothingThenIfobjServer.ServerState<>OPCDisconnectedThen'斷開OPC效勞器.objServer.DisconnectEndIfSetobjServer=NothingEndIfEndSubPrivateSubForm_Unload(CancelAsInteger)'調用Disconnect子程序CallDisconnectCloseFileNoEndSubPrivateSubtmUpdate_Timer()DimvtItemValues()AsVariantDimlErrors()AsLongDimstrBufAsStringDimnWidthAsIntegerDimnHeightAsIntegerDimnDrawHeightAsIntegerDimsglScaleAsSingleDimIAsInteger'同期讀取SyncReadOPCCache,vtItemValues,lErrors'棒圖的表示ForI=1To4'數據的格式化IfPauseFlag(I)=0ThenstrBuf=Format(vtItemValues(I),"###.000")'

溫馨提示

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

評論

0/150

提交評論