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

Добрый день!
После обновления до версии 4.4 ProModbus (unlimit) на станции разработчика после положенной работы Монитора 1 час, регулярно стала выпадать ошибка "Исключительная ситуация EInvalidPointer в модуле Monitor.exe по адресу 000041В1", что делать?

Добавлю, если подождать 5 минут и с нова запустить Монитор, ошибка не выскакивает.
Да. И я заметил, что монитор не выгружается. Только принудительно - закрытием приложения.
На лицензированной станции еще не обновлял.
Добрый день!
После обновления до версии 4.4 ProModbus (unlimit) на станции разработчика после положенной работы Монитора 1 час, регулярно стала выпадать ошибка "Исключительная ситуация EInvalidPointer в модуле Monitor.exe по адресу 000041В1", что делать?
РАБОТАЮЩИЙ ПРИМЕР
{Пример вычисления времени работы и простоя насосов}
var
date1, date2: TDateTime;
val: TDateTime;
resOn, resOff: integer;
posit: string;
val1:word;
const
FORMAT_RESULT = '%d дней, %d час. %d мин. %d сек.';

// перевод из секунд в дни ,часы,минуты и секунды
function GetTimeString(ASec: integer): string;
var
sec: integer;
day, hour, min: word;
begin
sec := ASec;
// кол - дней
day := Trunc(sec / 86400);
if day <> 0 then
sec := sec - (day * 86400);

// кол - часов
hour := trunc(sec / 3600);
if hour <> 0 then
sec := sec - (hour * 3600);

// кол - минут
min := trunc(sec / 60);
if min <> 0 then
sec := sec - (min * 60);

result := Format(FORMAT_RESULT, [day, hour, min, sec]);
end;

begin
val := ReadValue('Расчет');
val1 := ReadValue('Сигнальный');
posit := ReadValue('Combo');
// reset input
if val = -1 then
begin
WriteValue(' Сигнальный ',0);
date1 :=0;
date2 := 0;
WriteValue('D1',date1);
WriteValue('D2',date2);
Exit;
end
else
if (date1=0) and (val > 0) then
begin
date1 := val;
WriteValue('D1',date1);
WriteValue(' Сигнальный ',1);
WriteValue(‘Расчет ', 0);
Exit;
end
else
if (date2=0) and (val > 0) then
begin
date2 := val;
WriteValue('D2',date2);
WriteValue(' Сигнальный ',2);
WriteValue(' Расчет ',0);
Exit;
end
else
if val = -2 then
begin
if date1 > date2 then
begin
date1 := 0;
date2 := 0;
WriteValue(' Сигнальный ',0);
WriteValue(' Расчет ',0);
WriteValue('D1',date1);
WriteValue('D2',date2);
Exit;
end;
if ((val = -2)and (date1 < date2) ) then
//posit := ReadValue('Combo');

if (posit = 'Насос 1') then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina1', resOn, resOff);
WriteValue('работал 1', GetTimeString(resOn));
WriteValue('не работал 1', GetTimeString(resOff));
WriteValue(' Сигнальный ',3);
end
else
if (posit = 'Насос 2') then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina2', resOn, resOff);
WriteValue(' работал 2', GetTimeString(resOn));
WriteValue('не работал 2', GetTimeString(resOff));
WriteValue(' Сигнальный ',4);
end
else
if (posit = 'Насос 3')then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina3', resOn, resOff);
WriteValue(' работал 3', GetTimeString(resOn));
WriteValue('не работал 3', GetTimeString(resOff));
WriteValue(' Сигнальный ',5);
end;
CloseMnemo('Test');
end;
end.

Все каналы виртуальные

Сигнальный – word;
Расчет – (Cкрипт по таймеру) – DateTime;
Работал – string;
Не работал – string;
Инициализация – (скрипт по таймеру) Double;
Combo – string;
Насос 1 – Bool;
Насос 2 - Bool;
Насос 3 - Bool;

Остальное как в примере http://simplight.ru/files/4.4/time_EQ_example.slz
Скачивать методом – «Сохранить объект как»
На графике виртуальную переменную вижу.
скрипт выдает нули.
Добрый день.
Не работает пример с функцией получения из под скрипта времени работы оборудования.


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