コード例 #1
0
 /// <summary>
 /// Принять команду от SCADA-Сервера
 /// </summary>
 private void ReceiveFromServer()
 {
     if (serverComm != null)
     {
         Command cmd;
         while (serverComm.ReceiveCommand(out cmd))
         {
             log.WriteAction((Localization.UseRussian ?
                              "Получена команда от SCADA-Сервера: " :
                              "The command is received from SCADA-Server: ") + GetCmdShortDescr(cmd));
             mngr.PassCmd(cmd);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Приём команд, метод вызывается в отдельном потоке
        /// </summary>
        private void Execute()
        {
            while (true)
            {
                try
                {
                    // приём команд от SCADA-Сервера
                    if (serverComm != null)
                    {
                        Command cmd;
                        while (serverComm.ReceiveCommand(out cmd))
                        {
                            log.WriteAction(string.Format(Localization.UseRussian ?
                                                          "Получена команда от SCADA-Сервера. Тип: {0}, КП: {1}, номер: {2}" :
                                                          "The command is received from SCADA-Server. Type: {0}, device: {1}, number: {2}",
                                                          cmd.GetCmdTypeCode(), cmd.KPNum, cmd.CmdNum), Log.ActTypes.Action);
                            mngr.PassCmd(cmd);
                        }
                    }

                    // приём команд из файлов
                    if (Directory.Exists(cmdDir))
                    {
                        DirectoryInfo dirInfo    = new DirectoryInfo(cmdDir);
                        FileInfo[]    fileInfoAr = dirInfo.GetFiles("cmd*.dat", SearchOption.TopDirectoryOnly);

                        foreach (FileInfo fileInfo in fileInfoAr)
                        {
                            string cmdType;
                            Dictionary <string, string> cmdParams;
                            Command kpCmd;

                            if (LoadCmdFromFile(fileInfo.FullName, out cmdType, out cmdParams, out kpCmd))
                            {
                                if (kpCmd == null)
                                {
                                    // команда не относится к КП
                                    string lineNumStr;
                                    int    lineNum;
                                    if ((cmdType == "startline" || cmdType == "stopline" || cmdType == "restartline") &&
                                        cmdParams.TryGetValue("linenum", out lineNumStr) &&
                                        int.TryParse(lineNumStr, out lineNum))
                                    {
                                        // запуск или остановка линии связи
                                        if (cmdType == "startline")
                                        {
                                            mngr.StartCommLine(lineNum);
                                        }
                                        else if (cmdType == "stopline")
                                        {
                                            mngr.StopCommLine(lineNum);
                                        }
                                        else
                                        {
                                            mngr.RestartCommLine(lineNum);
                                        }
                                    }
                                    else
                                    {
                                        log.WriteAction(Localization.UseRussian ?
                                                        "Некорректные данные команды" :
                                                        "Incorrect command data", Log.ActTypes.Error);
                                    }
                                }
                                else
                                {
                                    // передача команды КП
                                    mngr.PassCmd(kpCmd);
                                }
                            }
                        }
                    }

                    Thread.Sleep(ScadaUtils.ThreadDelay);
                }
                catch (ThreadAbortException)
                {
                    log.WriteAction(Localization.UseRussian ?
                                    "Прерывание приёма команд" :
                                    "Receiving commands aborted", Log.ActTypes.Action);
                }
                catch (Exception ex)
                {
                    log.WriteAction((Localization.UseRussian ?
                                     "Ошибка при приёме команд: " :
                                     "Error receiving commands: ") + ex.Message, Log.ActTypes.Exception);
                }
            }
        }