Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Мониторинг времени работы оборудования  (Прочитано 14715 раз)

Ragnarok

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Доброго времени суток!

Есть задача: написать программу мониторинга времени работы оборудования. Например, включился двигатель, запустился таймер. По прошествии определенного времени, выводится сообщение о необходимости обслуживания. Провели обслуживание - поставили отметку - таймер сбросился. Эта часть сделана, проект запущен на отдельном компьютере. Это очень неудобно, т.к. чтобы поставить отметку нужно добираться до этого компьютера. Поэтому эту программу нужно разнести на все операторские станции. Но как это сделать я не представляю, т.к. на станциях используются разные контроллеры и разные системы визуализации.

Как вариант можно на каждой станции сделать Excel'евский файл, связать его с Simple SCADA и выводить время работы, оставшееся время, дату обработки и т.д, но для этого придется полностью переделывать существующий скрипт.


Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Мониторинг времени работы оборудования
« Ответ #1 : 20 Августа 2017, 12:05:25 »
Здравствуйте.

Правильнее всего было бы поставить один сервер и клиентами подключаться к нему с любых станций. Сам файл с данными будет на сервере и все клиенты соответственно будут работать с ним, что и требуется.

Ragnarok

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #2 : 20 Августа 2017, 20:51:56 »
Беда в том, что на некоторых станциях уже используется Simple SCADA 2. Запустить второй клиент невозможно, через виртуальную машину - неудобно, внедрять программу в существующий проект - нежелательно.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #3 : 21 Августа 2017, 09:32:27 »
В Вашем случае, правильным вариантом для решения такой задачи будет сделать все в существующем проекте, а на станции где нет Simple-Scada установить клиенты. Это будет оптимальным вариантом. Если он не подходит, то придется выбирать из вариантов перечисленных Вами - по другому не получится.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #4 : 21 Августа 2017, 09:50:08 »
Как сложная альтернатива, запись данных и подтверждения ТО в СУБД и простенький самописный клиент для работы с данными.

Как правильная (как по мне), то учетом времени до ТО занимается не скада, а контроллер. Чтение данных и запись регистров сброса уже как организуете, так и будет. Например простой скрипт клиента на питоне, который подымает модбас, читает, пишет то что надо.

Rinat

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #5 : 03 Августа 2018, 13:38:27 »
Здравствуйте. Объясните пожалуйста на пальцах как наладить время наработки мото-часов. Все делаю по примеру, но в шкале со временем при изменении переменной добавляется одна секунду и больше нет никаких изменений.
это я вставил в OnDataChange
Код: (delphi)
begin
  Text1.Text := SecondsToStr(var1.AsInt64)  ;
end.
Спасибо.
« Изменён: 03 Августа 2018, 14:25:39 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #6 : 06 Августа 2018, 22:28:40 »
Здравствуйте!

Не совсем понятно, о каком примере Вы говорите? Подсчитывать время наработки можно используя процедуры для работы с таймерами. Пример работы с таймерами можно найти в демо-проекте на странице "Скрипты -> Простые скрипты 1 -> Скрипт №8" 

Также, можно подсчитать время наработки по архивным данным используя процедуру ArchiveTimeOn.

Rinat

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #7 : 08 Августа 2018, 14:02:57 »
Не могу разобраться как работает скрипт с помощью внешней переменной.
« Изменён: 09 Августа 2018, 20:58:42 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Мониторинг времени работы оборудования
« Ответ #8 : 09 Августа 2018, 20:58:32 »
Rinat, какой именно скрипт? Из демо-проекта?

Rinat

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #9 : 10 Августа 2018, 12:12:12 »
Rinat, какой именно скрипт? Из демо-проекта?
Доброе утро. Да, скрипт из демо проекта.
Код: (delphi)
var
  aState: ShortInt;
begin
  { получаем состояние таймера }
  aState := TimerGetState(vrTimer);

  case aState of
     { если таймер сброшен, то запускаем его с нуля }
    -1: TimerStart(vrTimer, 0);

     { если таймер на паузе, то снова запускаем его (0 не имеет значения) }
     0: TimerStart(vrTimer, 0);

     { если таймер уже запущен, то ставим его на паузу }
     1: TimerPause(vrTimer);
  end;
end.
Получается если использовать этот скрипт при изменении переменной (OnDataChange) то он начинает отчет времени сразу же после старта проекта. И нужно менять переменную с 0 на 1 и обратно что бы остановить отчет времени. Получается переменная не изменялась, а отчет времени начался. Как это исправить? Спасибо.
Так же не сохраняется накопленное время работы при остановке и запуске проекта.
« Изменён: 13 Августа 2018, 11:38:17 от Simple-Scada »

pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Мониторинг времени работы оборудования
« Ответ #10 : 11 Августа 2018, 08:18:09 »
Update: начиная с версии Simple-Scada 2.3.2.0 у переменных можно включить опцию "Автоматическое восстановление". Тогда скада будет автоматически сохранять значение переменной и восстанавливать его при перезапусках проекта.

Rinat!
Виртуальные переменные можно устанавливать из файла при запуске и сохранять в файл при останове проекта. Пример для 4-х целочисленных счетчиков времени работы. Восстановление данных - скрипт по событию "Запуск проекта":
Код: (delphi)
var i: integer;
begin
  if not FileOpen('MyBinaryFile.dat', '') then exit;  // или иные действия при ошибке файла

  if FileSize = 0 then begin                 // новый файл без данных
    for i := 1 to 4 do FileWriteInteger(0);  // заполнить 0
    FileSeek(0, soBeginning);                // указатель на начало
  end;

  for i := 1 to 4 do                         // установить значения таймеров из файла
    GetVariableByName('iTimer_' + IntToStr(i)).Value := FileReadInteger;

  FileClose;
end.

Сохранение данных - скрипт по событию "Останов проекта":
Код: (delphi)
var i: integer;
begin
  if not FileRecreate('MyBinaryFile.dat', '') then exit;   // новый файл не создан
  for i := 1 to 4 do
    FileWriteInteger(GetVariableByName('iTimer_' + IntToStr(i)).Value);
  FileClose;
end.

Полностью пример во вложении.
-------------------------------------------------------------
Скрипт (по изменению вектора состояния устройств) для управления таймерами подсчета времени работы:

vrTimer_1 ... vrTimer_8 - "массив" таймерных переменных;
iDevVector - вектор состояния устройств (для соответствующего устройству разряда: 1 = вкл, 0 = выкл.)
Код: (delphi)
var i: integer;
    tmr: TM_Variable;
begin
  for i := 1 to 8 do
    begin
      tmr := GetVariableByName('vrTimer_' + IntToStr(i));  // указатель на очередной таймер

      case (TimerGetState(tmr) * 2) + integer(GetBit(iDevVector.AsInt, i)) of
      2: TimerPause(tmr);             // остановить активный таймер
      1, 511: TimerStart(tmr, 0);     // запустить таймер из паузы или начального состояния
      end;                            // игнорировать повторные запуски и остановы
    end;
end.   
« Изменён: 11 Декабря 2018, 15:50:16 от Simple-Scada »