使用Opc.UA.Fx保存历史数据

时间:2018-08-22 11:45:46

标签: c# opc-ua

我正在使用Opc.Ua.Fx.Advanced Nuget软件包编写OPC UA服务器。我想保存任何节点的历史数据。我的NodeManager是

 public class MyNodeManager : OpcNodeManager
{
    private OpcDataVariableNode<int> machineIsRunningNode;
    private OpcNodeHistorian machineIsRunningHistorian;

    OpcNodeHistory<OpcHistoryValue> history = new OpcNodeHistory<OpcHistoryValue>();
    OpcNodeHistory<OpcModifiedHistoryValue> modifiedHistory = new OpcNodeHistory<OpcModifiedHistoryValue>();

    public MyNodeManager()
        : base("http://mynamespace/")
    {            
    }
    protected override IEnumerable<IOpcNode> CreateNodes(OpcNodeReferenceCollection references)
    {
        // Define custom root node.
        var machineNode = new OpcFolderNode(new OpcName("Machine", this.DefaultNamespaceIndex));
        // Add custom root node to the Objects-Folder (the root of all server nodes):
        references.Add(machineNode, OpcObjectTypes.ObjectsFolder);

        // Add custom sub node beneath of the custom root node:
        machineIsRunningNode = new OpcDataVariableNode<int>(machineNode, "IsRunning") { IsHistorizing = true };
        machineIsRunningNode.AccessLevel |= OpcAccessLevel.HistoryReadOrWrite;
        machineIsRunningNode.UserAccessLevel |= OpcAccessLevel.HistoryReadOrWrite;
        machineIsRunningNode.AfterApplyChanges += MachineIsRunningNode_AfterApplyChanges;
        machineIsRunningNode.BeforeApplyChanges += MachineIsRunningNode_BeforeApplyChanges;
        history.Add(new OpcHistoryValue(machineIsRunningNode.Value, DateTime.Now, OpcStatusCode.Good));
        //machineIsRunningHistorian.CreateHistory(new OpcContext())
        // Return each custom root node using yield return.
        yield return machineNode;
    }

    private void MachineIsRunningNode_BeforeApplyChanges(object sender, EventArgs e)
    {
        machineIsRunningNode.IsHistorizing = true;
    }
    private void MachineIsRunningNode_AfterApplyChanges(object sender, EventArgs e)
    {
    }

但是数据无法保存。我做错了什么?有人在这个包里工作吗?也许一些手册或教程?

0 个答案:

没有答案