版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
..科技大學(xué)課程設(shè)計(jì)〔軟件設(shè)計(jì)〕報(bào)告班級(jí):姓名:學(xué)號(hào):指導(dǎo)教師:日期:年月日..目錄1設(shè)計(jì)容12應(yīng)用程序總體分析與設(shè)計(jì)13應(yīng)用程序各功能模塊分析與設(shè)計(jì)23.1連接效勞器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學(xué)習(xí)收獲27..1設(shè)計(jì)容OPC(OLEforProcessControl)又稱為過(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ù)為根底,它的制定是通過(guò)提供一套標(biāo)準(zhǔn)的OLE/接口完成的,在OPC技術(shù)中使用的是OLE2技術(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ī)效勞器上面的數(shù)據(jù),并以直觀的柱形圖顯示出來(lái)。另外,還應(yīng)該添加一些別的功能。2應(yīng)用程序總體分析與設(shè)計(jì)開場(chǎng)為了能連接效勞器,首先在PC機(jī)運(yùn)行模擬的效勞器。然后,在VB6.0環(huán)境下,創(chuàng)立各種用于顯示數(shù)據(jù)和控制的控件。給每一個(gè)控件添加事件響應(yīng)函數(shù)。程序運(yùn)行的流程如下:開場(chǎng)退出顯示與保存讀取數(shù)據(jù)添加Item連接效勞器退出顯示與保存讀取數(shù)據(jù)添加Item連接效勞器3應(yīng)用程序各功能模塊分析與設(shè)計(jì)3.1連接效勞器首先使用new關(guān)鍵字創(chuàng)立一個(gè)OPC對(duì)象,然后調(diào)用Connect方法連接到效勞器。然后書寫連接按鈕的響應(yīng)函數(shù)。PrivateSubBtnConnnect_Click()'調(diào)用Connect子程序CallConnect("OPCJ.SampleServer.1")EndSubSubConnect(strProgIDAsString,OptionalstrNodeAsString)IfobjServerIsNothingThen'建立一個(gè)OPC效勞器對(duì)象SetobjServer=NewOPCServerEndIfIfobjServer.ServerState=OPCDisconnectedThen'連接OPC效勞器objServer.ConnectstrProgID,strNodeEndIfIfobjGroupsIsNothingThen'建立一個(gè)OPC組集合SetobjGroups=objServer.OPCGroupsEndIfIfobjTestGrpIsNothingThen'添加一個(gè)OPC組SetobjTestGrp=objGroups.Add("TestGrp")EndIfEndSub3.2加項(xiàng)對(duì)OPC效勞器進(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)簽。SubAddItem()DimstrItemIDs(2)AsStringDimlClientHandles(2)AsLongDimlErrors()AsLongDimIAsIntegerIfobjTestGrpIsNothingThenExitSubEndIfIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenExitSubEndIfEndIf'設(shè)置組活動(dòng)狀態(tài)objTestGrp.IsActive=True'取消組非同期通知objTestGrp.IsSubscribed=False'建立OPC項(xiàng)集合SetobjItems=objTestGrp.OPCItems'生成標(biāo)簽的項(xiàng)標(biāo)識(shí)符strItemIDs(1)="反響罐溫度.Value"strItemIDs(2)="反響罐液位.Value"lClientHandles(1)=1lClientHandles(2)=2'添加OPC項(xiàng)CallobjItems.AddItems(2,strItemIDs,_lClientHandles,lServerHandles,lErrors)EndSubPrivateSubbtnAddItem_Click()'調(diào)用AddItem子程序CallAddItemIfNotobjTestGrpIsNothingThenIfobjTestGrp.OPCItems.Count>0Then'啟動(dòng)定時(shí)器TmUpdate.Enabled=TrueElseEndIfEndIfEndSub3.3讀取數(shù)據(jù)為了實(shí)時(shí)顯示數(shù)據(jù),還要設(shè)置一個(gè)定時(shí)中斷類型的效勞函數(shù),然后沒(méi)間隔一段時(shí)間去向效勞器讀取一下數(shù)據(jù)。定時(shí)器會(huì)在加載項(xiàng)的時(shí)候啟動(dòng)。PrivateSubtmUpdate_Timer()DimvtItemValues()AsVariantDimlErrors()AsLongDimstrBufAsStringDimnWidthAsIntegerDimnHeightAsIntegerDimnDrawHeightAsIntegerDimsglScaleAsSingleDimIAsInteger'同期讀取SyncReadOPCCache,vtItemValues,lErrors'棒圖的表示ForI=1To4'數(shù)據(jù)的格式化IfPauseFlag(I)=0ThenstrBuf=Format(vtItemValues(I),"###.000")'表示數(shù)據(jù)字符串lbBar(I).Caption=strBuf'計(jì)算棒的寬和高nWidth=PicBar(I).ScaleWidthnHeight=PicBar(I).ScaleHeightsglScale=vtItemValues(I)/100nDrawHeight=CInt(nHeight*sglScale)'去除現(xiàn)棒圖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顯示與隱藏為了方便顯示與隱藏其中某些項(xiàng),這里給一個(gè)柱形圖配置一個(gè)復(fù)選框,當(dāng)復(fù)選框選中的時(shí)候,該工程便隱藏起來(lái)。取消復(fù)選框,該工程又會(huì)顯示出來(lái)。這樣子的功能對(duì)于只需要觀察某些數(shù)據(jù)的時(shí)候,很是方便。具體實(shí)現(xiàn)方式如下: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ù)在實(shí)際生產(chǎn)環(huán)境中,遇到一些特殊情況需要暫停以觀察數(shù)據(jù),以防止被后面新的數(shù)據(jù)刷新。所以四個(gè)柱形圖又都配置了一個(gè)暫停復(fù)選框,當(dāng)復(fù)選框選中的時(shí)候,柱形圖暫停更新,當(dāng)取消復(fù)選框,柱形圖繼續(xù)更新。實(shí)現(xiàn)代碼如下: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是個(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ù)。PrivateSubCheck9_Click()FileFlag=Check9.ValueIfFileFlag=1ThenFileNo=FreeFile()Open"C:\Users\Cheng\Desktop\shunjun\"&Str(Year(Now))&"年"&Str(Month(Now))&"月"&Str(Day(Now))&"日.txt"ForAppendAsFileNoElseCloseFileNoEndIfEndSub當(dāng)保存文件復(fù)選框選中的時(shí)候,翻開今天所對(duì)應(yīng)的文件,當(dāng)取消選中的時(shí)候,關(guān)閉翻開的文件。如果文件翻開,相應(yīng)的變量的狀態(tài)會(huì)更改以指示當(dāng)前需要向文件中寫入數(shù)據(jù),所以定時(shí)中斷的時(shí)候,會(huì)向文件中寫入數(shù)據(jù)。IfFileFlag=1ThenPrint#FileNo,Date;Time,Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1)),Str(vtItemValues(1))EndIf4程序測(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è)試4.1.2顯示與隱藏測(cè)試在程序運(yùn)行狀態(tài)下,選中隱藏復(fù)選框。圖4-2顯示與隱藏4.1.3暫停按鈕取消所有隱藏復(fù)選框,然后選中局部暫停按鈕。如下列圖所示圖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)的容隱藏了。圖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)天的文本文件。下列圖中左邊一列記錄的日期和時(shí)間,右邊記錄的是四個(gè)變量的數(shù)據(jù)。圖4-8數(shù)據(jù)保存5程序文檔5.1使用說(shuō)明雙擊shunjun文件夾中的"工程1.exe〞,程序開場(chǎng)執(zhí)行。連接->加項(xiàng),數(shù)據(jù)就能正常顯示了。隱藏,暫停和保存數(shù)據(jù)復(fù)選框分別控制的是隱藏柱形圖,柱形圖暫停更新和保存文件。5.2程序說(shuō)明OptionBase1OptionExplicit'建立OPC對(duì)象-聲明變量DimWithEventsobjServerAsOPCServerDimobjGroupsAsOPCGroupsDimWithEventsobjTestGrpAsOPCGroupDimobjItemsAsOPCItemsDimlServerHandles()AsLongDimPauseFlag(1To4)AsIntegerDimFileFlagAsIntegerDimFileNoPrivateSubBtnConnnect_Click()'調(diào)用Connect子程序CallConnect("OPCJ.SampleServer.1")EndSubPrivateSubbtnAddItem_Click()'調(diào)用AddItem子程序CallAddItemIfNotobjTestGrpIsNothingThenIfobjTestGrp.OPCItems.Count>0Then'啟動(dòng)定時(shí)器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'建立一個(gè)OPC效勞器對(duì)象SetobjServer=NewOPCServerEndIfIfobjServer.ServerState=OPCDisconnectedThen'連接OPC效勞器objServer.ConnectstrProgID,strNodeEndIfIfobjGroupsIsNothingThen'建立一個(gè)OPC組集合SetobjGroups=objServer.OPCGroupsEndIfIfobjTestGrpIsNothingThen'添加一個(gè)OPC組SetobjTestGrp=objGroups.Add("TestGrp")EndIfEndSubSubAddItem()DimstrItemIDs(4)AsStringDimlClientHandles(4)AsLongDimlErrors()AsLongDimIAsIntegerIfobjTestGrpIsNothingThenExitSubEndIfIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenExitSubEndIfEndIf'設(shè)置組活動(dòng)狀態(tài)objTestGrp.IsActive=True'取消組非同期通知objTestGrp.IsSubscribed=False'建立OPC項(xiàng)集合SetobjItems=objTestGrp.OPCItems'生成標(biāo)簽的項(xiàng)標(biāo)識(shí)符strItemIDs(4)="TAG4"strItemIDs(1)="TAG1"strItemIDs(2)="TAG2"strItemIDs(3)="TAG3"lClientHandles(4)=4lClientHandles(1)=1lClientHandles(2)=2lClientHandles(3)=3'添加OPC項(xiàng)CallobjItems.AddItems(4,strItemIDs,_lClientHandles,lServerHandles,lErrors)EndSubSubDisconnect()DimlErrors()AsLongIfNotobjItemsIsNothingThenIfobjItems.Count>0Then'去除OPC項(xiàng)objItems.Remove4,lServerHandles,lErrorsEndIfSetobjItems=NothingEndIfIfNotobjTestGrpIsNothingThen'去除OPC組objGroups.Remove"TestGrp"SetobjTestGrp=NothingEndIfIfNotobjGroupsIsNothingThenSetobjGroups=NothingEndIfIfNotobjServerIsNothingThenIfobjServer.ServerState<>OPCDisconnectedThen'斷開OPC效勞器.objServer.DisconnectEndIfSetobjServer=NothingEndIfEndSubPrivateSubForm_Unload(CancelAsInteger)'調(diào)用Disconnect子程序CallDisconnectCloseFileNoEndSubPrivateSubtmUpdate_Timer()DimvtItemValues()AsVariantDimlErrors()AsLongDimstrBufAsStringDimnWidthAsIntegerDimnHeightAsIntegerDimnDrawHeightAsIntegerDimsglScaleAsSingleDimIAsInteger'同期讀取SyncReadOPCCache,vtItemValues,lErrors'棒圖的表示ForI=1To4'數(shù)據(jù)的格式化IfPauseFlag(I)=0ThenstrBuf=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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《網(wǎng)絡(luò)b安全b》課件
- 第3單元 中國(guó)特色社會(huì)主義道路(A卷·知識(shí)通關(guān)練)(解析版)
- 2014年高考語(yǔ)文試卷(新課標(biāo)Ⅱ卷)(解析卷)
- 中國(guó)非遺文化魚燈介紹2
- 羽絨服的成本控制與優(yōu)化設(shè)計(jì)-洞察分析
- 雨水收集設(shè)施維護(hù)與監(jiān)測(cè)-洞察分析
- 體育游戲在體育教育中的應(yīng)用-洞察分析
- 香菇多糖生物活性分析-洞察分析
- 舞蹈康復(fù)對(duì)精神疾病患者心理創(chuàng)傷的治愈-洞察分析
- 網(wǎng)絡(luò)流量監(jiān)測(cè)技術(shù)-洞察分析
- 中南大學(xué)《大學(xué)物理C(3)(一)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024新人教版英語(yǔ)七年級(jí)上單詞默寫表(小學(xué)部分)
- 電力拖動(dòng)教學(xué)講義
- 2024社保費(fèi)測(cè)試(五)專項(xiàng)試卷
- 齊魯名家 談方論藥智慧樹知到期末考試答案2024年
- 南京工業(yè)大學(xué)橋梁工程課程設(shè)計(jì)
- 基于51單片機(jī)的簡(jiǎn)易計(jì)算器時(shí)間顯示(LCD1602顯示)
- 2022國(guó)開大學(xué)電大??啤掇r(nóng)科基礎(chǔ)化學(xué)》期末試題及答案
- 《眼睛結(jié)構(gòu)與功能》PPT課件.ppt
- 村委會(huì)實(shí)虛線信紙.
- GB∕T 39757-2021 建筑施工機(jī)械與設(shè)備 混凝土泵和泵車安全使用規(guī)程
評(píng)論
0/150
提交評(píng)論