Exemplo n.º 1
0
 public PLCHelpers(String PLC_IP, String Belt_IP)
 {
     MainMicroLogixController = new EthernetIPforCLXCom();
     MainMicroLogixController.IPAddress = PLC_IP;
     BeltMicroLogixController = new EthernetIPforCLXCom();
     BeltMicroLogixController.IPAddress = Belt_IP;
 }
        // Recieve message event
        private void ReadMQ_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            Log.Debug("Read Message Queue Event Triggered");
            //Read recieved message
            var msgRead = new Message();

            msgRead = readMQ.EndReceive(e.AsyncResult);
            Log.Debug(msgRead.Label + " Recieved MsgID: " + msgRead.Id);

            if (msgRead.Label == "Plc_Config")
            {
                msgRead.Formatter = new XmlMessageFormatter(new Type[] { typeof(PlcConfigMsg) });
                var msgData = ((PlcConfigMsg)msgRead.Body);

                // Instantiate Logix drivers
                logixEventDrv = new EthernetIPforCLXCom()
                {
                    IPAddress            = msgData.IPAddress,
                    DisableSubscriptions = msgData.DisableSubscriptions,
                    PollRateOverride     = msgData.PollRateOverride,
                    ProcessorSlot        = msgData.ProcessorSlot,
                    Port = msgData.Port
                };
                Log.Information("Logix Event driver created");

                logixSubscriptionDrv = new EthernetIPforCLXCom()
                {
                    IPAddress            = msgData.IPAddress,
                    DisableSubscriptions = msgData.DisableSubscriptions,
                    PollRateOverride     = msgData.PollRateOverride,
                    ProcessorSlot        = msgData.ProcessorSlot,
                    Port = msgData.Port
                };
                Log.Information("Logix Subscription driver created");

                logixTransactionDrv = new EthernetIPforCLXCom()
                {
                    IPAddress            = msgData.IPAddress,
                    DisableSubscriptions = msgData.DisableSubscriptions,
                    PollRateOverride     = msgData.PollRateOverride,
                    ProcessorSlot        = msgData.ProcessorSlot,
                    Port = msgData.Port
                };
                Log.Information("Logix Transaction driver created");

                // Set up read timers
                eventTimer = new Timer
                {
                    Interval = msgData.EventPollRate
                };
                eventTimer.Elapsed += new ElapsedEventHandler(OnEventTimer);

                subscriptionTimer = new Timer
                {
                    Interval = msgData.SubscriptionPollRate
                };
                subscriptionTimer.Elapsed += new ElapsedEventHandler(OnSubscriptionTimer);

                transactionTimer = new Timer
                {
                    Interval = msgData.TransactionPollRate
                };
                transactionTimer.Elapsed += new ElapsedEventHandler(OnTransactionTimer);

                // Get tag list from database
                var msgObject = new TagListReqMsg
                {
                    getTagList = true
                };

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

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

                Log.Debug("Plc Config Message Processed" + " MsgID: " + msgRead.Id);
            }

            if (msgRead.Label == "TagList_Config")
            {
                msgRead.Formatter = new XmlMessageFormatter(new Type[] { typeof(TagListMsg) });
                var msgData = ((TagListMsg)msgRead.Body);

                eventList        = new List <ListTag>();
                transactionList  = new List <ListTag>();
                subscriptionList = new List <ListTag>();


                foreach (ListTag elem in msgData.List)
                {
                    if (elem.TagTypeId == TagTypeConstants.eventType)
                    {
                        var tag = elem;
                        eventList.Add(tag);
                        Log.Debug("Tag added to event tag list: " + tag.Name);
                    }

                    if (elem.TagTypeId == TagTypeConstants.subscriptionType)
                    {
                        var tag = elem;
                        subscriptionList.Add(tag);
                        Log.Debug("Tag added to subscription tag list: " + tag.Name);
                    }

                    if (elem.TagTypeId == TagTypeConstants.transactionType)
                    {
                        var tag = elem;
                        transactionList.Add(tag);
                        Log.Debug("Tag added to transaction tag list: " + tag.Name);
                    }
                }
                ;

                // Start read timers
                eventTimer.Start();
                transactionTimer.Start();
                subscriptionTimer.Start();
                Log.Debug("Read timers started ");
            }

            // Resume listening for messages
            try
            {
                readMQ.BeginReceive();
                Log.Information("ReadMQ Listening For Messages");
            }
            catch (Exception ex)
            {
                Log.Error("ReadMQ Begin Recieve Exception: " + ex.Message);
            }
        }