コード例 #1
0
        /// <summary>
        /// Sottoscrizione tag
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        private bool PLCAddTag(TagItem tag)
        {
            bool RetValue = true;

            // se già presente non lo agiungo
            if (ListTagItems.Contains(tag))
            {
                Logger.InfoFormat("tag {0}/{1} già presente", tag.PLCName, tag.Address);
                return(false);
            }

            //Create a DotNetMQ Message to send
            var message = mdsClient.CreateMessage();

            //Set destination application name
            message.DestinationApplicationName = PLCServerApplicationName;

            //Create a message
            var MsgData = new PLCTagData
            {
                MsgCode = MsgCodes.SubscribePLCTag,
                Tag     = new PLCTag()
                {
                    PLCName = tag.PLCName, Address = tag.Address
                }
            };

            //Set message data
            message.MessageData = GeneralHelper.SerializeObject(MsgData);

            // message.MessageData = Encoding.UTF8.GetBytes(messageText);
            message.TransmitRule = MessageTransmitRules.NonPersistent;

            try
            {
                //Send message
                message.Send();
            }
            catch
            {
                // non sono riuscito a inviare il messaggio
                Logger.InfoFormat("Messaggio non inviato");
                RetValue = false;
            }

            if (RetValue)
            {
                Logger.InfoFormat("Aggiunto {0}/{1}:{2}", tag.PLCName, tag.Address, tag.Type);

                /* verifica il nome del plc tag */
                ListTagItems.Add(tag);
            }

            return(RetValue);
        }
コード例 #2
0
        private bool SetPropertyPLCTag(MariniProperty mp)
        {
            bool bOK = true;

            string PLCTagName = mp.bind;

            var plctag = GetPLCTagData(PLCTagName);

            if (plctag == null)
            {
                bOK = false;
            }

            if (bOK)
            {
                // Mando messaggio di set tag a plcserver
                //Create a DotNetMQ Message to send
                var message = mdsClient.CreateMessage();

                //Set destination application name
                message.DestinationApplicationName = PLCServerApplicationName;

                //Create a message
                var MsgData = new PLCTagData
                {
                    MsgCode = MsgCodes.SetPLCTag,
                    Tag     = new PLCTag()
                    {
                        PLCName = plctag.PLCName,
                        Address = plctag.Address,
                        Value   = mp.value
                    }
                };

                //Set message data
                message.MessageData  = GeneralHelper.SerializeObject(MsgData);
                message.TransmitRule = MessageTransmitRules.NonPersistent;

                try
                {
                    // send message
                    message.Send();
                    Logger.InfoFormat("Set Value {0}:{1}", plctag.Name, mp.value);
                }
                catch (Exception exc)
                {
                    // non sono riuscito a inviare il messaggio
                    Logger.WarnFormat("Exception : {0}", exc.Message);
                }
            }
            return(bOK);
        }
コード例 #3
0
ファイル: plcserver.cs プロジェクト: trigrass2/plcserver
        /// <summary>
        /// invio messaggio di plctag changed value a tutti i susbscibers
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e">dati plctag</param>
        private void plc_TagChangedValue(object sender, TagChangedValueEventArgs e)
        {
            var tag = new PLCTag();

            /* cerco il subscriber associato al tag */
            foreach (var subscriber in _Subs.ToList())
            {
                /* lista di subscrictions del subscriber */
                var list = subscriber.Value;

                if (list.Contains(new Subscription(e.PLCName, e.Tag.ItemName)))
                {
                    // trovato il subscriber, invio messaggio di tag changed
                    tag.PLCName = e.PLCName;
                    tag.Address = e.Tag.ItemName;
                    tag.Value   = e.Tag.ItemValue;

                    //Create a DotNetMQ Message to send
                    var message = mdsClient.CreateMessage();

                    //Set destination application name
                    message.DestinationApplicationName = subscriber.Key;

                    //Create a message
                    var MsgData = new PLCTagData
                    {
                        MsgCode = MsgCodes.PLCTagChanged,
                        Tag     = tag
                    };

                    //Set message data
                    message.MessageData  = GeneralHelper.SerializeObject(MsgData);
                    message.TransmitRule = MessageTransmitRules.NonPersistent;

                    try
                    {
                        //Send message
                        message.Send();
                        Logger.InfoFormat("{1}/{2}-{3} : Inviato a {0}", message.DestinationApplicationName, tag.PLCName, tag.Address, tag.Value.ToString());
                    }
                    catch (Exception exc)
                    {
                        // non sono riuscito a inviare il messaggio
                        Logger.WarnFormat("Messaggio non inviato - {0}", exc.Message);
                    }
                }
            }
        }
コード例 #4
0
        public bool PLCRemoveTag(TagItem tag)
        {
            bool RetValue = true;

            //Create a DotNetMQ Message to send
            var message = mdsClient.CreateMessage();

            //Set destination application name
            message.DestinationApplicationName = PLCServerApplicationName;

            //Create a message
            var MsgData = new PLCTagData
            {
                MsgCode = MsgCodes.RemovePLCTag,
                Tag     = new PLCTag()
                {
                    PLCName = tag.PLCName, Address = tag.Address
                }
            };

            //Set message data
            message.MessageData = GeneralHelper.SerializeObject(MsgData);

            // message.MessageData = Encoding.UTF8.GetBytes(messageText);
            message.TransmitRule = MessageTransmitRules.NonPersistent;

            try
            {
                //Send message
                message.Send();

                Logger.InfoFormat("Inviato Messaggio a {0}", message.DestinationApplicationName);
            }
            catch
            {
                // non sono riuscito a inviare il messaggio
                Logger.InfoFormat("Messaggio non inviato");
                RetValue = false;
            }

            if (RetValue)
            {
                model.ListTagItems.Remove(tag);
            }
            return(RetValue);
        }