在用VB.NET编写OPC读写西门子S7400程序时候,碰到图中句柄问题,请问该问题如何解决?
Public Shared MyItemServerHandles2 As System.Array
Private Sub PLC_AsyncWrite(ByVal NumItemsW As Integer, ByRef ItemValuesW() As System.Object, ByRef MyErrors As System.Array)
Dim lHandle(U_NUMITEMS) As System.Array
Dim i As Integer
If MyGroup2 Is Nothing Then
Exit Sub
End If
If MyGroup2.OPCItems.Count > 0 Then
lTransID_Rd2 = lTransID_Rd2 + 1
For i = 1 To 30
lHandle(i) = MyItemServerHandles2(NumItemsW)
MyGroup2.AsyncWrite(1, lHandle(i), ItemValuesW,
MyErrors, lTransID_Rd2, lCancelID_Rd2)
Next
End If
End Sub
我另外定义了一个数组STRBUF或STRBUF(30)测试,尝试过定义成System.array 、string、 integer,来接收MyItemServerHandles2这个System.array内的值,但是没办法获得MyItemServerHandles2内的值,
另外定义的数组或string,都显示Nothing
用MSGBOX(MyItemServerHandles2(I))可以显示出MyItemServerHandles2的值
将 Public Shared MyItemServerHandles2(32) As system.array改为 Public Shared MyItemServerHandles2(32) As Integer
错误提示:无法将类型为"system.int32[*]"的对象强制转换为system.int32[]
另外,我用Asyncread却没问题。
问题补充:
在lHandle(i) = MyItemServerHandles2.GetValue(NumItemsW)中能够获取值,但在MyGroup2.AsyncWrite(1, lHandle, ItemValuesW, MyErrors, lTransID_Rd2, lCancelID_Rd2)报错,System.Runtime.InteropServices.SafeArrayTypeMismatchException”类型的未经处理的异常在 X-RAY_BARCODE.exe 中发生 。其他信息: 指定的数组不属于需要的类型。
最佳答案
你要将整数利用循环语句一个一个加入到数组里才行,直接一个数组不可能直接转化成1个整数,1个整数也不能转化成1个数组。整数只能转化为数组里的某一个数
提问者对于答案的评价:
后来确实通过实例化,运行无错误。但是运行AsyncWrite后,DB1.DBW数据依然无改变,新建的AsyncWriteComplete也无运行及数据反映。请问高人我还有哪里有问题?
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc150255.html