top of page

Настройка системы диспетчеризации, на основе Rapid scada

Диспетчеризация — процесс централизованного оперативного контроля и дистанционного управления, с использованием оперативной передачи информации между объектами диспетчеризации и пунктом управления.

Выдвигались следующие требования:

1 отображение оперативной информации:

- операторам – отделения цехов,

- диспетчеру – по отделениям и цехам,

- руководству цеха – по отделениям и цехам,

- руководству предприятия – завода;

2 архивирование информации и вывод каждого параметра в виде графика и таблицы;

3 задавать пользовательские формулы и функции.

Для диспетчеризации выбрана RapidSCADA.

Достоинства:

- быстрота в работе, отображение контролируемого параметра с минимальным временем задержки;

- малое потребление системных ресурсов, не загружает ОС и физические параметры оборудования;

- отображение данных через веб-интерфейс, это решает первое требование к scada-системе, поскольку веб-интерфейс позволяет большое число одновременных подключений;

- цена, основные модули бесплатны.

Все формулы и функции написаны на языке c#.

- масштабирование значений;

- график ППР для механических служб;

- различные сигнализации для операторов, контролирующих технологический процесс, связанных с

критическими значениями показателей;

- технический учет энергоресурсов;

- автоматический перезапуск удаленного оборудования.

 

В рамках данного проекта велась техническая поддержка систем коммерческого учета энергоресурсов.

Пример кода на языке с#

public double _timeWorkMinDay(int CnlNumI) 
 //время работы привода с током CnlNumI 
        {
            bool m = MinuteBeg();  //начало новой минуты
            double Z = Val(CnlNum); //текущее время работы в часах
            double V = Val(CnlNum) * 60;  //текущее время работы в минутах
            if (m)  //если начало новой минуты
            {
                if (Val(CnlNumI) > 1)  //если ток привода больше единицы
                {
                   V = V + 1;                  
                   Z = V / 60;
                }                
            }
    DateTime nowDT = DateTime.Now;
    DateTime execDT;
    if ((nowDT.Hour == 0 && nowDT.Minute > 0 || nowDT.Hour == 1) &&
        (!DayBegDict.TryGetValue(CnlNum, out execDT) || execDT.Date < nowDT.Date))
    {
        DayBegDict[CnlNum] = nowDT;
        return Z=0;
    }
   
            return Z;
        }

bottom of page