OPC 读取西门子PLC地址只要16个及是否需新建多组GROUP问题

用VB.NET编写了一个OPC连接西门子S7400 PLC的程序,这两天刚刚能够在MyGroup_AsyncReadComplete内的ItemValues(j)(1))读取S7400 PLC地址DB110.DBW地址数据,我是要读取DBW内1000组数据,,但是发现怎么只能循环读取读取16组DB110.DBW数据,当我将要读取的ITEMVALUES(J)(1)元素剩下从6个减少至三个,显示读取了121组。是否一组数据读取元素是有总的上限?我尝试了新建一个GROUP,但是失败了,也许是我还不知道如何再建一个GROUP,特请教。
程序如下:
MyGroup = MyOPCServer.OPCGroups.Add("OTR") ‘新增GROUP
Call PLC_U_AddItem()
Timer1.Enabled = True
Private Sub PLC_U_AddItem() ‘ 往组里添加元素
For i As Short = 1 To 32
MyOPCItemIDs(i) = "S7:[OTR]DB110,W" & ((i - 1) * 26 + 2) & ",12"
MyOPCItemIsArray(i) = 0
MyClientHandles(i) = i
Next i
MyGroup.OPCItems.AddItems(ItemCount, MyOPCItemIDs, MyClientHandles, MyItemServerHandles, AddItemServerErrors)
Sub PLC_AsyncRead()
MyGroup.AsyncRead(32, MyItemServerHandles, _
MyErrors, lTransID_Rd, lCancelID_Rd)
Private Shared Sub MyGroup_AsyncReadComplete(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef ItemValues As System.Object, ByRef Qualities As System.Array, ByRef TimeStamps As System.Array, ByRef Errors As System.Array) Handles MyGroup.AsyncReadComplete
For j = 1 To 999
Label(j).Text = j & Chr(46) &
Chr("&H" & Mid(Hex(ItemValues(j)(1)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(1)), 3, 2)) &
Chr("&H" & Mid(Hex(ItemValues(j)(2)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(2)), 3, 2)) &
Chr("&H" & Mid(Hex(ItemValues(j)(3)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(3)), 3, 2)) &
Chr("&H" & Mid(Hex(ItemValues(j)(4)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(4)), 3, 2)) &
Chr("&H" & Mid(Hex(ItemValues(j)(5)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(5)), 3, 2))
Chr("&H" & Mid(Hex(ItemValues(j)(6)), 1, 2)) & Chr("&H" & Mid(Hex(ItemValues(j)(6)), 3, 2))
原程序太长,以上仅粘贴部分GROUP及添加ADD ITEM元素程序。该段程序中Label(j).Text 本应该显示999组数据,但是最后仅显示16组Label(j).Text。请问是怎么回事?
若需要再添加一组GROUP,及在新的GROUP中添加元素OPCItems.AddItems,程序该怎么写?

问题补充:
为什么只读16个就对了?
纠正一下,For i As Short = 1 To 32、MyGroup.AsyncRead(32, MyItemServerHandles, _
MyErrors, lTransID_Rd, lCancelID_Rd)
上两段原来都是1000,只是我后来新建一个GROUP1,也是像 仙道 说的那样新建一个GROUP,只是要注意一点的是MyClientHandles(i) = i这个句柄中i要减掉16。但是这样发现新建的组GROUP1通过断点监视可以看到ItemValues(j)(1)有16组数据,但是Label(j+16)显示只有4组。我又忽视掉哪儿了?

最佳答案

只会读16个就对了,你通过OPC读到的变量个数在MyGroup_AsyncReadComplete()第二个参数NumItems
For j = 1 To 999改成 For j = 1 To NumItems,如果想读1000个,继续往前改对应的传递参数MyGroup.AsyncRead()
添加另一组MyGroup1及在新组添加新元素方法如下:
MyGroup = MyOPCServer.OPCGroups.Add("OTR") ‘新增GROUP 
MyGroup1=MyOPCServer.OPCGroups.Add("OTR1") ‘新增MyGroup1
MyGroup1.OPCItems.AddItems() ’一次添加多个元素 跟之前一样
MyGroup1.OPCItems.AddItem(") ‘一次添加一个元素
你用的OPC COM server,以后的趋势是用UA server了

提问者对于答案的评价:
虽然不是我要的答案,但分给你了。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc152613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月5日 下午7:32
下一篇 2017年6月5日 下午7:32

相关推荐

  • 有关OPC的使用问题

    我想利用OPC实现组态软件WINCC和EXCEL的数据通讯,WINCC做OPCServer,EXCEL中编写VBA客户端,请问还需要安装opc_aeps.dllopccomn_ps…

    SIMATIC Net 2017年6月13日
  • 单向的S7MPI通讯

    我现在有个414CPU要跟6块314-2PTP PLC通讯(我查了下资料这款PLC只支持MPI和485协议)  400读写300侧的数据,初步定为MP…

    SIMATIC Net 2017年6月9日
  • 关于OPC SERVER的问题

    有一台300PLC,CPU是315-2DP,连接两台上为机,其中有一台硬盘坏了,现在重新买了台新的,现已安装了组态软件INTOUCH和SIMATIC NET,我想问大家在…

    SIMATIC Net 2017年6月13日
  • 通信与通讯有区别吗?

    在工控自动化领域,通信与通讯这两个名词有区别吗? 最佳答案 建议楼主参考以下链接:http://wenku.baidu.com/link?url=-5K0LsNLddiVr1H-m…

    SIMATIC Net 2017年6月1日
  • step 7 组态

    step 7 组态时 主站CPU315-2 PN/DP,从站多个 S1200PLC 在STEP 7中,没有找到…

    SIMATIC Net 2017年6月7日
  • 使用PC access 问题

    大家好,我首先使用step7 microwin v4.0编写了一个简单程序,并编译无错误,随后打开PC ACCESS打开,点击文件-输入符号选择该程序…

    SIMATIC Net 2017年6月6日
  • plcsim与simatic net通讯

    plcsim与simatic net能通讯吗?如果能的话能通过opc方式通讯吗? 问题补充:请问光之翼,我的电脑上只有普通网卡,并且我的plcsim与simatic&nb…

    SIMATIC Net 2017年6月24日
  • sfc67怎么用?参数怎么配置?

    里面的var_addr和RD怎么写?可否讲的明白点? 最佳答案 SFC67(DEST_ID:对方的MPI地址,即200PLC的MPI地址);VAR-ADDR(对方的数据接收区,指2…

    SIMATIC Net 2017年6月10日
  • wincc opc的问题

    我们公司北京总部要远程监视分布在全国的60个分厂的实时运行状态,每个分厂都有中控室,都可以上网,上位机软件各不相同. 我的设想是,在总部装WINCC,通过OPC在INTE…

    SIMATIC Net 2017年6月24日
  • modbus疑问?

    最近用CPU226做主站和一称重仪表利用MODBUS RTU协议通讯,可以读出仪表实时数据,但是有一点不是太明白,比如写发送基本格式:地址;功能码;寄存器地址高字节;寄存…

    SIMATIC Net 2017年6月24日