軟件課程設(shè)計(jì)報(bào)告(opc)_第1頁(yè)
已閱讀1頁(yè),還剩22頁(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、<p>  課程設(shè)計(jì)(軟件設(shè)計(jì))</p><p><b>  報(bào)告</b></p><p>  班 級(jí): </p><p>  姓 名: </p><p>  學(xué) 號(hào): </p>

2、<p>  指導(dǎo)教師: </p><p>  日 期: 2014 年 10 月 28 日</p><p><b>  目 錄</b></p><p><b>  1設(shè)計(jì)內(nèi)容1</b></p><p>  2應(yīng)用程序總體分析與設(shè)計(jì)

3、1</p><p>  2.1訪問(wèn)老師提供的服務(wù)器的VB客戶端1</p><p>  2.2訪問(wèn)WINCC服務(wù)器的VB客戶端1</p><p>  3應(yīng)用程序各功能模塊分析與設(shè)計(jì)2</p><p>  3.1訪問(wèn)老師提供的服務(wù)器的VB客戶端2</p><p>  3.1.1變量聲明2</p>&

4、lt;p>  3.1.2連接OPC服務(wù)器和建立OPC組2</p><p>  3.1.3添加OPC標(biāo)簽2</p><p>  3.1.4斷開(kāi)OPC服務(wù)器3</p><p>  3.1.5窗體設(shè)計(jì)3</p><p>  3.2訪問(wèn)WINCC服務(wù)器的VB客戶端3</p><p>  3.2.1 OPC連接

5、3</p><p>  3.2.2 OPC的標(biāo)簽讀寫(xiě)4</p><p>  3.2.3 OPC連接斷開(kāi)4</p><p>  3.2.4建立窗體4</p><p><b>  4程序測(cè)試5</b></p><p><b>  4.1測(cè)試過(guò)程5</b></p&g

6、t;<p><b>  4.2測(cè)試結(jié)果5</b></p><p>  4.2.1 VB客戶端訪問(wèn)老師提供的服務(wù)器5</p><p>  4.2.2 VB客戶端訪問(wèn)WINCC服務(wù)器6</p><p><b>  5程序文檔9</b></p><p><b>  5.1使

7、用說(shuō)明9</b></p><p>  5.1.1 VB客戶端訪問(wèn)老師提供的服務(wù)器9</p><p>  5.1.2 VB客戶端訪問(wèn)WINCC服務(wù)器9</p><p><b>  5.2程序說(shuō)明9</b></p><p>  5.2.1 VB客戶端訪問(wèn)老師提供的服務(wù)器的源程序9</p>

8、<p>  5.2.2 VB客戶端訪問(wèn)WINCC服務(wù)器的源程序16</p><p><b>  6 總結(jié)19</b></p><p><b>  1設(shè)計(jì)內(nèi)容</b></p><p>  通過(guò)VB編程,編寫(xiě)一個(gè)OPC客戶端程序,實(shí)現(xiàn)對(duì)任意OPC服務(wù)器的訪問(wèn)讀取。本設(shè)計(jì)涉及到老師提供的服務(wù)器、WINCC服務(wù)器、V

9、B客戶端、OPC Scout V10客戶端、Matlab客戶端。</p><p>  我們組在兩個(gè)服務(wù)器,三個(gè)客戶端的基礎(chǔ)上進(jìn)行了多種組合,并一一實(shí)現(xiàn)。</p><p>  包括:(1)VB客戶端訪問(wèn)老師提供的服務(wù)器。</p><p> ?。?)VB客戶端訪問(wèn)WINCC服務(wù)器。</p><p> ?。?)VB客戶端、OPC Scout V10

10、客戶端對(duì)WINCC服務(wù)器的同步讀取。</p><p> ?。?)VB客戶端、MATLAB客戶端對(duì)WINCC服務(wù)器的同步讀取。</p><p>  2應(yīng)用程序總體分析與設(shè)計(jì)</p><p>  2.1訪問(wèn)老師提供的服務(wù)器的VB客戶端</p><p>  VB客戶端需要完成的操作有:</p><p><b>  

11、(1)變量聲明</b></p><p>  (2)連接OPC服務(wù)器和建立OPC組</p><p> ?。?)添加OPC標(biāo)簽</p><p> ?。?)斷開(kāi)OPC服務(wù)器</p><p><b> ?。?)窗體設(shè)計(jì)</b></p><p> ?。?)命令按鈕的事件處理</p>

12、<p><b> ?。?)同步數(shù)據(jù)讀取</b></p><p>  2.2訪問(wèn)WINCC服務(wù)器的VB客戶端</p><p>  VB客戶端需要完成的操作有:</p><p><b> ?。?)OPC連接</b></p><p> ?。?)OPC的標(biāo)簽讀寫(xiě)</p><p

13、> ?。?)OPC連接斷開(kāi)</p><p><b> ?。?)建立窗體</b></p><p>  3應(yīng)用程序各功能模塊分析與設(shè)計(jì)</p><p>  3.1訪問(wèn)老師提供的服務(wù)器的VB客戶端</p><p><b>  3.1.1變量聲明</b></p><p>  變

14、量的數(shù)據(jù)類型應(yīng)該指定為對(duì)象型。這些對(duì)象變量在窗體代碼的(General)部分聲明。因?yàn)樵冢℅eneral)部分聲明的變量,可以在窗體的任何方法的代碼內(nèi)引用。</p><p>  有關(guān)定義OPC對(duì)象的聲明及其說(shuō)明列于表3-1-1</p><p>  表3-1-1 OPC對(duì)象變量的聲明</p><p>  3.1.2連接OPC服務(wù)器和建立OPC組</p>

15、<p>  考慮到代碼的可反復(fù)使用性,這里采用子程序進(jìn)行編程。</p><p>  這里用“NEW”關(guān)鍵詞生成OPC服務(wù)器的對(duì)象,然后調(diào)用OPC服務(wù)器對(duì)象的“Connect”方法,和OPC服務(wù)器連接。在連接遠(yuǎn)程服務(wù)器的時(shí)候,需要指定作為選用參數(shù)的遠(yuǎn)程計(jì)算機(jī)名。</p><p>  3.1.3添加OPC標(biāo)簽</p><p>  對(duì)OPC服務(wù)器進(jìn)行訪問(wèn)前,必須

16、先在OPC組里添加要訪問(wèn)的OPC標(biāo)簽。</p><p>  這里添加OPC標(biāo)簽的標(biāo)識(shí)符和數(shù)目是固定的,但是實(shí)際的OPC應(yīng)用程序往往要按照用戶的指定或讀取組態(tài)文件取得和處理需要添加OPC標(biāo)簽。</p><p>  3.1.4斷開(kāi)OPC服務(wù)器</p><p>  連接著OPC服務(wù)器的OPC應(yīng)用程序,在退出前必須斷開(kāi)和OPC服務(wù)器的連接。因?yàn)镺PC服務(wù)器并不知道OPC應(yīng)用

17、程序的退出,如果不先斷開(kāi)連接,那么OPC服務(wù)器使用的計(jì)算機(jī)資源就不被釋放。如果這樣的問(wèn)題反復(fù)發(fā)生,久而久之,連續(xù)運(yùn)轉(zhuǎn)的自動(dòng)控制系統(tǒng)可能會(huì)使計(jì)算機(jī)資源漸漸枯竭從而發(fā)生嚴(yán)重問(wèn)題。</p><p><b>  3.1.5窗體設(shè)計(jì)</b></p><p>  圖3.1.5 VB客戶端(1)窗體設(shè)計(jì)</p><p>  3.2訪問(wèn)WINCC服務(wù)器的VB客

18、戶端</p><p>  3.2.1 OPC連接</p><p>  先在工具欄中“工程\引用”將近 Siemens OPC DAAutomation 2.0加入,然后開(kāi)始定義全局變量。在本程序中,我使用了一個(gè)OPC組進(jìn)行OPC訪問(wèn),所以定義了全局變量。首先定義OPC服務(wù)類型與計(jì)算機(jī)結(jié)點(diǎn)名。定義OPC組與OPC標(biāo)簽組。并定義OPC的標(biāo)簽數(shù)組與值數(shù),值數(shù)組設(shè)為Variant。</p&g

19、t;<p>  在定義所有變量后,我們就要進(jìn)行OPC連接了,要進(jìn)行OPC連接之前,先要配置要訪問(wèn)的OPC標(biāo)簽名(即WinCC內(nèi)部變量名),我們ItemIDs中加入相應(yīng)的標(biāo)簽名,注意:這數(shù)組必須由1開(kāi)始,不能由0開(kāi)始。 </p><p>  配置好標(biāo)簽后就要進(jìn)行OPC連接了。如下面子程序:①先配置名柄索引,這將在讀取OPC標(biāo)簽的值時(shí)可要用到。②生成OPC對(duì)象,③ 進(jìn)行OPC標(biāo)簽連接,至此OPC連接就成

20、功了,我們可以對(duì)OPC進(jìn)行讀與寫(xiě)的操作了。</p><p>  3.2.2 OPC的標(biāo)簽讀寫(xiě)</p><p>  對(duì)OPC標(biāo)簽的讀可以通過(guò)ItemIDsValue(4)組的DataChange事件來(lái)讀取。該事件有多個(gè)參數(shù):其中NumItems是指標(biāo)簽改變值的個(gè)數(shù),ClientHandles是改變值的標(biāo)簽索引,ItemValues為改變值的數(shù)據(jù),具體的意思是ClientHandles(ii)

21、的值是其對(duì)應(yīng)的標(biāo)簽數(shù)組的索引,其所指的OPC標(biāo)簽的值在ItemValues(ii)中。一般來(lái)說(shuō),剛連接上時(shí),該事件會(huì)把全部所要求訪問(wèn)的OPC標(biāo)簽值全部讀取過(guò)來(lái)(順序不一,要通過(guò)ClientHandles索引),此后只有數(shù)據(jù)發(fā)生變化時(shí)才會(huì)觸發(fā)該事件。也只會(huì)傳輸發(fā)生了變化的數(shù)據(jù),沒(méi)有變化的數(shù)據(jù)不會(huì)出現(xiàn)在本事件的ItemValues中。</p><p>  對(duì)OPC的寫(xiě)可以有同步與異步之分,對(duì)于大量的數(shù)據(jù)傳輸,異步是更

22、佳的選擇,但對(duì)少量的數(shù)據(jù)傳輸,同步表現(xiàn)得更好。</p><p>  3.2.3 OPC連接斷開(kāi)</p><p>  OPC客戶端連接后要占用服務(wù)器資源,所以如果不需要使用OPC時(shí),必須進(jìn)行OPC連接斷開(kāi)。斷開(kāi)的程序相當(dāng)簡(jiǎn)單,釋放資源即可。</p><p><b>  3.2.4建立窗體</b></p><p>  圖3.

23、2.4 VB客戶端(2)窗體設(shè)計(jì)</p><p><b>  4程序測(cè)試</b></p><p><b>  4.1測(cè)試過(guò)程</b></p><p>  程序測(cè)試前必須在工程/引用中添加相應(yīng)組件,老師提供的服務(wù)器要添加OPC Automation 2.0組件,WINCC服務(wù)器要添加Siemens OPC DAAutomat

24、ion 2.0組件。編輯好窗體和程序點(diǎn)擊保存運(yùn)行即可。對(duì)于VB客戶端(1),先點(diǎn)擊連接,再點(diǎn)擊加項(xiàng)即可實(shí)現(xiàn)OPC服務(wù)器的變量讀取。對(duì)于VB客戶端(2),可以在Text1中輸入主機(jī)名稱,設(shè)定WINCC服務(wù)器所在電腦,再點(diǎn)擊連接實(shí)現(xiàn)服務(wù)器訪問(wèn)。此時(shí),變量值列將顯示對(duì)應(yīng)變量的變量值,在變量值更改列輸入0~200任意值即可對(duì)相應(yīng)變量賦值。此時(shí)服務(wù)器端的變量值會(huì)相應(yīng)更改。</p><p>  通過(guò)OPC SCOUT V10

25、實(shí)現(xiàn)WINCC/VB/OPC SCOUT V10的連接:</p><p>  OPC SCOUT V10作為客戶端對(duì)WINCC SERVER進(jìn)行讀寫(xiě),通過(guò)寫(xiě)操作實(shí)現(xiàn)WINCC內(nèi)部變量的函數(shù)變化,VB程序作為另一個(gè)客戶端同步讀取WINCC SERVER的數(shù)據(jù)。</p><p>  同理,VB程序也可以作為客戶端對(duì)WINCC SERVER進(jìn)行讀寫(xiě),通過(guò)寫(xiě)操作實(shí)現(xiàn)WINCC內(nèi)部變量的賦值,OPC

26、 SCOUT V10作為另一個(gè)客戶端同步讀取WINCC SERVER的數(shù)據(jù)。</p><p>  反之可以通過(guò)WINCC畫(huà)面對(duì)變量進(jìn)行賦值,兩個(gè)客戶端同步讀取WINCC變量。</p><p>  同樣還可以通過(guò)MATLAB實(shí)現(xiàn)對(duì)WINCC SERVER進(jìn)行讀寫(xiě)操作。詳見(jiàn)測(cè)試結(jié)果。</p><p><b>  4.2測(cè)試結(jié)果</b></p&

27、gt;<p>  4.2.1 VB客戶端訪問(wèn)老師提供的服務(wù)器</p><p>  圖4.2.1 VB客戶端訪問(wèn)老師提供的服務(wù)器</p><p>  4.2.2 VB客戶端訪問(wèn)WINCC服務(wù)器</p><p>  4.2.2-1 VB客戶端訪問(wèn)WINCC服務(wù)器-讀操作</p><p>  4.2.2-2 VB客戶端訪問(wèn)WINCC服

28、務(wù)器-寫(xiě)操作</p><p>  4.2.2-3 OPC SCOUT V10讀取WINCC變量并修改變量值,返回服務(wù)器,VB讀?。?)</p><p>  4.2.2-4 OPC SCOUT V10讀取WINCC變量并修改變量值,返回服務(wù)器,VB讀?。?)</p><p>  4.2.2-5 MATLAB讀取WINCC變量并修改變量值,返回服務(wù)器,VB讀取(1)&l

29、t;/p><p>  4.2.2-6 MATLAB讀取WINCC變量并修改變量值,返回服務(wù)器,VB讀取(2)</p><p><b>  5程序文檔</b></p><p><b>  5.1使用說(shuō)明</b></p><p>  5.1.1 VB客戶端訪問(wèn)老師提供的服務(wù)器</p><

30、p>  對(duì)于VB客戶端(1),先點(diǎn)擊連接,再點(diǎn)擊加項(xiàng)即可實(shí)現(xiàn)OPC服務(wù)器的變量讀取。棒圖可以直觀的顯示當(dāng)前的變量值。點(diǎn)擊退出,退出客戶端應(yīng)用程序。</p><p>  5.1.2 VB客戶端訪問(wèn)WINCC服務(wù)器</p><p>  對(duì)于VB客戶端(2),可以在Text1中輸入主機(jī)名稱,設(shè)定WINCC服務(wù)器所在電腦,再點(diǎn)擊連接實(shí)現(xiàn)服務(wù)器訪問(wèn)。此時(shí),狀態(tài)顯示圖標(biāo)(復(fù)選框)將變?yōu)檫x中狀態(tài),

31、變量值列將顯示對(duì)應(yīng)變量的變量值,在變量值更改列輸入0~200任意值即可對(duì)相應(yīng)變量賦值。此時(shí)服務(wù)器端的變量值會(huì)相應(yīng)更改。點(diǎn)擊斷開(kāi)即可斷開(kāi)服務(wù)器的連接,此時(shí)狀態(tài)顯示圖標(biāo)(復(fù)選框)將變?yōu)槲催x中狀態(tài)。點(diǎn)擊退出按鈕,關(guān)閉客戶端應(yīng)用程序。</p><p><b>  5.2程序說(shuō)明</b></p><p>  5.2.1 VB客戶端訪問(wèn)老師提供的服務(wù)器的源程序</p>

32、<p><b>  ‘定義全局變量</b></p><p>  Option Base 1</p><p>  Option Explicit</p><p>  Dim WithEvents objServer As OPCServer</p><p>  Dim objGroups As OPCGrou

33、ps</p><p>  Dim objTestGrp As OPCGroup</p><p>  Dim objItems As OPCItems</p><p>  Dim lServerHandles() As Long</p><p><b>  ‘連接服務(wù)器</b></p><p>  

34、Sub Connect(strProgID As String, Optional strNode As String)</p><p>  If objServer Is Nothing Then</p><p>  ' 建立一個(gè)OPC服務(wù)器對(duì)象</p><p>  Set objServer = New OPCServer</p><

35、p><b>  End If</b></p><p>  If objServer.ServerState = OPCDisconnected Then</p><p>  ' 連接OPC服務(wù)器</p><p>  objServer.Connect strProgID, strNode</p><p>&

36、lt;b>  End If</b></p><p>  If objGroups Is Nothing Then</p><p>  ' 建立一個(gè)OPC組集合</p><p>  Set objGroups = objServer.OPCGroups</p><p><b>  End If</b&g

37、t;</p><p>  If objTestGrp Is Nothing Then</p><p>  ' 添加一個(gè)OPC組</p><p>  Set objTestGrp = objGroups.Add("TestGrp")</p><p><b>  End If</b></p&

38、gt;<p><b>  End Sub</b></p><p><b>  ‘?dāng)嚅_(kāi)服務(wù)器連接</b></p><p>  Sub Disconnect()</p><p>  Dim lErrors() As Long</p><p>  If Not objItems Is Not

39、hing Then</p><p>  If objItems.Count > 0 Then</p><p><b>  ' 清除OPC項(xiàng)</b></p><p>  objItems.Remove 2, lServerHandles, lErrors</p><p><b>  End If&l

40、t;/b></p><p>  Set objItems = Nothing</p><p><b>  End If</b></p><p>  If Not objTestGrp Is Nothing Then</p><p><b>  ' 清除OPC組</b></p>

41、;<p>  objGroups.Remove "TestGrp"</p><p>  Set objTestGrp = Nothing</p><p><b>  End If</b></p><p>  If Not objGroups Is Nothing Then</p><p>

42、;  Set objGroups = Nothing</p><p><b>  End If</b></p><p>  If Not objServer Is Nothing Then</p><p>  If objServer.ServerState <> OPCDisconnected Then</p>&l

43、t;p>  ' 斷開(kāi)OPC服務(wù)器.</p><p>  objServer.Disconnect</p><p><b>  End If</b></p><p>  Set objServer = Nothing</p><p><b>  End If</b></p>

44、<p><b>  End Sub</b></p><p><b>  ’添加變量</b></p><p>  Sub AddItem()</p><p>  Dim strItemIDs(2) As String</p><p>  Dim lClientHandles(2) As L

45、ong</p><p>  Dim lErrors() As Long</p><p>  Dim I As Integer</p><p>  If objTestGrp Is Nothing Then</p><p><b>  Exit Sub</b></p><p><b>  

46、End If</b></p><p>  If Not objItems Is Nothing Then</p><p>  If objItems.Count > 0 Then</p><p><b>  Exit Sub</b></p><p><b>  End If</b>

47、</p><p><b>  End If</b></p><p><b>  ' 設(shè)置組活動(dòng)狀態(tài)</b></p><p>  objTestGrp.IsActive = True</p><p>  ' 取消組非同期通知</p><p>  objTestG

48、rp.IsSubscribed = False</p><p>  ' 建立OPC項(xiàng)集合</p><p>  Set objItems = objTestGrp.OPCItems</p><p>  ' 生成標(biāo)簽的項(xiàng)標(biāo)識(shí)符</p><p>  strItemIDs(1) = "Tag1.value"<

49、/p><p>  strItemIDs(2) = "Tag2.value"</p><p>  lClientHandles(1) = 1</p><p>  lClientHandles(2) = 2</p><p><b>  ' 添加OPC項(xiàng)</b></p><p>

50、  Call objItems.AddItems(2, strItemIDs, _</p><p>  lClientHandles, lServerHandles, lErrors)</p><p><b>  End Sub</b></p><p>  ‘加項(xiàng)按鈕的動(dòng)作函數(shù)</p><p>  Private Sub

51、 btnAddItem_Click()</p><p>  ' 調(diào)用AddItem子程序</p><p>  Call AddItem</p><p>  If Not objTestGrp Is Nothing Then</p><p>  If objTestGrp.OPCItems.Count > 0 Then</p

52、><p><b>  ' 啟動(dòng)定時(shí)器</b></p><p>  TmUpdate.Enabled = True</p><p><b>  Else</b></p><p><b>  End If</b></p><p><b>  E

53、nd If</b></p><p><b>  End Sub</b></p><p><b>  ’連接按鈕動(dòng)作函數(shù)</b></p><p>  Private Sub btnConnect_Click()</p><p>  ' 調(diào)用Connect子程序</p>

54、<p>  Call Connect("OPCJ.SampleServer.1")</p><p><b>  End Sub</b></p><p><b>  ‘退出按鈕動(dòng)作函數(shù)</b></p><p>  Private Sub btnQuit_Click()</p>&

55、lt;p><b>  ' 卸載窗體</b></p><p>  Unload FmMain</p><p><b>  End Sub</b></p><p><b>  ’退出</b></p><p>  Private Sub Form_Unload(Canc

56、el As Integer)</p><p>  ' 調(diào)用Disconnect子程序</p><p>  Call Disconnect</p><p><b>  End Sub</b></p><p><b>  ‘讀取周期定義</b></p><p>  Pri

57、vate Sub tmUpdate_Timer()</p><p>  Dim vtItemValues() As Variant</p><p>  Dim lErrors() As Long</p><p>  Dim strBuf As String</p><p>  Dim nWidth As Integer</p>

58、<p>  Dim nHeight As Integer</p><p>  Dim nDrawHeight As Integer</p><p>  Dim sglScale As Single</p><p>  Dim I As Integer</p><p><b>  ' 同期讀取</b>&l

59、t;/p><p>  SyncRead OPCCache, vtItemValues, lErrors</p><p><b>  ' 棒圖的表示</b></p><p>  For I = 1 To 2</p><p><b>  ' 數(shù)據(jù)的格式化</b></p><

60、;p>  strBuf = Format(vtItemValues(I), "###.000")</p><p><b>  ' 表示數(shù)據(jù)字符串</b></p><p>  lbBar(I).Caption = strBuf</p><p><b>  ' 計(jì)算棒的寬和高</b>&

61、lt;/p><p>  nWidth = picBar(I).ScaleWidth</p><p>  nHeight = picBar(I).ScaleHeight</p><p>  sglScale = vtItemValues(I) / 700</p><p>  nDrawHeight = CInt(nHeight * sglScale

62、)</p><p><b>  ' 清除現(xiàn)棒圖</b></p><p>  picBar(I).Cls</p><p><b>  ' 繪制棒圖</b></p><p>  picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHei

63、ght), _</p><p>  RGB(255, 0, 0), BF</p><p><b>  Next</b></p><p><b>  End Sub</b></p><p><b>  ‘讀取變量</b></p><p>  Sub Syn

64、cRead(nSource As Integer, ByRef vtItemValues() As Variant, _</p><p>  ByRef lErrors() As Long)</p><p>  Dim lServerHandlesTemp(2) As Long</p><p>  Dim j As Integer</p><p&

65、gt;  If objTestGrp Is Nothing Then</p><p><b>  Exit Sub</b></p><p><b>  End If</b></p><p>  If objTestGrp.OPCItems.Count > 0 Then</p><p><

66、b>  ' 同期讀取</b></p><p>  objTestGrp.SyncRead nSource, 2, lServerHandles, _</p><p>  vtItemValues, lErrors</p><p><b>  End If</b></p><p><b>

67、;  End Sub</b></p><p><b>  ‘啟動(dòng)畫(huà)面</b></p><p>  Private Sub Form_Load()</p><p>  TmUpdate.Enabled = False</p><p>  TmUpdate.Interval = 100</p>&l

68、t;p><b>  End Sub</b></p><p>  5.2.2 VB客戶端訪問(wèn)WINCC服務(wù)器的源程序</p><p><b>  ‘定義全局變量</b></p><p>  Option Explicit</p><p>  Option Base 1 '這數(shù)組必須由1開(kāi)

69、始,不能由0開(kāi)始</p><p>  Const ServerName = "OPCServer.WinCC.1" 'OPC的類型</p><p>  Dim NodeName As String '結(jié)點(diǎn)名,即計(jì)算機(jī)名</p><p>  Dim WithEvents MyOPCServer As OPCServer 'O

70、PC服務(wù)</p><p>  Dim WithEvents MyOPCGroup As OPCGroup ' OPC組</p><p>  Dim MyOPCGroupColl As OPCGroups</p><p>  Dim MyOPCItemColl As OPCItems 'OPC標(biāo)簽組</p><p>  Dim

71、MyOPCItems As OPCItems</p><p>  Dim MyOPCItem As OPCItem</p><p>  Dim ClientHandles(1) As Long '句柄</p><p>  Dim ServerHandles() As Long</p><p>  Dim Errors() As Lon

72、g</p><p>  Dim ItemIDs(4) As String '記錄OPC的標(biāo)簽</p><p>  Dim ItemIDsValue(4) As Variant '存放OPC的值</p><p>  Dim GroupName As Variant</p><p><b>  ‘連接按鈕動(dòng)作函數(shù)<

73、/b></p><p>  Private Sub Command1_Click()</p><p>  Dim ii As Integer</p><p>  Dim ClientHandles1(4) As Long</p><p>  For ii = 1 To 4</p><p>  ClientHand

74、les1(ii) = ii</p><p>  ItemIDs(ii) = Text4(ii).Text '指明WinCC內(nèi)部變量名稱</p><p><b>  Next ii</b></p><p>  On Error GoTo ErrorHandler</p><p>  GroupName = &quo

75、t;MyGroup"</p><p>  NodeName = Text1.Text ' 結(jié)點(diǎn)名,即計(jì)算機(jī)名</p><p>  Set MyOPCServer = New OPCServer</p><p>  MyOPCServer.Connect ServerName, NodeName</p><p>  Set M

76、yOPCGroupColl = MyOPCServer.OPCGroups</p><p>  MyOPCGroupColl.DefaultGroupIsActive = True</p><p>  Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)</p><p>  Set MyOPCItemColl = MyOPCG

77、roup.OPCItems</p><p>  For ii = 1 To 4</p><p>  ClientHandles1(ii) = ii</p><p>  ItemIDs(ii) = Text4(ii).Text</p><p>  MyOPCItemColl.AddItems 4, ItemIDs, ClientHandles1

78、, ServerHandles, Errors '初始化OCP連接</p><p><b>  Next ii</b></p><p>  MyOPCGroup.IsSubscribed = True</p><p>  Option1.Value = True '連接成功標(biāo)志</p><p><b

79、>  Exit Sub</b></p><p>  ErrorHandler:</p><p>  MsgBox "Error: " & Err.Description, vbCritical, "ERROR" '連接發(fā)生錯(cuò)誤</p><p><b>  End Sub</b&

80、gt;</p><p><b>  ’退出按鈕動(dòng)作函數(shù)</b></p><p>  Private Sub Command3_Click()</p><p>  Unload Form1</p><p><b>  End Sub</b></p><p><b> 

81、 ‘從服務(wù)器讀取變量</b></p><p>  Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Dat

82、e)</p><p>  Dim ii As Long</p><p>  For ii = 1 To 4</p><p>  ItemIDsValue(ClientHandles(ii)) = ItemValues(ii) '對(duì)改變的值讀入本數(shù)組</p><p>  Text5(ClientHandles(ii)).Text = I

83、temIDsValue(ClientHandles(ii))</p><p><b>  Next ii</b></p><p><b>  End Sub</b></p><p><b>  '寫(xiě)入</b></p><p>  Private Sub Text8_Ch

84、ange(Index As Integer)</p><p>  Dim valuess(4) As Variant</p><p>  Dim ii As Long</p><p>  For ii = 1 To 4</p><p>  valuess(ii) = Text8(ii).Text</p><p>  M

85、yOPCGroup.SyncWrite 4, ServerHandles, valuess, Errors</p><p><b>  Next</b></p><p><b>  End Sub</b></p><p><b>  ‘?dāng)嚅_(kāi)服務(wù)器連接</b></p><p> 

86、 Private Sub Command2_Click()</p><p>  On Error Resume Next</p><p>  MyOPCGroupColl.RemoveAll '釋放組和服務(wù)器對(duì)象</p><p>  MyOPCServer.Disconnect '與服務(wù)器斷開(kāi)連接并且清除</p><p>  

87、Set MyOPCItemColl = Nothing</p><p>  Set MyOPCGroup = Nothing</p><p>  Set MyOPCGroupColl = Nothing</p><p>  Set MyOPCServer = Nothing</p><p>  Option1.Value = False &#

88、39;連接成功標(biāo)志</p><p><b>  End Sub</b></p><p><b>  6 總結(jié)</b></p><p>  通過(guò)這次課程設(shè)計(jì),我收獲頗豐。對(duì)于OPC這個(gè)名詞,我以前只是聽(tīng)說(shuō)過(guò),現(xiàn)在我才發(fā)現(xiàn)OPC的強(qiáng)大和重要性所在。OPC作為一種通用的通訊協(xié)議接口,他為工業(yè)現(xiàn)場(chǎng)解決了很多復(fù)雜的問(wèn)題,在廣泛支持工

溫馨提示

  • 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ù)僅提供信息存儲(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)論