0
Отвечен

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

kip 8 лет назад в Редактор каналов обновлен 7 лет назад 10

Помогите написать скрипт определения времени обновления значения. Когда значение изменяется в большую или меньшую сторону, то нужно чтобы изменилось время.

ХОРОШО, МНЕ ПОНРАВИЛОСЬ
Оценка удовлетворенности от kip 8 лет назад
На рассмотрении

День добрый.


Если немного подробней распишите задачу, я постараюсь Вам помочь. Если я правильно Вас понял, то время должно отображать то значение в которое произошло изменение переменной, все верно?

Есть прибор с которого удаленно снимаются показания раз в час. Есть поля в которых выводятся значения, нужно отдельно поле в котором будет выводится время последнего обновления этих показаний. Я попробовал вот так:

Var

tims:TDateTime;
tim:string;
Begin
tims:=GetTimeStamp('Промплощадка_дом_2.Прямая_int');
tim:=DateTimeToStr(tims);
WriteValue('Virtual channel 1',tim);
end.

Но при ошибках на пример модем не сработал, или связь потерялась на удаленном объекте, то обновляется время а показания то старые. По этому нужно чтобы текущее показания в scade сравнивались с показаниями текущими в opc если они изменились в любую сторону то обновилось время.

День добрый.

Попробуйте такой вариант:


Var
Value, CurrentValue: double;

// Выполняется при первом старте скрипта procedure OnStartScript; begin value := ReadValue('Промплощадка_дом_2.Прямая_int'); end; // Выполняется при завершении работы скрипта procedure OnStopScript; begin // Ваш код end; begin CurrentValue := ReadValue('Промплощадка_дом_2.Прямая_int'); if CurrentValue <> Value then begin Value := CurrentValue; WriteValue('Virtual channel 1', DateTimeToStr(now)); end; end.


Спасибо за помощь. Все замечательно работает.

Здравствуйте. Снова прошу помощи до делать данный скрипт. Теперь две переменных. Когда значение изменяется в большую или меньшую сторону любой переменной, то нужно чтобы изменилось время.

Сейчас скрипт под одну переменную.

Var

Value, CurrentValue:
double;
tims:TDateTime;
tim:string;
//Выполняется при первом старте скрипта
procedure OnStartScript;
begin
value := ReadValue('Промплощадка_дом_2.Прямая_int');
end;
//Выполняется при завершении работы скрипта
procedure OnStopScript;
begin
// Ваш код
tims:=GetTimeStamp('Промплощадка_дом_2.Прямая_int');
tim:=DateTimeToStr(tims);
WriteValue('Virtual channel 1',tim);
end;
begin
CurrentValue := ReadValue('Промплощадка_дом_2.Прямая_int');
if CurrentValue <> Value then
begin
Value := CurrentValue;
WriteValue('Virtual channel 1', DateTimeToStr(now));
end;
end.

День добрый.

Добавьте сравнение для второй переменной:


CurrentValue := ReadValue('Промплощадка_дом_2.Прямая_int');
CurrentValue1 := ReadValue('Промплощадка_дом_3.Прямая_int');
if (CurrentValue <> Value) or (CurrentValue1 <> Value ) then begin Value := CurrentValue;WriteValue('Virtual channel 1', DateTimeToStr(now)); end;

Здравствуйте. Если я добавляю полностью переменную CurrentValue1 в скрипт, то время 'Virtual channel 1',tim - то время начинает постоянно считаться.

Var

Value, CurrentValue:double;
CurrentValue1:double;
tims:TDateTime;
tim:string;
//Выполняется при первом старте скрипта
procedure OnStartScript;
begin
value := ReadValue('УДО. Давление прямого трубопровода');
end;
//Выполняется при завершении работы скрипта
procedure OnStopScript;
begin
// Ваш код
tims:=GetTimeStamp('УДО. Давление прямого трубопровода');
tim:=DateTimeToStr(tims);
WriteValue('Время последнего опроса Узла учета УДО',tim);
end;
begin
CurrentValue := ReadValue('УДО. Давление прямого трубопровода');
CurrentValue1 := ReadValue('УДО. Давление обратного трубопровода');
if (CurrentValue <> Value) or (CurrentValue1 <> Value ) then
begin
Value := CurrentValue;
WriteValue('Время последнего опроса Узла учета УДО', DateTimeToStr(now));
end;

end.

День добрый.


Var
Value, CurrentValue: double;
Value1, CurrentValue1: double;
tims:TDateTime;
tim:string;

//Выполняется при первом старте скрипта
procedure OnStartScript;
begin
  value := ReadValue('УДО. Давление прямого трубопровода');
  value1 := ReadValue('УДО. Давление обратного трубопровода');
end;

//Выполняется при завершении работы скрипта
procedure OnStopScript;
begin 
  // Ваш код
  tims := GetTimeStamp('УДО. Давление прямого трубопровода');
  tim:=DateTimeToStr(tims);
  WriteValue('Время последнего опроса Узла учета УДО', tim);
 
  tims := GetTimeStamp('УДО. Давление обратноготрубопровода');
  tim:=DateTimeToStr(tims);
  WriteValue('имя канала', tim);
end;

begin
  CurrentValue := ReadValue('УДО. Давление прямого трубопровода');
  CurrentValue1 := ReadValue('УДО. Давление обратного трубопровода');
  if (CurrentValue <> Value) or (CurrentValue1 <> Value1 ) then 
  begin
    Value := CurrentValue;
    Value1 := CurrentValue1;
    WriteValue('Время последнего опроса Узла учета УДО', DateTimeToStr(now));
  end;
end.

Нужно чтобы поле куда выводится информация - ('Время последнего опроса Узла учета УДО', tim) должно быть общее!

  tims := GetTimeStamp('УДО. Давление обратного трубопровода');
  tim:=DateTimeToStr(tims);
  WriteValue('имя канала', tim); - Как вариант??? если только здесь прописать поле из:
 tims := GetTimeStamp('УДО. Давление прямого трубопровода');  
 tim:=DateTimeToStr(tims);
 WriteValue('Время последнего опроса Узла учета УДО', tim);

Сервис поддержки клиентов работает на платформе UserEcho