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

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

Хмм…забавный баг, канала не было в активных, когда добавил его, поведение при записи повторило Ваше. Отдам на исправление. Спасибо.
Avatar
Михаил
Давайте попробуем вот такой вариант:


var
cTime: TDateTime;
TinValue: Variant;
tStr: string;
flist: TStringList;
Const
logFileName = 'c:\simplog.txt';
TinChName = 'Уровень мерник поз. 1';
begin
cTime := Now;
tStr := FormatDateTime('yyyy-mm-dd hh:nn:ss',cTime) + '; ';
TinValue := ReadValue(TinChName);
tStr := tStr + 'Канал ' + TinChName + ' = ' + VarToStr(TinValue) + ';';

flist := TStringList.Create;
try
if FileExists(logFileName) then
flist.LoadFromFile(logFileName);
flist.add(tStr);
flist.SaveToFile(logFileName);
finally
flist.free;
end;
end.


Этот код не выполняется.
Версия - только что скачал SIMP Light FREE..
Правда сейчас я под WIN7 проверяю, может из-за этого.
Avatar
Михаил
Давайте ширше

Var
…end.


В файле, вместо ожидаемого: "Канал Уровень мерник поз. 1 = 85",
видим: "Канал 3 = 85".

При этом ShowMessage(tStr) показывает то, что нужно.

Довольно интересно, можете пару строк из сохранённого simplog.txt показать, проверил Ваш пример у себя, работает как надо. Через минут 5 - 10 пришлю другой пример, посмотрим как у Вас он будет работать.

У вас такой канал, "Уровень мерник поз. 1" среди активных присутствует?
Avatar
SIMP Tech (Сергей)
Версию SIMP скажите пожалуйста у кого SaveToTxtFile работает неправильно.
Avatar
SIMP Tech (Сергей)
Задача такова - нужно писать в txt файл несколько параметров,
В файл record1.txt пытаюсь вывести заранее подготовленную строку
В файл record.txt пытаюсь вывести строку которая формируется в самой функции SaveToTxtFile

ни тот ни другой вариант не работают, компиляция проходит без ошибок, но эффекта 0, в чем проблема?

В файл что то сохраняется?
Avatar
Владимир
Задача такова - нужно писать в txt файл несколько параметров,
В файл record1.txt пытаюсь вывести заранее подготовленную строку
В файл record.txt пытаюсь вывести строку которая формируется в самой функции SaveToTxtFile

ни тот ни другой вариант не работают, компиляция проходит без ошибок, но эффекта 0, в чем проблема?

Var In1, In2, In3, In4, str: String; Begin In1:=ReadValue('натяжение'); In2:=ReadValue('Dmin'); In3:=ReadValue('Dmax'); In4:=ReadValue('оборотов в мин'); str := TimeToStr(now) + ' ves ' + ReadValue('натяжение') + ' Dmin ' + ReadValue('Dmin') + ' Dmax '+ ReadValue('Dmax'); SaveToTxtFile('d:\record1.txt', str); SaveToTxtFile('d:\record.txt', TimeToStr(now) + ' ves ' + ReadValue('натяжение') + ' Dmin ' + ReadValue('Dmin') + ' Dmax '+ ReadValue('Dmax') ); end.
Avatar
SIMP Tech (Сергей)
Давайте попробуем вот такой вариант:

var cTime: TDateTime; TinValue: Variant; tStr: string; flist: TStringList; Const logFileName = 'c:\simplog.txt'; TinChName = 'Уровень мерник поз. 1'; begin cTime := Now; tStr := FormatDateTime('yyyy-mm-dd hh:nn:ss',cTime) + '; '; TinValue := ReadValue(TinChName); tStr := tStr + 'Канал ' + TinChName + ' = ' + VarToStr(TinValue) + ';'; flist := TStringList.Create; try if FileExists(logFileName) then flist.LoadFromFile(logFileName); flist.add(tStr); flist.SaveToFile(logFileName); finally flist.free; end; end.
Avatar
SIMP Tech (Сергей)
Давайте ширше

Var
cTime: TDateTime;
TinValue: Variant;
tStr: string;
Const
logFileName = 'c:\simplog.txt';
TinChName = 'Уровень мерник поз. 1';
Begin
cTime := Now;
tStr := FormatDateTime('yyyy-mm-dd hh:nn:ss',cTime) + '; ';
TinValue := ReadValue(TinChName);
tStr := tStr + 'Канал ' + TinChName + ' = ' + VarToStr(TinValue) + ';';
SaveToTxtFile(logFileName, tStr);
end.


В файле, вместо ожидаемого: "Канал Уровень мерник поз. 1 = 85",
видим: "Канал 3 = 85".

При этом ShowMessage(tStr) показывает то, что нужно.

Довольно интересно, можете пару строк из сохранённого simplog.txt показать, проверил Ваш пример у себя, работает как надо. Через минут 5 - 10 пришлю другой пример, посмотрим как у Вас он будет работать.
Avatar
Михаил
Давайте ширше

Var
cTime: TDateTime;
TinValue: Variant;
tStr: string;
Const
logFileName = 'c:\simplog.txt';
TinChName = 'Уровень мерник поз. 1';
Begin
cTime := Now;
tStr := FormatDateTime('yyyy-mm-dd hh:nn:ss',cTime) + '; ';
TinValue := ReadValue(TinChName);
tStr := tStr + 'Канал ' + TinChName + ' = ' + VarToStr(TinValue) + ';';
SaveToTxtFile(logFileName, tStr);
end.


В файле, вместо ожидаемого: "Канал Уровень мерник поз. 1 = 85",
видим: "Канал 3 = 85".

При этом ShowMessage(tStr) показывает то, что нужно.
Avatar
SIMP Tech (Сергей)
В подобном случае

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


в файл выводится индекс канала, а не текстовое содержимое переменной Channel_Name.
Так и должно быть?

Я немного не понял Вашего вопроса.

из справки:

Function SaveToTxtFile (АFileName: string; Str: string): Boolean

Записывает строковое значение Str в текстовый файл AFileName. Возвращает true, если запись успешна, и false, если произошла ошибка записи. Запись происходит последовательно, строчка за строчкой.



Пример вызова:

SaveToTxtFile("c:\receipt.txt", "123,33,44,555");