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

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

ChannelName := 'Имя канала';
SaveToTxtFile('Имя файла',Channel_Name);


в файл выводится индекс канала, а не текстовое содержимое переменной Channel_Name.
Так и должно быть?
Avatar
SIMP Tech (Сергей)
Та которая ляжет в конечный файл txt, чтобы конечный вид был такой:
12:00:11 chanel1 0,639835481213199 chanel2 0,698354812131993

пример: str := TimeToStr(now) + ' chanel1 ' + FloatToStr(0.639835481213199);
Avatar
Владимир
Та которая ляжет в конечный файл txt, чтобы конечный вид был такой:
12:00:11 chanel1 0,639835481213199 chanel2 0,698354812131993
Avatar
SIMP Tech (Сергей)
День добрый.

как в начале строки подвязать текущее время и имя канала?

В начале какой строки? Которую будите передавать в канал или записывать в файл?
Avatar
Владимир
как в начале строки подвязать текущее время и имя канала?
Avatar
SIMP Tech (Сергей)
каналы имеют свои названия, это "Канал откуда берем данные" - образное названия канала.

ок. Тогда для полноты картины надо было с реальными именами, а так получается что написано с ошибкой. Хорошо, тогда в силе первый вопрос, почему не объединить в одном скрипте расчет и запись, не факт что расчет будет готов, к моменту когда второй скрипт вычитывает значения результата, каналы между собой не синхронизированы.
Avatar
Александр
Так выглядит один из файлов txt:
0,639835481213199
0,639835481213199
0,639835481213199
0,639835481213199
0,771158362428347
0,771158362428347
0,771158362428347
0,771158362428347
0,771158362428347
0,771158362428347
Avatar
Александр
каналы имеют свои названия, это "Канал откуда берем данные" - образное названия канала.
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'?
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 одинаковых значения. Что не так-то?