Ваши комментарии

Спасибо. Рабочий скрипт, может кому пригодится:


{Pascal Script}
Var
  begindate, enddate, date: TDateTime;
  reccount: integer;
  res, value: double;
  stream: TMemoryStream;
  error: word;

  // Выполняется при старте скрипта
  procedure OnStartScript;
  begin
    stream := TMemoryStream.Create;
  end;

  // Выполняется при завершении работы скрипта
  procedure OnStopScript;
  begin
    stream.free;
  end;

Begin

   WriteValue('Проталкивание',Now);
  // дата начала
  begindate := Now - ((1/24/60/6) * 5);

  // конечная дата
  enddate := begindate + ((1/24/60/60)*2);

  // считаем данные из БД в буфер
  stream.clear;
  error := StreamReadFromDatabase(begindate, enddate, 'Установка платформ', stream);

  WriteValue('Ошибка',error);
  // error code
  //  DB_READ_OK = 0;
  //  DB_DATE_ERROR = 1;
  //  DB_MEMORY_OVERFLOW = 2;
  //  DB_CHANNEL_NOTFOUND = 3;

  res := 0;
  if error = 0 then
  begin
    // кол - во записей за считываемый интервал времени
    reccount := GetCountRecordToStream(stream);

    // вычитываем данные из буфера
    while GetValueFromStream(stream, date, value) do
    begin
          WriteValue('позиция 15',value);
        // date - метка времени
        // value - значение канала
    end;
  end;

end.

То есть проект что я выкладывал у Вас работает без ошибок?  Учет тоннелей.slz

письмо отправил

Здравствуйте.


DateTime, пробовал Word и Double результат одинаковый.

Я же писал, отладчик выдает : 07.03.2018 09:50:03.102 Нарушение доступа по адресу 0042912F в модуле 'Monitor.exe'. Чтение с адресом 00000000 - [Проталкивание]

Если добавить 0 то будут секунды, сейчас десятки секунд.  -50

{Pascal Script}
Var
  begindate, enddate, date: TDateTime;
  reccount: integer;
  res, value: double;
  stream: TMemoryStream;
  error: word;

  // Выполняется при старте скрипта
  procedure OnStartScript;
  begin
    // Ваш код
  end;

  // Выполняется при завершении работы скрипта
  procedure OnStopScript;
  begin
    // Ваш код
  end;

Begin

   WriteValue('Проталкивание',Now);
  // дата начала
  begindate := Now - ((1/24/60/6) * 5);

  // конечная дата
  enddate := begindate + ((1/24/60/60)*2);

  // считаем данные из БД в буфер
  error := StreamReadFromDatabase(begindate, enddate, 'Установка платформ', stream);

  WriteValue('Ошибка',error);
  // error code
  //  DB_READ_OK = 0;
  //  DB_DATE_ERROR = 1;
  //  DB_MEMORY_OVERFLOW = 2;
  //  DB_CHANNEL_NOTFOUND = 3;

  res := 0;
  if error = 0 then
  begin
    // кол - во записей за считываемый интервал времени
    reccount := GetCountRecordToStream(stream);

    // вычитываем данные из буфера
    while GetValueFromStream(stream, date, value) do
    begin
          WriteValue('позиция 15',value);
        // date - метка времени
        // value - значение канала
    end;
  end;

end.

Запустил скрипт со значением "Имя канала"  error=3, изменил значение на существующий канал "Установка платформ", получил ошибку. (ver4.6.2.121 Windowd XP)


07.03.2018 09:50:03.102 Нарушение доступа по адресу 0042912F в модуле 'Monitor.exe'. Чтение с адресом 00000000 - [Проталкивание]


Проталкивание - канал со скриптом. В скрипте изменил значения:


  // дата начала
  begindate := Now - ((1/24/60/6) * 5);   // -50 секунд

  // конечная дата
  enddate := begindate + ((1/24/60/60)*2);  // 2секунды


Здравствуйте. Хочу уточнить несколько позиций, что я правильно понял.


Now - ((1/24) * 15)    это -15 часов от текущего времени

begindate + (1/24/60)   это 1 минута опроса

  res := 0;       а это что?


begin 

     WriteValue('Virtual channel 2',value)     Вывести значение в канал как пример
        // date - метка времени
     
  // value - значение канала
    end;


reccount   Если будет 2 то как получить 2 значения


error  если время запроса попадет между двумя записями какую выдаст ошибку?

Спасибо, всё заработало как нужно. Теперь пытаюсь понять что было лишнее.



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