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日
下一篇 2017年6月5日

相关推荐

  • net 6.0

    求图示的授权下载地址 图片说明:    最佳答案 只需要一个正版授权许可文件即可激活,因为该软件是收费的,建议向西门子公司购买。当然也可以在网上下载一个授权许可…

    2017年6月10日
  • 西门子有无PROFIBUS集线器一类的产品

    请问西门子有无PROFIBUS集线器一类的产品我多个接口怎么插入主站呢 最佳答案 西门子中继器有此功能,称为二口PROFIBUS集线器。《西门子RS485中继器使用说明》下载:ht…

    SIMATIC Net 2017年6月10日
  • CP343-1·

    CP343-16GK7 343-1EX20-0XE0这个模块支持MODBUS/TCP吗?模块见图如果支持 需要哪些硬件软件? 图片说明:  &nbsp…

    2017年6月3日
  • 求PC Adapter USB A2 驱动程序

    我的PC Adapter USB A2驱动程序没有了,求高手给一个驱动程序。谢谢 最佳答案 《SIMATIC PC Adapter…

    SIMATIC Net 2017年6月4日
  • 设备远程通讯问题

    公司生产的设备越来越多的,客户也越来越多。需要的售后服务也越来越多。现在希望能通过远程控制,去帮助客户监控和修改程序。减少售后服务工作量。初步设想:设备处通过以太网连到路由器(无线…

    SIMATIC Net 2017年6月8日
  • CP5611卡安装问题

    我的CP5611卡安装过后,在电脑硬件内可以找到,但是在“设置PC/PG接口内找不到,在 添加/删除 选择 内也找不到” 这是怎么回事 最佳…

    SIMATIC Net 2017年6月9日
  • CP1613 A2通讯卡实现CPU 414 5HM06的冗余功能

    工控机安装CP1613 A2通讯卡实现CPU 414 5HM06的冗余功能,当一个CPU故障时,上位机自动切换另一个CPU工作,并与上位机通讯,能否实…

    SIMATIC Net 2017年6月1日
  • modbus TCP协议中网线的8根线分别具体是干什么的

    我想问问modbus TCP协议中使用的网线,1到8号线,分别是做什么用的,比如,哪些线是接信号的,哪些线是供电的? 最佳答案 一、转帖:普通的网线分为两种,一种是机对机…

    SIMATIC Net 2017年6月1日
  • PCS7总线故障

    厂里西门子PCS7通过DP总线连接风机和电机变频,总是报总线故障,很频繁。有时候总线丢失时间过长,就会造成变频器停机。在网上很多资料,用DP控制变频,很多都有总线故障这种情况,大家…

    2017年5月29日
  • SIMATIC NET PC不同版本的区别?

    SIMATIC NET PC 2008与SIMATIC NET PC V8.2有什么区别? 最佳答案 参考网站资源:ht…

    2017年6月5日