VB如何通過西門子OPC通訊方式連接S7PLC
一、通過STEP7軟件建立一個新項目OPC,在項目中添加SIMATIC300站和一個PC站,其中PLC站中第四個槽安裝的CP343模塊。PC站的第一個槽為OPCSERVER,第三個槽為IEGENERAL,然后在NETPRO下配置PLC和PC站的網絡連接:(注意:是在PC站上新建的網絡連接,連接類型選的S7連接)
二、通過stationconfigurator軟件配置本機的PC站(要和STEP7中配置的相同),然后把PLC和PC站都下載下去(注意:下載PC站的時候要把S7ONLINE(STEP7)--->;PCinternal(local))。
三、打開OPCScout,(Start>;SIMATIC>;SIMATICNet>;OPCScout),雙擊OPC
SimaticNet在隨之彈出的ADDGroup對話框中輸入組名,本例命名為OPC。
點擊OK確認;
;雙擊已添加的連接組(OPC),即彈出OPCNavigator對話框,此窗口中顯示
所有的連接協議。雙擊S7,在PCStation組態NetPro中所建的連接名會被顯示(S7
connection_1)。雙擊此連接,即可出現有可能被訪問的對象樹(objectstree),在PLC
CPU中已存在的DB塊也會出現
以上完成的OPCSERVER部分的配置。
四、用VB編寫了OPC客戶端應用程序。主要程序代碼如下:
(1)連接OPC服務器
DimWithEventsMyOPCServerAsOPCServer‘定義服務器對象變量MyOPCServer
DimWithEventsMyOPCGroupAsOPCGroup‘定義OPC組對象變量MyOPCGroup
SetMyOPCServer=NewOPCServer
MyOPCServer.Connect"OPC.SimaticNET"‘連接SIMATICNET的OPC服務器
(2)添加OPC組對象
SetMyOPCGroup="MyOPCServer".OPCGroups.Add("Group1")
‘添加OPC組對象
MyOPCGroup.IsSubscribed=True
‘設置該組數據為后臺刷新
MyOPCGroup.IsActive=True
‘設置該組為激活狀態
MyOPCGroup.UpdateRate=1000
‘設置數據刷新時間為1000
(3)添加數據項
DimabItemIDs()AsString
‘項標識符
DimabClientHandles()AsLong
‘客戶端句柄
DimabServerHandles()AsLong
‘服務器端句柄
DimabErrors()AsLong
DimiAsLong
ItemCount=3
abItemIDs(1)="S7:[S7connection_1]IB1"
abItemIDs(2)="S7:[S7connection_1]MB1"
abItemIDs(3)="S7:[S7connection_1]QB1"
fori="1"t03
abClientHandles(i)=i
‘給客戶端句柄賦值
Next
MyOPCGroup.OPCItems.AddItemsItemCount,abItemIDs,abClientHandles,abServerHandles,abErrors
‘添加數據項操作
(4)同步數據讀寫
OPC數據存取有同步方式和異步方式兩種。異步讀寫數據復雜,需要與事件結合使用,與同步相比速度慢但準確性高。同步讀寫數據簡單,直接使用OPCItem的方法即可。
DimOneAsOPCItem
DimIndexAsLong
‘Index為標簽順序號
DimOneReadAsString
DimXieAsString
SetOne=MyOPCGroup.OPCItems(Index)
One.ReadOPCCache
OneRead=One.Value
‘讀數據
MyOPCGroup.SyncWriteItemCount,ServerHandles,valuess,Errors
‘同步寫數據
MyOPCGroup.SyncReadOPCCache,ItemCount,ServerHandles,ReadValue,Errors
‘同步讀數據
One.Write(Xie)
‘寫數據
若只讀取數據,可以使用DataChange事件,當控制器中所要訪問的數據一旦發生改變時將會觸發該事件,并將該數據自動讀到TxtValue文本框。
PrivateSubMyOPCGroup_DataChange(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate)
‘自動刷新數據
DimiAsLong
Fori=1ToNumItems
txtValue(ClientHandles(i))=ItemValues(i)
‘獲取項的值
txtTime(ClientHandles(i))=TimeStamps(i)
‘獲取項的時間戳
txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i))
‘獲取項的品質
Nexti
EndSub
(5)斷開OPC服務器
MyOPCServer.OPCGroups.RemoveAll
‘移除所有OPCGroup,空出資源
SetMyOPCGroup=Nothing
MyOPCServer.Disconnect
‘斷開連接
在VB中還要引用siemensopcdaautomation2.0才行





