// Subscription tag timer event
        private void OnSubscriptionTimer(object sender, ElapsedEventArgs e)
        {
            subscriptionTimer.Stop();
            Log.Debug("FactoryData Plc Service Subscription Timer Event");

            var recordList = new List <RecordTag>();

            try
            {
                foreach (ListTag elem in subscriptionList)
                {
                    var record = new RecordTag
                    {
                        TagId = elem.Id,
                        Data  = long.Parse(logixSubscriptionDrv.Read(elem.Name)),
                        PlcTS = DateTime.Parse(logixSubscriptionDrv.Read("TimestampPLC")),
                    };

                    Log.Debug("Subscription Tag Read:" + elem.Name + " Value:" + record.Data + " Timestamp: " + record.PlcTS);
                    recordList.Add(record);
                }
                ;
            }
            catch (Exception ex)
            {
                Log.Error("Read Subscription Tag List exception: " + ex.Message);
            }

            var msgObject = new TagReadResultsMsg
            {
                List = recordList
            };

            var type = new Type[] { typeof(TagReadResultsMsg) };

            using (var msg = new SendMessage())
            {
                msg.Send(msgObject, "SubscriptionTag_Results", type);
            }

            subscriptionTimer.Start();
        }
        // Event tag timer event
        public void OnEventTimer(object sender, ElapsedEventArgs args)
        {
            eventTimer.Stop();
            Log.Debug("FactoryData Plc Service Event Timer Event");

            var recordList   = new List <RecordTag>();
            var resultsAvail = false;

            try
            {
                foreach (ListTag elem in eventList)
                {
                    string trigger   = string.Concat(elem.Name, ".Trigger");
                    string ack       = string.Concat(elem.Name, ".Ack");
                    string data      = string.Concat(elem.Name, ".Data");
                    string timestamp = string.Concat(elem.Name, ".TS");

                    var triggerCheck = bool.Parse(logixEventDrv.Read(trigger));

                    if (triggerCheck == true)
                    {
                        resultsAvail = true;

                        var record = new RecordTag
                        {
                            TagId = elem.Id,
                            Data  = long.Parse(logixEventDrv.Read(data)),
                            PlcTS = DateTime.Parse(logixEventDrv.Read(timestamp)),
                        };

                        logixEventDrv.Write(ack, 1);

                        Log.Debug("Subscription Tag Read:" + elem.Name + " Value:" + record.Data + " Timestamp: " + record.PlcTS);
                        recordList.Add(record);

                        logixEventDrv.Write(ack, 0);
                    }
                }
                ;
            }
            catch (Exception ex)
            {
                Log.Error("Read Event Tag List exception: " + ex.Message);
            }

            if (resultsAvail == true)
            {
                var msgObject = new TagReadResultsMsg
                {
                    List = recordList
                };

                var type = new Type[] { typeof(TagReadResultsMsg) };

                using (var msg = new SendMessage())
                {
                    msg.Send(msgObject, "EventTag_Results", type);
                }

                resultsAvail = false;
            }

            eventTimer.Start();
        }