Помощь в написании скрипта

Avatar
  • обновлен
Здравствуйте. нужен пример скрипта на паскале, скрипт по таймеру
1. читаем физ канал,
2. проверяем соответствие значения уставке, допустим он должен быть больше определенного значения 30
3. если значение меньше уставки, пишем в вирт канал флаг для контроля допустим 1, причем флаг не должен записаться в течении 5 циклов таймера скрипта, т.е. если течении 5 циклов опроса значение не соответствует уставке и на 6 цикл не сооответствует то должен писаться флаг, если в любом цикле норма, счетчик опроса в 0 и снова
может быть не буду понят но прошу помощи
Avatar
SIMP Tech (Сергей)
Добрый вечер.

Здравствуйте. нужен пример скрипта на паскале, скрипт по таймеру
1. читаем физ канал,
2. проверяем соответствие значения уставке, допустим он должен быть больше определенного значения 30
3. если значение меньше уставки, пишем в вирт канал флаг для контроля допустим 1, причем флаг не должен записаться в течении 5 циклов таймера скрипта, т.е. если течении 5 циклов опроса значение не соответствует уставке и на 6 цикл не сооответствует то должен писаться флаг, если в любом цикле норма, счетчик опроса в 0 и снова
может быть не буду понят но прошу помощи

примерно так,если я правильно Вас понял:

var counter: Integer; // счетчик циклов value: double; // считанная переменная const ustavka = 30; // уставка begin // первоначальная инициализация if Initialization then begin counter := 0; end; // читаем переменную value := ReadValue('Имя канала источника'); // сравниваем с уставой, если переменная меньше уставки то приращиваем счетчик циклов if Value < ustavka then inc(counter) else counter := 0; // если переменная меньше, то сбросим счетчик if counter > 5 then WriteValue('Виртуальный канал для вывода результата', 1) else WriteValue('Виртуальный канал для вывода результата', 0); end.
Avatar
Александр
Доброе утро. Не подскажите как лучше написать скрипт для обеспечения работы задвижки на паропроводе?

Есть 2 кнопки "открыть", "закрыть" и 3 индикатора (зеленый мигающий - открытие задвижки,красный мигающий- закрытие задвижки, желтый - авария). Пока не имею на столе нужной аппаратуры в виде ADAM 6066 и SimpLight Ent, т.к. в сам нахожусь в отпуске (есть только бесплатная версия на ноутбуке).
Avatar
SIMP Tech (Сергей)
Добрый вечер.

Доброе утро. Не подскажите как лучше написать скрипт для обеспечения работы задвижки на паропроводе?

Есть 2 кнопки "открыть", "закрыть" и 3 индикатора (зеленый мигающий - открытие задвижки,красный мигающий- закрытие задвижки, желтый - авария). Пока не имею на столе нужной аппаратуры в виде ADAM 6066 и SimpLight Ent, т.к. в сам нахожусь в отпуске (есть только бесплатная версия на ноутбуке).

Напишите к нам на почту simp@miniscada.com, обсудим подробности по задаче, и попробуем накидать пример.
Avatar
Александр
Необходимо сначала накопить выборку за минуту, потом посчитать среднее, затем сохранить в файл. К примеру цикл скрипта 1 секунда, мы суммируем входную переменную к примеру 60 раз, далее считаем среднее и сохраняем в файл.
Можете помочь примером?
Avatar
SIMP Tech (Сергей)
День добрый.

Необходимо сначала накопить выборку за минуту, потом посчитать среднее, затем сохранить в файл. К примеру цикл скрипта 1 секунда, мы суммируем входную переменную к примеру 60 раз, далее считаем среднее и сохраняем в файл.

Среднее за минуту, при условии цикла скрипта в одну секунду, можно примерно так:

var res: double; counter: word; begin if Initialization then begin counter := 1; res := 0; end; if counter <= 60 then begin res := res + ReadValue('Канал откуда берем данные'); inc(counter); end else begin res := (res / 60); WriteValue('Канал куда выводим результат', res); res := 0; counter := 1; end; end.
Avatar
Александр
Спасибо
Avatar
Александр
А если мы хотим среднее значение за час, то у нас будет не 60, а 3600?
Avatar
SIMP Tech (Сергей)
День добрый.

А если мы хотим среднее значение за час, то у нас будет не 60, а 3600?

Если Вы про ранее присланный пример, то да.
Avatar
Александр
Попробовал записать в txt файл среднее за час значение канала из прошлого примера. Использовал следующие скрипты:
1) канал с расчетом среднего за час с циклом 1 секунда (второй канал идентичен во всем кроме названия):
var
res: double;
counter: word;
begin
if Initialization then
begin
counter := 1;
res := 0;
end;

if counter <= 3600 then
begin
res := res + ReadValue('Канал откуда берем данные');
inc(counter);
end
else
begin
res := (res / 3600);
WriteValue('Канал куда выводим результат', res);
res := 0;
counter := 1;
end;
end.
2) канал для запись в txt файл с циклом 1 час:
Var In1, In2: String;
Begin
In1:=ReadValue('Канал куда выводим результат 1');
In2:=ReadValue('Канал куда выводим результат 2');
If in1<>'0' then SaveToTxtFile('C:\slProject\mazut.txt',In1);
if in2<>'0' then SaveToTxtFile('C:\slProject\moroz.txt',In2);
end.
В итоге раз в час, в файлы записываются 4 одинаковых значения. Что не так-то?
Avatar
SIMP Tech (Сергей)
День добрый.

Попробовал записать в txt файл среднее за час значение канала из прошлого примера. Использовал следующие скрипты:
1) канал с расчетом среднего за час с циклом 1 секунда (второй канал идентичен во всем кроме названия):
var
res: double;
counter: word;
begin
if Initialization then
begin
counter := 1;
res := 0;
end;

if counter <= 3600 then
begin
res := res + ReadValue('Канал откуда берем данные');
inc(counter);
end
else
begin
res := (res / 3600);
WriteValue('Канал куда выводим результат', res);
res := 0;
counter := 1;
end;
end.

2) канал для запись в txt файл с циклом 1 час:
Var In1, In2: String;
Begin
In1:=ReadValue('Канал куда выводим результат 1');
In2:=ReadValue('Канал куда выводим результат 2');
If in1<>'0' then SaveToTxtFile('C:\slProject\mazut.txt',In1);
if in2<>'0' then SaveToTxtFile('C:\slProject\moroz.txt',In2);
end.
В итоге раз в час, в файлы записываются 4 одинаковых значения. Что не так-то?

Два вопроса:

1. Почему не объединить расчет и запись в одном скрипте?
2. Если в первом скрипте Вы пишите результат в канал 'Канал куда выводим результат', то почему во втором читаете из канала 'Канал куда выводим результат 1' и 'Канал куда выводим результат 2'?