Здравствуйте.
Как совершенно верно отметил
asutpvit, это будет перекладывание функций ПЛК на скаду, поэтому также просто решить эту задачу, как можно было бы с использованием ПЛК не получится. Тем не менее решение возможно. Например можно при помощи
процедуры RunSQL сделать выборку всей таблицы с шагами из базы данных.
begin
RunSQL('SELECT * FROM `my_table`', nil, 1); // помечаем запрос тегом = 1
end.
Далее в скрипте
с типом события "Выполнен SQL-запрос" можно как угодно обработать результат выборки. Результатом выборки всегда является
набор данных (по сути является таблицей с ячейками).
begin
if DataSet.Tag = 1 then // если это результат выполнения запроса с тегом = 1
{ выполняем цикл пока не дойдём до конца набора данных }
while not DataSet.EOF do
begin
{ здесь можем работать с текущей строкой и её ячейками, для
примера обратимся к первой ячейке текущей строки }
Text1.Text := DataSet[0].AsUTF8String;
{ переходим на следующую строку набора данных }
DataSet.Next;
end;
end.
Таким образом можно извлечь из БД таблицу шагов и получить уставку и время выполнения для каждого шага. Время выполнения текущего шага можно скопировать в отдельную внутреннюю переменную, например vrTime. Далее для отсчета времени придется использовать скрипт
с типом события "Прошла секунда" и в нём по секунде отсчитывать время до наступления следующего шага:
begin
{ ведём отсчет времени вычитая по одной секунде }
if vrTime.Value > 0 then
vrTime.Value := IncSecond(vrTime.Value, -1)
else { если время вышло }
begin
{ здесь выполняем код перехода к следующему шагу }
end;
end.
При реализации задачи на скаде нужно учитывать, что при перезапуске проекта текущий шаг не будет сохраняться, хотя при желании можно реализовать и сохранение, например в файл или в БД через скрипты.