以下这段VB程序,目的是通过OPC对相关变量初始化,当循环i进行到1~8[Cn连接由CN00~Cn07]时,程序正常,当i=9时,即Cn连接到Cn08时程序错误,"提示自动化控件错误相关信息",
另外,当我不用循环,改用单点测试时,程序中的任一连接都可正常执行
对了我组态了12套[Cpu222 + Cp243-1],通讯采用以太网模式,每个用OPC Scout观察时发现不怎么稳定!
请问,问题发生在哪能呢?
是VB程序的错?
是OPC 组件的错?
是网络问题吗?
程序如下:
Option Explicit
Option Base 1
'Opc Variable Define
Private WithEvents opcSvr As OPCServer
Private WithEvents opcGroup As opcGroup
Private QBItem(12) As OPCItem 'QB寄存器信息
Private vwItem(12, 4) As OPCItem 'VW寄存器信息
Private Sub Command1_Click()
Call IniOPC
End Sub
Private Sub Command2_Click()
End
End Sub
'Initialize OPC Object and R/W OPC Items Test
Private Sub IniOPC()
Dim Serverhandles(1) As Long
Dim MyValues(1) As Variant
Dim MyErrors() As Long
Dim i As Integer
Dim sCn As String
Dim vTmp As Variant
Set opcSvr = New OPCServer
opcSvr.Connect ("OPC.SimaticNET")
Set opcGroup = opcSvr.OPCGroups.Add("myOpcGroup")
For i = 1 To 12
sCn = "CN" & Format(i - 1, "0#")
Set vwItem(i, 1) = opcGroup.OPCItems.AddItem("S7:[" & sCn & "]DB1,INT1000,1", 1) 'vw1000
Set vwItem(i, 2) = opcGroup.OPCItems.AddItem("S7:[" & sCn & "]DB1,INT1002,1", 1) 'vw1002
Set vwItem(i, 3) = opcGroup.OPCItems.AddItem("S7:[" & sCn & "]DB1,INT1004,1", 1) 'vw1004
Set vwItem(i, 4) = opcGroup.OPCItems.AddItem("S7:[" & sCn & "]DB1,INT1006,1", 1) 'vw1006
Set QBItem(i) = opcGroup.OPCItems.AddItem("S7:[" & sCn & "]QB0,1", 1) 'QB0
MyValues(1) = 10 '2#00001010
Serverhandles(1) = QBItem(i).ServerHandle
opcGroup.SyncWrite 1, Serverhandles, MyValues, MyErrors '往指定端口写值
'初始化PLC 变量值 Wtrite
MyValues(1) = 0
Serverhandles(1) = vwItem(i, 1).ServerHandle
opcGroup.SyncWrite 1, Serverhandles, MyValues, MyErrors
Serverhandles(1) = vwItem(i, 2).ServerHandle
opcGroup.SyncWrite 1, Serverhandles, MyValues, MyErrors
Serverhandles(1) = vwItem(i, 3).ServerHandle
opcGroup.SyncWrite 1, Serverhandles, MyValues, MyErrors
Serverhandles(1) = vwItem(i, 4).ServerHandle
opcGroup.SyncWrite 1, Serverhandles, MyValues, MyErrors
QBItem(i).Read OPCDevice, vTmp
vwItem(i, 1).Read OPCDevice, vTmp
vwItem(i, 2).Read OPCDevice, vTmp
vwItem(i, 3).Read OPCDevice, vTmp
vwItem(i, 4).Read OPCDevice, vTmp
Next i
End Sub