Ваши комментарии
То есть проект что я выкладывал у Вас работает без ошибок? Учет тоннелей.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
Спасибо. Рабочий скрипт, может кому пригодится:
{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.