首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取OPC值Utgard

读取OPC值Utgard
EN

Stack Overflow用户
提问于 2015-09-12 15:49:59
回答 1查看 1.6K关注 0票数 0

我有以下代码,用于从kepware OPC Server读取值

代码语言:javascript
复制
package opcread;
import java.util.concurrent.Executors;
import org.jinterop.dcom.common.JIException;
import org.openscada.opc.lib.common.ConnectionInformation;
import org.openscada.opc.lib.da.AccessBase;
import org.openscada.opc.lib.da.DataCallback;
import org.openscada.opc.lib.da.Item;
import org.openscada.opc.lib.da.ItemState;
import org.openscada.opc.lib.da.Server;
import org.openscada.opc.lib.da.SyncAccess;

public class OPCRead {


    public static void main(String[] args) throws Exception {
        // TODO code application logic here
        final ConnectionInformation ci = new ConnectionInformation();
        ci.setHost("localhost");
        ci.setDomain("MYDOMAIN");
        ci.setUser("MY_COMPUTER_USERNAME");
        ci.setPassword("MY_COMPUTER_PASSWORD");
        ci.setProgId("Kepware.KEPServerEX.V5\\MP.ANC1._System._Mode");
        ci.setClsid("B3AF0BF6-4C0C-4804-A122-6F3B160F4397");
        final String itemId = "_System._Time_Second";

        final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());

        try
        {
            server.connect();

            final AccessBase access = new SyncAccess(server, 500);
            access.addItem(itemId, new DataCallback(){
                @Override
                public void changed(Item item, ItemState state){
                    System.out.println("Data change " + item + " : " + state);
                }

            });

            access.bind();

            Thread.sleep(10*1000);

            access.unbind();
        }
        catch( final JIException e)
        {
            System.out.println("Errorrrrrrrr : " + String.format("%08X: %s", e.getErrorCode(),server.getErrorMessage(e.getErrorCode())));
        }
        catch(Exception ex)
        {
            System.out.println("Errorrrrrrrr : " + ex.getMessage());
        }
    }

}

我想读取_Mode标签上的值。我也给出了Kepware.KEPServerEX.V5\\MP.ANC1._System._Mode以上的完整路径。但结果是,它没有显示标签上的值,即userRate,而是给出以下消息

代码语言:javascript
复制
Sep 12, 2015 9:10:57 PM rpc.DefaultConnection processOutgoing
INFO: 
 Sending REQUEST
Sep 12, 2015 9:10:57 PM rpc.DefaultConnection processIncoming
INFO: 
 Recieved RESPONSE
Data change org.openscada.opc.lib.da.Item@11d7dda : Value: [[org.jinterop.dcom.core.JIUnsignedInteger@11d4b2e]], Timestamp: Sat Sep 12 21:10:57 IST 2015, Quality: 192, ErrorCode: 00000000

代替org.jinterop.dcom.core.JIUnsignedInteger@11d4b2e,它应该打印值,但得到这个消息。我在这里做什么坏事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-12 17:17:44

您需要显式地从变量中获取值,如下所示:

代码语言:javascript
复制
access.addItem(itemId, new DataCallback() {
    @Override
    public void changed(Item item, ItemState state) {
        System.out.println("Data change " + state.getObjectAsUnsigned().getValue() + " : " + state);
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32540729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档