上下文
我找到了一种方法来在每次更改时访问数据(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,除了使用{{1}之外,我有什么办法可以获得这些值功能?
谢谢大家。
答案 0 :(得分:0)
我发现了怎么做:
构造强>
//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):
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几乎没有任何经验,我认为这不是访问数据的最佳方法(性能方面),它只是有效。
如果我发现如何优化或改进访问权限,我会更新。