Beispiel #1
0
        /// <summary>
        /// Отправить команду ТУ
        /// </summary>
        /// <remarks>Метод выполняется в потоке линии связи при появлении команды ТУ</remarks>
        public virtual void SendCmd(Command cmd)
        {
            LastCmdDT    = DateTime.Now;
            lastCommSucc = CanSendCmd;

            if (sendCmdText == "")
            {
                StringBuilder sb = new StringBuilder(Localization.UseRussian ? " Команда " : " Command to the ");
                AppendKPDescr(sb);
                sendCmdText = sb.ToString();
            }

            WriteToLog("");
            WriteToLog(LastSessDT.ToString(CommUtils.CommLineDTFormat) + sendCmdText);

            if (CanSendCmd)
            {
                // добавление команды в список последних команд
                lastCmdList.Add(cmd);
                while (lastCmdList.Count > LastCmdListSize)
                {
                    lastCmdList.RemoveAt(0);
                }
            }
            else
            {
                WriteToLog(Localization.UseRussian ?
                           "КП не поддерживает отправку команд" :
                           "The device does not support sending commands");
            }
        }
Beispiel #2
0
        /// <summary>
        /// Получить информацию о работе КП
        /// </summary>
        public virtual string GetInfo()
        {
            StringBuilder sbInfo = new StringBuilder();

            sbInfo.AppendLine(Caption).AppendLine(new string('-', Caption.Length));

            if (Localization.UseRussian)
            {
                sbInfo
                .Append("DLL         : ").AppendLine(Dll)
                .Append("Состояние   : ").AppendLine(WorkStateStr)
                .Append("Сеанс связи : ")
                .AppendLine(LastSessDT > DateTime.MinValue ?
                            LastSessDT.ToLocalizedString() : "время неопределено")
                .Append("Команда ТУ  : ")
                .AppendLine(LastCmdDT > DateTime.MinValue ?
                            LastCmdDT.ToLocalizedString() : "время неопределено")
                .AppendLine()
                .Append("Сеансы связи (всего / ошибок) : ")
                .Append(kpStats.SessCnt).Append(" / ").Append(kpStats.SessErrCnt).AppendLine()
                .Append("Команды ТУ   (всего / ошибок) : ")
                .Append(kpStats.CmdCnt).Append(" / ").Append(kpStats.CmdErrCnt).AppendLine()
                .Append("Запросы      (всего / ошибок) : ")
                .Append(kpStats.ReqCnt).Append(" / ").Append(kpStats.ReqErrCnt).AppendLine();
            }
            else
            {
                sbInfo
                .Append("DLL           : ").AppendLine(Dll)
                .Append("State         : ").AppendLine(WorkStateStr)
                .Append("Comm. session : ")
                .AppendLine(LastSessDT > DateTime.MinValue ?
                            LastSessDT.ToLocalizedString() : "time is undefined")
                .Append("Command       : ")
                .AppendLine(LastCmdDT > DateTime.MinValue ?
                            LastCmdDT.ToLocalizedString() : "time is undefined")
                .AppendLine()
                .Append("Comm. sessions (total / errors) : ").
                Append(kpStats.SessCnt).Append(" / ").Append(kpStats.SessErrCnt).AppendLine()
                .Append("Commands       (total / errors) : ")
                .Append(kpStats.CmdCnt).Append(" / ").Append(kpStats.CmdErrCnt).AppendLine()
                .Append("Requests       (total / errors) : ")
                .Append(kpStats.ReqCnt).Append(" / ").Append(kpStats.ReqErrCnt).AppendLine();
            }

            AppendKPTagsInfo(sbInfo);
            AppendLastArcSrezInfo(sbInfo);
            AppendLastEventsInfo(sbInfo);
            if (CanSendCmd)
            {
                AppendLastCmdsInfo(sbInfo);
            }

            return(sbInfo.ToString());
        }
Beispiel #3
0
        /// <summary>
        /// Выполнить сеанс опроса КП
        /// </summary>
        /// <remarks>Метод выполняется в потоке линии связи циклически или по времени</remarks>
        public virtual void Session()
        {
            LastSessDT   = DateTime.Now;
            lastCommSucc = true;

            if (sessText == "")
            {
                StringBuilder sb = new StringBuilder(Localization.UseRussian ?
                                                     " Сеанс связи с " : " Communication session with the ");
                AppendKPDescr(sb);
                sessText = sb.ToString();
            }

            WriteToLog("");
            WriteToLog(LastSessDT.ToString(CommUtils.CommLineDTFormat) + sessText);
        }
Beispiel #4
0
        /// <summary>
        /// Processes new data received from OPC server.
        /// </summary>
        private void OpcSession_Notification(Session session, NotificationEventArgs e)
        {
            try
            {
                Monitor.Enter(opcLock);
                WriteToLog("");
                LastSessDT = DateTime.Now;

                if (subscrByID != null &&
                    subscrByID.TryGetValue(e.Subscription.Id, out SubscriptionTag subscriptionTag))
                {
                    WriteToLog(string.Format(Localization.UseRussian ?
                                             "{0} КП {1}. Обработка новых данных. Подписка: {2}" :
                                             "{0} Device {1}. Process new data. Subscription: {2}",
                                             LastSessDT.ToLocalizedString(), Number, e.Subscription.DisplayName));
                    ProcessDataChanges(subscriptionTag, e.NotificationMessage);
                    ProcessEvents(e.NotificationMessage);
                    lastCommSucc = true;
                }
                else
                {
                    WriteToLog(string.Format(Localization.UseRussian ?
                                             "Ошибка: подписка [{0}] \"{1}\" не найдена" :
                                             "Error: subscription [{0}] \"{1}\" not found",
                                             e.Subscription.Id, e.Subscription.DisplayName));
                    lastCommSucc = false;
                }
            }
            catch (Exception ex)
            {
                WriteToLog((Localization.UseRussian ?
                            "Ошибка при обработке новых данных: " :
                            "Error processing new data: ") + ex);
                lastCommSucc = false;
            }
            finally
            {
                CalcSessStats();
                Monitor.Exit(opcLock);
            }
        }