【问题标题】:How to acces OPC Server data via Utgard directly (without changed(Item item, ItemState state)))?如何直接通过 Utgard 访问 OPC Server 数据(不更改(Item item,ItemState state)))?
【发布时间】:2016-09-21 14:47:34
【问题描述】:

上下文:

我找到了一种在每次数据更改时访问数据的方法 (Here):

AccessBase access = new SyncAccess(server, 500) ;   
access.addItem(itemX, new DataCallback() {
    @Override
    public void changed(Item item, ItemState state) {
        updateValueX();
    }
});

在我的系统中,我使用从 item0 到 item4 的五个不同值来执行此操作,每次更改时,我都会更新该值并且它会出现问题。

问题:

我需要把这个改成“每次第一个值改变时,获取所有值并保存”,例如:

AccessBase access = new SyncAccess(server, 500) ;   
access.addItem(item0, new DataCallback() {
    @Override
    public void changed(Item item, ItemState state) {
        updateValue0();
        updateValue1();
        updateValue2();
        updateValue3();
        updateValue4();
    }
});

为此,我需要调用第一个项目/值的更改函数,但我需要直接访问其他 4 个,除了使用 changed(Item item, ItemState state) 函数之外,还有什么方法可以获取这些值?

谢谢大家。

【问题讨论】:

    标签: java opc


    【解决方案1】:

    我发现了怎么做:

    构造函数:

    //ON THE CONSTRUCTOR, INITIALIZE GROUP AND ITEMS
    org.openscada.opc.lib.da.Group group = server.addGroup("GroupName");
    Item items[] = new Item[numberOfItems]= group.addItem("itemID"); 
    //YOU WILL NEED TO HAVE ACCESS TO items[] LATER, MAKE IT PUBLIC.
    
    for (int index = 0; index < numberOfItems; index++) {
        items[index] = group.addItem("item"+index);
    }
    

    您访问的主要项目(item0)的changed()函数:

    access.addItem(item0, new DataCallback() {
        @Override
        public void changed(Item item0, ItemState state) {
    
            //where items[] is the item created using group.addItem("item"+index) in the constructor
            JIArray jiArray = items[1].read(true).getValue().getObjectAsArray(); 
            Object[] arrayObj = (Object[]) jiArray.getArrayInstance();
    
            // arrayObj contains the value (or values) of the item 
    
            for (Object v : arrayObj) {
    
            }
        }
    });
    

    这是我自己想出来的方法。考虑到我几乎没有使用 OPC 和 Utgard 的经验,我认为这不是访问数据的最佳方法(性能方面),它可以正常工作。

    如果我知道如何优化或改进访问,我会更新。

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多