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

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

Автор Тема: Последовательности выполнения шагов  (Прочитано 2605 раз)

Юрий

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Добрый день!

В СУБД MySQL есть таблица, где каждая строка соответствует технологическому шагу работы установки со своими уставками и временем выполнения. Данную таблицу я могу редактировать, добавлять и удалять шаги средствами SCADA.
Подскажите пожалуйста, как с помощью внутренних средств SIMPLE SCADA сделать так, что бы данные шаги, каждый соответствует своей строке с уставками и временем выполнения, выполнялись последовательно автоматически, т.е. без участия оператора. 
Т.е. как только закончилось время выполнения первого шага (первая строка таблицы), начался второй шаг (вторая строка таблицы) со своими уставками и временем выполнения и т.д. пока не закончатся все технологические шаги (строки таблицы). Количество шагов может быть произвольное количество и зависит от конкретной технологии обработки в данный момент.

asutpvit

  • Новичок
  • *
  • Сообщений: 48
    • Просмотр профиля
Re: Последовательности выполнения шагов
« Ответ #1 : 02 Июля 2018, 11:41:50 »
вангую: выполнять данные манипуляции лучше средствами ПЛК, скада нужна для визуализации процесса.
Да и проще, особенно на siemens это реализовать)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Последовательности выполнения шагов
« Ответ #2 : 02 Июля 2018, 14:59:45 »
Здравствуйте.

Как совершенно верно отметил asutpvit, это будет перекладывание функций ПЛК на скаду, поэтому также просто решить эту задачу, как можно было бы с использованием ПЛК не получится. Тем не менее решение возможно. Например можно при помощи процедуры RunSQL сделать выборку всей таблицы с шагами из базы данных.
Код: (delphi)
begin
  RunSQL('SELECT * FROM `my_table`', nil, 1); // помечаем запрос тегом = 1
end.

Далее в скрипте с типом события "Выполнен SQL-запрос" можно как угодно обработать результат выборки. Результатом выборки всегда является набор данных (по сути является таблицей с ячейками).
Код: (delphi)
begin
  if DataSet.Tag = 1 then  // если это результат выполнения запроса с тегом = 1
    { выполняем цикл пока не дойдём до конца набора данных }
    while not DataSet.EOF do
    begin
      { здесь можем работать с текущей строкой и её ячейками, для
        примера обратимся к первой ячейке текущей строки }
      Text1.Text := DataSet[0].AsUTF8String;

      { переходим на следующую строку набора данных }
      DataSet.Next;
    end;
end.

Таким образом можно извлечь из БД таблицу шагов и получить уставку и время выполнения для каждого шага. Время выполнения текущего шага можно скопировать в отдельную внутреннюю переменную, например vrTime. Далее для отсчета времени придется использовать скрипт с типом события "Прошла секунда" и в нём по секунде отсчитывать время до наступления следующего шага:
Код: (delphi)
begin
  { ведём отсчет времени вычитая по одной секунде }
  if vrTime.Value > 0 then
    vrTime.Value := IncSecond(vrTime.Value, -1)
  else { если время вышло  }
    begin
      { здесь выполняем код перехода к следующему шагу }
    end;
end.

При реализации задачи на скаде нужно учитывать, что при перезапуске проекта текущий шаг не будет сохраняться, хотя при желании можно реализовать и сохранение, например в файл или в БД через скрипты.
« Изменён: 02 Июля 2018, 15:01:49 от Simple-Scada »

Юрий

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Последовательности выполнения шагов
« Ответ #3 : 02 Июля 2018, 16:27:32 »
Спасибо!
То, что надо