Пример #1
0
        // ua simulator hard coded + hard coded config
        static void UaRxSim()
        {
            Clear();
            using (new ConsoleColourer(Yellow, Black))
                WriteLine("reactive UA simulation! Press a key to quit.");


            var uaClient = new EasyUAClient();

            var rxUaSubscription = UAMonitoredItemChangedObservable.Create <int>(new EasyUAMonitoredItemArguments(
                                                                                     "uaState",
                                                                                     "opc.tcp://127.0.0.1:49320/",
                                                                                     "ns=2;s=Channel1.Device1.Tag2",
                                                                                     0)
                                                                                 )
                                   .Subscribe(val =>
            {
                WriteLine(string.Format("wrote {0} to {1} on {2} being {3}", val.AttributeData.Value, "ns=2;s=Channel1.Device1.Tag1", "ns=2;s=Channel1.Device1.Tag2", val.AttributeData.Value));
                uaClient.WriteValue(
                    new UAWriteValueArguments(
                        "opc.tcp://127.0.0.1:49320/",
                        "ns=2;s=Channel1.Device1.Tag1",
                        val.AttributeData.Value
                        )
                    );
            }
                                              );

            var key = ReadKey();

            rxUaSubscription.Dispose();
            uaClient.Dispose();
        }
Пример #2
0
 //subscibes to a tag defined by an XElement
 static UAMonitoredItemChangedObservable <object> ReadValues(XElement xElement)
 {
     return(UAMonitoredItemChangedObservable.Create <object>(
                new EasyUAMonitoredItemArguments(
                    null,
                    GetElementAttribute(xElement, "ua", "endpoint"),
                    $"ns=2;s={xElement.Attribute("node").Value}",
                    int.Parse(GetAttribute(xElement, "updateRate")))));
 }
Пример #3
0
        static IObservable <SubValue> Ua(string id, XElement tag)
        {
            return(UAMonitoredItemChangedObservable.Create <object>(new EasyUAMonitoredItemArguments(
                                                                        id,
                                                                        GetElementAttribute(tag, "ua", "endpoint"),
                                                                        $"ns=2;s={tag.Parent.Attribute("name").Value}.{tag.Attribute("node").Value}",
                                                                        int.Parse(GetAttribute(tag, "updateRate"))

                                                                        )).Select(val => new SubValue {
                val = val, Quality = val.Succeeded, Value = val?.AttributeData?.Value
            }));
        }
Пример #4
0
        // configured ua logging client using rx
        static void UaLog(string fileName, string logFileName)
        {
            var locker   = new Object();
            var titleRow = "id, endpoint,name, tag, value, good, time";

            if (!File.Exists(logFileName))
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(logFileName, true))
                {
                    file.WriteLine(titleRow);
                }
            }

            var config = XDocument.Load(fileName);

            var myTags = config.Root
                         .Elements("tags")
                         .SelectMany(tags => tags.Elements("tag"));



            var subs = myTags
                       .Select(
                tag =>
                UAMonitoredItemChangedObservable.Create <object>(new EasyUAMonitoredItemArguments(
                                                                     tag.Attribute("id").Value,
                                                                     GetElementAttribute(tag, "ua", "endpoint"),
                                                                     $"ns=2;s={tag.Parent.Attribute("name").Value}.{tag.Attribute("node").Value}",
                                                                     int.Parse(GetAttribute(tag, "updateInterval"))
                                                                     ))
                .Subscribe(
                    val => {
                lock (locker)
                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(logFileName, true))
                    {
                        var log = val.Succeeded
                                             ? string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}", tag.Attribute("id").Value, GetElementAttribute(tag, "ua", "endpoint"), tag.Attribute("name").Value, string.Format("ns=2;s={0}.{1}", tag.Parent.Attribute("name").Value, tag.Attribute("node").Value), val.AttributeData.Value, val.AttributeData.HasGoodStatus, DateTime.Now.ToLongTimeString())
                                             : string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}", tag.Attribute("id").Value, GetElementAttribute(tag, "ua", "endpoint"), tag.Attribute("name").Value, string.Format("ns=2;s={0}.{1}", tag.Parent.Attribute("name").Value, tag.Attribute("node").Value), "", false, DateTime.Now.ToLongTimeString());
                        file.WriteLine(log);
                        WriteLine(log);
                    }
            },
                    //(ex) => ExceptionDisplay(tag, ex),
                    () => { }
                    )
                ).ToList();


            var key = ReadLine();

            subs.ForEach(s => s.Dispose());
        }
Пример #5
0
 static UAMonitoredItemChangedObservable <object> ReadValues(string node)
 {
     return(UAMonitoredItemChangedObservable.Create <object>(
                ReadArgs(node)));
 }