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

Avatar
  • обновлен
Здравствуйте. нужен пример скрипта на паскале, скрипт по таймеру
1. читаем физ канал,
2. проверяем соответствие значения уставке, допустим он должен быть больше определенного значения 30
3. если значение меньше уставки, пишем в вирт канал флаг для контроля допустим 1, причем флаг не должен записаться в течении 5 циклов таймера скрипта, т.е. если течении 5 циклов опроса значение не соответствует уставке и на 6 цикл не сооответствует то должен писаться флаг, если в любом цикле норма, счетчик опроса в 0 и снова
может быть не буду понят но прошу помощи
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
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
Владимир
Задача такова - нужно писать в 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 (Сергей)
Задача такова - нужно писать в txt файл несколько параметров,
В файл record1.txt пытаюсь вывести заранее подготовленную строку
В файл record.txt пытаюсь вывести строку которая формируется в самой функции SaveToTxtFile

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

В файл что то сохраняется?
Avatar
SIMP Tech (Сергей)
Версию SIMP скажите пожалуйста у кого SaveToTxtFile работает неправильно.
Avatar
Михаил
Давайте ширше

Var
…end.


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

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

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

У вас такой канал, "Уровень мерник поз. 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
SIMP Tech (Сергей)
У вас такой канал, "Уровень мерник поз. 1" среди активных присутствует?

Хмм…забавный баг, канала не было в активных, когда добавил его, поведение при записи повторило Ваше. Отдам на исправление. Спасибо.
Avatar
SIMP Tech (Сергей)
Этот код не выполняется.
Версия - только что скачал SIMP Light FREE..
Правда сейчас я под WIN7 проверяю, может из-за этого.

А на что ругается? Хотя, судя по тому что обнаружили неправильную работу скрипта, этот вариант тоже не "взлетит", программисты мне уже ответили в чем проблема, при компиляции система для оптимизации скорости, заменяет имена на индексы в таблице данных, тут то и происходит "чудо" Встретив в скрипте имя канала, в данном случае объявленное как константа, система заменяет его на индекс.
Avatar
Михаил
Этот код не выполняется.
Версия - только что скачал SIMP Light FREE..
Правда сейчас я под WIN7 проверяю, может из-за этого.

А на что ругается? Хотя, судя по тому что обнаружили неправильную работу скрипта, этот вариант тоже не "взлетит", программисты мне уже ответили в чем проблема, при компиляции система для оптимизации скорости, заменяет имена на индексы в таблице данных, тут то и происходит "чудо" Встретив в скрипте имя канала, в данном случае объявленное как константа, система заменяет его на индекс.

Извиняюсь. Надо было от имени Администратора редактор запускать.
С TStringList.SaveToFile работает нормально.
В любом случае это баг.

И чой-то у вас все запущено… :)
TStringList.SaveToFile создает файл и пишет данные из редактора скриптов - если "Выполнить".
А SaveToTxtFile() только когда "Монитор" запускаешь.