从Windows服务订阅OPC服务器data_changed事件

时间:2014-07-02 10:29:57

标签: c#-4.0 windows-services opc

我想通过订阅OpcGroup_DataChanged事件从opc服务器读取项值。我可以通过Windows窗体客户端来完成。但是,当我尝试从Windows服务执行相同操作时,事件未触发。有些身体可以抛光吗? 以下是我的实施:

    OPCItemResult[] rslt;
        rtc = OpcGrp.AddItems(iDefs, out rslt);
        if (HRESULTS.Failed(rtc))
            return rtc;

        ItemHandles = new int[rslt.Length];
        errors = new int[iDefs.Length];
        for (int i = 0; i < iDefs.Length; ++i)
        {
            ItemHandles[i] = rslt[i].HandleServer;
            errors[i] = rslt[i].Error;
        }


        // data changed callback handler
        OpcGrp.DataChanged += new DataChangeEventHandler(OpcGrp_DataChanged);
        OpcGrp.AdviseIOPCDataCallback();
        this.EventLog.WriteEntry("No of items: "+rtc.ToString(), EventLogEntryType.Information);

活动:

    protected void OpcGrp_DataChanged(object sender, DataChangeEventArgs e)
    {
        this.EventLog.WriteEntry("Data changed at server", EventLogEntryType.Information);

        string txt = "";
        foreach (OPCItemState rslt in e.sts)
        {
            txt += rslt.DataValue.ToString() + "\r\n";
        }
        this.EventLog.WriteEntry(txt, EventLogEntryType.Information);
    }

1 个答案:

答案 0 :(得分:1)

这可能是DCOM权限问题。要确认这一点,请尝试在运行Windows窗体应用程序的同一帐户中运行客户端服务(可能是您的登录帐户)。如果可行,您需要设置OPC服务器(或DCOM的默认值),以允许服务器与您希望客户端运行的任何帐户进行通信。